@embedpdf/viewer-chrome 3.0.0-next.15 → 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 (200) hide show
  1. package/dist/{annotation-fonts-BqoLZ4Mp.js → annotation-fonts-DWjVOTP0.js} +2 -2
  2. package/dist/{annotation-fonts-BqoLZ4Mp.js.map → annotation-fonts-DWjVOTP0.js.map} +1 -1
  3. package/dist/{annotation-fonts-Dt0IQXhz.cjs → annotation-fonts-dpfVkhnq.cjs} +2 -2
  4. package/dist/{annotation-fonts-Dt0IQXhz.cjs.map → annotation-fonts-dpfVkhnq.cjs.map} +1 -1
  5. package/dist/{annotation-style-Bzvvp8-N.cjs → annotation-style-B3XKAyZ-.cjs} +3 -3
  6. package/dist/{annotation-style-Bzvvp8-N.cjs.map → annotation-style-B3XKAyZ-.cjs.map} +1 -1
  7. package/dist/{annotation-style--rPIZsuP.js → annotation-style-CXF3X47Z.js} +3 -3
  8. package/dist/{annotation-style--rPIZsuP.js.map → annotation-style-CXF3X47Z.js.map} +1 -1
  9. package/dist/{ar-DnEj5vbP.cjs → ar-B132r9bo.cjs} +93 -1
  10. package/dist/ar-B132r9bo.cjs.map +1 -0
  11. package/dist/{ar-D9XKAmDx.js → ar-BLWFJoA_.js} +93 -1
  12. package/dist/ar-BLWFJoA_.js.map +1 -0
  13. package/dist/attachments-panel-Cxln8xos.cjs +217 -0
  14. package/dist/attachments-panel-Cxln8xos.cjs.map +1 -0
  15. package/dist/attachments-panel-H1ucRbwo.js +217 -0
  16. package/dist/attachments-panel-H1ucRbwo.js.map +1 -0
  17. package/dist/chrome.cjs +21 -0
  18. package/dist/chrome.cjs.map +1 -1
  19. package/dist/chrome.js +21 -0
  20. package/dist/chrome.js.map +1 -1
  21. package/dist/{commands-BmgxhJ8B.js → commands-BkgLP3Om.js} +418 -23
  22. package/dist/commands-BkgLP3Om.js.map +1 -0
  23. package/dist/{commands-CYt4SFUX.cjs → commands-DL1gjZt7.cjs} +433 -20
  24. package/dist/commands-DL1gjZt7.cjs.map +1 -0
  25. package/dist/commands.cjs +2 -1
  26. package/dist/commands.d.cts +3 -1
  27. package/dist/commands.d.ts +3 -1
  28. package/dist/commands.js +2 -2
  29. package/dist/{comments-panel-pEcQg4Vs.cjs → comments-panel-BsnWedTh.cjs} +2 -2
  30. package/dist/{comments-panel-pEcQg4Vs.cjs.map → comments-panel-BsnWedTh.cjs.map} +1 -1
  31. package/dist/{comments-panel-MUVgLCBI.js → comments-panel-D7Eadws9.js} +2 -2
  32. package/dist/{comments-panel-MUVgLCBI.js.map → comments-panel-D7Eadws9.js.map} +1 -1
  33. package/dist/{de-Dv6zvbnd.cjs → de-7_MvFWzN.cjs} +93 -1
  34. package/dist/de-7_MvFWzN.cjs.map +1 -0
  35. package/dist/{de-Bdr4aWzm.js → de-BUhwc9-x.js} +93 -1
  36. package/dist/de-BUhwc9-x.js.map +1 -0
  37. package/dist/{dialog-B5GBisKv.js → dialog-BIb373cg.js} +3 -3
  38. package/dist/dialog-BIb373cg.js.map +1 -0
  39. package/dist/{dialog-t8F13BL_.cjs → dialog-CngKTnAM.cjs} +3 -3
  40. package/dist/dialog-CngKTnAM.cjs.map +1 -0
  41. package/dist/{es-BP09DR9w.cjs → es-DgYj-1L3.cjs} +93 -1
  42. package/dist/es-DgYj-1L3.cjs.map +1 -0
  43. package/dist/{es-BSXz5tBv.js → es-DoXTqFoO.js} +93 -1
  44. package/dist/es-DoXTqFoO.js.map +1 -0
  45. package/dist/{form-design-panel-vWWU9uB-.js → form-design-panel-CgV_5YWC.js} +3 -3
  46. package/dist/{form-design-panel-vWWU9uB-.js.map → form-design-panel-CgV_5YWC.js.map} +1 -1
  47. package/dist/{form-design-panel-B5MXTZ96.cjs → form-design-panel-D0FdmWXW.cjs} +3 -3
  48. package/dist/{form-design-panel-B5MXTZ96.cjs.map → form-design-panel-D0FdmWXW.cjs.map} +1 -1
  49. package/dist/{fr-Ckn3K9v1.js → fr-B-8NDhBA.js} +93 -1
  50. package/dist/fr-B-8NDhBA.js.map +1 -0
  51. package/dist/{fr-BBQQn7tJ.cjs → fr-C856dmQJ.cjs} +93 -1
  52. package/dist/fr-C856dmQJ.cjs.map +1 -0
  53. package/dist/{he-DRsG7bH7.cjs → he-BFTeNc4t.cjs} +93 -1
  54. package/dist/he-BFTeNc4t.cjs.map +1 -0
  55. package/dist/{he-wdGU5PkU.js → he-Dlh0fNXM.js} +93 -1
  56. package/dist/he-Dlh0fNXM.js.map +1 -0
  57. package/dist/{icons-x0Tc05bs.cjs → icons-1UfLUZ_y.cjs} +20 -1
  58. package/dist/icons-1UfLUZ_y.cjs.map +1 -0
  59. package/dist/{icons-BrK5iVL8.js → icons-7dB0Y1ct.js} +20 -1
  60. package/dist/icons-7dB0Y1ct.js.map +1 -0
  61. package/dist/index.cjs +740 -171
  62. package/dist/index.cjs.map +1 -1
  63. package/dist/index.d.cts +16 -2
  64. package/dist/index.d.ts +16 -2
  65. package/dist/index.js +727 -170
  66. package/dist/index.js.map +1 -1
  67. package/dist/{it-BuP4o0xQ.cjs → it-Bef-2Yxq.cjs} +93 -1
  68. package/dist/it-Bef-2Yxq.cjs.map +1 -0
  69. package/dist/{it-Us-VmvIu.js → it-BkirG7ol.js} +93 -1
  70. package/dist/it-BkirG7ol.js.map +1 -0
  71. package/dist/{ja-Cizj0-5O.js → ja-CGEjCE-s.js} +93 -1
  72. package/dist/ja-CGEjCE-s.js.map +1 -0
  73. package/dist/{ja-DovEd6ts.cjs → ja-DNw2zqSD.cjs} +93 -1
  74. package/dist/ja-DNw2zqSD.cjs.map +1 -0
  75. package/dist/{ko-DlrXliE1.js → ko-CTkl5vMh.js} +93 -1
  76. package/dist/ko-CTkl5vMh.js.map +1 -0
  77. package/dist/{ko-B-qJEol2.cjs → ko-YHzeBqP6.cjs} +93 -1
  78. package/dist/ko-YHzeBqP6.cjs.map +1 -0
  79. package/dist/{link-editor-CSjqPnj1.cjs → link-editor-CAS7MZM2.cjs} +2 -2
  80. package/dist/{link-editor-CSjqPnj1.cjs.map → link-editor-CAS7MZM2.cjs.map} +1 -1
  81. package/dist/{link-editor-SxM1nnJU.js → link-editor-CkwtqRvb.js} +2 -2
  82. package/dist/{link-editor-SxM1nnJU.js.map → link-editor-CkwtqRvb.js.map} +1 -1
  83. package/dist/{measurement-Bs61XWbJ.js → measurement-CQdbnIrn.js} +2 -2
  84. package/dist/{measurement-Bs61XWbJ.js.map → measurement-CQdbnIrn.js.map} +1 -1
  85. package/dist/{measurement-CcCsHPOX.cjs → measurement-Cxv1Ahxx.cjs} +2 -2
  86. package/dist/{measurement-CcCsHPOX.cjs.map → measurement-Cxv1Ahxx.cjs.map} +1 -1
  87. package/dist/{nl-D3KZDDiJ.cjs → nl-BjkbaLq3.cjs} +93 -1
  88. package/dist/nl-BjkbaLq3.cjs.map +1 -0
  89. package/dist/{nl-0aF7M_0h.js → nl-Dya4sR8_.js} +93 -1
  90. package/dist/nl-Dya4sR8_.js.map +1 -0
  91. package/dist/outline-panel-BpGtBdj0.cjs +707 -0
  92. package/dist/outline-panel-BpGtBdj0.cjs.map +1 -0
  93. package/dist/outline-panel-DO5_REYw.js +707 -0
  94. package/dist/outline-panel-DO5_REYw.js.map +1 -0
  95. package/dist/outline-properties-BCa2cc0t.js +330 -0
  96. package/dist/outline-properties-BCa2cc0t.js.map +1 -0
  97. package/dist/outline-properties-DT3FIxCw.cjs +330 -0
  98. package/dist/outline-properties-DT3FIxCw.cjs.map +1 -0
  99. package/dist/{pl-DSFhAUqx.cjs → pl-CKKdVnpZ.cjs} +93 -1
  100. package/dist/pl-CKKdVnpZ.cjs.map +1 -0
  101. package/dist/{pl-BW--AaCI.js → pl-DA9b5NVg.js} +93 -1
  102. package/dist/pl-DA9b5NVg.js.map +1 -0
  103. package/dist/print-dialog-BqIrHCBh.cjs +276 -0
  104. package/dist/print-dialog-BqIrHCBh.cjs.map +1 -0
  105. package/dist/print-dialog-DvcI2m2_.js +276 -0
  106. package/dist/print-dialog-DvcI2m2_.js.map +1 -0
  107. package/dist/{pt-C5S-8MC5.cjs → pt-DLcszlzi.cjs} +93 -1
  108. package/dist/pt-DLcszlzi.cjs.map +1 -0
  109. package/dist/{pt-DIhpU5pT.js → pt-Nm8yyjbX.js} +93 -1
  110. package/dist/pt-Nm8yyjbX.js.map +1 -0
  111. package/dist/{redact-confirm-CX_SY2ZN.cjs → redact-confirm-C6EiK8yN.cjs} +2 -2
  112. package/dist/{redact-confirm-CX_SY2ZN.cjs.map → redact-confirm-C6EiK8yN.cjs.map} +1 -1
  113. package/dist/{redact-confirm-B6j36TPw.js → redact-confirm-CKuv9iN_.js} +2 -2
  114. package/dist/{redact-confirm-B6j36TPw.js.map → redact-confirm-CKuv9iN_.js.map} +1 -1
  115. package/dist/{redaction-panel-IJDshSJI.js → redaction-panel-CgNZ-pQk.js} +2 -2
  116. package/dist/{redaction-panel-IJDshSJI.js.map → redaction-panel-CgNZ-pQk.js.map} +1 -1
  117. package/dist/{redaction-panel-BmoIl-Ll.cjs → redaction-panel-ZhX0dlMi.cjs} +2 -2
  118. package/dist/{redaction-panel-BmoIl-Ll.cjs.map → redaction-panel-ZhX0dlMi.cjs.map} +1 -1
  119. package/dist/{search-panel-HfIhJm1M.js → search-panel-BE4xzWlm.js} +4 -4
  120. package/dist/{search-panel-HfIhJm1M.js.map → search-panel-BE4xzWlm.js.map} +1 -1
  121. package/dist/{search-panel-s9IoiOtv.cjs → search-panel-wcbTNG1z.cjs} +4 -4
  122. package/dist/{search-panel-s9IoiOtv.cjs.map → search-panel-wcbTNG1z.cjs.map} +1 -1
  123. package/dist/{sheet-BDsa_Sup.cjs → sheet-DTBFiwde.cjs} +30 -11
  124. package/dist/sheet-DTBFiwde.cjs.map +1 -0
  125. package/dist/{sheet-R6XDgyEf.js → sheet-DyjKfAq0.js} +25 -12
  126. package/dist/sheet-DyjKfAq0.js.map +1 -0
  127. package/dist/{sign-dialog-CgnR7akj.cjs → sign-dialog-D5WGx-Yn.cjs} +2 -2
  128. package/dist/{sign-dialog-CgnR7akj.cjs.map → sign-dialog-D5WGx-Yn.cjs.map} +1 -1
  129. package/dist/{sign-dialog-GDqCoQhA.js → sign-dialog-DerNe8qT.js} +2 -2
  130. package/dist/{sign-dialog-GDqCoQhA.js.map → sign-dialog-DerNe8qT.js.map} +1 -1
  131. package/dist/{signature-inspector-DyO313Qf.cjs → signature-inspector-Bz6TAfZM.cjs} +4 -10
  132. package/dist/signature-inspector-Bz6TAfZM.cjs.map +1 -0
  133. package/dist/{signature-inspector-okFz8do6.js → signature-inspector-CsGr9EBk.js} +4 -10
  134. package/dist/signature-inspector-CsGr9EBk.js.map +1 -0
  135. package/dist/{signature-maker-BoYa8vgA.cjs → signature-maker-D_YfBXLn.cjs} +3 -3
  136. package/dist/{signature-maker-BoYa8vgA.cjs.map → signature-maker-D_YfBXLn.cjs.map} +1 -1
  137. package/dist/{signature-maker-BhCmYyHD.js → signature-maker-Dnth4rV4.js} +3 -3
  138. package/dist/{signature-maker-BhCmYyHD.js.map → signature-maker-Dnth4rV4.js.map} +1 -1
  139. package/dist/{signatures-panel-B56PC6d9.cjs → signatures-panel-Ci_LaI1C.cjs} +4 -10
  140. package/dist/signatures-panel-Ci_LaI1C.cjs.map +1 -0
  141. package/dist/{signatures-panel-CgnFfhFm.js → signatures-panel-DZ9ywrjz.js} +4 -10
  142. package/dist/signatures-panel-DZ9ywrjz.js.map +1 -0
  143. package/dist/{stamps-panel-CDO0FPyK.js → stamps-panel-BrczStaz.js} +4 -10
  144. package/dist/stamps-panel-BrczStaz.js.map +1 -0
  145. package/dist/{stamps-panel-B9NYGayn.cjs → stamps-panel-Cv9nJBwx.cjs} +4 -10
  146. package/dist/stamps-panel-Cv9nJBwx.cjs.map +1 -0
  147. package/dist/theme-Be0OZokZ.js +97 -0
  148. package/dist/theme-Be0OZokZ.js.map +1 -0
  149. package/dist/theme-FR26JI3r.cjs +126 -0
  150. package/dist/theme-FR26JI3r.cjs.map +1 -0
  151. package/dist/{toolbar-z9od3tKl.js → toolbar-DF361xWY.js} +7 -6
  152. package/dist/toolbar-DF361xWY.js.map +1 -0
  153. package/dist/{toolbar-CJu2wKTU.cjs → toolbar-ddvpsvTb.cjs} +7 -6
  154. package/dist/toolbar-ddvpsvTb.cjs.map +1 -0
  155. package/dist/{zh-cn-CxkUUBct.js → zh-cn-BMPPkLpL.js} +93 -1
  156. package/dist/zh-cn-BMPPkLpL.js.map +1 -0
  157. package/dist/{zh-cn-3tmMeHqv.cjs → zh-cn-CZOO3p4H.cjs} +93 -1
  158. package/dist/zh-cn-CZOO3p4H.cjs.map +1 -0
  159. package/package.json +4 -4
  160. package/src/styles.css +8 -0
  161. package/dist/ar-D9XKAmDx.js.map +0 -1
  162. package/dist/ar-DnEj5vbP.cjs.map +0 -1
  163. package/dist/commands-BmgxhJ8B.js.map +0 -1
  164. package/dist/commands-CYt4SFUX.cjs.map +0 -1
  165. package/dist/de-Bdr4aWzm.js.map +0 -1
  166. package/dist/de-Dv6zvbnd.cjs.map +0 -1
  167. package/dist/dialog-B5GBisKv.js.map +0 -1
  168. package/dist/dialog-t8F13BL_.cjs.map +0 -1
  169. package/dist/es-BP09DR9w.cjs.map +0 -1
  170. package/dist/es-BSXz5tBv.js.map +0 -1
  171. package/dist/fr-BBQQn7tJ.cjs.map +0 -1
  172. package/dist/fr-Ckn3K9v1.js.map +0 -1
  173. package/dist/he-DRsG7bH7.cjs.map +0 -1
  174. package/dist/he-wdGU5PkU.js.map +0 -1
  175. package/dist/icons-BrK5iVL8.js.map +0 -1
  176. package/dist/icons-x0Tc05bs.cjs.map +0 -1
  177. package/dist/it-BuP4o0xQ.cjs.map +0 -1
  178. package/dist/it-Us-VmvIu.js.map +0 -1
  179. package/dist/ja-Cizj0-5O.js.map +0 -1
  180. package/dist/ja-DovEd6ts.cjs.map +0 -1
  181. package/dist/ko-B-qJEol2.cjs.map +0 -1
  182. package/dist/ko-DlrXliE1.js.map +0 -1
  183. package/dist/nl-0aF7M_0h.js.map +0 -1
  184. package/dist/nl-D3KZDDiJ.cjs.map +0 -1
  185. package/dist/pl-BW--AaCI.js.map +0 -1
  186. package/dist/pl-DSFhAUqx.cjs.map +0 -1
  187. package/dist/pt-C5S-8MC5.cjs.map +0 -1
  188. package/dist/pt-DIhpU5pT.js.map +0 -1
  189. package/dist/sheet-BDsa_Sup.cjs.map +0 -1
  190. package/dist/sheet-R6XDgyEf.js.map +0 -1
  191. package/dist/signature-inspector-DyO313Qf.cjs.map +0 -1
  192. package/dist/signature-inspector-okFz8do6.js.map +0 -1
  193. package/dist/signatures-panel-B56PC6d9.cjs.map +0 -1
  194. package/dist/signatures-panel-CgnFfhFm.js.map +0 -1
  195. package/dist/stamps-panel-B9NYGayn.cjs.map +0 -1
  196. package/dist/stamps-panel-CDO0FPyK.js.map +0 -1
  197. package/dist/toolbar-CJu2wKTU.cjs.map +0 -1
  198. package/dist/toolbar-z9od3tKl.js.map +0 -1
  199. package/dist/zh-cn-3tmMeHqv.cjs.map +0 -1
  200. package/dist/zh-cn-CxkUUBct.js.map +0 -1
@@ -1,4 +1,4 @@
1
- const require_sheet = require("./sheet-BDsa_Sup.cjs");
1
+ const require_sheet = require("./sheet-DTBFiwde.cjs");
2
2
  let react = require("react");
3
3
  let react_jsx_runtime = require("react/jsx-runtime");
4
4
  //#region src/ui/dialog.tsx
@@ -29,7 +29,7 @@ function Dialog({ labelledBy, onClose, className, children }) {
29
29
  ref: layer,
30
30
  ...require_sheet.POPOVER,
31
31
  "data-epdf-layer": "",
32
- className: "text-fg m-0 place-items-center overflow-hidden border-0 bg-transparent p-4 open:grid",
32
+ className: `${require_sheet.LAYER_CLASS} place-items-center p-4 open:grid`,
33
33
  style: {
34
34
  position: "fixed",
35
35
  inset: "auto",
@@ -57,4 +57,4 @@ Object.defineProperty(exports, "Dialog", {
57
57
  }
58
58
  });
59
59
 
60
- //# sourceMappingURL=dialog-t8F13BL_.cjs.map
60
+ //# sourceMappingURL=dialog-CngKTnAM.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dialog-CngKTnAM.cjs","names":["attachViewerLayer","holdFocus","POPOVER","LAYER_CLASS","SCRIM_CLASS"],"sources":["../src/ui/dialog.tsx"],"sourcesContent":["/**\n * A dialog: centered in the viewer's box over the dimmed viewer, in the layer\n * over it (`viewer-layer.ts`), so it covers the viewer and never the page\n * around it, and sits above a sheet or a panel it opened from. It takes focus\n * when it opens (its first control), keeps Tab inside it, closes on Escape\n * and gives focus back to what opened it.\n */\nimport { useLayoutEffect, useRef, type ReactNode } from 'react';\n\nimport { SCRIM_CLASS } from './sheet';\nimport { LAYER_CLASS, POPOVER, attachViewerLayer, holdFocus } from './viewer-layer';\n\nexport interface DialogProps {\n /** The id of the dialog's title, which names it for assistive technology. */\n readonly labelledBy: string;\n /** What Escape does: close the dialog, or nothing while it's busy. */\n readonly onClose: () => void;\n /** The dialog's own box: its border, background, width and padding. */\n readonly className: string;\n readonly children: ReactNode;\n}\n\nexport function Dialog({ labelledBy, onClose, className, children }: DialogProps) {\n const layer = useRef<HTMLDivElement>(null);\n const panel = useRef<HTMLDivElement>(null);\n const close = useRef(onClose);\n close.current = onClose;\n useLayoutEffect(() => {\n const layerElement = layer.current;\n const panelElement = panel.current;\n if (!layerElement || !panelElement) return;\n const stopLayer = attachViewerLayer(layerElement);\n const held = holdFocus(panelElement, { onEscape: () => close.current() });\n return () => {\n held.release();\n stopLayer();\n };\n // The dialog opens once; it closes by unmounting.\n }, []);\n return (\n <div\n ref={layer}\n {...POPOVER}\n data-epdf-layer=\"\"\n className={`${LAYER_CLASS} place-items-center p-4 open:grid`}\n style={{ position: 'fixed', inset: 'auto', maxWidth: 'none', maxHeight: 'none' }}\n >\n <div aria-hidden=\"true\" className={`absolute inset-0 ${SCRIM_CLASS}`} />\n <div\n ref={panel}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={labelledBy}\n className={`relative max-h-full max-w-full overflow-y-auto ${className}`}\n >\n {children}\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;AAsBA,SAAgB,OAAO,EAAE,YAAY,SAAS,WAAW,YAAyB;CAChF,MAAM,SAAA,GAAA,MAAA,OAAA,CAA+B,IAAI;CACzC,MAAM,SAAA,GAAA,MAAA,OAAA,CAA+B,IAAI;CACzC,MAAM,SAAA,GAAA,MAAA,OAAA,CAAe,OAAO;CAC5B,MAAM,UAAU;CAChB,CAAA,GAAA,MAAA,gBAAA,OAAsB;EACpB,MAAM,eAAe,MAAM;EAC3B,MAAM,eAAe,MAAM;EAC3B,IAAI,CAAC,gBAAgB,CAAC,cAAc;EACpC,MAAM,YAAYA,cAAAA,kBAAkB,YAAY;EAChD,MAAM,OAAOC,cAAAA,UAAU,cAAc,EAAE,gBAAgB,MAAM,QAAQ,EAAE,CAAC;EACxE,aAAa;GACX,KAAK,QAAQ;GACb,UAAU;EACZ;CAEF,GAAG,CAAC,CAAC;CACL,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EACE,KAAK;EACL,GAAIC,cAAAA;EACJ,mBAAgB;EAChB,WAAW,GAAGC,cAAAA,YAAY;EAC1B,OAAO;GAAE,UAAU;GAAS,OAAO;GAAQ,UAAU;GAAQ,WAAW;EAAO;EALjF,UAAA,CAOE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;GAAK,eAAY;GAAO,WAAW,oBAAoBC,cAAAA;EAAgB,CAAA,GACvE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;GACE,KAAK;GACL,MAAK;GACL,cAAW;GACX,mBAAiB;GACjB,WAAW,kDAAkD;GAE5D;EACE,CAAA,CACF;;AAET"}
@@ -99,6 +99,7 @@ const es = {
99
99
  note: "Comentario",
100
100
  link: "Enlace",
101
101
  gotoLink: "Ir al enlace",
102
+ saveFile: "Guardar archivo",
102
103
  removeLink: "Quitar enlace",
103
104
  delete: "Eliminar",
104
105
  group: "Agrupar",
@@ -155,12 +156,44 @@ const es = {
155
156
  "annotations-create": "No está permitido añadir anotaciones",
156
157
  "doc-annotate-modify": "No está permitido cambiar anotaciones",
157
158
  "doc-annotate-read": "No está permitido ver anotaciones",
159
+ "doc-attachments-modify": "No se permite agregar archivos",
158
160
  "doc-download": "No está permitido descargar",
159
161
  "doc-forms-modify": "No está permitido editar campos de formulario",
162
+ "doc-outline-modify": "No se permite cambiar el esquema",
163
+ "doc-pages-assemble": "No se permite cambiar las páginas",
160
164
  "doc-print": "No está permitido imprimir",
161
165
  "doc-text-copy": "No está permitido copiar",
162
166
  "doc-text-search": "No está permitido buscar"
163
167
  },
168
+ attachment: {
169
+ add: "Agregar archivo",
170
+ save: "Guardar",
171
+ goTo: "Ir a la página",
172
+ delete: "Eliminar",
173
+ more: "Más opciones"
174
+ },
175
+ outline: {
176
+ add: "Añadir elemento",
177
+ addChild: "Añadir elemento secundario",
178
+ rename: "Cambiar nombre",
179
+ setDestination: "Establecer destino en la vista actual",
180
+ properties: "Propiedades…",
181
+ delete: "Eliminar",
182
+ expandAll: "Expandir todo",
183
+ collapseAll: "Contraer todo",
184
+ more: "Más opciones"
185
+ },
186
+ pages: {
187
+ rotateClockwise: "Girar la página en sentido horario",
188
+ rotateCounterclockwise: "Girar la página en sentido antihorario",
189
+ delete: "Eliminar páginas",
190
+ duplicate: "Duplicar páginas",
191
+ insertBlank: "Insertar página en blanco",
192
+ insertFile: "Insertar desde archivo…",
193
+ extract: "Extraer páginas",
194
+ selectAll: "Seleccionar todas las páginas",
195
+ more: "Opciones de página"
196
+ },
164
197
  turnedOff: "{label} no está disponible"
165
198
  },
166
199
  passwordPrompt: {
@@ -213,6 +246,25 @@ const es = {
213
246
  other: "Otros"
214
247
  },
215
248
  goToPage: { go: "Ir" },
249
+ print: {
250
+ title: "Imprimir",
251
+ pages: "Páginas",
252
+ allPages: "Todas las páginas",
253
+ currentPage: "Página actual",
254
+ range: "Personalizado",
255
+ rangeLabel: "Páginas que imprimir",
256
+ rangePlaceholder: "p. ej. 1-3, 5",
257
+ rangeInvalid: "Números de página del 1 al {total}, por ejemplo 1-3, 5",
258
+ annotations: "Imprimir anotaciones",
259
+ preparing: "Preparando…",
260
+ preparingPage: "Preparando la página {page} de {total}…",
261
+ ready: "Listo para imprimir.",
262
+ images: "Las páginas se imprimen como imágenes a {dpi} DPI.",
263
+ lowResolution: "Este documento solo permite imprimir en baja resolución ({dpi} DPI).",
264
+ failed: "No se pudo preparar la impresión.",
265
+ cancel: "Cancelar",
266
+ print: "Imprimir"
267
+ },
216
268
  panels: {
217
269
  thumbnails: "Miniaturas",
218
270
  outline: "Esquema",
@@ -408,6 +460,46 @@ const es = {
408
460
  noRotate: "Se mantiene derecha al girar la página",
409
461
  invisible: "Heredado: ocultar subtipos desconocidos"
410
462
  },
463
+ attachments: {
464
+ loading: "Cargando adjuntos…",
465
+ failed: "No se pudieron leer los adjuntos.",
466
+ empty: "Este documento no tiene archivos adjuntos",
467
+ drop: "Suelte archivos para adjuntarlos",
468
+ dropHint: "O suelte archivos aquí",
469
+ adding: "Agregando…",
470
+ onPage: "Página {page}",
471
+ count: "{count} archivo",
472
+ countPlural: "{count} archivos"
473
+ },
474
+ outline: {
475
+ filter: "Filtrar esquema",
476
+ loading: "Cargando esquema…",
477
+ failed: "No se pudo leer el esquema.",
478
+ empty: "Este documento no tiene esquema",
479
+ noMatches: "Ningún elemento coincide",
480
+ incomplete: "No se pudo leer parte del esquema.",
481
+ untitled: "Sin título",
482
+ properties: {
483
+ title: "Propiedades del elemento",
484
+ name: "Título",
485
+ color: "Color",
486
+ noColor: "Ninguno",
487
+ customColor: "Color personalizado",
488
+ bold: "Negrita",
489
+ italic: "Cursiva",
490
+ open: "Expandido al abrir el documento",
491
+ target: "Destino",
492
+ targetNone: "Ninguno",
493
+ targetView: "Vista actual",
494
+ targetNamed: "Acción de página",
495
+ targetKept: "Se mantiene igual",
496
+ keptNote: "Este elemento ejecuta un script o abre otro archivo. No se puede cambiar aquí.",
497
+ fit: "Ajuste",
498
+ fitKept: "Como está",
499
+ save: "Guardar",
500
+ cancel: "Cancelar"
501
+ }
502
+ },
411
503
  linkEditor: {
412
504
  toUrl: "Enlazar a una URL",
413
505
  url: "URL",
@@ -563,4 +655,4 @@ const es = {
563
655
  //#endregion
564
656
  exports.es = es;
565
657
 
566
- //# sourceMappingURL=es-BP09DR9w.cjs.map
658
+ //# sourceMappingURL=es-DgYj-1L3.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"es-DgYj-1L3.cjs","names":[],"sources":["../src/locales/es.ts"],"sourcesContent":["import type { Locale } from '@embedpdf/react/i18n';\n\n/**\n * Spanish pack, in the words Adobe Acrobat's Spanish edition uses (redaction is \"Censurar\").\n * Its longer labels make the measured toolbar move more buttons into \"More\" on a switch.\n */\nexport const es: Locale = {\n code: 'es',\n name: 'Español',\n translations: {\n measurement: {\n title: 'Mediciones',\n distance: 'Distancia',\n perimeter: 'Perímetro',\n area: 'Área',\n areaUnit: 'Unidad de área',\n resetLabel: 'Restablecer posición de la etiqueta',\n calibrate: 'Calibrar escala',\n scale: 'Escala',\n custom: 'Personalizada',\n unavailable: 'No disponible',\n instructions:\n 'Arrastra para medir una distancia y haz clic para colocar la línea de cota. Marca los vértices de un perímetro o área y haz doble clic para terminar. Los bordes del área no deben cruzarse; una vista previa no disponible no puede finalizarse. Pulsa Escape para cancelar. Arrastra la etiqueta para moverla.',\n sessionOnly: 'Este motor conserva la calibración de página solo durante esta sesión.',\n allPages: 'Aplicar a todas las páginas',\n recalculate: 'Recalcular las mediciones existentes',\n preset: 'Escala predefinida',\n choosePreset: 'Elegir una escala',\n unit: 'Unidad',\n precision: 'Precisión',\n selection: 'Mediciones seleccionadas',\n report: '{updated} actualizadas · {skipped} omitidas · {failed} fallidas',\n knownLength: 'Introduce la longitud real representada por la línea que acabas de dibujar.',\n length: 'Longitud conocida',\n apply: 'Aplicar escala',\n applying: 'Aplicando…',\n },\n commands: {\n zoom: {\n in: 'Acercar',\n out: 'Alejar',\n fitPage: 'Ajustar a la página',\n fitWidth: 'Ajustar al ancho',\n automatic: 'Automático',\n menu: 'Zoom',\n level: 'Nivel de zoom',\n p50: '50 %',\n p100: '100 %',\n p150: '150 %',\n p200: '200 %',\n p400: '400 %',\n },\n pan: 'Desplazar',\n pointer: 'Puntero',\n comment: 'Comentario',\n style: 'Estilo',\n menu: 'Menú',\n viewControls: 'Controles de vista',\n open: 'Abrir',\n download: 'Descargar',\n print: 'Imprimir',\n fullscreen: 'Pantalla completa',\n spread: {\n group: 'Diseño de página',\n none: 'Una página',\n odd: 'Dos páginas',\n even: 'Portada',\n },\n scroll: {\n group: 'Desplazamiento',\n vertical: 'Vertical',\n horizontal: 'Horizontal',\n },\n rotate: {\n group: 'Girar',\n clockwise: 'Girar a la derecha',\n counterclockwise: 'Girar a la izquierda',\n },\n mode: {\n measure: 'Medir',\n group: 'Modo',\n view: 'Ver',\n annotate: 'Anotar',\n shapes: 'Formas',\n insert: 'Insertar',\n form: 'Formulario',\n redact: 'Censurar',\n },\n annotate: {\n cancelCreation: 'Cancelar dibujo',\n highlight: 'Resaltar',\n strikeout: 'Tachar',\n underline: 'Subrayar',\n squiggly: 'Ondulado',\n ink: 'Dibujar',\n inkHighlight: 'Resaltador a mano alzada',\n text: 'Texto',\n insertText: 'Insertar texto',\n replaceText: 'Reemplazar texto',\n callout: 'Llamada',\n note: 'Comentario',\n link: 'Enlace',\n gotoLink: 'Ir al enlace',\n saveFile: 'Guardar archivo',\n removeLink: 'Quitar enlace',\n delete: 'Eliminar',\n group: 'Agrupar',\n ungroup: 'Desagrupar',\n stampFromSelection: 'Crear sello',\n strip: 'Acciones de anotación',\n },\n selection: {\n copy: 'Copiar',\n strip: 'Acciones de selección de texto',\n },\n shapes: {\n rectangle: 'Rectángulo',\n circle: 'Círculo',\n line: 'Línea',\n arrow: 'Flecha',\n polygon: 'Polígono',\n polyline: 'Polilínea',\n },\n insert: {\n stamp: 'Sello',\n attachment: 'Adjuntar archivo',\n signature: 'Firma',\n image: 'Imagen',\n },\n form: {\n textfield: 'Campo de texto',\n checkbox: 'Casilla',\n radio: 'Botón de opción',\n select: 'Desplegable',\n listbox: 'Lista',\n button: 'Botón',\n signature: 'Campo de firma',\n // The Form mode's design switch, which opens the form designer's sidebar.\n design: 'Diseño de formulario',\n },\n redact: {\n mark: 'Marcar para censurar',\n applyAll: 'Aplicar censuras',\n clearAll: 'Borrar marcas',\n },\n undo: 'Deshacer',\n redo: 'Rehacer',\n page: {\n next: 'Página siguiente',\n previous: 'Página anterior',\n first: 'Primera página',\n last: 'Última página',\n goTo: 'Ir a la página',\n },\n find: 'Buscar',\n shortcuts: 'Atajos de teclado',\n notAllowed: {\n default: '{label} no está permitido',\n 'annotations-create': 'No está permitido añadir anotaciones',\n 'doc-annotate-modify': 'No está permitido cambiar anotaciones',\n 'doc-annotate-read': 'No está permitido ver anotaciones',\n 'doc-attachments-modify': 'No se permite agregar archivos',\n 'doc-download': 'No está permitido descargar',\n 'doc-forms-modify': 'No está permitido editar campos de formulario',\n 'doc-outline-modify': 'No se permite cambiar el esquema',\n 'doc-pages-assemble': 'No se permite cambiar las páginas',\n 'doc-print': 'No está permitido imprimir',\n 'doc-text-copy': 'No está permitido copiar',\n 'doc-text-search': 'No está permitido buscar',\n },\n attachment: {\n add: 'Agregar archivo',\n save: 'Guardar',\n goTo: 'Ir a la página',\n delete: 'Eliminar',\n more: 'Más opciones',\n },\n outline: {\n add: 'Añadir elemento',\n addChild: 'Añadir elemento secundario',\n rename: 'Cambiar nombre',\n setDestination: 'Establecer destino en la vista actual',\n properties: 'Propiedades…',\n delete: 'Eliminar',\n expandAll: 'Expandir todo',\n collapseAll: 'Contraer todo',\n more: 'Más opciones',\n },\n // The page commands, in the Pages mode and a page's menu.\n pages: {\n rotateClockwise: 'Girar la página en sentido horario',\n rotateCounterclockwise: 'Girar la página en sentido antihorario',\n delete: 'Eliminar páginas',\n duplicate: 'Duplicar páginas',\n insertBlank: 'Insertar página en blanco',\n insertFile: 'Insertar desde archivo…',\n extract: 'Extraer páginas',\n selectAll: 'Seleccionar todas las páginas',\n more: 'Opciones de página',\n },\n turnedOff: '{label} no está disponible',\n },\n passwordPrompt: {\n title: 'Contraseña requerida',\n required: 'Este documento está protegido con contraseña. Introdúcela para abrirlo.',\n incorrect: 'La contraseña es incorrecta. Inténtalo de nuevo.',\n incorrectWarning: 'Contraseña incorrecta',\n label: 'Contraseña',\n placeholder: 'Introduce la contraseña',\n cancel: 'Cancelar',\n open: 'Abrir',\n opening: 'Abriendo…',\n },\n dropToOpen: {\n label: 'Suelta un PDF para abrirlo',\n },\n documentError: {\n title: 'No se pudo abrir el documento',\n unknown: 'El documento no se pudo abrir.',\n notFound: 'No se encontró el archivo.',\n notAllowed: 'No tienes acceso a este documento.',\n damaged: 'Este archivo no es un PDF o está dañado.',\n unsupported: 'Este visor no puede abrir este tipo de documento.',\n retry: 'Reintentar',\n close: 'Cerrar documento',\n },\n tabs: {\n close: 'Cerrar {name}',\n loading: 'Cargando',\n untitled: 'Documento {id}',\n },\n closeUnsaved: {\n title: '¿Cerrar sin guardar?',\n body: '«{name}» tiene cambios que no se han descargado. Se perderán.',\n cancel: 'Cancelar',\n close: 'Cerrar sin guardar',\n },\n viewOnly: {\n label: 'Solo lectura',\n turnedOff: 'Las herramientas que cambian este documento están desactivadas',\n notAllowed: 'Puedes leer este documento, pero no cambiarlo',\n },\n panel: {\n close: 'Cerrar',\n resize: 'Cambiar el ancho de {title}',\n },\n menu: {\n back: 'Atrás',\n },\n shortcuts: {\n document: 'Documento',\n viewing: 'Visualización',\n editing: 'Edición',\n other: 'Otros',\n },\n goToPage: {\n go: 'Ir',\n },\n print: {\n title: 'Imprimir',\n pages: 'Páginas',\n allPages: 'Todas las páginas',\n currentPage: 'Página actual',\n range: 'Personalizado',\n rangeLabel: 'Páginas que imprimir',\n rangePlaceholder: 'p. ej. 1-3, 5',\n rangeInvalid: 'Números de página del 1 al {total}, por ejemplo 1-3, 5',\n annotations: 'Imprimir anotaciones',\n preparing: 'Preparando…',\n preparingPage: 'Preparando la página {page} de {total}…',\n ready: 'Listo para imprimir.',\n images: 'Las páginas se imprimen como imágenes a {dpi} DPI.',\n lowResolution: 'Este documento solo permite imprimir en baja resolución ({dpi} DPI).',\n failed: 'No se pudo preparar la impresión.',\n cancel: 'Cancelar',\n print: 'Imprimir',\n },\n panels: {\n thumbnails: 'Miniaturas',\n outline: 'Esquema',\n attachments: 'Adjuntos',\n search: 'Buscar',\n comments: 'Comentarios',\n style: 'Estilo',\n stamps: 'Sellos',\n signatures: 'Firmas',\n redaction: 'Censuras',\n measurement: 'Mediciones',\n formDesign: 'Diseño de formulario',\n switch: 'Cambiar de panel',\n },\n annotation: {\n comment: 'Comentario',\n highlight: 'Resaltado',\n underline: 'Subrayado',\n squiggly: 'Ondulado',\n strikeout: 'Tachado',\n square: 'Cuadrado',\n circle: 'Círculo',\n line: 'Línea',\n polygon: 'Polígono',\n polyline: 'Polilínea',\n ink: 'Tinta',\n freeText: 'Texto',\n stamp: 'Sello',\n caret: 'Intercalación',\n redact: 'Censura',\n fileAttachment: 'Adjunto',\n // The style panel's labels, as the annotation kinds name them (`labelKey`), by wording:\n // one field is called different things by different kinds.\n style: {\n opacity: 'Opacidad',\n stroke: 'Trazo',\n fill: 'Relleno',\n color: 'Color',\n strokeWidth: 'Grosor del trazo',\n border: 'Borde',\n borderStyle: 'Estilo de borde',\n borderColor: 'Color de borde',\n borderWidth: 'Grosor de borde',\n background: 'Fondo',\n outline: 'Contorno',\n lineEndings: 'Extremos de línea',\n blendMode: 'Modo de fusión',\n font: 'Fuente',\n fontSize: 'Tamaño de fuente',\n textColor: 'Color del texto',\n bold: 'Negrita',\n italic: 'Cursiva',\n underline: 'Subrayado',\n align: 'Alineación',\n alignment: 'Alineación',\n label: 'Etiqueta',\n labelFont: 'Fuente de la etiqueta',\n labelSize: 'Tamaño de la etiqueta',\n labelColor: 'Color de la etiqueta',\n icon: 'Icono',\n link: 'Enlace',\n },\n // The annotation flags (`/F`).\n flags: {\n print: 'Imprimir',\n hidden: 'Oculta',\n noView: 'Sin vista',\n toggleNoView: 'Alternar sin vista',\n readOnly: 'Solo lectura',\n locked: 'Bloqueada',\n lockedContents: 'Contenido bloqueado',\n noZoom: 'Sin zoom',\n noRotate: 'Sin rotación',\n invisible: 'Invisible',\n },\n borderStyles: { solid: 'Sólido', dashed: 'Discontinuo', cloudy: 'Nube' },\n lineEndings: {\n none: 'Ninguno',\n square: 'Cuadrado',\n circle: 'Círculo',\n diamond: 'Rombo',\n openArrow: 'Flecha abierta',\n closedArrow: 'Flecha cerrada',\n butt: 'Tope',\n reverseOpenArrow: 'Flecha abierta inversa',\n reverseClosedArrow: 'Flecha cerrada inversa',\n slash: 'Barra diagonal',\n },\n blendModes: {\n normal: 'Normal',\n multiply: 'Multiplicar',\n screen: 'Trama',\n overlay: 'Superponer',\n darken: 'Oscurecer',\n lighten: 'Aclarar',\n colorDodge: 'Sobreexponer color',\n colorBurn: 'Subexponer color',\n hardLight: 'Luz fuerte',\n softLight: 'Luz suave',\n difference: 'Diferencia',\n exclusion: 'Exclusión',\n hue: 'Tono',\n saturation: 'Saturación',\n color: 'Color',\n luminosity: 'Luminosidad',\n },\n // The standard PDF fonts, by their names: a language may keep them as they are.\n fonts: {\n courier: 'Courier',\n courierBold: 'Courier Bold',\n courierBoldOblique: 'Courier Bold Oblique',\n courierOblique: 'Courier Oblique',\n helvetica: 'Helvetica',\n helveticaBold: 'Helvetica Bold',\n helveticaBoldOblique: 'Helvetica Bold Oblique',\n helveticaOblique: 'Helvetica Oblique',\n timesRoman: 'Times Roman',\n timesBold: 'Times Bold',\n timesBoldItalic: 'Times Bold Italic',\n timesItalic: 'Times Italic',\n symbol: 'Symbol',\n zapfDingbats: 'Zapf Dingbats',\n },\n alignments: { left: 'Izquierda', center: 'Centro', right: 'Derecha' },\n noteIcons: {\n comment: 'Comentario',\n key: 'Clave',\n note: 'Nota',\n help: 'Ayuda',\n newParagraph: 'Párrafo nuevo',\n paragraph: 'Párrafo',\n insert: 'Insertar',\n },\n attachmentIcons: {\n pushPin: 'Chincheta',\n paperclip: 'Clip',\n graph: 'Gráfico',\n tag: 'Etiqueta',\n },\n },\n // A form field's settings, as the form plugin names them (`labelKey`).\n form: {\n settings: {\n name: 'Nombre',\n tooltip: 'Información sobre herramientas',\n required: 'Obligatorio',\n readOnly: 'Solo lectura',\n noExport: 'No exportar',\n defaultValue: 'Valor predeterminado',\n maxLength: 'Longitud máxima',\n multiline: 'Multilínea',\n password: 'Contraseña',\n comb: 'Un carácter por casilla',\n radiosInUnison: 'Los botones con el mismo valor se activan a la vez',\n keepOneOn: 'Mantener uno activado',\n options: 'Opciones',\n allowTyping: 'Permitir escribir',\n multiSelect: 'Selección múltiple',\n },\n },\n // A thumbnail's tooltip.\n thumbnails: { page: 'Página {page}' },\n // The form designer's sidebar: the fields by page, and the selected one's buttons.\n formDesign: {\n empty: 'Aún no hay campos. Elige una herramienta de campo para añadir uno.',\n page: 'Página {page}',\n allFields: 'Todos los campos',\n buttons: 'Botones',\n boxes: 'Casillas',\n box: 'Casilla {number}',\n addButton: 'Añadir botón',\n addBox: 'Añadir casilla',\n },\n // The style panel's own words around the properties.\n stylePanel: {\n mixed: '(mixto)',\n // A color swatch that takes the color away.\n transparent: 'Transparente',\n lineStart: 'Inicio',\n lineEnd: 'Fin',\n empty: 'Elige una herramienta de dibujo o selecciona una anotación para editar su estilo.',\n selected: 'Seleccionadas: {count}',\n toolDefaults: 'Valores predeterminados: {tool}',\n defaults: 'Valores predeterminados',\n },\n // The flags section of the style panel: its title, and what each flag does.\n annotationFlags: {\n title: 'Indicadores (/F)',\n print: 'Incluir al imprimir la página',\n hidden: 'Oculta en todas partes: pantalla, clics, impresión',\n noView: 'Oculta en pantalla, puede imprimirse',\n toggleNoView: 'Mostrar una anotación sin vista mientras está seleccionada',\n readOnly: 'Visible, pero no admite clics',\n locked: 'No se puede mover / redimensionar / eliminar / cambiar el estilo',\n lockedContents: 'El texto no puede cambiar; la geometría sí',\n noZoom: 'Tamaño fijo en pantalla (anclada arriba a la izquierda)',\n noRotate: 'Se mantiene derecha al girar la página',\n invisible: 'Heredado: ocultar subtipos desconocidos',\n },\n // The link editor over a selected annotation.\n attachments: {\n loading: 'Cargando adjuntos…',\n failed: 'No se pudieron leer los adjuntos.',\n empty: 'Este documento no tiene archivos adjuntos',\n drop: 'Suelte archivos para adjuntarlos',\n dropHint: 'O suelte archivos aquí',\n adding: 'Agregando…',\n onPage: 'Página {page}',\n count: '{count} archivo',\n countPlural: '{count} archivos',\n },\n outline: {\n filter: 'Filtrar esquema',\n loading: 'Cargando esquema…',\n failed: 'No se pudo leer el esquema.',\n empty: 'Este documento no tiene esquema',\n noMatches: 'Ningún elemento coincide',\n incomplete: 'No se pudo leer parte del esquema.',\n untitled: 'Sin título',\n properties: {\n title: 'Propiedades del elemento',\n name: 'Título',\n color: 'Color',\n noColor: 'Ninguno',\n customColor: 'Color personalizado',\n bold: 'Negrita',\n italic: 'Cursiva',\n open: 'Expandido al abrir el documento',\n target: 'Destino',\n targetNone: 'Ninguno',\n targetView: 'Vista actual',\n targetNamed: 'Acción de página',\n targetKept: 'Se mantiene igual',\n keptNote: 'Este elemento ejecuta un script o abre otro archivo. No se puede cambiar aquí.',\n fit: 'Ajuste',\n fitKept: 'Como está',\n save: 'Guardar',\n cancel: 'Cancelar',\n },\n },\n linkEditor: {\n toUrl: 'Enlazar a una URL',\n url: 'URL',\n toPage: 'Enlazar a una página',\n page: 'Página',\n urlPlaceholder: 'https://…',\n pagePlaceholder: 'Número de página',\n add: 'Añadir enlace',\n update: 'Actualizar enlace',\n },\n demo: {\n starting: 'Iniciando el visor…',\n opening: 'Abriendo el documento…',\n more: 'Más',\n searchPlaceholder: 'Buscar en el documento…',\n searchCaseSensitive: 'Distinguir mayúsculas',\n searchWholeWord: 'Palabra completa',\n searchRegex: 'Expresión regular',\n searchSearching: 'Buscando…',\n searchResults: '{count} resultados encontrados',\n searchNoResults: 'Sin resultados',\n searchPrevious: 'Resultado anterior',\n searchNext: 'Resultado siguiente',\n searchPage: 'Página {page}',\n commentsForbidden: 'No tienes acceso a los comentarios de este documento.',\n commentsLoading: 'Cargando comentarios…',\n commentsError: 'No se pudieron cargar los comentarios.',\n commentsRetry: 'Reintentar',\n commentsEmpty: 'Aún no hay comentarios. Usa la herramienta de nota para iniciar un hilo.',\n commentsEmptyReadOnly: 'Este documento no tiene comentarios.',\n commentsAnonymous: 'Desconocido',\n commentsPage: 'Página {page}',\n commentCount: '{count} comentario',\n commentCountPlural: '{count} comentarios',\n commentsReply: 'Responder',\n commentsReplyPlaceholder: 'Responder…',\n commentsAddPlaceholder: 'Añadir un comentario…',\n commentsDelete: 'Eliminar comentario',\n commentsDeleteThread: 'Eliminar hilo',\n commentsEdit: 'Editar comentario',\n commentsStatus: 'Estado',\n commentsStatusNone: 'Sin estado',\n commentsStatusAccepted: 'Aceptado',\n commentsStatusRejected: 'Rechazado',\n commentsStatusCancelled: 'Cancelado',\n commentsStatusCompleted: 'Completado',\n empty: 'Aquí todavía no hay nada en este panel de demostración.',\n page: 'Página {current} de {total}',\n goToPage: 'Ir a la página',\n cancel: 'Cancelar',\n pageBadge: 'pág. {page}',\n redactionEmpty:\n 'No hay censuras pendientes. Usa la herramienta Censurar para marcar texto o áreas.',\n redactionArea: 'Marca de área',\n redactionText: 'Marca de texto',\n redactionRemove: 'Quitar marca',\n redactConfirmTitle: '¿Aplicar censuras?',\n redactConfirmBody:\n 'Eliminar permanentemente el contenido bajo {count} marcas de censura. No se puede deshacer.',\n redactConfirmCollateral: 'También se eliminarán {count} otras anotaciones.',\n redactApply: 'Aplicar',\n redactApplying: 'Aplicando…',\n formatLabel: 'Formato',\n fieldSettingsTitle: 'Campo',\n fieldOptionLabel: 'Etiqueta',\n fieldOptionValue: 'Valor',\n fieldOptionAdd: 'Añadir opción',\n fieldOptionRemove: 'Quitar opción',\n fieldNone: 'Ninguno',\n redactLabelTitle: 'Etiqueta de censura',\n redactLabelPlaceholder: 'p. ej. CENSURADO',\n redactLabelRepeat: 'Repetir etiqueta en toda la región',\n stampsAll: 'Todos los sellos',\n stampsLoading: 'Cargando sellos…',\n stampsEmpty: 'Aún no hay sellos. Importa un PDF para convertir cada página en un sello.',\n stampsRemoveStamp: 'Quitar sello',\n stampsArmedHint: 'Haz clic en una página para colocar el sello.',\n stampsImport: 'Importar PDF…',\n stampsImporting: 'Importando…',\n stampsImportHint:\n 'Importa un PDF como biblioteca de sellos: cada página se convierte en un sello.',\n stampsRemoveLibrary: 'Quitar biblioteca',\n stampsExportLibrary: 'Exportar biblioteca como PDF',\n stampsCustomLibrary: 'Mis sellos',\n stampsCustomLabel: 'Sello personalizado',\n stampsError: 'No se pudieron cargar los sellos integrados.',\n stampsArmError: 'No se pudo activar ese sello.',\n stampsImportError: 'No se pudo importar ese PDF como biblioteca de sellos.',\n quickStampsLabel: 'Sellos rápidos',\n signaturesEmpty: 'Aún no hay firmas. Crea una para firmar.',\n signaturesNew: 'Nueva firma…',\n signaturesArmedHint:\n 'Haz clic en un campo de firma para firmarlo, o en cualquier parte de una página para colocar la marca.',\n signaturesTargetHint: 'Elige una marca para el campo seleccionado.',\n signaturesInDocument: 'En este documento',\n signaturesNone: 'Este documento no tiene campos de firma.',\n signaturesValidate: 'Validar',\n signaturesValidating: 'Validando…',\n signaturesSigned: 'Firmado',\n signaturesUnsigned: 'Sin firmar',\n signaturesRename: 'Renombrar',\n signaturesRemove: 'Quitar',\n signaturesExport: 'Exportar como PDF',\n signaturesAddInitials: 'Añadir iniciales',\n signatureLabel: 'Firma',\n initialsLabel: 'Iniciales',\n makerTitle: 'Nueva firma',\n makerName: 'Nombre',\n makerNamePlaceholder: 'Tu nombre',\n makerDraw: 'Dibujar',\n makerType: 'Escribir',\n makerUpload: 'Subir',\n makerTypePlaceholder: 'Escribe tu nombre',\n makerFont: 'Fuente',\n makerUploadHint: 'Elige un PNG, JPEG o PDF de una página',\n makerClear: 'Borrar',\n makerOptional: '(opcional)',\n makerSave: 'Guardar',\n makerSaving: 'Guardando…',\n makerError: 'No se pudo guardar la firma.',\n signTitle: 'Firmar este campo',\n signReason: 'Motivo',\n signLocation: 'Lugar',\n signKind: 'Qué puede cambiar después',\n signKindApproval:\n 'Firma de aprobación: rellenar formularios y más firmas siguen siendo válidos',\n signKindCertifyAnnotate: 'Certificar: permitir comentarios, rellenar formularios y firmas',\n signKindCertifyFill: 'Certificar: permitir solo rellenar formularios y firmas',\n signKindCertifyLocked: 'Certificar: no permitir cambios',\n signButton: 'Firmar',\n signSigning: 'Firmando…',\n signFill: 'Colocar sin firmar',\n signError: 'No se pudo firmar el campo.',\n inspectTitle: 'Firma',\n inspectSigner: 'Firmado por',\n inspectReason: 'Motivo',\n inspectLocation: 'Lugar',\n inspectTime: 'Fecha',\n inspectIntegrity: 'Documento',\n inspectCryptography: 'Firma',\n inspectTrust: 'Firmante',\n inspectChanges: 'Cambios posteriores',\n inspectDownload: 'Descargar versión firmada',\n verdictValid: 'Válida',\n verdictValidUntrusted: 'Válida, firmante no confiable',\n verdictInvalid: 'No válida: modificado después de firmar',\n verdictWillInvalidate: 'Válida, no válida al guardar',\n signaturesInvalidating:\n 'Este cambio invalidará {field} al guardar el documento. Deshazlo para conservar la firma.',\n verdictIndeterminate: 'No se pudo verificar',\n verdictUnchanged: 'Ninguno',\n verdictRestored: 'Modificado y luego restaurado',\n inspectLaterRevisions: 'Revisiones tras la firma',\n verdictPermitted: 'Permitidos',\n verdictForbidden: 'No permitidos',\n },\n },\n};\n"],"mappings":"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"}
@@ -99,6 +99,7 @@ const es = {
99
99
  note: "Comentario",
100
100
  link: "Enlace",
101
101
  gotoLink: "Ir al enlace",
102
+ saveFile: "Guardar archivo",
102
103
  removeLink: "Quitar enlace",
103
104
  delete: "Eliminar",
104
105
  group: "Agrupar",
@@ -155,12 +156,44 @@ const es = {
155
156
  "annotations-create": "No está permitido añadir anotaciones",
156
157
  "doc-annotate-modify": "No está permitido cambiar anotaciones",
157
158
  "doc-annotate-read": "No está permitido ver anotaciones",
159
+ "doc-attachments-modify": "No se permite agregar archivos",
158
160
  "doc-download": "No está permitido descargar",
159
161
  "doc-forms-modify": "No está permitido editar campos de formulario",
162
+ "doc-outline-modify": "No se permite cambiar el esquema",
163
+ "doc-pages-assemble": "No se permite cambiar las páginas",
160
164
  "doc-print": "No está permitido imprimir",
161
165
  "doc-text-copy": "No está permitido copiar",
162
166
  "doc-text-search": "No está permitido buscar"
163
167
  },
168
+ attachment: {
169
+ add: "Agregar archivo",
170
+ save: "Guardar",
171
+ goTo: "Ir a la página",
172
+ delete: "Eliminar",
173
+ more: "Más opciones"
174
+ },
175
+ outline: {
176
+ add: "Añadir elemento",
177
+ addChild: "Añadir elemento secundario",
178
+ rename: "Cambiar nombre",
179
+ setDestination: "Establecer destino en la vista actual",
180
+ properties: "Propiedades…",
181
+ delete: "Eliminar",
182
+ expandAll: "Expandir todo",
183
+ collapseAll: "Contraer todo",
184
+ more: "Más opciones"
185
+ },
186
+ pages: {
187
+ rotateClockwise: "Girar la página en sentido horario",
188
+ rotateCounterclockwise: "Girar la página en sentido antihorario",
189
+ delete: "Eliminar páginas",
190
+ duplicate: "Duplicar páginas",
191
+ insertBlank: "Insertar página en blanco",
192
+ insertFile: "Insertar desde archivo…",
193
+ extract: "Extraer páginas",
194
+ selectAll: "Seleccionar todas las páginas",
195
+ more: "Opciones de página"
196
+ },
164
197
  turnedOff: "{label} no está disponible"
165
198
  },
166
199
  passwordPrompt: {
@@ -213,6 +246,25 @@ const es = {
213
246
  other: "Otros"
214
247
  },
215
248
  goToPage: { go: "Ir" },
249
+ print: {
250
+ title: "Imprimir",
251
+ pages: "Páginas",
252
+ allPages: "Todas las páginas",
253
+ currentPage: "Página actual",
254
+ range: "Personalizado",
255
+ rangeLabel: "Páginas que imprimir",
256
+ rangePlaceholder: "p. ej. 1-3, 5",
257
+ rangeInvalid: "Números de página del 1 al {total}, por ejemplo 1-3, 5",
258
+ annotations: "Imprimir anotaciones",
259
+ preparing: "Preparando…",
260
+ preparingPage: "Preparando la página {page} de {total}…",
261
+ ready: "Listo para imprimir.",
262
+ images: "Las páginas se imprimen como imágenes a {dpi} DPI.",
263
+ lowResolution: "Este documento solo permite imprimir en baja resolución ({dpi} DPI).",
264
+ failed: "No se pudo preparar la impresión.",
265
+ cancel: "Cancelar",
266
+ print: "Imprimir"
267
+ },
216
268
  panels: {
217
269
  thumbnails: "Miniaturas",
218
270
  outline: "Esquema",
@@ -408,6 +460,46 @@ const es = {
408
460
  noRotate: "Se mantiene derecha al girar la página",
409
461
  invisible: "Heredado: ocultar subtipos desconocidos"
410
462
  },
463
+ attachments: {
464
+ loading: "Cargando adjuntos…",
465
+ failed: "No se pudieron leer los adjuntos.",
466
+ empty: "Este documento no tiene archivos adjuntos",
467
+ drop: "Suelte archivos para adjuntarlos",
468
+ dropHint: "O suelte archivos aquí",
469
+ adding: "Agregando…",
470
+ onPage: "Página {page}",
471
+ count: "{count} archivo",
472
+ countPlural: "{count} archivos"
473
+ },
474
+ outline: {
475
+ filter: "Filtrar esquema",
476
+ loading: "Cargando esquema…",
477
+ failed: "No se pudo leer el esquema.",
478
+ empty: "Este documento no tiene esquema",
479
+ noMatches: "Ningún elemento coincide",
480
+ incomplete: "No se pudo leer parte del esquema.",
481
+ untitled: "Sin título",
482
+ properties: {
483
+ title: "Propiedades del elemento",
484
+ name: "Título",
485
+ color: "Color",
486
+ noColor: "Ninguno",
487
+ customColor: "Color personalizado",
488
+ bold: "Negrita",
489
+ italic: "Cursiva",
490
+ open: "Expandido al abrir el documento",
491
+ target: "Destino",
492
+ targetNone: "Ninguno",
493
+ targetView: "Vista actual",
494
+ targetNamed: "Acción de página",
495
+ targetKept: "Se mantiene igual",
496
+ keptNote: "Este elemento ejecuta un script o abre otro archivo. No se puede cambiar aquí.",
497
+ fit: "Ajuste",
498
+ fitKept: "Como está",
499
+ save: "Guardar",
500
+ cancel: "Cancelar"
501
+ }
502
+ },
411
503
  linkEditor: {
412
504
  toUrl: "Enlazar a una URL",
413
505
  url: "URL",
@@ -563,4 +655,4 @@ const es = {
563
655
  //#endregion
564
656
  export { es };
565
657
 
566
- //# sourceMappingURL=es-BSXz5tBv.js.map
658
+ //# sourceMappingURL=es-DoXTqFoO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"es-DoXTqFoO.js","names":[],"sources":["../src/locales/es.ts"],"sourcesContent":["import type { Locale } from '@embedpdf/react/i18n';\n\n/**\n * Spanish pack, in the words Adobe Acrobat's Spanish edition uses (redaction is \"Censurar\").\n * Its longer labels make the measured toolbar move more buttons into \"More\" on a switch.\n */\nexport const es: Locale = {\n code: 'es',\n name: 'Español',\n translations: {\n measurement: {\n title: 'Mediciones',\n distance: 'Distancia',\n perimeter: 'Perímetro',\n area: 'Área',\n areaUnit: 'Unidad de área',\n resetLabel: 'Restablecer posición de la etiqueta',\n calibrate: 'Calibrar escala',\n scale: 'Escala',\n custom: 'Personalizada',\n unavailable: 'No disponible',\n instructions:\n 'Arrastra para medir una distancia y haz clic para colocar la línea de cota. Marca los vértices de un perímetro o área y haz doble clic para terminar. Los bordes del área no deben cruzarse; una vista previa no disponible no puede finalizarse. Pulsa Escape para cancelar. Arrastra la etiqueta para moverla.',\n sessionOnly: 'Este motor conserva la calibración de página solo durante esta sesión.',\n allPages: 'Aplicar a todas las páginas',\n recalculate: 'Recalcular las mediciones existentes',\n preset: 'Escala predefinida',\n choosePreset: 'Elegir una escala',\n unit: 'Unidad',\n precision: 'Precisión',\n selection: 'Mediciones seleccionadas',\n report: '{updated} actualizadas · {skipped} omitidas · {failed} fallidas',\n knownLength: 'Introduce la longitud real representada por la línea que acabas de dibujar.',\n length: 'Longitud conocida',\n apply: 'Aplicar escala',\n applying: 'Aplicando…',\n },\n commands: {\n zoom: {\n in: 'Acercar',\n out: 'Alejar',\n fitPage: 'Ajustar a la página',\n fitWidth: 'Ajustar al ancho',\n automatic: 'Automático',\n menu: 'Zoom',\n level: 'Nivel de zoom',\n p50: '50 %',\n p100: '100 %',\n p150: '150 %',\n p200: '200 %',\n p400: '400 %',\n },\n pan: 'Desplazar',\n pointer: 'Puntero',\n comment: 'Comentario',\n style: 'Estilo',\n menu: 'Menú',\n viewControls: 'Controles de vista',\n open: 'Abrir',\n download: 'Descargar',\n print: 'Imprimir',\n fullscreen: 'Pantalla completa',\n spread: {\n group: 'Diseño de página',\n none: 'Una página',\n odd: 'Dos páginas',\n even: 'Portada',\n },\n scroll: {\n group: 'Desplazamiento',\n vertical: 'Vertical',\n horizontal: 'Horizontal',\n },\n rotate: {\n group: 'Girar',\n clockwise: 'Girar a la derecha',\n counterclockwise: 'Girar a la izquierda',\n },\n mode: {\n measure: 'Medir',\n group: 'Modo',\n view: 'Ver',\n annotate: 'Anotar',\n shapes: 'Formas',\n insert: 'Insertar',\n form: 'Formulario',\n redact: 'Censurar',\n },\n annotate: {\n cancelCreation: 'Cancelar dibujo',\n highlight: 'Resaltar',\n strikeout: 'Tachar',\n underline: 'Subrayar',\n squiggly: 'Ondulado',\n ink: 'Dibujar',\n inkHighlight: 'Resaltador a mano alzada',\n text: 'Texto',\n insertText: 'Insertar texto',\n replaceText: 'Reemplazar texto',\n callout: 'Llamada',\n note: 'Comentario',\n link: 'Enlace',\n gotoLink: 'Ir al enlace',\n saveFile: 'Guardar archivo',\n removeLink: 'Quitar enlace',\n delete: 'Eliminar',\n group: 'Agrupar',\n ungroup: 'Desagrupar',\n stampFromSelection: 'Crear sello',\n strip: 'Acciones de anotación',\n },\n selection: {\n copy: 'Copiar',\n strip: 'Acciones de selección de texto',\n },\n shapes: {\n rectangle: 'Rectángulo',\n circle: 'Círculo',\n line: 'Línea',\n arrow: 'Flecha',\n polygon: 'Polígono',\n polyline: 'Polilínea',\n },\n insert: {\n stamp: 'Sello',\n attachment: 'Adjuntar archivo',\n signature: 'Firma',\n image: 'Imagen',\n },\n form: {\n textfield: 'Campo de texto',\n checkbox: 'Casilla',\n radio: 'Botón de opción',\n select: 'Desplegable',\n listbox: 'Lista',\n button: 'Botón',\n signature: 'Campo de firma',\n // The Form mode's design switch, which opens the form designer's sidebar.\n design: 'Diseño de formulario',\n },\n redact: {\n mark: 'Marcar para censurar',\n applyAll: 'Aplicar censuras',\n clearAll: 'Borrar marcas',\n },\n undo: 'Deshacer',\n redo: 'Rehacer',\n page: {\n next: 'Página siguiente',\n previous: 'Página anterior',\n first: 'Primera página',\n last: 'Última página',\n goTo: 'Ir a la página',\n },\n find: 'Buscar',\n shortcuts: 'Atajos de teclado',\n notAllowed: {\n default: '{label} no está permitido',\n 'annotations-create': 'No está permitido añadir anotaciones',\n 'doc-annotate-modify': 'No está permitido cambiar anotaciones',\n 'doc-annotate-read': 'No está permitido ver anotaciones',\n 'doc-attachments-modify': 'No se permite agregar archivos',\n 'doc-download': 'No está permitido descargar',\n 'doc-forms-modify': 'No está permitido editar campos de formulario',\n 'doc-outline-modify': 'No se permite cambiar el esquema',\n 'doc-pages-assemble': 'No se permite cambiar las páginas',\n 'doc-print': 'No está permitido imprimir',\n 'doc-text-copy': 'No está permitido copiar',\n 'doc-text-search': 'No está permitido buscar',\n },\n attachment: {\n add: 'Agregar archivo',\n save: 'Guardar',\n goTo: 'Ir a la página',\n delete: 'Eliminar',\n more: 'Más opciones',\n },\n outline: {\n add: 'Añadir elemento',\n addChild: 'Añadir elemento secundario',\n rename: 'Cambiar nombre',\n setDestination: 'Establecer destino en la vista actual',\n properties: 'Propiedades…',\n delete: 'Eliminar',\n expandAll: 'Expandir todo',\n collapseAll: 'Contraer todo',\n more: 'Más opciones',\n },\n // The page commands, in the Pages mode and a page's menu.\n pages: {\n rotateClockwise: 'Girar la página en sentido horario',\n rotateCounterclockwise: 'Girar la página en sentido antihorario',\n delete: 'Eliminar páginas',\n duplicate: 'Duplicar páginas',\n insertBlank: 'Insertar página en blanco',\n insertFile: 'Insertar desde archivo…',\n extract: 'Extraer páginas',\n selectAll: 'Seleccionar todas las páginas',\n more: 'Opciones de página',\n },\n turnedOff: '{label} no está disponible',\n },\n passwordPrompt: {\n title: 'Contraseña requerida',\n required: 'Este documento está protegido con contraseña. Introdúcela para abrirlo.',\n incorrect: 'La contraseña es incorrecta. Inténtalo de nuevo.',\n incorrectWarning: 'Contraseña incorrecta',\n label: 'Contraseña',\n placeholder: 'Introduce la contraseña',\n cancel: 'Cancelar',\n open: 'Abrir',\n opening: 'Abriendo…',\n },\n dropToOpen: {\n label: 'Suelta un PDF para abrirlo',\n },\n documentError: {\n title: 'No se pudo abrir el documento',\n unknown: 'El documento no se pudo abrir.',\n notFound: 'No se encontró el archivo.',\n notAllowed: 'No tienes acceso a este documento.',\n damaged: 'Este archivo no es un PDF o está dañado.',\n unsupported: 'Este visor no puede abrir este tipo de documento.',\n retry: 'Reintentar',\n close: 'Cerrar documento',\n },\n tabs: {\n close: 'Cerrar {name}',\n loading: 'Cargando',\n untitled: 'Documento {id}',\n },\n closeUnsaved: {\n title: '¿Cerrar sin guardar?',\n body: '«{name}» tiene cambios que no se han descargado. Se perderán.',\n cancel: 'Cancelar',\n close: 'Cerrar sin guardar',\n },\n viewOnly: {\n label: 'Solo lectura',\n turnedOff: 'Las herramientas que cambian este documento están desactivadas',\n notAllowed: 'Puedes leer este documento, pero no cambiarlo',\n },\n panel: {\n close: 'Cerrar',\n resize: 'Cambiar el ancho de {title}',\n },\n menu: {\n back: 'Atrás',\n },\n shortcuts: {\n document: 'Documento',\n viewing: 'Visualización',\n editing: 'Edición',\n other: 'Otros',\n },\n goToPage: {\n go: 'Ir',\n },\n print: {\n title: 'Imprimir',\n pages: 'Páginas',\n allPages: 'Todas las páginas',\n currentPage: 'Página actual',\n range: 'Personalizado',\n rangeLabel: 'Páginas que imprimir',\n rangePlaceholder: 'p. ej. 1-3, 5',\n rangeInvalid: 'Números de página del 1 al {total}, por ejemplo 1-3, 5',\n annotations: 'Imprimir anotaciones',\n preparing: 'Preparando…',\n preparingPage: 'Preparando la página {page} de {total}…',\n ready: 'Listo para imprimir.',\n images: 'Las páginas se imprimen como imágenes a {dpi} DPI.',\n lowResolution: 'Este documento solo permite imprimir en baja resolución ({dpi} DPI).',\n failed: 'No se pudo preparar la impresión.',\n cancel: 'Cancelar',\n print: 'Imprimir',\n },\n panels: {\n thumbnails: 'Miniaturas',\n outline: 'Esquema',\n attachments: 'Adjuntos',\n search: 'Buscar',\n comments: 'Comentarios',\n style: 'Estilo',\n stamps: 'Sellos',\n signatures: 'Firmas',\n redaction: 'Censuras',\n measurement: 'Mediciones',\n formDesign: 'Diseño de formulario',\n switch: 'Cambiar de panel',\n },\n annotation: {\n comment: 'Comentario',\n highlight: 'Resaltado',\n underline: 'Subrayado',\n squiggly: 'Ondulado',\n strikeout: 'Tachado',\n square: 'Cuadrado',\n circle: 'Círculo',\n line: 'Línea',\n polygon: 'Polígono',\n polyline: 'Polilínea',\n ink: 'Tinta',\n freeText: 'Texto',\n stamp: 'Sello',\n caret: 'Intercalación',\n redact: 'Censura',\n fileAttachment: 'Adjunto',\n // The style panel's labels, as the annotation kinds name them (`labelKey`), by wording:\n // one field is called different things by different kinds.\n style: {\n opacity: 'Opacidad',\n stroke: 'Trazo',\n fill: 'Relleno',\n color: 'Color',\n strokeWidth: 'Grosor del trazo',\n border: 'Borde',\n borderStyle: 'Estilo de borde',\n borderColor: 'Color de borde',\n borderWidth: 'Grosor de borde',\n background: 'Fondo',\n outline: 'Contorno',\n lineEndings: 'Extremos de línea',\n blendMode: 'Modo de fusión',\n font: 'Fuente',\n fontSize: 'Tamaño de fuente',\n textColor: 'Color del texto',\n bold: 'Negrita',\n italic: 'Cursiva',\n underline: 'Subrayado',\n align: 'Alineación',\n alignment: 'Alineación',\n label: 'Etiqueta',\n labelFont: 'Fuente de la etiqueta',\n labelSize: 'Tamaño de la etiqueta',\n labelColor: 'Color de la etiqueta',\n icon: 'Icono',\n link: 'Enlace',\n },\n // The annotation flags (`/F`).\n flags: {\n print: 'Imprimir',\n hidden: 'Oculta',\n noView: 'Sin vista',\n toggleNoView: 'Alternar sin vista',\n readOnly: 'Solo lectura',\n locked: 'Bloqueada',\n lockedContents: 'Contenido bloqueado',\n noZoom: 'Sin zoom',\n noRotate: 'Sin rotación',\n invisible: 'Invisible',\n },\n borderStyles: { solid: 'Sólido', dashed: 'Discontinuo', cloudy: 'Nube' },\n lineEndings: {\n none: 'Ninguno',\n square: 'Cuadrado',\n circle: 'Círculo',\n diamond: 'Rombo',\n openArrow: 'Flecha abierta',\n closedArrow: 'Flecha cerrada',\n butt: 'Tope',\n reverseOpenArrow: 'Flecha abierta inversa',\n reverseClosedArrow: 'Flecha cerrada inversa',\n slash: 'Barra diagonal',\n },\n blendModes: {\n normal: 'Normal',\n multiply: 'Multiplicar',\n screen: 'Trama',\n overlay: 'Superponer',\n darken: 'Oscurecer',\n lighten: 'Aclarar',\n colorDodge: 'Sobreexponer color',\n colorBurn: 'Subexponer color',\n hardLight: 'Luz fuerte',\n softLight: 'Luz suave',\n difference: 'Diferencia',\n exclusion: 'Exclusión',\n hue: 'Tono',\n saturation: 'Saturación',\n color: 'Color',\n luminosity: 'Luminosidad',\n },\n // The standard PDF fonts, by their names: a language may keep them as they are.\n fonts: {\n courier: 'Courier',\n courierBold: 'Courier Bold',\n courierBoldOblique: 'Courier Bold Oblique',\n courierOblique: 'Courier Oblique',\n helvetica: 'Helvetica',\n helveticaBold: 'Helvetica Bold',\n helveticaBoldOblique: 'Helvetica Bold Oblique',\n helveticaOblique: 'Helvetica Oblique',\n timesRoman: 'Times Roman',\n timesBold: 'Times Bold',\n timesBoldItalic: 'Times Bold Italic',\n timesItalic: 'Times Italic',\n symbol: 'Symbol',\n zapfDingbats: 'Zapf Dingbats',\n },\n alignments: { left: 'Izquierda', center: 'Centro', right: 'Derecha' },\n noteIcons: {\n comment: 'Comentario',\n key: 'Clave',\n note: 'Nota',\n help: 'Ayuda',\n newParagraph: 'Párrafo nuevo',\n paragraph: 'Párrafo',\n insert: 'Insertar',\n },\n attachmentIcons: {\n pushPin: 'Chincheta',\n paperclip: 'Clip',\n graph: 'Gráfico',\n tag: 'Etiqueta',\n },\n },\n // A form field's settings, as the form plugin names them (`labelKey`).\n form: {\n settings: {\n name: 'Nombre',\n tooltip: 'Información sobre herramientas',\n required: 'Obligatorio',\n readOnly: 'Solo lectura',\n noExport: 'No exportar',\n defaultValue: 'Valor predeterminado',\n maxLength: 'Longitud máxima',\n multiline: 'Multilínea',\n password: 'Contraseña',\n comb: 'Un carácter por casilla',\n radiosInUnison: 'Los botones con el mismo valor se activan a la vez',\n keepOneOn: 'Mantener uno activado',\n options: 'Opciones',\n allowTyping: 'Permitir escribir',\n multiSelect: 'Selección múltiple',\n },\n },\n // A thumbnail's tooltip.\n thumbnails: { page: 'Página {page}' },\n // The form designer's sidebar: the fields by page, and the selected one's buttons.\n formDesign: {\n empty: 'Aún no hay campos. Elige una herramienta de campo para añadir uno.',\n page: 'Página {page}',\n allFields: 'Todos los campos',\n buttons: 'Botones',\n boxes: 'Casillas',\n box: 'Casilla {number}',\n addButton: 'Añadir botón',\n addBox: 'Añadir casilla',\n },\n // The style panel's own words around the properties.\n stylePanel: {\n mixed: '(mixto)',\n // A color swatch that takes the color away.\n transparent: 'Transparente',\n lineStart: 'Inicio',\n lineEnd: 'Fin',\n empty: 'Elige una herramienta de dibujo o selecciona una anotación para editar su estilo.',\n selected: 'Seleccionadas: {count}',\n toolDefaults: 'Valores predeterminados: {tool}',\n defaults: 'Valores predeterminados',\n },\n // The flags section of the style panel: its title, and what each flag does.\n annotationFlags: {\n title: 'Indicadores (/F)',\n print: 'Incluir al imprimir la página',\n hidden: 'Oculta en todas partes: pantalla, clics, impresión',\n noView: 'Oculta en pantalla, puede imprimirse',\n toggleNoView: 'Mostrar una anotación sin vista mientras está seleccionada',\n readOnly: 'Visible, pero no admite clics',\n locked: 'No se puede mover / redimensionar / eliminar / cambiar el estilo',\n lockedContents: 'El texto no puede cambiar; la geometría sí',\n noZoom: 'Tamaño fijo en pantalla (anclada arriba a la izquierda)',\n noRotate: 'Se mantiene derecha al girar la página',\n invisible: 'Heredado: ocultar subtipos desconocidos',\n },\n // The link editor over a selected annotation.\n attachments: {\n loading: 'Cargando adjuntos…',\n failed: 'No se pudieron leer los adjuntos.',\n empty: 'Este documento no tiene archivos adjuntos',\n drop: 'Suelte archivos para adjuntarlos',\n dropHint: 'O suelte archivos aquí',\n adding: 'Agregando…',\n onPage: 'Página {page}',\n count: '{count} archivo',\n countPlural: '{count} archivos',\n },\n outline: {\n filter: 'Filtrar esquema',\n loading: 'Cargando esquema…',\n failed: 'No se pudo leer el esquema.',\n empty: 'Este documento no tiene esquema',\n noMatches: 'Ningún elemento coincide',\n incomplete: 'No se pudo leer parte del esquema.',\n untitled: 'Sin título',\n properties: {\n title: 'Propiedades del elemento',\n name: 'Título',\n color: 'Color',\n noColor: 'Ninguno',\n customColor: 'Color personalizado',\n bold: 'Negrita',\n italic: 'Cursiva',\n open: 'Expandido al abrir el documento',\n target: 'Destino',\n targetNone: 'Ninguno',\n targetView: 'Vista actual',\n targetNamed: 'Acción de página',\n targetKept: 'Se mantiene igual',\n keptNote: 'Este elemento ejecuta un script o abre otro archivo. No se puede cambiar aquí.',\n fit: 'Ajuste',\n fitKept: 'Como está',\n save: 'Guardar',\n cancel: 'Cancelar',\n },\n },\n linkEditor: {\n toUrl: 'Enlazar a una URL',\n url: 'URL',\n toPage: 'Enlazar a una página',\n page: 'Página',\n urlPlaceholder: 'https://…',\n pagePlaceholder: 'Número de página',\n add: 'Añadir enlace',\n update: 'Actualizar enlace',\n },\n demo: {\n starting: 'Iniciando el visor…',\n opening: 'Abriendo el documento…',\n more: 'Más',\n searchPlaceholder: 'Buscar en el documento…',\n searchCaseSensitive: 'Distinguir mayúsculas',\n searchWholeWord: 'Palabra completa',\n searchRegex: 'Expresión regular',\n searchSearching: 'Buscando…',\n searchResults: '{count} resultados encontrados',\n searchNoResults: 'Sin resultados',\n searchPrevious: 'Resultado anterior',\n searchNext: 'Resultado siguiente',\n searchPage: 'Página {page}',\n commentsForbidden: 'No tienes acceso a los comentarios de este documento.',\n commentsLoading: 'Cargando comentarios…',\n commentsError: 'No se pudieron cargar los comentarios.',\n commentsRetry: 'Reintentar',\n commentsEmpty: 'Aún no hay comentarios. Usa la herramienta de nota para iniciar un hilo.',\n commentsEmptyReadOnly: 'Este documento no tiene comentarios.',\n commentsAnonymous: 'Desconocido',\n commentsPage: 'Página {page}',\n commentCount: '{count} comentario',\n commentCountPlural: '{count} comentarios',\n commentsReply: 'Responder',\n commentsReplyPlaceholder: 'Responder…',\n commentsAddPlaceholder: 'Añadir un comentario…',\n commentsDelete: 'Eliminar comentario',\n commentsDeleteThread: 'Eliminar hilo',\n commentsEdit: 'Editar comentario',\n commentsStatus: 'Estado',\n commentsStatusNone: 'Sin estado',\n commentsStatusAccepted: 'Aceptado',\n commentsStatusRejected: 'Rechazado',\n commentsStatusCancelled: 'Cancelado',\n commentsStatusCompleted: 'Completado',\n empty: 'Aquí todavía no hay nada en este panel de demostración.',\n page: 'Página {current} de {total}',\n goToPage: 'Ir a la página',\n cancel: 'Cancelar',\n pageBadge: 'pág. {page}',\n redactionEmpty:\n 'No hay censuras pendientes. Usa la herramienta Censurar para marcar texto o áreas.',\n redactionArea: 'Marca de área',\n redactionText: 'Marca de texto',\n redactionRemove: 'Quitar marca',\n redactConfirmTitle: '¿Aplicar censuras?',\n redactConfirmBody:\n 'Eliminar permanentemente el contenido bajo {count} marcas de censura. No se puede deshacer.',\n redactConfirmCollateral: 'También se eliminarán {count} otras anotaciones.',\n redactApply: 'Aplicar',\n redactApplying: 'Aplicando…',\n formatLabel: 'Formato',\n fieldSettingsTitle: 'Campo',\n fieldOptionLabel: 'Etiqueta',\n fieldOptionValue: 'Valor',\n fieldOptionAdd: 'Añadir opción',\n fieldOptionRemove: 'Quitar opción',\n fieldNone: 'Ninguno',\n redactLabelTitle: 'Etiqueta de censura',\n redactLabelPlaceholder: 'p. ej. CENSURADO',\n redactLabelRepeat: 'Repetir etiqueta en toda la región',\n stampsAll: 'Todos los sellos',\n stampsLoading: 'Cargando sellos…',\n stampsEmpty: 'Aún no hay sellos. Importa un PDF para convertir cada página en un sello.',\n stampsRemoveStamp: 'Quitar sello',\n stampsArmedHint: 'Haz clic en una página para colocar el sello.',\n stampsImport: 'Importar PDF…',\n stampsImporting: 'Importando…',\n stampsImportHint:\n 'Importa un PDF como biblioteca de sellos: cada página se convierte en un sello.',\n stampsRemoveLibrary: 'Quitar biblioteca',\n stampsExportLibrary: 'Exportar biblioteca como PDF',\n stampsCustomLibrary: 'Mis sellos',\n stampsCustomLabel: 'Sello personalizado',\n stampsError: 'No se pudieron cargar los sellos integrados.',\n stampsArmError: 'No se pudo activar ese sello.',\n stampsImportError: 'No se pudo importar ese PDF como biblioteca de sellos.',\n quickStampsLabel: 'Sellos rápidos',\n signaturesEmpty: 'Aún no hay firmas. Crea una para firmar.',\n signaturesNew: 'Nueva firma…',\n signaturesArmedHint:\n 'Haz clic en un campo de firma para firmarlo, o en cualquier parte de una página para colocar la marca.',\n signaturesTargetHint: 'Elige una marca para el campo seleccionado.',\n signaturesInDocument: 'En este documento',\n signaturesNone: 'Este documento no tiene campos de firma.',\n signaturesValidate: 'Validar',\n signaturesValidating: 'Validando…',\n signaturesSigned: 'Firmado',\n signaturesUnsigned: 'Sin firmar',\n signaturesRename: 'Renombrar',\n signaturesRemove: 'Quitar',\n signaturesExport: 'Exportar como PDF',\n signaturesAddInitials: 'Añadir iniciales',\n signatureLabel: 'Firma',\n initialsLabel: 'Iniciales',\n makerTitle: 'Nueva firma',\n makerName: 'Nombre',\n makerNamePlaceholder: 'Tu nombre',\n makerDraw: 'Dibujar',\n makerType: 'Escribir',\n makerUpload: 'Subir',\n makerTypePlaceholder: 'Escribe tu nombre',\n makerFont: 'Fuente',\n makerUploadHint: 'Elige un PNG, JPEG o PDF de una página',\n makerClear: 'Borrar',\n makerOptional: '(opcional)',\n makerSave: 'Guardar',\n makerSaving: 'Guardando…',\n makerError: 'No se pudo guardar la firma.',\n signTitle: 'Firmar este campo',\n signReason: 'Motivo',\n signLocation: 'Lugar',\n signKind: 'Qué puede cambiar después',\n signKindApproval:\n 'Firma de aprobación: rellenar formularios y más firmas siguen siendo válidos',\n signKindCertifyAnnotate: 'Certificar: permitir comentarios, rellenar formularios y firmas',\n signKindCertifyFill: 'Certificar: permitir solo rellenar formularios y firmas',\n signKindCertifyLocked: 'Certificar: no permitir cambios',\n signButton: 'Firmar',\n signSigning: 'Firmando…',\n signFill: 'Colocar sin firmar',\n signError: 'No se pudo firmar el campo.',\n inspectTitle: 'Firma',\n inspectSigner: 'Firmado por',\n inspectReason: 'Motivo',\n inspectLocation: 'Lugar',\n inspectTime: 'Fecha',\n inspectIntegrity: 'Documento',\n inspectCryptography: 'Firma',\n inspectTrust: 'Firmante',\n inspectChanges: 'Cambios posteriores',\n inspectDownload: 'Descargar versión firmada',\n verdictValid: 'Válida',\n verdictValidUntrusted: 'Válida, firmante no confiable',\n verdictInvalid: 'No válida: modificado después de firmar',\n verdictWillInvalidate: 'Válida, no válida al guardar',\n signaturesInvalidating:\n 'Este cambio invalidará {field} al guardar el documento. Deshazlo para conservar la firma.',\n verdictIndeterminate: 'No se pudo verificar',\n verdictUnchanged: 'Ninguno',\n verdictRestored: 'Modificado y luego restaurado',\n inspectLaterRevisions: 'Revisiones tras la firma',\n verdictPermitted: 'Permitidos',\n verdictForbidden: 'No permitidos',\n },\n },\n};\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import { n as FORM_DESIGN_TOOL, u as isFormDesignTool } from "./commands-BmgxhJ8B.js";
2
- import { n as Icon } from "./icons-BrK5iVL8.js";
1
+ import { d as isFormDesignTool, n as FORM_DESIGN_TOOL } from "./commands-BkgLP3Om.js";
2
+ import { n as Icon } from "./icons-7dB0Y1ct.js";
3
3
  import { t as useLabel } from "./labels-C6_i87Oj.js";
4
4
  import { useEffect, useMemo, useState } from "react";
5
5
  import { useOptionalCapability, useOptionalSelector, usePageList } from "@embedpdf/react/runtime";
@@ -415,4 +415,4 @@ function Buttons({ field }) {
415
415
  //#endregion
416
416
  export { FormDesignPanel };
417
417
 
418
- //# sourceMappingURL=form-design-panel-vWWU9uB-.js.map
418
+ //# sourceMappingURL=form-design-panel-CgV_5YWC.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"form-design-panel-vWWU9uB-.js","names":[],"sources":["../src/ui/field-settings.tsx","../src/ui/form-design-panel.tsx"],"sourcesContent":["/**\n * A field's settings, as the form plugin describes them (`getFieldSettings`),\n * written with `form.update()`: the form designer's sidebar shows them for the\n * selected field. Nothing here knows a field family: the description says what\n * to draw.\n */\nimport {\n FormToken,\n type FormFieldDTO,\n type FormFieldPatch,\n type FormFieldSetting,\n} from '@embedpdf/react/form';\nimport { useT } from '@embedpdf/react/i18n';\nimport { useOptionalCapability, useOptionalSelector } from '@embedpdf/react/runtime';\nimport { useEffect, useState } from 'react';\n\nimport { useLabel } from './labels';\n\nconst inputClass = 'border-border bg-surface text-fg w-full rounded-md border px-2 py-1.5 text-sm';\n\n/** One option of a dropdown or a list, as its settings hold it. */\ninterface Option {\n readonly label: string;\n readonly value: string;\n}\n\n/** The field's settings, each with the control its description names. */\nexport function FieldSettings({ field }: { field: FormFieldDTO }) {\n const form = useOptionalCapability(FormToken);\n const settings = useOptionalSelector(\n FormToken,\n (capability) => capability.getFieldSettings(field.ref),\n null,\n );\n if (!form || !settings || !form.canDesign()) return null;\n const write = (patch: Record<string, unknown>) =>\n void form.update(field.ref, patch as FormFieldPatch).catch(() => undefined);\n\n return (\n <div>\n {settings.properties.map((spec) => (\n <SettingControl\n key={`${spec.key}:${spec.control}`}\n fieldKey={JSON.stringify(field.ref)}\n spec={spec}\n value={settings.values[spec.key]}\n onChange={(value) => write({ [spec.key]: value })}\n />\n ))}\n </div>\n );\n}\n\nfunction SettingControl({\n fieldKey,\n spec,\n value,\n onChange,\n}: {\n /** The field it edits: a draft starts over when the selection moves to another field. */\n fieldKey: string;\n spec: FormFieldSetting;\n value: unknown;\n onChange: (value: unknown) => void;\n}) {\n const t = useT();\n const label = useLabel();\n switch (spec.control) {\n case 'flag':\n return (\n <label className=\"text-fg mb-2 flex items-center gap-2 text-sm\">\n <input\n type=\"checkbox\"\n checked={value === true}\n onChange={(event) => onChange(event.target.checked)}\n />\n {label(spec)}\n </label>\n );\n case 'text':\n return (\n <Setting label={label(spec)}>\n <CommittedInput\n key={fieldKey}\n value={typeof value === 'string' ? value : ''}\n onCommit={onChange}\n />\n </Setting>\n );\n case 'number':\n return (\n <Setting label={label(spec)}>\n <CommittedInput\n key={fieldKey}\n type=\"number\"\n min={spec.min}\n placeholder={t('demo.fieldNone')}\n value={typeof value === 'number' ? String(value) : ''}\n onCommit={(text) => onChange(text === '' ? null : Math.max(spec.min, Number(text)))}\n />\n </Setting>\n );\n case 'choice':\n return spec.free ? (\n <Setting label={label(spec)}>\n <CommittedInput\n key={fieldKey}\n list={`${fieldKey}-choices`}\n value={typeof value === 'string' ? value : ''}\n onCommit={onChange}\n />\n <datalist id={`${fieldKey}-choices`}>\n {spec.options.map((option) => (\n <option key={option} value={option} />\n ))}\n </datalist>\n </Setting>\n ) : (\n <Setting label={label(spec)}>\n <select\n className={inputClass}\n value={typeof value === 'string' ? value : ''}\n onChange={(event) => onChange(event.target.value === '' ? null : event.target.value)}\n >\n <option value=\"\">{t('demo.fieldNone')}</option>\n {spec.options.map((option) => (\n <option key={option} value={option}>\n {option}\n </option>\n ))}\n </select>\n </Setting>\n );\n case 'choices': {\n const chosen = new Set(Array.isArray(value) ? (value as string[]) : []);\n return (\n <Setting label={label(spec)}>\n {spec.options.map((option) => (\n <label key={option} className=\"text-fg mb-1 flex items-center gap-2 text-sm\">\n <input\n type=\"checkbox\"\n checked={chosen.has(option)}\n onChange={(event) =>\n onChange(\n spec.options.filter((each) =>\n each === option ? event.target.checked : chosen.has(each),\n ),\n )\n }\n />\n {option}\n </label>\n ))}\n </Setting>\n );\n }\n case 'options':\n return (\n <Setting label={label(spec)}>\n <OptionsEditor\n key={fieldKey}\n options={Array.isArray(value) ? (value as Option[]) : []}\n onCommit={onChange}\n />\n </Setting>\n );\n }\n}\n\nfunction Setting({ label, children }: { label: string; children: React.ReactNode }) {\n return (\n <section className=\"mb-3\">\n <span className=\"text-fg mb-1 block text-sm font-medium\">{label}</span>\n {children}\n </section>\n );\n}\n\n/** A text input that writes on blur or Enter, and keeps what's typed until then. */\nfunction CommittedInput({\n value,\n onCommit,\n ...input\n}: {\n value: string;\n onCommit: (value: string) => void;\n} & Omit<React.InputHTMLAttributes<HTMLInputElement>, 'value' | 'onChange'>) {\n const [draft, setDraft] = useState<string | null>(null);\n useEffect(() => setDraft(null), [value]);\n const commit = () => {\n if (draft === null || draft === value) return;\n onCommit(draft);\n };\n return (\n <input\n {...input}\n className={inputClass}\n value={draft ?? value}\n onChange={(event) => setDraft(event.target.value)}\n onBlur={commit}\n onKeyDown={(event) => event.key === 'Enter' && commit()}\n />\n );\n}\n\n/** A dropdown's or list's options, each a label and a value; written as a whole on each edit. */\nfunction OptionsEditor({\n options,\n onCommit,\n}: {\n options: readonly Option[];\n onCommit: (options: Option[]) => void;\n}) {\n const t = useT();\n const rows = options.map((option) => ({ label: option.label, value: option.value }));\n const replace = (at: number, row: Option | null) =>\n onCommit(\n row === null\n ? rows.filter((_, index) => index !== at)\n : rows.map((each, index) => (index === at ? row : each)),\n );\n return (\n <div>\n {rows.map((row, at) => (\n <div key={`${at}:${row.value}`} className=\"mb-1 flex gap-1\">\n <CommittedInput\n aria-label={t('demo.fieldOptionLabel')}\n value={row.label}\n onCommit={(label) => replace(at, { ...row, label })}\n />\n <CommittedInput\n aria-label={t('demo.fieldOptionValue')}\n value={row.value}\n onCommit={(value) => replace(at, { ...row, value })}\n />\n <button\n type=\"button\"\n title={t('demo.fieldOptionRemove')}\n className=\"text-fg-muted hover:text-fg px-1\"\n onClick={() => replace(at, null)}\n >\n ×\n </button>\n </div>\n ))}\n <button\n type=\"button\"\n className=\"text-accent text-sm\"\n onClick={() => {\n const label = `Option ${rows.length + 1}`;\n onCommit([...rows, { label, value: label }]);\n }}\n >\n {t('demo.fieldOptionAdd')}\n </button>\n </div>\n );\n}\n","/**\n * The form designer's sidebar (`form-design`, which `form:design` opens): what the form's\n * fields are. With no field selected it lists them by page, and a click selects one and\n * scrolls to it; with one selected it shows its settings and, for a radio group or a checkbox,\n * its buttons, with a + that adds one next in line (`form.addWidget`). How a field looks is the\n * style panel's.\n */\nimport { AnnotationToken, useAnnotationState } from '@embedpdf/react/annotation';\nimport {\n FormToken,\n type FormFieldDTO,\n type FormFieldFamily,\n type WidgetAnnotation,\n} from '@embedpdf/react/form';\nimport { useT } from '@embedpdf/react/i18n';\nimport { InteractionToken } from '@embedpdf/react/interaction';\nimport { useOptionalCapability, useOptionalSelector, usePageList } from '@embedpdf/react/runtime';\nimport { useStage } from '@embedpdf/react/stage';\nimport { useMemo } from 'react';\n\nimport { FORM_DESIGN_TOOL, isFormDesignTool } from '../config/commands';\nimport { FieldSettings } from './field-settings';\nimport { Icon } from './icons';\n\n/** Each family's icon and name, as its field tool shows them. */\nconst FAMILIES: Readonly<Partial<Record<FormFieldFamily, { icon: string; labelKey: string }>>> = {\n text: { icon: 'formTextfield', labelKey: 'commands.form.textfield' },\n checkbox: { icon: 'formCheckbox', labelKey: 'commands.form.checkbox' },\n radio: { icon: 'formRadio', labelKey: 'commands.form.radio' },\n combobox: { icon: 'formSelect', labelKey: 'commands.form.select' },\n listbox: { icon: 'formListbox', labelKey: 'commands.form.listbox' },\n pushbutton: { icon: 'formButton', labelKey: 'commands.form.button' },\n signature: { icon: 'signature', labelKey: 'commands.form.signature' },\n};\n\nconst NO_FIELDS: readonly FormFieldDTO[] = [];\nconst NO_WIDGETS: readonly WidgetAnnotation[] = [];\n\n/** A widget's object number, the key its rows and its selection share. */\nconst numberOf = (widget: WidgetAnnotation): number =>\n widget.ref.kind === 'objectNumber' ? widget.ref.objectNumber : -1;\n\n/** The form's own actions: select a widget and show it, design on first if it was off. */\nfunction useFormDesign() {\n const annotation = useOptionalCapability(AnnotationToken);\n const interaction = useOptionalCapability(InteractionToken);\n const stage = useStage();\n const activeTool = useOptionalSelector(\n InteractionToken,\n (tools) => tools.getActiveToolId(),\n null,\n );\n return {\n select(widget: WidgetAnnotation) {\n // The widgets are lent only while a form is designed.\n if (!isFormDesignTool(activeTool)) interaction?.activateTool(FORM_DESIGN_TOOL);\n annotation?.selection.set([widget.ref]);\n stage.reveal(widget.page, { rect: widget.box });\n },\n clear() {\n annotation?.selection.set([]);\n },\n };\n}\n\nexport function FormDesignPanel() {\n const form = useOptionalCapability(FormToken);\n const selected = useOptionalSelector(\n FormToken,\n (capability) => capability.getSelectedField(),\n null,\n );\n if (!form) return null;\n return selected ? <SelectedField field={selected} /> : <FieldList />;\n}\n\n/** Every field of the form, by page, in reading order. */\nfunction FieldList() {\n const t = useT();\n const design = useFormDesign();\n const pages = usePageList();\n const form = useOptionalCapability(FormToken);\n const fields = useOptionalSelector(FormToken, (capability) => capability.list(), NO_FIELDS);\n const groups = useMemo(() => {\n const indexOf = new Map(pages.map((page) => [page.ref.objectNumber, page.index]));\n const rows = fields.flatMap((field) => {\n const place = form?.getWidgets(field.ref)[0];\n const index = place ? indexOf.get(place.page.objectNumber) : undefined;\n return place && index !== undefined ? [{ field, place, index }] : [];\n });\n rows.sort(\n (left, right) =>\n left.index - right.index ||\n left.place.box.y - right.place.box.y ||\n left.place.box.x - right.place.box.x,\n );\n const byPage = new Map<number, typeof rows>();\n for (const row of rows) byPage.set(row.index, [...(byPage.get(row.index) ?? []), row]);\n return [...byPage];\n }, [fields, form, pages]);\n\n if (groups.length === 0) {\n return (\n <div className=\"flex flex-col items-center gap-3 px-4 py-10 text-center\">\n <Icon name=\"formDesign\" size={32} className=\"text-fg-muted\" />\n <p className=\"text-fg-muted text-sm\">{t('formDesign.empty')}</p>\n </div>\n );\n }\n return (\n <div className=\"min-h-0 flex-1 overflow-y-auto p-2\">\n {groups.map(([index, rows]) => (\n <section key={index} className=\"mb-3\">\n <h3 className=\"text-fg-muted px-2 pb-1 text-[11px] font-semibold uppercase tracking-wide\">\n {t('formDesign.page', { params: { page: index + 1 } })}\n </h3>\n <ul className=\"flex flex-col\">\n {rows.map(({ field, place }) => {\n const family = FAMILIES[field.family];\n return (\n <li key={field.name}>\n <button\n type=\"button\"\n onClick={() => design.select(place)}\n className=\"hover:bg-hover flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-start\"\n >\n <Icon\n name={family?.icon ?? 'formTextfield'}\n size={16}\n className=\"text-fg-muted shrink-0\"\n />\n <span className=\"text-fg min-w-0 flex-1 truncate text-sm\">{field.name}</span>\n {family && <span className=\"sr-only\">{t(family.labelKey)}</span>}\n </button>\n </li>\n );\n })}\n </ul>\n </section>\n ))}\n </div>\n );\n}\n\n/** The selected field: its settings and, for a radio group or a checkbox, its buttons. */\nfunction SelectedField({ field }: { field: FormFieldDTO }) {\n const t = useT();\n const design = useFormDesign();\n const family = FAMILIES[field.family];\n return (\n <div className=\"min-h-0 flex-1 overflow-y-auto p-4\">\n <button\n type=\"button\"\n onClick={design.clear}\n className=\"text-accent mb-3 flex items-center gap-1 text-sm\"\n >\n <Icon name=\"chevronLeft\" size={14} />\n {t('formDesign.allFields')}\n </button>\n <p className=\"text-fg mb-4 flex items-center gap-2 text-sm font-semibold\">\n <Icon name={family?.icon ?? 'formTextfield'} size={16} className=\"text-fg-muted shrink-0\" />\n <span className=\"min-w-0 truncate\">{field.name}</span>\n </p>\n <p className=\"text-fg-muted mb-3 text-[11px] font-semibold uppercase tracking-wide\">\n {t('demo.fieldSettingsTitle')}\n </p>\n <FieldSettings field={field} />\n {(field.family === 'radio' || field.family === 'checkbox') && <Buttons field={field} />}\n </div>\n );\n}\n\n/** A radio group's or a checkbox's buttons, each selectable, and a + for one more. */\nfunction Buttons({ field }: { field: FormFieldDTO & { family: 'radio' | 'checkbox' } }) {\n const t = useT();\n const design = useFormDesign();\n const form = useOptionalCapability(FormToken);\n const places = useOptionalSelector(\n FormToken,\n (capability) => capability.getWidgets(field.ref),\n NO_WIDGETS,\n );\n const chosen = useAnnotationState((state) => state.selected);\n const isChosen = (place: WidgetAnnotation) =>\n chosen.some(\n (record) => record.ref.kind === 'objectNumber' && record.ref.objectNumber === numberOf(place),\n );\n const radio = field.family === 'radio';\n const add = async () => {\n if (!form) return;\n const { widget } = await form.addWidget(field.ref);\n design.select(widget);\n };\n return (\n <section className=\"border-border-subtle mt-4 border-t pt-4\">\n <p className=\"text-fg-muted mb-2 text-[11px] font-semibold uppercase tracking-wide\">\n {t(radio ? 'formDesign.buttons' : 'formDesign.boxes')}\n </p>\n <ul className=\"mb-2 flex flex-col\">\n {places.map((place, at) => {\n const widget = field.widgets.find((each) => each.objectNumber === numberOf(place));\n return (\n <li key={numberOf(place)}>\n <button\n type=\"button\"\n aria-pressed={isChosen(place)}\n onClick={() => design.select(place)}\n className={`hover:bg-hover flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-start text-sm ${\n isChosen(place) ? 'bg-selected text-accent' : 'text-fg'\n }`}\n >\n <Icon name={radio ? 'formRadio' : 'formCheckbox'} size={14} className=\"shrink-0\" />\n <span className=\"min-w-0 flex-1 truncate\">\n {radio && widget && 'exportValue' in widget\n ? widget.exportValue\n : t('formDesign.box', { params: { number: at + 1 } })}\n </span>\n </button>\n </li>\n );\n })}\n </ul>\n <button\n type=\"button\"\n onClick={() => void add().catch(() => undefined)}\n className=\"text-accent flex items-center gap-1 text-sm\"\n >\n <Icon name=\"plus\" size={14} />\n {t(radio ? 'formDesign.addButton' : 'formDesign.addBox')}\n </button>\n </section>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAkBA,MAAM,aAAa;;AASnB,SAAgB,cAAc,EAAE,SAAkC;CAChE,MAAM,OAAO,sBAAsB,SAAS;CAC5C,MAAM,WAAW,oBACf,YACC,eAAe,WAAW,iBAAiB,MAAM,GAAG,GACrD,IACF;CACA,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,UAAU,GAAG,OAAO;CACpD,MAAM,SAAS,UACb,KAAK,KAAK,OAAO,MAAM,KAAK,KAAuB,CAAC,CAAC,YAAY,KAAA,CAAS;CAE5E,OACE,oBAAC,OAAD,EAAA,UACG,SAAS,WAAW,KAAK,SACxB,oBAAC,gBAAD;EAEE,UAAU,KAAK,UAAU,MAAM,GAAG;EAC5B;EACN,OAAO,SAAS,OAAO,KAAK;EAC5B,WAAW,UAAU,MAAM,GAAG,KAAK,MAAM,MAAM,CAAC;CACjD,GALM,GAAG,KAAK,IAAI,GAAG,KAAK,SAK1B,CACF,EACE,CAAA;AAET;AAEA,SAAS,eAAe,EACtB,UACA,MACA,OACA,YAOC;CACD,MAAM,IAAI,KAAK;CACf,MAAM,QAAQ,SAAS;CACvB,QAAQ,KAAK,SAAb;EACE,KAAK,QACH,OACE,qBAAC,SAAD;GAAO,WAAU;GAAjB,UAAA,CACE,oBAAC,SAAD;IACE,MAAK;IACL,SAAS,UAAU;IACnB,WAAW,UAAU,SAAS,MAAM,OAAO,OAAO;GACnD,CAAA,GACA,MAAM,IAAI,CACN;;EAEX,KAAK,QACH,OACE,oBAAC,SAAD;GAAS,OAAO,MAAM,IAAI;GACxB,UAAA,oBAAC,gBAAD;IAEE,OAAO,OAAO,UAAU,WAAW,QAAQ;IAC3C,UAAU;GACX,GAHM,QAGN;EACM,CAAA;EAEb,KAAK,UACH,OACE,oBAAC,SAAD;GAAS,OAAO,MAAM,IAAI;GACxB,UAAA,oBAAC,gBAAD;IAEE,MAAK;IACL,KAAK,KAAK;IACV,aAAa,EAAE,gBAAgB;IAC/B,OAAO,OAAO,UAAU,WAAW,OAAO,KAAK,IAAI;IACnD,WAAW,SAAS,SAAS,SAAS,KAAK,OAAO,KAAK,IAAI,KAAK,KAAK,OAAO,IAAI,CAAC,CAAC;GACnF,GANM,QAMN;EACM,CAAA;EAEb,KAAK,UACH,OAAO,KAAK,OACV,qBAAC,SAAD;GAAS,OAAO,MAAM,IAAI;GAA1B,UAAA,CACE,oBAAC,gBAAD;IAEE,MAAM,GAAG,SAAS;IAClB,OAAO,OAAO,UAAU,WAAW,QAAQ;IAC3C,UAAU;GACX,GAJM,QAIN,GACD,oBAAC,YAAD;IAAU,IAAI,GAAG,SAAS;IACvB,UAAA,KAAK,QAAQ,KAAK,WACjB,oBAAC,UAAD,EAAqB,OAAO,OAAS,GAAxB,MAAwB,CACtC;GACO,CAAA,CACH;EAET,CAAA,IAAA,oBAAC,SAAD;GAAS,OAAO,MAAM,IAAI;GACxB,UAAA,qBAAC,UAAD;IACE,WAAW;IACX,OAAO,OAAO,UAAU,WAAW,QAAQ;IAC3C,WAAW,UAAU,SAAS,MAAM,OAAO,UAAU,KAAK,OAAO,MAAM,OAAO,KAAK;IAHrF,UAAA,CAKE,oBAAC,UAAD;KAAQ,OAAM;KAAI,UAAA,EAAE,gBAAgB;IAAU,CAAA,GAC7C,KAAK,QAAQ,KAAK,WACjB,oBAAC,UAAD;KAAqB,OAAO;KACzB,UAAA;IACK,GAFK,MAEL,CACT,CACK;;EACD,CAAA;EAEb,KAAK,WAAW;GACd,MAAM,SAAS,IAAI,IAAI,MAAM,QAAQ,KAAK,IAAK,QAAqB,CAAC,CAAC;GACtE,OACE,oBAAC,SAAD;IAAS,OAAO,MAAM,IAAI;IACvB,UAAA,KAAK,QAAQ,KAAK,WACjB,qBAAC,SAAD;KAAoB,WAAU;KAA9B,UAAA,CACE,oBAAC,SAAD;MACE,MAAK;MACL,SAAS,OAAO,IAAI,MAAM;MAC1B,WAAW,UACT,SACE,KAAK,QAAQ,QAAQ,SACnB,SAAS,SAAS,MAAM,OAAO,UAAU,OAAO,IAAI,IAAI,CAC1D,CACF;KAEH,CAAA,GACA,MACI;IAbK,GAAA,MAaL,CACR;GACM,CAAA;EAEb;EACA,KAAK,WACH,OACE,oBAAC,SAAD;GAAS,OAAO,MAAM,IAAI;GACxB,UAAA,oBAAC,eAAD;IAEE,SAAS,MAAM,QAAQ,KAAK,IAAK,QAAqB,CAAC;IACvD,UAAU;GACX,GAHM,QAGN;EACM,CAAA;CAEf;AACF;AAEA,SAAS,QAAQ,EAAE,OAAO,YAA0D;CAClF,OACE,qBAAC,WAAD;EAAS,WAAU;EAAnB,UAAA,CACE,oBAAC,QAAD;GAAM,WAAU;GAA0C,UAAA;EAAY,CAAA,GACrE,QACM;;AAEb;;AAGA,SAAS,eAAe,EACtB,OACA,UACA,GAAG,SAIwE;CAC3E,MAAM,CAAC,OAAO,YAAY,SAAwB,IAAI;CACtD,gBAAgB,SAAS,IAAI,GAAG,CAAC,KAAK,CAAC;CACvC,MAAM,eAAe;EACnB,IAAI,UAAU,QAAQ,UAAU,OAAO;EACvC,SAAS,KAAK;CAChB;CACA,OACE,oBAAC,SAAD;EACE,GAAI;EACJ,WAAW;EACX,OAAO,SAAS;EAChB,WAAW,UAAU,SAAS,MAAM,OAAO,KAAK;EAChD,QAAQ;EACR,YAAY,UAAU,MAAM,QAAQ,WAAW,OAAO;CACvD,CAAA;AAEL;;AAGA,SAAS,cAAc,EACrB,SACA,YAIC;CACD,MAAM,IAAI,KAAK;CACf,MAAM,OAAO,QAAQ,KAAK,YAAY;EAAE,OAAO,OAAO;EAAO,OAAO,OAAO;CAAM,EAAE;CACnF,MAAM,WAAW,IAAY,QAC3B,SACE,QAAQ,OACJ,KAAK,QAAQ,GAAG,UAAU,UAAU,EAAE,IACtC,KAAK,KAAK,MAAM,UAAW,UAAU,KAAK,MAAM,IAAK,CAC3D;CACF,OACE,qBAAC,OAAD,EAAA,UAAA,CACG,KAAK,KAAK,KAAK,OACd,qBAAC,OAAD;EAAgC,WAAU;EAA1C,UAAA;GACE,oBAAC,gBAAD;IACE,cAAY,EAAE,uBAAuB;IACrC,OAAO,IAAI;IACX,WAAW,UAAU,QAAQ,IAAI;KAAE,GAAG;KAAK;IAAM,CAAC;GACnD,CAAA;GACD,oBAAC,gBAAD;IACE,cAAY,EAAE,uBAAuB;IACrC,OAAO,IAAI;IACX,WAAW,UAAU,QAAQ,IAAI;KAAE,GAAG;KAAK;IAAM,CAAC;GACnD,CAAA;GACD,oBAAC,UAAD;IACE,MAAK;IACL,OAAO,EAAE,wBAAwB;IACjC,WAAU;IACV,eAAe,QAAQ,IAAI,IAAI;IAChC,UAAA;GAEO,CAAA;EACL;CAnBK,GAAA,GAAG,GAAG,GAAG,IAAI,OAmBlB,CACN,GACD,oBAAC,UAAD;EACE,MAAK;EACL,WAAU;EACV,eAAe;GACb,MAAM,QAAQ,UAAU,KAAK,SAAS;GACtC,SAAS,CAAC,GAAG,MAAM;IAAE;IAAO,OAAO;GAAM,CAAC,CAAC;EAC7C;EAEC,UAAA,EAAE,qBAAqB;CAClB,CAAA,CACL,EAAA,CAAA;AAET;;;;;;;;;;;ACxOA,MAAM,WAA2F;CAC/F,MAAM;EAAE,MAAM;EAAiB,UAAU;CAA0B;CACnE,UAAU;EAAE,MAAM;EAAgB,UAAU;CAAyB;CACrE,OAAO;EAAE,MAAM;EAAa,UAAU;CAAsB;CAC5D,UAAU;EAAE,MAAM;EAAc,UAAU;CAAuB;CACjE,SAAS;EAAE,MAAM;EAAe,UAAU;CAAwB;CAClE,YAAY;EAAE,MAAM;EAAc,UAAU;CAAuB;CACnE,WAAW;EAAE,MAAM;EAAa,UAAU;CAA0B;AACtE;AAEA,MAAM,YAAqC,CAAC;AAC5C,MAAM,aAA0C,CAAC;;AAGjD,MAAM,YAAY,WAChB,OAAO,IAAI,SAAS,iBAAiB,OAAO,IAAI,eAAe;;AAGjE,SAAS,gBAAgB;CACvB,MAAM,aAAa,sBAAsB,eAAe;CACxD,MAAM,cAAc,sBAAsB,gBAAgB;CAC1D,MAAM,QAAQ,SAAS;CACvB,MAAM,aAAa,oBACjB,mBACC,UAAU,MAAM,gBAAgB,GACjC,IACF;CACA,OAAO;EACL,OAAO,QAA0B;GAE/B,IAAI,CAAC,iBAAiB,UAAU,GAAG,aAAa,aAAa,gBAAgB;GAC7E,YAAY,UAAU,IAAI,CAAC,OAAO,GAAG,CAAC;GACtC,MAAM,OAAO,OAAO,MAAM,EAAE,MAAM,OAAO,IAAI,CAAC;EAChD;EACA,QAAQ;GACN,YAAY,UAAU,IAAI,CAAC,CAAC;EAC9B;CACF;AACF;AAEA,SAAgB,kBAAkB;CAChC,MAAM,OAAO,sBAAsB,SAAS;CAC5C,MAAM,WAAW,oBACf,YACC,eAAe,WAAW,iBAAiB,GAC5C,IACF;CACA,IAAI,CAAC,MAAM,OAAO;CAClB,OAAO,WAAW,oBAAC,eAAD,EAAe,OAAO,SAAW,CAAA,IAAI,oBAAC,WAAD,CAAY,CAAA;AACrE;;AAGA,SAAS,YAAY;CACnB,MAAM,IAAI,KAAK;CACf,MAAM,SAAS,cAAc;CAC7B,MAAM,QAAQ,YAAY;CAC1B,MAAM,OAAO,sBAAsB,SAAS;CAC5C,MAAM,SAAS,oBAAoB,YAAY,eAAe,WAAW,KAAK,GAAG,SAAS;CAC1F,MAAM,SAAS,cAAc;EAC3B,MAAM,UAAU,IAAI,IAAI,MAAM,KAAK,SAAS,CAAC,KAAK,IAAI,cAAc,KAAK,KAAK,CAAC,CAAC;EAChF,MAAM,OAAO,OAAO,SAAS,UAAU;GACrC,MAAM,QAAQ,MAAM,WAAW,MAAM,GAAG,CAAC,CAAC;GAC1C,MAAM,QAAQ,QAAQ,QAAQ,IAAI,MAAM,KAAK,YAAY,IAAI,KAAA;GAC7D,OAAO,SAAS,UAAU,KAAA,IAAY,CAAC;IAAE;IAAO;IAAO;GAAM,CAAC,IAAI,CAAC;EACrE,CAAC;EACD,KAAK,MACF,MAAM,UACL,KAAK,QAAQ,MAAM,SACnB,KAAK,MAAM,IAAI,IAAI,MAAM,MAAM,IAAI,KACnC,KAAK,MAAM,IAAI,IAAI,MAAM,MAAM,IAAI,CACvC;EACA,MAAM,yBAAS,IAAI,IAAyB;EAC5C,KAAK,MAAM,OAAO,MAAM,OAAO,IAAI,IAAI,OAAO,CAAC,GAAI,OAAO,IAAI,IAAI,KAAK,KAAK,CAAC,GAAI,GAAG,CAAC;EACrF,OAAO,CAAC,GAAG,MAAM;CACnB,GAAG;EAAC;EAAQ;EAAM;CAAK,CAAC;CAExB,IAAI,OAAO,WAAW,GACpB,OACE,qBAAC,OAAD;EAAK,WAAU;EAAf,UAAA,CACE,oBAAC,MAAD;GAAM,MAAK;GAAa,MAAM;GAAI,WAAU;EAAiB,CAAA,GAC7D,oBAAC,KAAD;GAAG,WAAU;GAAyB,UAAA,EAAE,kBAAkB;EAAK,CAAA,CAC5D;;CAGT,OACE,oBAAC,OAAD;EAAK,WAAU;EACZ,UAAA,OAAO,KAAK,CAAC,OAAO,UACnB,qBAAC,WAAD;GAAqB,WAAU;GAA/B,UAAA,CACE,oBAAC,MAAD;IAAI,WAAU;IACX,UAAA,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,QAAQ,EAAE,EAAE,CAAC;GACnD,CAAA,GACJ,oBAAC,MAAD;IAAI,WAAU;IACX,UAAA,KAAK,KAAK,EAAE,OAAO,YAAY;KAC9B,MAAM,SAAS,SAAS,MAAM;KAC9B,OACE,oBAAC,MAAD,EAAA,UACE,qBAAC,UAAD;MACE,MAAK;MACL,eAAe,OAAO,OAAO,KAAK;MAClC,WAAU;MAHZ,UAAA;OAKE,oBAAC,MAAD;QACE,MAAM,QAAQ,QAAQ;QACtB,MAAM;QACN,WAAU;OACX,CAAA;OACD,oBAAC,QAAD;QAAM,WAAU;QAA2C,UAAA,MAAM;OAAW,CAAA;OAC3E,UAAU,oBAAC,QAAD;QAAM,WAAU;QAAW,UAAA,EAAE,OAAO,QAAQ;OAAQ,CAAA;MACzD;KACN,CAAA,EAAA,GAdK,MAAM,IAcX;IAER,CAAC;GACC,CAAA,CACG;EA1BK,GAAA,KA0BL,CACV;CACE,CAAA;AAET;;AAGA,SAAS,cAAc,EAAE,SAAkC;CACzD,MAAM,IAAI,KAAK;CACf,MAAM,SAAS,cAAc;CAC7B,MAAM,SAAS,SAAS,MAAM;CAC9B,OACE,qBAAC,OAAD;EAAK,WAAU;EAAf,UAAA;GACE,qBAAC,UAAD;IACE,MAAK;IACL,SAAS,OAAO;IAChB,WAAU;IAHZ,UAAA,CAKE,oBAAC,MAAD;KAAM,MAAK;KAAc,MAAM;IAAK,CAAA,GACnC,EAAE,sBAAsB,CACnB;;GACR,qBAAC,KAAD;IAAG,WAAU;IAAb,UAAA,CACE,oBAAC,MAAD;KAAM,MAAM,QAAQ,QAAQ;KAAiB,MAAM;KAAI,WAAU;IAA0B,CAAA,GAC3F,oBAAC,QAAD;KAAM,WAAU;KAAoB,UAAA,MAAM;IAAW,CAAA,CACpD;;GACH,oBAAC,KAAD;IAAG,WAAU;IACV,UAAA,EAAE,yBAAyB;GAC3B,CAAA;GACH,oBAAC,eAAD,EAAsB,MAAQ,CAAA;IAC5B,MAAM,WAAW,WAAW,MAAM,WAAW,eAAe,oBAAC,SAAD,EAAgB,MAAQ,CAAA;EACnF;;AAET;;AAGA,SAAS,QAAQ,EAAE,SAAqE;CACtF,MAAM,IAAI,KAAK;CACf,MAAM,SAAS,cAAc;CAC7B,MAAM,OAAO,sBAAsB,SAAS;CAC5C,MAAM,SAAS,oBACb,YACC,eAAe,WAAW,WAAW,MAAM,GAAG,GAC/C,UACF;CACA,MAAM,SAAS,oBAAoB,UAAU,MAAM,QAAQ;CAC3D,MAAM,YAAY,UAChB,OAAO,MACJ,WAAW,OAAO,IAAI,SAAS,kBAAkB,OAAO,IAAI,iBAAiB,SAAS,KAAK,CAC9F;CACF,MAAM,QAAQ,MAAM,WAAW;CAC/B,MAAM,MAAM,YAAY;EACtB,IAAI,CAAC,MAAM;EACX,MAAM,EAAE,WAAW,MAAM,KAAK,UAAU,MAAM,GAAG;EACjD,OAAO,OAAO,MAAM;CACtB;CACA,OACE,qBAAC,WAAD;EAAS,WAAU;EAAnB,UAAA;GACE,oBAAC,KAAD;IAAG,WAAU;IACV,UAAA,EAAE,QAAQ,uBAAuB,kBAAkB;GACnD,CAAA;GACH,oBAAC,MAAD;IAAI,WAAU;IACX,UAAA,OAAO,KAAK,OAAO,OAAO;KACzB,MAAM,SAAS,MAAM,QAAQ,MAAM,SAAS,KAAK,iBAAiB,SAAS,KAAK,CAAC;KACjF,OACE,oBAAC,MAAD,EAAA,UACE,qBAAC,UAAD;MACE,MAAK;MACL,gBAAc,SAAS,KAAK;MAC5B,eAAe,OAAO,OAAO,KAAK;MAClC,WAAW,2FACT,SAAS,KAAK,IAAI,4BAA4B;MALlD,UAAA,CAQE,oBAAC,MAAD;OAAM,MAAM,QAAQ,cAAc;OAAgB,MAAM;OAAI,WAAU;MAAY,CAAA,GAClF,oBAAC,QAAD;OAAM,WAAU;OACb,UAAA,SAAS,UAAU,iBAAiB,SACjC,OAAO,cACP,EAAE,kBAAkB,EAAE,QAAQ,EAAE,QAAQ,KAAK,EAAE,EAAE,CAAC;MAClD,CAAA,CACA;KACN,CAAA,EAAA,GAhBK,SAAS,KAAK,CAgBnB;IAER,CAAC;GACC,CAAA;GACJ,qBAAC,UAAD;IACE,MAAK;IACL,eAAe,KAAK,IAAI,CAAC,CAAC,YAAY,KAAA,CAAS;IAC/C,WAAU;IAHZ,UAAA,CAKE,oBAAC,MAAD;KAAM,MAAK;KAAO,MAAM;IAAK,CAAA,GAC5B,EAAE,QAAQ,yBAAyB,mBAAmB,CACjD;;EACD;;AAEb"}
1
+ {"version":3,"file":"form-design-panel-CgV_5YWC.js","names":[],"sources":["../src/ui/field-settings.tsx","../src/ui/form-design-panel.tsx"],"sourcesContent":["/**\n * A field's settings, as the form plugin describes them (`getFieldSettings`),\n * written with `form.update()`: the form designer's sidebar shows them for the\n * selected field. Nothing here knows a field family: the description says what\n * to draw.\n */\nimport {\n FormToken,\n type FormFieldDTO,\n type FormFieldPatch,\n type FormFieldSetting,\n} from '@embedpdf/react/form';\nimport { useT } from '@embedpdf/react/i18n';\nimport { useOptionalCapability, useOptionalSelector } from '@embedpdf/react/runtime';\nimport { useEffect, useState } from 'react';\n\nimport { useLabel } from './labels';\n\nconst inputClass = 'border-border bg-surface text-fg w-full rounded-md border px-2 py-1.5 text-sm';\n\n/** One option of a dropdown or a list, as its settings hold it. */\ninterface Option {\n readonly label: string;\n readonly value: string;\n}\n\n/** The field's settings, each with the control its description names. */\nexport function FieldSettings({ field }: { field: FormFieldDTO }) {\n const form = useOptionalCapability(FormToken);\n const settings = useOptionalSelector(\n FormToken,\n (capability) => capability.getFieldSettings(field.ref),\n null,\n );\n if (!form || !settings || !form.canDesign()) return null;\n const write = (patch: Record<string, unknown>) =>\n void form.update(field.ref, patch as FormFieldPatch).catch(() => undefined);\n\n return (\n <div>\n {settings.properties.map((spec) => (\n <SettingControl\n key={`${spec.key}:${spec.control}`}\n fieldKey={JSON.stringify(field.ref)}\n spec={spec}\n value={settings.values[spec.key]}\n onChange={(value) => write({ [spec.key]: value })}\n />\n ))}\n </div>\n );\n}\n\nfunction SettingControl({\n fieldKey,\n spec,\n value,\n onChange,\n}: {\n /** The field it edits: a draft starts over when the selection moves to another field. */\n fieldKey: string;\n spec: FormFieldSetting;\n value: unknown;\n onChange: (value: unknown) => void;\n}) {\n const t = useT();\n const label = useLabel();\n switch (spec.control) {\n case 'flag':\n return (\n <label className=\"text-fg mb-2 flex items-center gap-2 text-sm\">\n <input\n type=\"checkbox\"\n checked={value === true}\n onChange={(event) => onChange(event.target.checked)}\n />\n {label(spec)}\n </label>\n );\n case 'text':\n return (\n <Setting label={label(spec)}>\n <CommittedInput\n key={fieldKey}\n value={typeof value === 'string' ? value : ''}\n onCommit={onChange}\n />\n </Setting>\n );\n case 'number':\n return (\n <Setting label={label(spec)}>\n <CommittedInput\n key={fieldKey}\n type=\"number\"\n min={spec.min}\n placeholder={t('demo.fieldNone')}\n value={typeof value === 'number' ? String(value) : ''}\n onCommit={(text) => onChange(text === '' ? null : Math.max(spec.min, Number(text)))}\n />\n </Setting>\n );\n case 'choice':\n return spec.free ? (\n <Setting label={label(spec)}>\n <CommittedInput\n key={fieldKey}\n list={`${fieldKey}-choices`}\n value={typeof value === 'string' ? value : ''}\n onCommit={onChange}\n />\n <datalist id={`${fieldKey}-choices`}>\n {spec.options.map((option) => (\n <option key={option} value={option} />\n ))}\n </datalist>\n </Setting>\n ) : (\n <Setting label={label(spec)}>\n <select\n className={inputClass}\n value={typeof value === 'string' ? value : ''}\n onChange={(event) => onChange(event.target.value === '' ? null : event.target.value)}\n >\n <option value=\"\">{t('demo.fieldNone')}</option>\n {spec.options.map((option) => (\n <option key={option} value={option}>\n {option}\n </option>\n ))}\n </select>\n </Setting>\n );\n case 'choices': {\n const chosen = new Set(Array.isArray(value) ? (value as string[]) : []);\n return (\n <Setting label={label(spec)}>\n {spec.options.map((option) => (\n <label key={option} className=\"text-fg mb-1 flex items-center gap-2 text-sm\">\n <input\n type=\"checkbox\"\n checked={chosen.has(option)}\n onChange={(event) =>\n onChange(\n spec.options.filter((each) =>\n each === option ? event.target.checked : chosen.has(each),\n ),\n )\n }\n />\n {option}\n </label>\n ))}\n </Setting>\n );\n }\n case 'options':\n return (\n <Setting label={label(spec)}>\n <OptionsEditor\n key={fieldKey}\n options={Array.isArray(value) ? (value as Option[]) : []}\n onCommit={onChange}\n />\n </Setting>\n );\n }\n}\n\nfunction Setting({ label, children }: { label: string; children: React.ReactNode }) {\n return (\n <section className=\"mb-3\">\n <span className=\"text-fg mb-1 block text-sm font-medium\">{label}</span>\n {children}\n </section>\n );\n}\n\n/** A text input that writes on blur or Enter, and keeps what's typed until then. */\nfunction CommittedInput({\n value,\n onCommit,\n ...input\n}: {\n value: string;\n onCommit: (value: string) => void;\n} & Omit<React.InputHTMLAttributes<HTMLInputElement>, 'value' | 'onChange'>) {\n const [draft, setDraft] = useState<string | null>(null);\n useEffect(() => setDraft(null), [value]);\n const commit = () => {\n if (draft === null || draft === value) return;\n onCommit(draft);\n };\n return (\n <input\n {...input}\n className={inputClass}\n value={draft ?? value}\n onChange={(event) => setDraft(event.target.value)}\n onBlur={commit}\n onKeyDown={(event) => event.key === 'Enter' && commit()}\n />\n );\n}\n\n/** A dropdown's or list's options, each a label and a value; written as a whole on each edit. */\nfunction OptionsEditor({\n options,\n onCommit,\n}: {\n options: readonly Option[];\n onCommit: (options: Option[]) => void;\n}) {\n const t = useT();\n const rows = options.map((option) => ({ label: option.label, value: option.value }));\n const replace = (at: number, row: Option | null) =>\n onCommit(\n row === null\n ? rows.filter((_, index) => index !== at)\n : rows.map((each, index) => (index === at ? row : each)),\n );\n return (\n <div>\n {rows.map((row, at) => (\n <div key={`${at}:${row.value}`} className=\"mb-1 flex gap-1\">\n <CommittedInput\n aria-label={t('demo.fieldOptionLabel')}\n value={row.label}\n onCommit={(label) => replace(at, { ...row, label })}\n />\n <CommittedInput\n aria-label={t('demo.fieldOptionValue')}\n value={row.value}\n onCommit={(value) => replace(at, { ...row, value })}\n />\n <button\n type=\"button\"\n title={t('demo.fieldOptionRemove')}\n className=\"text-fg-muted hover:text-fg px-1\"\n onClick={() => replace(at, null)}\n >\n ×\n </button>\n </div>\n ))}\n <button\n type=\"button\"\n className=\"text-accent text-sm\"\n onClick={() => {\n const label = `Option ${rows.length + 1}`;\n onCommit([...rows, { label, value: label }]);\n }}\n >\n {t('demo.fieldOptionAdd')}\n </button>\n </div>\n );\n}\n","/**\n * The form designer's sidebar (`form-design`, which `form:design` opens): what the form's\n * fields are. With no field selected it lists them by page, and a click selects one and\n * scrolls to it; with one selected it shows its settings and, for a radio group or a checkbox,\n * its buttons, with a + that adds one next in line (`form.addWidget`). How a field looks is the\n * style panel's.\n */\nimport { AnnotationToken, useAnnotationState } from '@embedpdf/react/annotation';\nimport {\n FormToken,\n type FormFieldDTO,\n type FormFieldFamily,\n type WidgetAnnotation,\n} from '@embedpdf/react/form';\nimport { useT } from '@embedpdf/react/i18n';\nimport { InteractionToken } from '@embedpdf/react/interaction';\nimport { useOptionalCapability, useOptionalSelector, usePageList } from '@embedpdf/react/runtime';\nimport { useStage } from '@embedpdf/react/stage';\nimport { useMemo } from 'react';\n\nimport { FORM_DESIGN_TOOL, isFormDesignTool } from '../config/commands';\nimport { FieldSettings } from './field-settings';\nimport { Icon } from './icons';\n\n/** Each family's icon and name, as its field tool shows them. */\nconst FAMILIES: Readonly<Partial<Record<FormFieldFamily, { icon: string; labelKey: string }>>> = {\n text: { icon: 'formTextfield', labelKey: 'commands.form.textfield' },\n checkbox: { icon: 'formCheckbox', labelKey: 'commands.form.checkbox' },\n radio: { icon: 'formRadio', labelKey: 'commands.form.radio' },\n combobox: { icon: 'formSelect', labelKey: 'commands.form.select' },\n listbox: { icon: 'formListbox', labelKey: 'commands.form.listbox' },\n pushbutton: { icon: 'formButton', labelKey: 'commands.form.button' },\n signature: { icon: 'signature', labelKey: 'commands.form.signature' },\n};\n\nconst NO_FIELDS: readonly FormFieldDTO[] = [];\nconst NO_WIDGETS: readonly WidgetAnnotation[] = [];\n\n/** A widget's object number, the key its rows and its selection share. */\nconst numberOf = (widget: WidgetAnnotation): number =>\n widget.ref.kind === 'objectNumber' ? widget.ref.objectNumber : -1;\n\n/** The form's own actions: select a widget and show it, design on first if it was off. */\nfunction useFormDesign() {\n const annotation = useOptionalCapability(AnnotationToken);\n const interaction = useOptionalCapability(InteractionToken);\n const stage = useStage();\n const activeTool = useOptionalSelector(\n InteractionToken,\n (tools) => tools.getActiveToolId(),\n null,\n );\n return {\n select(widget: WidgetAnnotation) {\n // The widgets are lent only while a form is designed.\n if (!isFormDesignTool(activeTool)) interaction?.activateTool(FORM_DESIGN_TOOL);\n annotation?.selection.set([widget.ref]);\n stage.reveal(widget.page, { rect: widget.box });\n },\n clear() {\n annotation?.selection.set([]);\n },\n };\n}\n\nexport function FormDesignPanel() {\n const form = useOptionalCapability(FormToken);\n const selected = useOptionalSelector(\n FormToken,\n (capability) => capability.getSelectedField(),\n null,\n );\n if (!form) return null;\n return selected ? <SelectedField field={selected} /> : <FieldList />;\n}\n\n/** Every field of the form, by page, in reading order. */\nfunction FieldList() {\n const t = useT();\n const design = useFormDesign();\n const pages = usePageList();\n const form = useOptionalCapability(FormToken);\n const fields = useOptionalSelector(FormToken, (capability) => capability.list(), NO_FIELDS);\n const groups = useMemo(() => {\n const indexOf = new Map(pages.map((page) => [page.ref.objectNumber, page.index]));\n const rows = fields.flatMap((field) => {\n const place = form?.getWidgets(field.ref)[0];\n const index = place ? indexOf.get(place.page.objectNumber) : undefined;\n return place && index !== undefined ? [{ field, place, index }] : [];\n });\n rows.sort(\n (left, right) =>\n left.index - right.index ||\n left.place.box.y - right.place.box.y ||\n left.place.box.x - right.place.box.x,\n );\n const byPage = new Map<number, typeof rows>();\n for (const row of rows) byPage.set(row.index, [...(byPage.get(row.index) ?? []), row]);\n return [...byPage];\n }, [fields, form, pages]);\n\n if (groups.length === 0) {\n return (\n <div className=\"flex flex-col items-center gap-3 px-4 py-10 text-center\">\n <Icon name=\"formDesign\" size={32} className=\"text-fg-muted\" />\n <p className=\"text-fg-muted text-sm\">{t('formDesign.empty')}</p>\n </div>\n );\n }\n return (\n <div className=\"min-h-0 flex-1 overflow-y-auto p-2\">\n {groups.map(([index, rows]) => (\n <section key={index} className=\"mb-3\">\n <h3 className=\"text-fg-muted px-2 pb-1 text-[11px] font-semibold uppercase tracking-wide\">\n {t('formDesign.page', { params: { page: index + 1 } })}\n </h3>\n <ul className=\"flex flex-col\">\n {rows.map(({ field, place }) => {\n const family = FAMILIES[field.family];\n return (\n <li key={field.name}>\n <button\n type=\"button\"\n onClick={() => design.select(place)}\n className=\"hover:bg-hover flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-start\"\n >\n <Icon\n name={family?.icon ?? 'formTextfield'}\n size={16}\n className=\"text-fg-muted shrink-0\"\n />\n <span className=\"text-fg min-w-0 flex-1 truncate text-sm\">{field.name}</span>\n {family && <span className=\"sr-only\">{t(family.labelKey)}</span>}\n </button>\n </li>\n );\n })}\n </ul>\n </section>\n ))}\n </div>\n );\n}\n\n/** The selected field: its settings and, for a radio group or a checkbox, its buttons. */\nfunction SelectedField({ field }: { field: FormFieldDTO }) {\n const t = useT();\n const design = useFormDesign();\n const family = FAMILIES[field.family];\n return (\n <div className=\"min-h-0 flex-1 overflow-y-auto p-4\">\n <button\n type=\"button\"\n onClick={design.clear}\n className=\"text-accent mb-3 flex items-center gap-1 text-sm\"\n >\n <Icon name=\"chevronLeft\" size={14} />\n {t('formDesign.allFields')}\n </button>\n <p className=\"text-fg mb-4 flex items-center gap-2 text-sm font-semibold\">\n <Icon name={family?.icon ?? 'formTextfield'} size={16} className=\"text-fg-muted shrink-0\" />\n <span className=\"min-w-0 truncate\">{field.name}</span>\n </p>\n <p className=\"text-fg-muted mb-3 text-[11px] font-semibold uppercase tracking-wide\">\n {t('demo.fieldSettingsTitle')}\n </p>\n <FieldSettings field={field} />\n {(field.family === 'radio' || field.family === 'checkbox') && <Buttons field={field} />}\n </div>\n );\n}\n\n/** A radio group's or a checkbox's buttons, each selectable, and a + for one more. */\nfunction Buttons({ field }: { field: FormFieldDTO & { family: 'radio' | 'checkbox' } }) {\n const t = useT();\n const design = useFormDesign();\n const form = useOptionalCapability(FormToken);\n const places = useOptionalSelector(\n FormToken,\n (capability) => capability.getWidgets(field.ref),\n NO_WIDGETS,\n );\n const chosen = useAnnotationState((state) => state.selected);\n const isChosen = (place: WidgetAnnotation) =>\n chosen.some(\n (record) => record.ref.kind === 'objectNumber' && record.ref.objectNumber === numberOf(place),\n );\n const radio = field.family === 'radio';\n const add = async () => {\n if (!form) return;\n const { widget } = await form.addWidget(field.ref);\n design.select(widget);\n };\n return (\n <section className=\"border-border-subtle mt-4 border-t pt-4\">\n <p className=\"text-fg-muted mb-2 text-[11px] font-semibold uppercase tracking-wide\">\n {t(radio ? 'formDesign.buttons' : 'formDesign.boxes')}\n </p>\n <ul className=\"mb-2 flex flex-col\">\n {places.map((place, at) => {\n const widget = field.widgets.find((each) => each.objectNumber === numberOf(place));\n return (\n <li key={numberOf(place)}>\n <button\n type=\"button\"\n aria-pressed={isChosen(place)}\n onClick={() => design.select(place)}\n className={`hover:bg-hover flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-start text-sm ${\n isChosen(place) ? 'bg-selected text-accent' : 'text-fg'\n }`}\n >\n <Icon name={radio ? 'formRadio' : 'formCheckbox'} size={14} className=\"shrink-0\" />\n <span className=\"min-w-0 flex-1 truncate\">\n {radio && widget && 'exportValue' in widget\n ? widget.exportValue\n : t('formDesign.box', { params: { number: at + 1 } })}\n </span>\n </button>\n </li>\n );\n })}\n </ul>\n <button\n type=\"button\"\n onClick={() => void add().catch(() => undefined)}\n className=\"text-accent flex items-center gap-1 text-sm\"\n >\n <Icon name=\"plus\" size={14} />\n {t(radio ? 'formDesign.addButton' : 'formDesign.addBox')}\n </button>\n </section>\n );\n}\n"],"mappings":"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"}