@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.
- package/dist/{annotation-fonts-BqoLZ4Mp.js → annotation-fonts-DWjVOTP0.js} +2 -2
- package/dist/{annotation-fonts-BqoLZ4Mp.js.map → annotation-fonts-DWjVOTP0.js.map} +1 -1
- package/dist/{annotation-fonts-Dt0IQXhz.cjs → annotation-fonts-dpfVkhnq.cjs} +2 -2
- package/dist/{annotation-fonts-Dt0IQXhz.cjs.map → annotation-fonts-dpfVkhnq.cjs.map} +1 -1
- package/dist/{annotation-style-Bzvvp8-N.cjs → annotation-style-B3XKAyZ-.cjs} +3 -3
- package/dist/{annotation-style-Bzvvp8-N.cjs.map → annotation-style-B3XKAyZ-.cjs.map} +1 -1
- package/dist/{annotation-style--rPIZsuP.js → annotation-style-CXF3X47Z.js} +3 -3
- package/dist/{annotation-style--rPIZsuP.js.map → annotation-style-CXF3X47Z.js.map} +1 -1
- package/dist/{ar-DnEj5vbP.cjs → ar-B132r9bo.cjs} +93 -1
- package/dist/ar-B132r9bo.cjs.map +1 -0
- package/dist/{ar-D9XKAmDx.js → ar-BLWFJoA_.js} +93 -1
- package/dist/ar-BLWFJoA_.js.map +1 -0
- package/dist/attachments-panel-Cxln8xos.cjs +217 -0
- package/dist/attachments-panel-Cxln8xos.cjs.map +1 -0
- package/dist/attachments-panel-H1ucRbwo.js +217 -0
- package/dist/attachments-panel-H1ucRbwo.js.map +1 -0
- package/dist/chrome.cjs +21 -0
- package/dist/chrome.cjs.map +1 -1
- package/dist/chrome.js +21 -0
- package/dist/chrome.js.map +1 -1
- package/dist/{commands-BmgxhJ8B.js → commands-BkgLP3Om.js} +418 -23
- package/dist/commands-BkgLP3Om.js.map +1 -0
- package/dist/{commands-CYt4SFUX.cjs → commands-DL1gjZt7.cjs} +433 -20
- package/dist/commands-DL1gjZt7.cjs.map +1 -0
- package/dist/commands.cjs +2 -1
- package/dist/commands.d.cts +3 -1
- package/dist/commands.d.ts +3 -1
- package/dist/commands.js +2 -2
- package/dist/{comments-panel-pEcQg4Vs.cjs → comments-panel-BsnWedTh.cjs} +2 -2
- package/dist/{comments-panel-pEcQg4Vs.cjs.map → comments-panel-BsnWedTh.cjs.map} +1 -1
- package/dist/{comments-panel-MUVgLCBI.js → comments-panel-D7Eadws9.js} +2 -2
- package/dist/{comments-panel-MUVgLCBI.js.map → comments-panel-D7Eadws9.js.map} +1 -1
- package/dist/{de-Dv6zvbnd.cjs → de-7_MvFWzN.cjs} +93 -1
- package/dist/de-7_MvFWzN.cjs.map +1 -0
- package/dist/{de-Bdr4aWzm.js → de-BUhwc9-x.js} +93 -1
- package/dist/de-BUhwc9-x.js.map +1 -0
- package/dist/{dialog-B5GBisKv.js → dialog-BIb373cg.js} +3 -3
- package/dist/dialog-BIb373cg.js.map +1 -0
- package/dist/{dialog-t8F13BL_.cjs → dialog-CngKTnAM.cjs} +3 -3
- package/dist/dialog-CngKTnAM.cjs.map +1 -0
- package/dist/{es-BP09DR9w.cjs → es-DgYj-1L3.cjs} +93 -1
- package/dist/es-DgYj-1L3.cjs.map +1 -0
- package/dist/{es-BSXz5tBv.js → es-DoXTqFoO.js} +93 -1
- package/dist/es-DoXTqFoO.js.map +1 -0
- package/dist/{form-design-panel-vWWU9uB-.js → form-design-panel-CgV_5YWC.js} +3 -3
- package/dist/{form-design-panel-vWWU9uB-.js.map → form-design-panel-CgV_5YWC.js.map} +1 -1
- package/dist/{form-design-panel-B5MXTZ96.cjs → form-design-panel-D0FdmWXW.cjs} +3 -3
- package/dist/{form-design-panel-B5MXTZ96.cjs.map → form-design-panel-D0FdmWXW.cjs.map} +1 -1
- package/dist/{fr-Ckn3K9v1.js → fr-B-8NDhBA.js} +93 -1
- package/dist/fr-B-8NDhBA.js.map +1 -0
- package/dist/{fr-BBQQn7tJ.cjs → fr-C856dmQJ.cjs} +93 -1
- package/dist/fr-C856dmQJ.cjs.map +1 -0
- package/dist/{he-DRsG7bH7.cjs → he-BFTeNc4t.cjs} +93 -1
- package/dist/he-BFTeNc4t.cjs.map +1 -0
- package/dist/{he-wdGU5PkU.js → he-Dlh0fNXM.js} +93 -1
- package/dist/he-Dlh0fNXM.js.map +1 -0
- package/dist/{icons-x0Tc05bs.cjs → icons-1UfLUZ_y.cjs} +20 -1
- package/dist/icons-1UfLUZ_y.cjs.map +1 -0
- package/dist/{icons-BrK5iVL8.js → icons-7dB0Y1ct.js} +20 -1
- package/dist/icons-7dB0Y1ct.js.map +1 -0
- package/dist/index.cjs +740 -171
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +16 -2
- package/dist/index.d.ts +16 -2
- package/dist/index.js +727 -170
- package/dist/index.js.map +1 -1
- package/dist/{it-BuP4o0xQ.cjs → it-Bef-2Yxq.cjs} +93 -1
- package/dist/it-Bef-2Yxq.cjs.map +1 -0
- package/dist/{it-Us-VmvIu.js → it-BkirG7ol.js} +93 -1
- package/dist/it-BkirG7ol.js.map +1 -0
- package/dist/{ja-Cizj0-5O.js → ja-CGEjCE-s.js} +93 -1
- package/dist/ja-CGEjCE-s.js.map +1 -0
- package/dist/{ja-DovEd6ts.cjs → ja-DNw2zqSD.cjs} +93 -1
- package/dist/ja-DNw2zqSD.cjs.map +1 -0
- package/dist/{ko-DlrXliE1.js → ko-CTkl5vMh.js} +93 -1
- package/dist/ko-CTkl5vMh.js.map +1 -0
- package/dist/{ko-B-qJEol2.cjs → ko-YHzeBqP6.cjs} +93 -1
- package/dist/ko-YHzeBqP6.cjs.map +1 -0
- package/dist/{link-editor-CSjqPnj1.cjs → link-editor-CAS7MZM2.cjs} +2 -2
- package/dist/{link-editor-CSjqPnj1.cjs.map → link-editor-CAS7MZM2.cjs.map} +1 -1
- package/dist/{link-editor-SxM1nnJU.js → link-editor-CkwtqRvb.js} +2 -2
- package/dist/{link-editor-SxM1nnJU.js.map → link-editor-CkwtqRvb.js.map} +1 -1
- package/dist/{measurement-Bs61XWbJ.js → measurement-CQdbnIrn.js} +2 -2
- package/dist/{measurement-Bs61XWbJ.js.map → measurement-CQdbnIrn.js.map} +1 -1
- package/dist/{measurement-CcCsHPOX.cjs → measurement-Cxv1Ahxx.cjs} +2 -2
- package/dist/{measurement-CcCsHPOX.cjs.map → measurement-Cxv1Ahxx.cjs.map} +1 -1
- package/dist/{nl-D3KZDDiJ.cjs → nl-BjkbaLq3.cjs} +93 -1
- package/dist/nl-BjkbaLq3.cjs.map +1 -0
- package/dist/{nl-0aF7M_0h.js → nl-Dya4sR8_.js} +93 -1
- package/dist/nl-Dya4sR8_.js.map +1 -0
- package/dist/outline-panel-BpGtBdj0.cjs +707 -0
- package/dist/outline-panel-BpGtBdj0.cjs.map +1 -0
- package/dist/outline-panel-DO5_REYw.js +707 -0
- package/dist/outline-panel-DO5_REYw.js.map +1 -0
- package/dist/outline-properties-BCa2cc0t.js +330 -0
- package/dist/outline-properties-BCa2cc0t.js.map +1 -0
- package/dist/outline-properties-DT3FIxCw.cjs +330 -0
- package/dist/outline-properties-DT3FIxCw.cjs.map +1 -0
- package/dist/{pl-DSFhAUqx.cjs → pl-CKKdVnpZ.cjs} +93 -1
- package/dist/pl-CKKdVnpZ.cjs.map +1 -0
- package/dist/{pl-BW--AaCI.js → pl-DA9b5NVg.js} +93 -1
- package/dist/pl-DA9b5NVg.js.map +1 -0
- package/dist/print-dialog-BqIrHCBh.cjs +276 -0
- package/dist/print-dialog-BqIrHCBh.cjs.map +1 -0
- package/dist/print-dialog-DvcI2m2_.js +276 -0
- package/dist/print-dialog-DvcI2m2_.js.map +1 -0
- package/dist/{pt-C5S-8MC5.cjs → pt-DLcszlzi.cjs} +93 -1
- package/dist/pt-DLcszlzi.cjs.map +1 -0
- package/dist/{pt-DIhpU5pT.js → pt-Nm8yyjbX.js} +93 -1
- package/dist/pt-Nm8yyjbX.js.map +1 -0
- package/dist/{redact-confirm-CX_SY2ZN.cjs → redact-confirm-C6EiK8yN.cjs} +2 -2
- package/dist/{redact-confirm-CX_SY2ZN.cjs.map → redact-confirm-C6EiK8yN.cjs.map} +1 -1
- package/dist/{redact-confirm-B6j36TPw.js → redact-confirm-CKuv9iN_.js} +2 -2
- package/dist/{redact-confirm-B6j36TPw.js.map → redact-confirm-CKuv9iN_.js.map} +1 -1
- package/dist/{redaction-panel-IJDshSJI.js → redaction-panel-CgNZ-pQk.js} +2 -2
- package/dist/{redaction-panel-IJDshSJI.js.map → redaction-panel-CgNZ-pQk.js.map} +1 -1
- package/dist/{redaction-panel-BmoIl-Ll.cjs → redaction-panel-ZhX0dlMi.cjs} +2 -2
- package/dist/{redaction-panel-BmoIl-Ll.cjs.map → redaction-panel-ZhX0dlMi.cjs.map} +1 -1
- package/dist/{search-panel-HfIhJm1M.js → search-panel-BE4xzWlm.js} +4 -4
- package/dist/{search-panel-HfIhJm1M.js.map → search-panel-BE4xzWlm.js.map} +1 -1
- package/dist/{search-panel-s9IoiOtv.cjs → search-panel-wcbTNG1z.cjs} +4 -4
- package/dist/{search-panel-s9IoiOtv.cjs.map → search-panel-wcbTNG1z.cjs.map} +1 -1
- package/dist/{sheet-BDsa_Sup.cjs → sheet-DTBFiwde.cjs} +30 -11
- package/dist/sheet-DTBFiwde.cjs.map +1 -0
- package/dist/{sheet-R6XDgyEf.js → sheet-DyjKfAq0.js} +25 -12
- package/dist/sheet-DyjKfAq0.js.map +1 -0
- package/dist/{sign-dialog-CgnR7akj.cjs → sign-dialog-D5WGx-Yn.cjs} +2 -2
- package/dist/{sign-dialog-CgnR7akj.cjs.map → sign-dialog-D5WGx-Yn.cjs.map} +1 -1
- package/dist/{sign-dialog-GDqCoQhA.js → sign-dialog-DerNe8qT.js} +2 -2
- package/dist/{sign-dialog-GDqCoQhA.js.map → sign-dialog-DerNe8qT.js.map} +1 -1
- package/dist/{signature-inspector-DyO313Qf.cjs → signature-inspector-Bz6TAfZM.cjs} +4 -10
- package/dist/signature-inspector-Bz6TAfZM.cjs.map +1 -0
- package/dist/{signature-inspector-okFz8do6.js → signature-inspector-CsGr9EBk.js} +4 -10
- package/dist/signature-inspector-CsGr9EBk.js.map +1 -0
- package/dist/{signature-maker-BoYa8vgA.cjs → signature-maker-D_YfBXLn.cjs} +3 -3
- package/dist/{signature-maker-BoYa8vgA.cjs.map → signature-maker-D_YfBXLn.cjs.map} +1 -1
- package/dist/{signature-maker-BhCmYyHD.js → signature-maker-Dnth4rV4.js} +3 -3
- package/dist/{signature-maker-BhCmYyHD.js.map → signature-maker-Dnth4rV4.js.map} +1 -1
- package/dist/{signatures-panel-B56PC6d9.cjs → signatures-panel-Ci_LaI1C.cjs} +4 -10
- package/dist/signatures-panel-Ci_LaI1C.cjs.map +1 -0
- package/dist/{signatures-panel-CgnFfhFm.js → signatures-panel-DZ9ywrjz.js} +4 -10
- package/dist/signatures-panel-DZ9ywrjz.js.map +1 -0
- package/dist/{stamps-panel-CDO0FPyK.js → stamps-panel-BrczStaz.js} +4 -10
- package/dist/stamps-panel-BrczStaz.js.map +1 -0
- package/dist/{stamps-panel-B9NYGayn.cjs → stamps-panel-Cv9nJBwx.cjs} +4 -10
- package/dist/stamps-panel-Cv9nJBwx.cjs.map +1 -0
- package/dist/theme-Be0OZokZ.js +97 -0
- package/dist/theme-Be0OZokZ.js.map +1 -0
- package/dist/theme-FR26JI3r.cjs +126 -0
- package/dist/theme-FR26JI3r.cjs.map +1 -0
- package/dist/{toolbar-z9od3tKl.js → toolbar-DF361xWY.js} +7 -6
- package/dist/toolbar-DF361xWY.js.map +1 -0
- package/dist/{toolbar-CJu2wKTU.cjs → toolbar-ddvpsvTb.cjs} +7 -6
- package/dist/toolbar-ddvpsvTb.cjs.map +1 -0
- package/dist/{zh-cn-CxkUUBct.js → zh-cn-BMPPkLpL.js} +93 -1
- package/dist/zh-cn-BMPPkLpL.js.map +1 -0
- package/dist/{zh-cn-3tmMeHqv.cjs → zh-cn-CZOO3p4H.cjs} +93 -1
- package/dist/zh-cn-CZOO3p4H.cjs.map +1 -0
- package/package.json +4 -4
- package/src/styles.css +8 -0
- package/dist/ar-D9XKAmDx.js.map +0 -1
- package/dist/ar-DnEj5vbP.cjs.map +0 -1
- package/dist/commands-BmgxhJ8B.js.map +0 -1
- package/dist/commands-CYt4SFUX.cjs.map +0 -1
- package/dist/de-Bdr4aWzm.js.map +0 -1
- package/dist/de-Dv6zvbnd.cjs.map +0 -1
- package/dist/dialog-B5GBisKv.js.map +0 -1
- package/dist/dialog-t8F13BL_.cjs.map +0 -1
- package/dist/es-BP09DR9w.cjs.map +0 -1
- package/dist/es-BSXz5tBv.js.map +0 -1
- package/dist/fr-BBQQn7tJ.cjs.map +0 -1
- package/dist/fr-Ckn3K9v1.js.map +0 -1
- package/dist/he-DRsG7bH7.cjs.map +0 -1
- package/dist/he-wdGU5PkU.js.map +0 -1
- package/dist/icons-BrK5iVL8.js.map +0 -1
- package/dist/icons-x0Tc05bs.cjs.map +0 -1
- package/dist/it-BuP4o0xQ.cjs.map +0 -1
- package/dist/it-Us-VmvIu.js.map +0 -1
- package/dist/ja-Cizj0-5O.js.map +0 -1
- package/dist/ja-DovEd6ts.cjs.map +0 -1
- package/dist/ko-B-qJEol2.cjs.map +0 -1
- package/dist/ko-DlrXliE1.js.map +0 -1
- package/dist/nl-0aF7M_0h.js.map +0 -1
- package/dist/nl-D3KZDDiJ.cjs.map +0 -1
- package/dist/pl-BW--AaCI.js.map +0 -1
- package/dist/pl-DSFhAUqx.cjs.map +0 -1
- package/dist/pt-C5S-8MC5.cjs.map +0 -1
- package/dist/pt-DIhpU5pT.js.map +0 -1
- package/dist/sheet-BDsa_Sup.cjs.map +0 -1
- package/dist/sheet-R6XDgyEf.js.map +0 -1
- package/dist/signature-inspector-DyO313Qf.cjs.map +0 -1
- package/dist/signature-inspector-okFz8do6.js.map +0 -1
- package/dist/signatures-panel-B56PC6d9.cjs.map +0 -1
- package/dist/signatures-panel-CgnFfhFm.js.map +0 -1
- package/dist/stamps-panel-B9NYGayn.cjs.map +0 -1
- package/dist/stamps-panel-CDO0FPyK.js.map +0 -1
- package/dist/toolbar-CJu2wKTU.cjs.map +0 -1
- package/dist/toolbar-z9od3tKl.js.map +0 -1
- package/dist/zh-cn-3tmMeHqv.cjs.map +0 -1
- package/dist/zh-cn-CxkUUBct.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"comments-panel-MUVgLCBI.js","names":[],"sources":["../src/ui/comment-config.ts","../src/ui/comments-panel.tsx"],"sourcesContent":["import type { Annotation, Color } from '@embedpdf/react/annotation';\n\n/**\n * How a comment card identifies its annotation at a glance: the type's glyph,\n * tinted with that annotation's own colors. The icon names are the chrome icon\n * set's registry names and accent slots. The color model follows the spec:\n * there is exactly one `/C` (\"color\") and one `/IC` (\"interiorColor\"), so\n * `primary` is the annotation's `/C` and `secondary` its interior fill where\n * the family has one.\n */\n\nexport interface IconAccent {\n primary?: string;\n secondary?: string;\n}\n\nexport interface CommentTypeConfig {\n /** Icon name in the chrome registry. */\n icon: string;\n /** i18n key for the type's display name (tooltip). */\n labelKey: string;\n /** Fallback when the locale has no entry. */\n label: string;\n}\n\nconst TYPE_CONFIG: Record<string, CommentTypeConfig> = {\n text: { icon: 'message', labelKey: 'annotation.comment', label: 'Comment' },\n highlight: { icon: 'highlight', labelKey: 'annotation.highlight', label: 'Highlight' },\n underline: { icon: 'underline', labelKey: 'annotation.underline', label: 'Underline' },\n squiggly: { icon: 'squiggly', labelKey: 'annotation.squiggly', label: 'Squiggly' },\n strikeout: { icon: 'strikethrough', labelKey: 'annotation.strikeout', label: 'Strikethrough' },\n square: { icon: 'square', labelKey: 'annotation.square', label: 'Square' },\n circle: { icon: 'circle', labelKey: 'annotation.circle', label: 'Circle' },\n line: { icon: 'line', labelKey: 'annotation.line', label: 'Line' },\n polygon: { icon: 'polygon', labelKey: 'annotation.polygon', label: 'Polygon' },\n polyline: { icon: 'zigzag', labelKey: 'annotation.polyline', label: 'Polyline' },\n ink: { icon: 'pencilMarker', labelKey: 'annotation.ink', label: 'Ink' },\n 'free-text': { icon: 'freeText', labelKey: 'annotation.freeText', label: 'Text' },\n stamp: { icon: 'rubberStamp', labelKey: 'annotation.stamp', label: 'Stamp' },\n caret: { icon: 'insertText', labelKey: 'annotation.caret', label: 'Caret' },\n redact: { icon: 'redact', labelKey: 'annotation.redact', label: 'Redact' },\n 'file-attachment': {\n icon: 'paperclip',\n labelKey: 'annotation.fileAttachment',\n label: 'Attachment',\n },\n};\n\nconst FALLBACK: CommentTypeConfig = {\n icon: 'message',\n labelKey: 'annotation.comment',\n label: 'Comment',\n};\n\nexport const commentTypeConfig = (dto: Annotation): CommentTypeConfig =>\n TYPE_CONFIG[dto.subtype] ?? FALLBACK;\n\n/**\n * The glyph's tint slots, read off the annotation itself — this is what makes\n * a card recognizable as \"that yellow highlight on page 3\". Free-text prefers\n * its `fontColor` override, since that is the color a reader actually sees.\n */\nexport const commentIconAccent = (dto: Annotation): IconAccent => {\n // Engine colors are `'#rrggbb'`, which CSS takes as they are.\n const anyA = dto as { color?: Color; interiorColor?: Color | null; fontColor?: Color };\n const primary = anyA.fontColor ?? anyA.color;\n const secondary = anyA.interiorColor ?? undefined;\n return {\n ...(primary ? { primary } : {}),\n ...(secondary ? { secondary } : {}),\n };\n};\n","import { useEffect, useMemo, useRef, useState } from 'react';\nimport { useCapability } from '@embedpdf/react/runtime';\nimport {\n AnnotationToken,\n annotationKey,\n useAnnotationState,\n useComments,\n useCommentThreads,\n type Annotation,\n type AnnotationRef,\n type CommentThreadView,\n} from '@embedpdf/react/annotation';\nimport { StageToken } from '@embedpdf/react/stage';\nimport { useCommands, useCommandsSettings } from '@embedpdf/react/commands';\nimport { useT } from '@embedpdf/react/i18n';\nimport { Icon } from './icons';\nimport { commentIconAccent, commentTypeConfig } from './comment-config';\n\n/**\n * The comments sidebar (right panel): a live view over the conversation\n * plane — page-grouped sections, and a card that identifies its annotation at\n * a glance by the type's glyph tinted with that annotation's own colors, plus\n * the ISO 32000 §12.5.6.3 review status per thread.\n *\n * There is no per-page loading dance: the plugin hydrates the whole document\n * at open (`annotations.list()`), so the list is complete the moment `hydration()`\n * says so, whether or not a page was ever scrolled to.\n *\n * Selection is two-way: clicking a card selects the annotation and\n * flies the camera to it (`stage.reveal`, the same verb search hits use);\n * selecting in the document scrolls that card into view here.\n *\n * Every action routes through the `comments` verbs — plain annotation writes\n * on the one optimistic pipeline — and every control is gated by\n * `permissionsFor`, the engine's own collab-resolver mirrors: what shows here\n * is what the engine will allow. With writing turned off (`comments.writing`,\n * which `readOnly` turns off) the threads are only read: no composer, no\n * status, no edit and no delete.\n */\n\nconst REVIEW_STATES = ['none', 'accepted', 'rejected', 'cancelled', 'completed'] as const;\n\nconst dateLabel = (iso: string | null): string => {\n if (!iso) return '';\n const date = new Date(iso);\n if (Number.isNaN(date.getTime())) return '';\n return date.toLocaleDateString(undefined, { month: 'short', day: 'numeric' });\n};\n\n/** Whether people write here: the `comments.writing` feature is on. */\nfunction useWriting(): boolean {\n const commands = useCommands();\n // Read again whenever what's turned off changes.\n useCommandsSettings((settings) => settings.disabledCategories);\n return !commands.isCategoryDisabled('comments.writing');\n}\n\nexport function CommentsPanel() {\n const t = useT();\n const writing = useWriting();\n const status = useAnnotationState((state) => state.status);\n const comments = useComments();\n const threads = useCommentThreads();\n const anno = useCapability(AnnotationToken);\n const stage = useCapability(StageToken);\n const selected = useAnnotationState((state) => state.selected);\n const selection = useMemo(() => selected.map((annotation) => annotation.ref), [selected]);\n const scrollRef = useRef<HTMLDivElement>(null);\n const cardRefs = useRef<Record<string, HTMLLIElement | null>>({});\n\n /** Which thread the document's selection points at — any member counts, so\n * selecting a reply's parent shape highlights the same card. */\n const selectedThreadKey = useMemo(() => {\n for (const ref of selection) {\n const thread = comments.getThread(ref);\n if (thread) return annotationKey(thread.root.ref);\n }\n return null;\n // `selection` identity changes on every selection write — the right key.\n }, [selection, comments]);\n\n // Reverse sync: the selected card scrolls itself into view.\n useEffect(() => {\n if (!selectedThreadKey || !scrollRef.current) return;\n const element = cardRefs.current[selectedThreadKey];\n if (!element) return;\n const container = scrollRef.current;\n const top =\n element.offsetTop -\n container.clientHeight / 2 +\n element.clientHeight / 2 -\n container.offsetTop;\n container.scrollTo({ top, behavior: 'smooth' });\n }, [selectedThreadKey]);\n\n /** Click a card: select the annotation and fly the camera to it. */\n const goTo = (view: CommentThreadView) => {\n anno.selection.set([view.root.ref]);\n if (view.pageIndex < 0) return;\n // Anchor values are viewport fractions (0–1), not percentages:\n // the annotation lands a third down the viewport, the find-bar feel.\n stage?.reveal(view.pageIndex, {\n rect: view.root.rect,\n anchor: { x: 'center', y: 0.35 },\n behavior: 'smooth',\n });\n };\n\n // Page-grouped, preserving the lens's display order within each page.\n const byPage = useMemo(() => {\n const groups = new Map<number, CommentThreadView[]>();\n for (const view of threads) {\n const arr = groups.get(view.pageIndex);\n if (arr) arr.push(view);\n else groups.set(view.pageIndex, [view]);\n }\n return [...groups.entries()].sort((left, right) => left[0] - right[0]);\n }, [threads]);\n\n if (status === 'loading') return <Empty icon=\"comment\" text={t('demo.commentsLoading')} />;\n if (status === 'forbidden') return <Empty icon=\"lock\" text={t('demo.commentsForbidden')} />;\n if (status === 'error') {\n return (\n <Empty icon=\"alertTriangle\" text={t('demo.commentsError')}>\n <button\n type=\"button\"\n onClick={() => void anno.refresh()}\n className=\"bg-accent text-on-accent rounded-md px-3 py-1.5 text-sm font-medium\"\n >\n {t('demo.commentsRetry')}\n </button>\n </Empty>\n );\n }\n if (threads.length === 0) {\n return (\n <Empty\n icon=\"comment\"\n text={t(writing ? 'demo.commentsEmpty' : 'demo.commentsEmptyReadOnly')}\n />\n );\n }\n\n return (\n <div ref={scrollRef} className=\"min-h-0 flex-1 overflow-y-auto\">\n <div className=\"flex flex-col gap-5 p-3\">\n {byPage.map(([pageIndex, group]) => (\n <div key={pageIndex} className=\"flex flex-col gap-2\">\n <div className=\"bg-surface sticky top-0 z-10\">\n <div className=\"border-border-subtle border-b pb-1.5\">\n <h3 className=\"text-fg text-sm font-semibold\">\n {t('demo.commentsPage', { params: { page: group[0]!.pageLabel } })}\n </h3>\n <p className=\"text-fg-muted text-xs\">\n {t(group.length === 1 ? 'demo.commentCount' : 'demo.commentCountPlural', {\n params: { count: String(group.length) },\n })}\n </p>\n </div>\n </div>\n <ul className=\"flex flex-col gap-2\">\n {group.map((view) => {\n const key = annotationKey(view.root.ref);\n return (\n <ThreadCard\n key={key}\n view={view}\n writing={writing}\n selected={selectedThreadKey === key}\n onSelect={() => goTo(view)}\n cardRef={(element) => {\n cardRefs.current[key] = element;\n }}\n />\n );\n })}\n </ul>\n </div>\n ))}\n </div>\n </div>\n );\n}\n\nfunction Empty({\n icon,\n text,\n children,\n}: {\n icon: string;\n text: string;\n children?: React.ReactNode;\n}) {\n return (\n <div className=\"flex flex-col items-center gap-3 px-4 py-10 text-center\">\n <Icon name={icon} size={32} className=\"text-fg-muted\" />\n <p className=\"text-fg-muted text-sm\">{text}</p>\n {children}\n </div>\n );\n}\n\nfunction ThreadCard({\n view,\n writing,\n selected,\n onSelect,\n cardRef,\n}: {\n view: CommentThreadView;\n /** Whether people write here; without it the thread is only read. */\n writing: boolean;\n selected: boolean;\n onSelect: () => void;\n cardRef: (element: HTMLLIElement | null) => void;\n}) {\n const t = useT();\n const comments = useComments();\n const [reply, setReply] = useState('');\n const root = view.root.ref;\n const perms = {\n canDeleteThread: writing && comments.canDeleteThread(root),\n canSetStatus: writing && comments.canSetStatus(root),\n canReply: writing && comments.canReply(root),\n };\n const config = commentTypeConfig(view.root);\n const status = view.review.mine?.state ?? 'none';\n const latest = view.review.lastChange;\n\n const sendReply = () => {\n const text = reply.trim();\n if (!text) return;\n setReply('');\n void comments.reply(view.root.ref, text);\n };\n\n return (\n <li\n ref={cardRef}\n onClick={onSelect}\n className={`bg-surface cursor-pointer rounded-lg border shadow-sm transition-all hover:shadow-md ${\n selected ? 'border-accent ring-accent/40 ring-2' : 'border-border-subtle'\n }`}\n >\n <div className=\"flex flex-col gap-2 p-3\">\n {/* identity row: the annotation's own glyph + color is the anchor */}\n <div className=\"flex items-start gap-2.5\">\n <div\n className=\"bg-hover mt-0.5 grid h-8 w-8 shrink-0 place-items-center rounded-full\"\n title={t(config.labelKey, { fallback: config.label })}\n >\n <Icon name={config.icon} size={18} accent={commentIconAccent(view.root)} />\n </div>\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-baseline gap-2\">\n <span className=\"text-fg truncate text-sm font-medium\">\n {view.root.author ?? t('demo.commentsAnonymous')}\n </span>\n <span className=\"text-fg-muted ms-auto shrink-0 text-xs\">\n {dateLabel(view.root.modifiedAt ?? view.root.createdAt)}\n </span>\n </div>\n {latest && (\n <span className=\"bg-accent-light text-accent mt-1 inline-block rounded px-1.5 py-0.5 text-[11px] font-medium\">\n {statusLabel(t, latest.state)}\n {latest.by ? ` — ${latest.by}` : ''}\n </span>\n )}\n </div>\n {perms.canDeleteThread && (\n <button\n type=\"button\"\n onClick={(event) => {\n event.stopPropagation();\n void comments.deleteThread(view.root.ref);\n }}\n className=\"text-fg-muted hover:text-fg grid h-6 w-6 shrink-0 place-items-center rounded\"\n title={t('demo.commentsDeleteThread')}\n >\n <Icon name=\"trash\" size={14} />\n </button>\n )}\n </div>\n\n <CommentBody\n annotationRef={view.root.ref}\n text={view.root.contents ?? ''}\n deletable={false}\n writing={writing}\n />\n\n {view.replies.length > 0 && (\n <div className=\"border-border-subtle flex flex-col gap-2 border-t pt-2\">\n {view.replies.map((replyDto) => (\n <Reply key={annotationKey(replyDto.ref)} dto={replyDto} writing={writing} />\n ))}\n </div>\n )}\n\n {(perms.canSetStatus || perms.canReply) && (\n <div className=\"border-border-subtle flex flex-col gap-1.5 border-t pt-2\">\n {perms.canSetStatus && (\n <label\n className=\"text-fg-muted flex items-center gap-2 text-xs\"\n onClick={(event) => event.stopPropagation()}\n >\n {t('demo.commentsStatus')}\n <select\n value={status}\n onChange={(event) => void comments.setStatus(view.root.ref, event.target.value)}\n className=\"border-border bg-surface text-fg flex-1 rounded-md border px-1.5 py-1 text-xs outline-none\"\n >\n {REVIEW_STATES.map((state) => (\n <option key={state} value={state}>\n {statusLabel(t, state)}\n </option>\n ))}\n </select>\n </label>\n )}\n {perms.canReply && (\n <div\n className=\"flex items-center gap-1.5\"\n onClick={(event) => event.stopPropagation()}\n >\n <input\n type=\"text\"\n value={reply}\n placeholder={\n view.root.contents || view.replies.length\n ? t('demo.commentsReplyPlaceholder')\n : t('demo.commentsAddPlaceholder')\n }\n onChange={(event) => setReply(event.target.value)}\n onKeyDown={(event) => event.key === 'Enter' && sendReply()}\n className=\"border-border bg-surface text-fg focus:border-accent w-full min-w-0 flex-1 rounded-md border px-2 py-1 text-sm outline-none\"\n />\n <button\n type=\"button\"\n onClick={sendReply}\n disabled={!reply.trim()}\n className=\"text-accent disabled:text-fg-muted grid h-7 w-7 shrink-0 place-items-center rounded-md\"\n title={t('demo.commentsReply')}\n >\n <Icon name=\"arrowForwardUp\" size={16} />\n </button>\n </div>\n )}\n </div>\n )}\n </div>\n </li>\n );\n}\n\nfunction Reply({ dto, writing }: { dto: Annotation; writing: boolean }) {\n const t = useT();\n return (\n <div className=\"border-border-subtle ms-1 border-s-2 ps-2\">\n <div className=\"flex items-baseline gap-2\">\n <span className=\"text-fg-secondary text-xs font-medium\">\n {dto.author ?? t('demo.commentsAnonymous')}\n </span>\n <span className=\"text-fg-muted text-[11px]\">\n {dateLabel(dto.modifiedAt ?? dto.createdAt)}\n </span>\n </div>\n <CommentBody annotationRef={dto.ref} text={dto.contents ?? ''} deletable writing={writing} />\n </div>\n );\n}\n\n/** One comment's text with inline edit (own, unlocked) and delete (replies), while people write. */\nfunction CommentBody({\n annotationRef,\n text,\n deletable,\n writing,\n}: {\n annotationRef: AnnotationRef;\n text: string;\n deletable: boolean;\n writing: boolean;\n}) {\n const t = useT();\n const comments = useComments();\n const perms = {\n canEditText: writing && comments.canSetText(annotationRef),\n canDelete: writing && comments.canDelete(annotationRef),\n };\n const [draft, setDraft] = useState<string | null>(null);\n\n if (draft !== null) {\n const save = () => {\n const next = draft.trim();\n setDraft(null);\n if (next && next !== text) void comments.setText(annotationRef, next);\n };\n return (\n <textarea\n value={draft}\n autoFocus\n rows={2}\n onClick={(event) => event.stopPropagation()}\n onChange={(event) => setDraft(event.target.value)}\n onBlur={save}\n onKeyDown={(event) => {\n if (event.key === 'Enter' && !event.shiftKey) {\n event.preventDefault();\n save();\n }\n if (event.key === 'Escape') setDraft(null);\n }}\n className=\"border-accent bg-surface text-fg w-full resize-none rounded-md border px-2 py-1 text-sm outline-none\"\n />\n );\n }\n if (!text && !perms.canEditText && !deletable) return null;\n return (\n <div className=\"group/body flex items-start gap-1\">\n <p className=\"text-fg min-w-0 flex-1 whitespace-pre-wrap text-sm\">{text}</p>\n {perms.canEditText && (\n <button\n type=\"button\"\n onClick={(event) => {\n event.stopPropagation();\n setDraft(text);\n }}\n className=\"text-fg-muted hover:text-fg grid h-5 w-5 shrink-0 place-items-center rounded opacity-0 group-hover/body:opacity-100\"\n title={t('demo.commentsEdit')}\n >\n <Icon name=\"pencilMarker\" size={12} />\n </button>\n )}\n {deletable && perms.canDelete && (\n <button\n type=\"button\"\n onClick={(event) => {\n event.stopPropagation();\n void comments.delete(annotationRef);\n }}\n className=\"text-fg-muted hover:text-fg grid h-5 w-5 shrink-0 place-items-center rounded opacity-0 group-hover/body:opacity-100\"\n title={t('demo.commentsDelete')}\n >\n <Icon name=\"trash\" size={12} />\n </button>\n )}\n </div>\n );\n}\n\nfunction statusLabel(t: ReturnType<typeof useT>, state: string): string {\n switch (state) {\n case 'none':\n return t('demo.commentsStatusNone');\n case 'accepted':\n return t('demo.commentsStatusAccepted');\n case 'rejected':\n return t('demo.commentsStatusRejected');\n case 'cancelled':\n return t('demo.commentsStatusCancelled');\n case 'completed':\n return t('demo.commentsStatusCompleted');\n default:\n return state; // custom vocabularies render verbatim\n }\n}\n"],"mappings":";;;;;;;;;AAyBA,MAAM,cAAiD;CACrD,MAAM;EAAE,MAAM;EAAW,UAAU;EAAsB,OAAO;CAAU;CAC1E,WAAW;EAAE,MAAM;EAAa,UAAU;EAAwB,OAAO;CAAY;CACrF,WAAW;EAAE,MAAM;EAAa,UAAU;EAAwB,OAAO;CAAY;CACrF,UAAU;EAAE,MAAM;EAAY,UAAU;EAAuB,OAAO;CAAW;CACjF,WAAW;EAAE,MAAM;EAAiB,UAAU;EAAwB,OAAO;CAAgB;CAC7F,QAAQ;EAAE,MAAM;EAAU,UAAU;EAAqB,OAAO;CAAS;CACzE,QAAQ;EAAE,MAAM;EAAU,UAAU;EAAqB,OAAO;CAAS;CACzE,MAAM;EAAE,MAAM;EAAQ,UAAU;EAAmB,OAAO;CAAO;CACjE,SAAS;EAAE,MAAM;EAAW,UAAU;EAAsB,OAAO;CAAU;CAC7E,UAAU;EAAE,MAAM;EAAU,UAAU;EAAuB,OAAO;CAAW;CAC/E,KAAK;EAAE,MAAM;EAAgB,UAAU;EAAkB,OAAO;CAAM;CACtE,aAAa;EAAE,MAAM;EAAY,UAAU;EAAuB,OAAO;CAAO;CAChF,OAAO;EAAE,MAAM;EAAe,UAAU;EAAoB,OAAO;CAAQ;CAC3E,OAAO;EAAE,MAAM;EAAc,UAAU;EAAoB,OAAO;CAAQ;CAC1E,QAAQ;EAAE,MAAM;EAAU,UAAU;EAAqB,OAAO;CAAS;CACzE,mBAAmB;EACjB,MAAM;EACN,UAAU;EACV,OAAO;CACT;AACF;AAEA,MAAM,WAA8B;CAClC,MAAM;CACN,UAAU;CACV,OAAO;AACT;AAEA,MAAa,qBAAqB,QAChC,YAAY,IAAI,YAAY;;;;;;AAO9B,MAAa,qBAAqB,QAAgC;CAEhE,MAAM,OAAO;CACb,MAAM,UAAU,KAAK,aAAa,KAAK;CACvC,MAAM,YAAY,KAAK,iBAAiB,KAAA;CACxC,OAAO;EACL,GAAI,UAAU,EAAE,QAAQ,IAAI,CAAC;EAC7B,GAAI,YAAY,EAAE,UAAU,IAAI,CAAC;CACnC;AACF;;;;;;;;;;;;;;;;;;;;;;;;AC/BA,MAAM,gBAAgB;CAAC;CAAQ;CAAY;CAAY;CAAa;AAAW;AAE/E,MAAM,aAAa,QAA+B;CAChD,IAAI,CAAC,KAAK,OAAO;CACjB,MAAM,OAAO,IAAI,KAAK,GAAG;CACzB,IAAI,OAAO,MAAM,KAAK,QAAQ,CAAC,GAAG,OAAO;CACzC,OAAO,KAAK,mBAAmB,KAAA,GAAW;EAAE,OAAO;EAAS,KAAK;CAAU,CAAC;AAC9E;;AAGA,SAAS,aAAsB;CAC7B,MAAM,WAAW,YAAY;CAE7B,qBAAqB,aAAa,SAAS,kBAAkB;CAC7D,OAAO,CAAC,SAAS,mBAAmB,kBAAkB;AACxD;AAEA,SAAgB,gBAAgB;CAC9B,MAAM,IAAI,KAAK;CACf,MAAM,UAAU,WAAW;CAC3B,MAAM,SAAS,oBAAoB,UAAU,MAAM,MAAM;CACzD,MAAM,WAAW,YAAY;CAC7B,MAAM,UAAU,kBAAkB;CAClC,MAAM,OAAO,cAAc,eAAe;CAC1C,MAAM,QAAQ,cAAc,UAAU;CACtC,MAAM,WAAW,oBAAoB,UAAU,MAAM,QAAQ;CAC7D,MAAM,YAAY,cAAc,SAAS,KAAK,eAAe,WAAW,GAAG,GAAG,CAAC,QAAQ,CAAC;CACxF,MAAM,YAAY,OAAuB,IAAI;CAC7C,MAAM,WAAW,OAA6C,CAAC,CAAC;;;CAIhE,MAAM,oBAAoB,cAAc;EACtC,KAAK,MAAM,OAAO,WAAW;GAC3B,MAAM,SAAS,SAAS,UAAU,GAAG;GACrC,IAAI,QAAQ,OAAO,cAAc,OAAO,KAAK,GAAG;EAClD;EACA,OAAO;CAET,GAAG,CAAC,WAAW,QAAQ,CAAC;CAGxB,gBAAgB;EACd,IAAI,CAAC,qBAAqB,CAAC,UAAU,SAAS;EAC9C,MAAM,UAAU,SAAS,QAAQ;EACjC,IAAI,CAAC,SAAS;EACd,MAAM,YAAY,UAAU;EAC5B,MAAM,MACJ,QAAQ,YACR,UAAU,eAAe,IACzB,QAAQ,eAAe,IACvB,UAAU;EACZ,UAAU,SAAS;GAAE;GAAK,UAAU;EAAS,CAAC;CAChD,GAAG,CAAC,iBAAiB,CAAC;;CAGtB,MAAM,QAAQ,SAA4B;EACxC,KAAK,UAAU,IAAI,CAAC,KAAK,KAAK,GAAG,CAAC;EAClC,IAAI,KAAK,YAAY,GAAG;EAGxB,OAAO,OAAO,KAAK,WAAW;GAC5B,MAAM,KAAK,KAAK;GAChB,QAAQ;IAAE,GAAG;IAAU,GAAG;GAAK;GAC/B,UAAU;EACZ,CAAC;CACH;CAGA,MAAM,SAAS,cAAc;EAC3B,MAAM,yBAAS,IAAI,IAAiC;EACpD,KAAK,MAAM,QAAQ,SAAS;GAC1B,MAAM,MAAM,OAAO,IAAI,KAAK,SAAS;GACrC,IAAI,KAAK,IAAI,KAAK,IAAI;QACjB,OAAO,IAAI,KAAK,WAAW,CAAC,IAAI,CAAC;EACxC;EACA,OAAO,CAAC,GAAG,OAAO,QAAQ,CAAC,CAAC,CAAC,MAAM,MAAM,UAAU,KAAK,KAAK,MAAM,EAAE;CACvE,GAAG,CAAC,OAAO,CAAC;CAEZ,IAAI,WAAW,WAAW,OAAO,oBAAC,OAAD;EAAO,MAAK;EAAU,MAAM,EAAE,sBAAsB;CAAI,CAAA;CACzF,IAAI,WAAW,aAAa,OAAO,oBAAC,OAAD;EAAO,MAAK;EAAO,MAAM,EAAE,wBAAwB;CAAI,CAAA;CAC1F,IAAI,WAAW,SACb,OACE,oBAAC,OAAD;EAAO,MAAK;EAAgB,MAAM,EAAE,oBAAoB;EACtD,UAAA,oBAAC,UAAD;GACE,MAAK;GACL,eAAe,KAAK,KAAK,QAAQ;GACjC,WAAU;GAET,UAAA,EAAE,oBAAoB;EACjB,CAAA;CACH,CAAA;CAGX,IAAI,QAAQ,WAAW,GACrB,OACE,oBAAC,OAAD;EACE,MAAK;EACL,MAAM,EAAE,UAAU,uBAAuB,4BAA4B;CACtE,CAAA;CAIL,OACE,oBAAC,OAAD;EAAK,KAAK;EAAW,WAAU;EAC7B,UAAA,oBAAC,OAAD;GAAK,WAAU;GACZ,UAAA,OAAO,KAAK,CAAC,WAAW,WACvB,qBAAC,OAAD;IAAqB,WAAU;IAA/B,UAAA,CACE,oBAAC,OAAD;KAAK,WAAU;KACb,UAAA,qBAAC,OAAD;MAAK,WAAU;MAAf,UAAA,CACE,oBAAC,MAAD;OAAI,WAAU;OACX,UAAA,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,MAAM,EAAE,CAAE,UAAU,EAAE,CAAC;MAC/D,CAAA,GACJ,oBAAC,KAAD;OAAG,WAAU;OACV,UAAA,EAAE,MAAM,WAAW,IAAI,sBAAsB,2BAA2B,EACvE,QAAQ,EAAE,OAAO,OAAO,MAAM,MAAM,EAAE,EACxC,CAAC;MACA,CAAA,CACA;;IACF,CAAA,GACL,oBAAC,MAAD;KAAI,WAAU;KACX,UAAA,MAAM,KAAK,SAAS;MACnB,MAAM,MAAM,cAAc,KAAK,KAAK,GAAG;MACvC,OACE,oBAAC,YAAD;OAEQ;OACG;OACT,UAAU,sBAAsB;OAChC,gBAAgB,KAAK,IAAI;OACzB,UAAU,YAAY;QACpB,SAAS,QAAQ,OAAO;OAC1B;MACD,GARM,GAQN;KAEL,CAAC;IACC,CAAA,CACD;GA9BK,GAAA,SA8BL,CACN;EACE,CAAA;CACF,CAAA;AAET;AAEA,SAAS,MAAM,EACb,MACA,MACA,YAKC;CACD,OACE,qBAAC,OAAD;EAAK,WAAU;EAAf,UAAA;GACE,oBAAC,MAAD;IAAM,MAAM;IAAM,MAAM;IAAI,WAAU;GAAiB,CAAA;GACvD,oBAAC,KAAD;IAAG,WAAU;IAAyB,UAAA;GAAQ,CAAA;GAC7C;EACE;;AAET;AAEA,SAAS,WAAW,EAClB,MACA,SACA,UACA,UACA,WAQC;CACD,MAAM,IAAI,KAAK;CACf,MAAM,WAAW,YAAY;CAC7B,MAAM,CAAC,OAAO,YAAY,SAAS,EAAE;CACrC,MAAM,OAAO,KAAK,KAAK;CACvB,MAAM,QAAQ;EACZ,iBAAiB,WAAW,SAAS,gBAAgB,IAAI;EACzD,cAAc,WAAW,SAAS,aAAa,IAAI;EACnD,UAAU,WAAW,SAAS,SAAS,IAAI;CAC7C;CACA,MAAM,SAAS,kBAAkB,KAAK,IAAI;CAC1C,MAAM,SAAS,KAAK,OAAO,MAAM,SAAS;CAC1C,MAAM,SAAS,KAAK,OAAO;CAE3B,MAAM,kBAAkB;EACtB,MAAM,OAAO,MAAM,KAAK;EACxB,IAAI,CAAC,MAAM;EACX,SAAS,EAAE;EACX,SAAc,MAAM,KAAK,KAAK,KAAK,IAAI;CACzC;CAEA,OACE,oBAAC,MAAD;EACE,KAAK;EACL,SAAS;EACT,WAAW,wFACT,WAAW,wCAAwC;EAGrD,UAAA,qBAAC,OAAD;GAAK,WAAU;GAAf,UAAA;IAEE,qBAAC,OAAD;KAAK,WAAU;KAAf,UAAA;MACE,oBAAC,OAAD;OACE,WAAU;OACV,OAAO,EAAE,OAAO,UAAU,EAAE,UAAU,OAAO,MAAM,CAAC;OAEpD,UAAA,oBAAC,MAAD;QAAM,MAAM,OAAO;QAAM,MAAM;QAAI,QAAQ,kBAAkB,KAAK,IAAI;OAAI,CAAA;MACvE,CAAA;MACL,qBAAC,OAAD;OAAK,WAAU;OAAf,UAAA,CACE,qBAAC,OAAD;QAAK,WAAU;QAAf,UAAA,CACE,oBAAC,QAAD;SAAM,WAAU;SACb,UAAA,KAAK,KAAK,UAAU,EAAE,wBAAwB;QAC3C,CAAA,GACN,oBAAC,QAAD;SAAM,WAAU;SACb,UAAA,UAAU,KAAK,KAAK,cAAc,KAAK,KAAK,SAAS;QAClD,CAAA,CACH;OACJ,CAAA,GAAA,UACC,qBAAC,QAAD;QAAM,WAAU;QAAhB,UAAA,CACG,YAAY,GAAG,OAAO,KAAK,GAC3B,OAAO,KAAK,MAAM,OAAO,OAAO,EAC7B;OAEL,CAAA,CAAA;;MACJ,MAAM,mBACL,oBAAC,UAAD;OACE,MAAK;OACL,UAAU,UAAU;QAClB,MAAM,gBAAgB;QACtB,SAAc,aAAa,KAAK,KAAK,GAAG;OAC1C;OACA,WAAU;OACV,OAAO,EAAE,2BAA2B;OAEpC,UAAA,oBAAC,MAAD;QAAM,MAAK;QAAQ,MAAM;OAAK,CAAA;MACxB,CAAA;KAEP;;IAEL,oBAAC,aAAD;KACE,eAAe,KAAK,KAAK;KACzB,MAAM,KAAK,KAAK,YAAY;KAC5B,WAAW;KACF;IACV,CAAA;IAEA,KAAK,QAAQ,SAAS,KACrB,oBAAC,OAAD;KAAK,WAAU;KACZ,UAAA,KAAK,QAAQ,KAAK,aACjB,oBAAC,OAAD;MAAyC,KAAK;MAAmB;KAAU,GAA/D,cAAc,SAAS,GAAG,CAAqC,CAC5E;IACE,CAAA;KAGL,MAAM,gBAAgB,MAAM,aAC5B,qBAAC,OAAD;KAAK,WAAU;KAAf,UAAA,CACG,MAAM,gBACL,qBAAC,SAAD;MACE,WAAU;MACV,UAAU,UAAU,MAAM,gBAAgB;MAF5C,UAAA,CAIG,EAAE,qBAAqB,GACxB,oBAAC,UAAD;OACE,OAAO;OACP,WAAW,UAAU,KAAK,SAAS,UAAU,KAAK,KAAK,KAAK,MAAM,OAAO,KAAK;OAC9E,WAAU;OAET,UAAA,cAAc,KAAK,UAClB,oBAAC,UAAD;QAAoB,OAAO;QACxB,UAAA,YAAY,GAAG,KAAK;OACf,GAFK,KAEL,CACT;MACK,CAAA,CACH;KAER,CAAA,GAAA,MAAM,YACL,qBAAC,OAAD;MACE,WAAU;MACV,UAAU,UAAU,MAAM,gBAAgB;MAF5C,UAAA,CAIE,oBAAC,SAAD;OACE,MAAK;OACL,OAAO;OACP,aACE,KAAK,KAAK,YAAY,KAAK,QAAQ,SAC/B,EAAE,+BAA+B,IACjC,EAAE,6BAA6B;OAErC,WAAW,UAAU,SAAS,MAAM,OAAO,KAAK;OAChD,YAAY,UAAU,MAAM,QAAQ,WAAW,UAAU;OACzD,WAAU;MACX,CAAA,GACD,oBAAC,UAAD;OACE,MAAK;OACL,SAAS;OACT,UAAU,CAAC,MAAM,KAAK;OACtB,WAAU;OACV,OAAO,EAAE,oBAAoB;OAE7B,UAAA,oBAAC,MAAD;QAAM,MAAK;QAAiB,MAAM;OAAK,CAAA;MACjC,CAAA,CACL;KAEJ,CAAA,CAAA;;GAEJ;;CACH,CAAA;AAER;AAEA,SAAS,MAAM,EAAE,KAAK,WAAkD;CACtE,MAAM,IAAI,KAAK;CACf,OACE,qBAAC,OAAD;EAAK,WAAU;EAAf,UAAA,CACE,qBAAC,OAAD;GAAK,WAAU;GAAf,UAAA,CACE,oBAAC,QAAD;IAAM,WAAU;IACb,UAAA,IAAI,UAAU,EAAE,wBAAwB;GACrC,CAAA,GACN,oBAAC,QAAD;IAAM,WAAU;IACb,UAAA,UAAU,IAAI,cAAc,IAAI,SAAS;GACtC,CAAA,CACH;EACL,CAAA,GAAA,oBAAC,aAAD;GAAa,eAAe,IAAI;GAAK,MAAM,IAAI,YAAY;GAAI,WAAA;GAAmB;EAAU,CAAA,CACzF;;AAET;;AAGA,SAAS,YAAY,EACnB,eACA,MACA,WACA,WAMC;CACD,MAAM,IAAI,KAAK;CACf,MAAM,WAAW,YAAY;CAC7B,MAAM,QAAQ;EACZ,aAAa,WAAW,SAAS,WAAW,aAAa;EACzD,WAAW,WAAW,SAAS,UAAU,aAAa;CACxD;CACA,MAAM,CAAC,OAAO,YAAY,SAAwB,IAAI;CAEtD,IAAI,UAAU,MAAM;EAClB,MAAM,aAAa;GACjB,MAAM,OAAO,MAAM,KAAK;GACxB,SAAS,IAAI;GACb,IAAI,QAAQ,SAAS,MAAM,SAAc,QAAQ,eAAe,IAAI;EACtE;EACA,OACE,oBAAC,YAAD;GACE,OAAO;GACP,WAAA;GACA,MAAM;GACN,UAAU,UAAU,MAAM,gBAAgB;GAC1C,WAAW,UAAU,SAAS,MAAM,OAAO,KAAK;GAChD,QAAQ;GACR,YAAY,UAAU;IACpB,IAAI,MAAM,QAAQ,WAAW,CAAC,MAAM,UAAU;KAC5C,MAAM,eAAe;KACrB,KAAK;IACP;IACA,IAAI,MAAM,QAAQ,UAAU,SAAS,IAAI;GAC3C;GACA,WAAU;EACX,CAAA;CAEL;CACA,IAAI,CAAC,QAAQ,CAAC,MAAM,eAAe,CAAC,WAAW,OAAO;CACtD,OACE,qBAAC,OAAD;EAAK,WAAU;EAAf,UAAA;GACE,oBAAC,KAAD;IAAG,WAAU;IAAsD,UAAA;GAAQ,CAAA;GAC1E,MAAM,eACL,oBAAC,UAAD;IACE,MAAK;IACL,UAAU,UAAU;KAClB,MAAM,gBAAgB;KACtB,SAAS,IAAI;IACf;IACA,WAAU;IACV,OAAO,EAAE,mBAAmB;IAE5B,UAAA,oBAAC,MAAD;KAAM,MAAK;KAAe,MAAM;IAAK,CAAA;GAC/B,CAAA;GAET,aAAa,MAAM,aAClB,oBAAC,UAAD;IACE,MAAK;IACL,UAAU,UAAU;KAClB,MAAM,gBAAgB;KACtB,SAAc,OAAO,aAAa;IACpC;IACA,WAAU;IACV,OAAO,EAAE,qBAAqB;IAE9B,UAAA,oBAAC,MAAD;KAAM,MAAK;KAAQ,MAAM;IAAK,CAAA;GACxB,CAAA;EAEP;;AAET;AAEA,SAAS,YAAY,GAA4B,OAAuB;CACtE,QAAQ,OAAR;EACE,KAAK,QACH,OAAO,EAAE,yBAAyB;EACpC,KAAK,YACH,OAAO,EAAE,6BAA6B;EACxC,KAAK,YACH,OAAO,EAAE,6BAA6B;EACxC,KAAK,aACH,OAAO,EAAE,8BAA8B;EACzC,KAAK,aACH,OAAO,EAAE,8BAA8B;EACzC,SACE,OAAO;CACX;AACF"}
|
|
1
|
+
{"version":3,"file":"comments-panel-D7Eadws9.js","names":[],"sources":["../src/ui/comment-config.ts","../src/ui/comments-panel.tsx"],"sourcesContent":["import type { Annotation, Color } from '@embedpdf/react/annotation';\n\n/**\n * How a comment card identifies its annotation at a glance: the type's glyph,\n * tinted with that annotation's own colors. The icon names are the chrome icon\n * set's registry names and accent slots. The color model follows the spec:\n * there is exactly one `/C` (\"color\") and one `/IC` (\"interiorColor\"), so\n * `primary` is the annotation's `/C` and `secondary` its interior fill where\n * the family has one.\n */\n\nexport interface IconAccent {\n primary?: string;\n secondary?: string;\n}\n\nexport interface CommentTypeConfig {\n /** Icon name in the chrome registry. */\n icon: string;\n /** i18n key for the type's display name (tooltip). */\n labelKey: string;\n /** Fallback when the locale has no entry. */\n label: string;\n}\n\nconst TYPE_CONFIG: Record<string, CommentTypeConfig> = {\n text: { icon: 'message', labelKey: 'annotation.comment', label: 'Comment' },\n highlight: { icon: 'highlight', labelKey: 'annotation.highlight', label: 'Highlight' },\n underline: { icon: 'underline', labelKey: 'annotation.underline', label: 'Underline' },\n squiggly: { icon: 'squiggly', labelKey: 'annotation.squiggly', label: 'Squiggly' },\n strikeout: { icon: 'strikethrough', labelKey: 'annotation.strikeout', label: 'Strikethrough' },\n square: { icon: 'square', labelKey: 'annotation.square', label: 'Square' },\n circle: { icon: 'circle', labelKey: 'annotation.circle', label: 'Circle' },\n line: { icon: 'line', labelKey: 'annotation.line', label: 'Line' },\n polygon: { icon: 'polygon', labelKey: 'annotation.polygon', label: 'Polygon' },\n polyline: { icon: 'zigzag', labelKey: 'annotation.polyline', label: 'Polyline' },\n ink: { icon: 'pencilMarker', labelKey: 'annotation.ink', label: 'Ink' },\n 'free-text': { icon: 'freeText', labelKey: 'annotation.freeText', label: 'Text' },\n stamp: { icon: 'rubberStamp', labelKey: 'annotation.stamp', label: 'Stamp' },\n caret: { icon: 'insertText', labelKey: 'annotation.caret', label: 'Caret' },\n redact: { icon: 'redact', labelKey: 'annotation.redact', label: 'Redact' },\n 'file-attachment': {\n icon: 'paperclip',\n labelKey: 'annotation.fileAttachment',\n label: 'Attachment',\n },\n};\n\nconst FALLBACK: CommentTypeConfig = {\n icon: 'message',\n labelKey: 'annotation.comment',\n label: 'Comment',\n};\n\nexport const commentTypeConfig = (dto: Annotation): CommentTypeConfig =>\n TYPE_CONFIG[dto.subtype] ?? FALLBACK;\n\n/**\n * The glyph's tint slots, read off the annotation itself — this is what makes\n * a card recognizable as \"that yellow highlight on page 3\". Free-text prefers\n * its `fontColor` override, since that is the color a reader actually sees.\n */\nexport const commentIconAccent = (dto: Annotation): IconAccent => {\n // Engine colors are `'#rrggbb'`, which CSS takes as they are.\n const anyA = dto as { color?: Color; interiorColor?: Color | null; fontColor?: Color };\n const primary = anyA.fontColor ?? anyA.color;\n const secondary = anyA.interiorColor ?? undefined;\n return {\n ...(primary ? { primary } : {}),\n ...(secondary ? { secondary } : {}),\n };\n};\n","import { useEffect, useMemo, useRef, useState } from 'react';\nimport { useCapability } from '@embedpdf/react/runtime';\nimport {\n AnnotationToken,\n annotationKey,\n useAnnotationState,\n useComments,\n useCommentThreads,\n type Annotation,\n type AnnotationRef,\n type CommentThreadView,\n} from '@embedpdf/react/annotation';\nimport { StageToken } from '@embedpdf/react/stage';\nimport { useCommands, useCommandsSettings } from '@embedpdf/react/commands';\nimport { useT } from '@embedpdf/react/i18n';\nimport { Icon } from './icons';\nimport { commentIconAccent, commentTypeConfig } from './comment-config';\n\n/**\n * The comments sidebar (right panel): a live view over the conversation\n * plane — page-grouped sections, and a card that identifies its annotation at\n * a glance by the type's glyph tinted with that annotation's own colors, plus\n * the ISO 32000 §12.5.6.3 review status per thread.\n *\n * There is no per-page loading dance: the plugin hydrates the whole document\n * at open (`annotations.list()`), so the list is complete the moment `hydration()`\n * says so, whether or not a page was ever scrolled to.\n *\n * Selection is two-way: clicking a card selects the annotation and\n * flies the camera to it (`stage.reveal`, the same verb search hits use);\n * selecting in the document scrolls that card into view here.\n *\n * Every action routes through the `comments` verbs — plain annotation writes\n * on the one optimistic pipeline — and every control is gated by\n * `permissionsFor`, the engine's own collab-resolver mirrors: what shows here\n * is what the engine will allow. With writing turned off (`comments.writing`,\n * which `readOnly` turns off) the threads are only read: no composer, no\n * status, no edit and no delete.\n */\n\nconst REVIEW_STATES = ['none', 'accepted', 'rejected', 'cancelled', 'completed'] as const;\n\nconst dateLabel = (iso: string | null): string => {\n if (!iso) return '';\n const date = new Date(iso);\n if (Number.isNaN(date.getTime())) return '';\n return date.toLocaleDateString(undefined, { month: 'short', day: 'numeric' });\n};\n\n/** Whether people write here: the `comments.writing` feature is on. */\nfunction useWriting(): boolean {\n const commands = useCommands();\n // Read again whenever what's turned off changes.\n useCommandsSettings((settings) => settings.disabledCategories);\n return !commands.isCategoryDisabled('comments.writing');\n}\n\nexport function CommentsPanel() {\n const t = useT();\n const writing = useWriting();\n const status = useAnnotationState((state) => state.status);\n const comments = useComments();\n const threads = useCommentThreads();\n const anno = useCapability(AnnotationToken);\n const stage = useCapability(StageToken);\n const selected = useAnnotationState((state) => state.selected);\n const selection = useMemo(() => selected.map((annotation) => annotation.ref), [selected]);\n const scrollRef = useRef<HTMLDivElement>(null);\n const cardRefs = useRef<Record<string, HTMLLIElement | null>>({});\n\n /** Which thread the document's selection points at — any member counts, so\n * selecting a reply's parent shape highlights the same card. */\n const selectedThreadKey = useMemo(() => {\n for (const ref of selection) {\n const thread = comments.getThread(ref);\n if (thread) return annotationKey(thread.root.ref);\n }\n return null;\n // `selection` identity changes on every selection write — the right key.\n }, [selection, comments]);\n\n // Reverse sync: the selected card scrolls itself into view.\n useEffect(() => {\n if (!selectedThreadKey || !scrollRef.current) return;\n const element = cardRefs.current[selectedThreadKey];\n if (!element) return;\n const container = scrollRef.current;\n const top =\n element.offsetTop -\n container.clientHeight / 2 +\n element.clientHeight / 2 -\n container.offsetTop;\n container.scrollTo({ top, behavior: 'smooth' });\n }, [selectedThreadKey]);\n\n /** Click a card: select the annotation and fly the camera to it. */\n const goTo = (view: CommentThreadView) => {\n anno.selection.set([view.root.ref]);\n if (view.pageIndex < 0) return;\n // Anchor values are viewport fractions (0–1), not percentages:\n // the annotation lands a third down the viewport, the find-bar feel.\n stage?.reveal(view.pageIndex, {\n rect: view.root.rect,\n anchor: { x: 'center', y: 0.35 },\n behavior: 'smooth',\n });\n };\n\n // Page-grouped, preserving the lens's display order within each page.\n const byPage = useMemo(() => {\n const groups = new Map<number, CommentThreadView[]>();\n for (const view of threads) {\n const arr = groups.get(view.pageIndex);\n if (arr) arr.push(view);\n else groups.set(view.pageIndex, [view]);\n }\n return [...groups.entries()].sort((left, right) => left[0] - right[0]);\n }, [threads]);\n\n if (status === 'loading') return <Empty icon=\"comment\" text={t('demo.commentsLoading')} />;\n if (status === 'forbidden') return <Empty icon=\"lock\" text={t('demo.commentsForbidden')} />;\n if (status === 'error') {\n return (\n <Empty icon=\"alertTriangle\" text={t('demo.commentsError')}>\n <button\n type=\"button\"\n onClick={() => void anno.refresh()}\n className=\"bg-accent text-on-accent rounded-md px-3 py-1.5 text-sm font-medium\"\n >\n {t('demo.commentsRetry')}\n </button>\n </Empty>\n );\n }\n if (threads.length === 0) {\n return (\n <Empty\n icon=\"comment\"\n text={t(writing ? 'demo.commentsEmpty' : 'demo.commentsEmptyReadOnly')}\n />\n );\n }\n\n return (\n <div ref={scrollRef} className=\"min-h-0 flex-1 overflow-y-auto\">\n <div className=\"flex flex-col gap-5 p-3\">\n {byPage.map(([pageIndex, group]) => (\n <div key={pageIndex} className=\"flex flex-col gap-2\">\n <div className=\"bg-surface sticky top-0 z-10\">\n <div className=\"border-border-subtle border-b pb-1.5\">\n <h3 className=\"text-fg text-sm font-semibold\">\n {t('demo.commentsPage', { params: { page: group[0]!.pageLabel } })}\n </h3>\n <p className=\"text-fg-muted text-xs\">\n {t(group.length === 1 ? 'demo.commentCount' : 'demo.commentCountPlural', {\n params: { count: String(group.length) },\n })}\n </p>\n </div>\n </div>\n <ul className=\"flex flex-col gap-2\">\n {group.map((view) => {\n const key = annotationKey(view.root.ref);\n return (\n <ThreadCard\n key={key}\n view={view}\n writing={writing}\n selected={selectedThreadKey === key}\n onSelect={() => goTo(view)}\n cardRef={(element) => {\n cardRefs.current[key] = element;\n }}\n />\n );\n })}\n </ul>\n </div>\n ))}\n </div>\n </div>\n );\n}\n\nfunction Empty({\n icon,\n text,\n children,\n}: {\n icon: string;\n text: string;\n children?: React.ReactNode;\n}) {\n return (\n <div className=\"flex flex-col items-center gap-3 px-4 py-10 text-center\">\n <Icon name={icon} size={32} className=\"text-fg-muted\" />\n <p className=\"text-fg-muted text-sm\">{text}</p>\n {children}\n </div>\n );\n}\n\nfunction ThreadCard({\n view,\n writing,\n selected,\n onSelect,\n cardRef,\n}: {\n view: CommentThreadView;\n /** Whether people write here; without it the thread is only read. */\n writing: boolean;\n selected: boolean;\n onSelect: () => void;\n cardRef: (element: HTMLLIElement | null) => void;\n}) {\n const t = useT();\n const comments = useComments();\n const [reply, setReply] = useState('');\n const root = view.root.ref;\n const perms = {\n canDeleteThread: writing && comments.canDeleteThread(root),\n canSetStatus: writing && comments.canSetStatus(root),\n canReply: writing && comments.canReply(root),\n };\n const config = commentTypeConfig(view.root);\n const status = view.review.mine?.state ?? 'none';\n const latest = view.review.lastChange;\n\n const sendReply = () => {\n const text = reply.trim();\n if (!text) return;\n setReply('');\n void comments.reply(view.root.ref, text);\n };\n\n return (\n <li\n ref={cardRef}\n onClick={onSelect}\n className={`bg-surface cursor-pointer rounded-lg border shadow-sm transition-all hover:shadow-md ${\n selected ? 'border-accent ring-accent/40 ring-2' : 'border-border-subtle'\n }`}\n >\n <div className=\"flex flex-col gap-2 p-3\">\n {/* identity row: the annotation's own glyph + color is the anchor */}\n <div className=\"flex items-start gap-2.5\">\n <div\n className=\"bg-hover mt-0.5 grid h-8 w-8 shrink-0 place-items-center rounded-full\"\n title={t(config.labelKey, { fallback: config.label })}\n >\n <Icon name={config.icon} size={18} accent={commentIconAccent(view.root)} />\n </div>\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-baseline gap-2\">\n <span className=\"text-fg truncate text-sm font-medium\">\n {view.root.author ?? t('demo.commentsAnonymous')}\n </span>\n <span className=\"text-fg-muted ms-auto shrink-0 text-xs\">\n {dateLabel(view.root.modifiedAt ?? view.root.createdAt)}\n </span>\n </div>\n {latest && (\n <span className=\"bg-accent-light text-accent mt-1 inline-block rounded px-1.5 py-0.5 text-[11px] font-medium\">\n {statusLabel(t, latest.state)}\n {latest.by ? ` — ${latest.by}` : ''}\n </span>\n )}\n </div>\n {perms.canDeleteThread && (\n <button\n type=\"button\"\n onClick={(event) => {\n event.stopPropagation();\n void comments.deleteThread(view.root.ref);\n }}\n className=\"text-fg-muted hover:text-fg grid h-6 w-6 shrink-0 place-items-center rounded\"\n title={t('demo.commentsDeleteThread')}\n >\n <Icon name=\"trash\" size={14} />\n </button>\n )}\n </div>\n\n <CommentBody\n annotationRef={view.root.ref}\n text={view.root.contents ?? ''}\n deletable={false}\n writing={writing}\n />\n\n {view.replies.length > 0 && (\n <div className=\"border-border-subtle flex flex-col gap-2 border-t pt-2\">\n {view.replies.map((replyDto) => (\n <Reply key={annotationKey(replyDto.ref)} dto={replyDto} writing={writing} />\n ))}\n </div>\n )}\n\n {(perms.canSetStatus || perms.canReply) && (\n <div className=\"border-border-subtle flex flex-col gap-1.5 border-t pt-2\">\n {perms.canSetStatus && (\n <label\n className=\"text-fg-muted flex items-center gap-2 text-xs\"\n onClick={(event) => event.stopPropagation()}\n >\n {t('demo.commentsStatus')}\n <select\n value={status}\n onChange={(event) => void comments.setStatus(view.root.ref, event.target.value)}\n className=\"border-border bg-surface text-fg flex-1 rounded-md border px-1.5 py-1 text-xs outline-none\"\n >\n {REVIEW_STATES.map((state) => (\n <option key={state} value={state}>\n {statusLabel(t, state)}\n </option>\n ))}\n </select>\n </label>\n )}\n {perms.canReply && (\n <div\n className=\"flex items-center gap-1.5\"\n onClick={(event) => event.stopPropagation()}\n >\n <input\n type=\"text\"\n value={reply}\n placeholder={\n view.root.contents || view.replies.length\n ? t('demo.commentsReplyPlaceholder')\n : t('demo.commentsAddPlaceholder')\n }\n onChange={(event) => setReply(event.target.value)}\n onKeyDown={(event) => event.key === 'Enter' && sendReply()}\n className=\"border-border bg-surface text-fg focus:border-accent w-full min-w-0 flex-1 rounded-md border px-2 py-1 text-sm outline-none\"\n />\n <button\n type=\"button\"\n onClick={sendReply}\n disabled={!reply.trim()}\n className=\"text-accent disabled:text-fg-muted grid h-7 w-7 shrink-0 place-items-center rounded-md\"\n title={t('demo.commentsReply')}\n >\n <Icon name=\"arrowForwardUp\" size={16} />\n </button>\n </div>\n )}\n </div>\n )}\n </div>\n </li>\n );\n}\n\nfunction Reply({ dto, writing }: { dto: Annotation; writing: boolean }) {\n const t = useT();\n return (\n <div className=\"border-border-subtle ms-1 border-s-2 ps-2\">\n <div className=\"flex items-baseline gap-2\">\n <span className=\"text-fg-secondary text-xs font-medium\">\n {dto.author ?? t('demo.commentsAnonymous')}\n </span>\n <span className=\"text-fg-muted text-[11px]\">\n {dateLabel(dto.modifiedAt ?? dto.createdAt)}\n </span>\n </div>\n <CommentBody annotationRef={dto.ref} text={dto.contents ?? ''} deletable writing={writing} />\n </div>\n );\n}\n\n/** One comment's text with inline edit (own, unlocked) and delete (replies), while people write. */\nfunction CommentBody({\n annotationRef,\n text,\n deletable,\n writing,\n}: {\n annotationRef: AnnotationRef;\n text: string;\n deletable: boolean;\n writing: boolean;\n}) {\n const t = useT();\n const comments = useComments();\n const perms = {\n canEditText: writing && comments.canSetText(annotationRef),\n canDelete: writing && comments.canDelete(annotationRef),\n };\n const [draft, setDraft] = useState<string | null>(null);\n\n if (draft !== null) {\n const save = () => {\n const next = draft.trim();\n setDraft(null);\n if (next && next !== text) void comments.setText(annotationRef, next);\n };\n return (\n <textarea\n value={draft}\n autoFocus\n rows={2}\n onClick={(event) => event.stopPropagation()}\n onChange={(event) => setDraft(event.target.value)}\n onBlur={save}\n onKeyDown={(event) => {\n if (event.key === 'Enter' && !event.shiftKey) {\n event.preventDefault();\n save();\n }\n if (event.key === 'Escape') setDraft(null);\n }}\n className=\"border-accent bg-surface text-fg w-full resize-none rounded-md border px-2 py-1 text-sm outline-none\"\n />\n );\n }\n if (!text && !perms.canEditText && !deletable) return null;\n return (\n <div className=\"group/body flex items-start gap-1\">\n <p className=\"text-fg min-w-0 flex-1 whitespace-pre-wrap text-sm\">{text}</p>\n {perms.canEditText && (\n <button\n type=\"button\"\n onClick={(event) => {\n event.stopPropagation();\n setDraft(text);\n }}\n className=\"text-fg-muted hover:text-fg grid h-5 w-5 shrink-0 place-items-center rounded opacity-0 group-hover/body:opacity-100\"\n title={t('demo.commentsEdit')}\n >\n <Icon name=\"pencilMarker\" size={12} />\n </button>\n )}\n {deletable && perms.canDelete && (\n <button\n type=\"button\"\n onClick={(event) => {\n event.stopPropagation();\n void comments.delete(annotationRef);\n }}\n className=\"text-fg-muted hover:text-fg grid h-5 w-5 shrink-0 place-items-center rounded opacity-0 group-hover/body:opacity-100\"\n title={t('demo.commentsDelete')}\n >\n <Icon name=\"trash\" size={12} />\n </button>\n )}\n </div>\n );\n}\n\nfunction statusLabel(t: ReturnType<typeof useT>, state: string): string {\n switch (state) {\n case 'none':\n return t('demo.commentsStatusNone');\n case 'accepted':\n return t('demo.commentsStatusAccepted');\n case 'rejected':\n return t('demo.commentsStatusRejected');\n case 'cancelled':\n return t('demo.commentsStatusCancelled');\n case 'completed':\n return t('demo.commentsStatusCompleted');\n default:\n return state; // custom vocabularies render verbatim\n }\n}\n"],"mappings":"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"}
|
|
@@ -99,6 +99,7 @@ const de = {
|
|
|
99
99
|
note: "Kommentar",
|
|
100
100
|
link: "Link",
|
|
101
101
|
gotoLink: "Link öffnen",
|
|
102
|
+
saveFile: "Datei speichern",
|
|
102
103
|
removeLink: "Link entfernen",
|
|
103
104
|
delete: "Löschen",
|
|
104
105
|
group: "Gruppieren",
|
|
@@ -155,12 +156,44 @@ const de = {
|
|
|
155
156
|
"annotations-create": "Hinzufügen von Anmerkungen ist nicht zulässig",
|
|
156
157
|
"doc-annotate-modify": "Ändern von Anmerkungen ist nicht zulässig",
|
|
157
158
|
"doc-annotate-read": "Anzeigen von Anmerkungen ist nicht zulässig",
|
|
159
|
+
"doc-attachments-modify": "Das Hinzufügen von Dateien ist nicht erlaubt",
|
|
158
160
|
"doc-download": "Herunterladen ist nicht zulässig",
|
|
159
161
|
"doc-forms-modify": "Bearbeiten von Formularfeldern ist nicht zulässig",
|
|
162
|
+
"doc-outline-modify": "Das Ändern der Lesezeichen ist nicht erlaubt",
|
|
163
|
+
"doc-pages-assemble": "Das Ändern der Seiten ist nicht erlaubt",
|
|
160
164
|
"doc-print": "Drucken ist nicht zulässig",
|
|
161
165
|
"doc-text-copy": "Kopieren ist nicht zulässig",
|
|
162
166
|
"doc-text-search": "Suchen ist nicht zulässig"
|
|
163
167
|
},
|
|
168
|
+
attachment: {
|
|
169
|
+
add: "Datei hinzufügen",
|
|
170
|
+
save: "Speichern",
|
|
171
|
+
goTo: "Gehe zu Seite",
|
|
172
|
+
delete: "Löschen",
|
|
173
|
+
more: "Weitere Optionen"
|
|
174
|
+
},
|
|
175
|
+
outline: {
|
|
176
|
+
add: "Lesezeichen hinzufügen",
|
|
177
|
+
addChild: "Untergeordnetes Lesezeichen hinzufügen",
|
|
178
|
+
rename: "Umbenennen",
|
|
179
|
+
setDestination: "Ziel auf aktuelle Ansicht setzen",
|
|
180
|
+
properties: "Eigenschaften…",
|
|
181
|
+
delete: "Löschen",
|
|
182
|
+
expandAll: "Alle erweitern",
|
|
183
|
+
collapseAll: "Alle reduzieren",
|
|
184
|
+
more: "Weitere Optionen"
|
|
185
|
+
},
|
|
186
|
+
pages: {
|
|
187
|
+
rotateClockwise: "Seite im Uhrzeigersinn drehen",
|
|
188
|
+
rotateCounterclockwise: "Seite gegen den Uhrzeigersinn drehen",
|
|
189
|
+
delete: "Seiten löschen",
|
|
190
|
+
duplicate: "Seiten duplizieren",
|
|
191
|
+
insertBlank: "Leere Seite einfügen",
|
|
192
|
+
insertFile: "Aus Datei einfügen…",
|
|
193
|
+
extract: "Seiten extrahieren",
|
|
194
|
+
selectAll: "Alle Seiten auswählen",
|
|
195
|
+
more: "Seitenoptionen"
|
|
196
|
+
},
|
|
164
197
|
turnedOff: "{label} ist nicht verfügbar"
|
|
165
198
|
},
|
|
166
199
|
passwordPrompt: {
|
|
@@ -213,6 +246,25 @@ const de = {
|
|
|
213
246
|
other: "Sonstiges"
|
|
214
247
|
},
|
|
215
248
|
goToPage: { go: "Los" },
|
|
249
|
+
print: {
|
|
250
|
+
title: "Drucken",
|
|
251
|
+
pages: "Seiten",
|
|
252
|
+
allPages: "Alle Seiten",
|
|
253
|
+
currentPage: "Aktuelle Seite",
|
|
254
|
+
range: "Benutzerdefiniert",
|
|
255
|
+
rangeLabel: "Zu druckende Seiten",
|
|
256
|
+
rangePlaceholder: "z. B. 1-3, 5",
|
|
257
|
+
rangeInvalid: "Seitenzahlen von 1 bis {total}, z. B. 1-3, 5",
|
|
258
|
+
annotations: "Anmerkungen drucken",
|
|
259
|
+
preparing: "Wird vorbereitet…",
|
|
260
|
+
preparingPage: "Seite {page} von {total} wird vorbereitet…",
|
|
261
|
+
ready: "Bereit zum Drucken.",
|
|
262
|
+
images: "Die Seiten werden als Bilder mit {dpi} DPI gedruckt.",
|
|
263
|
+
lowResolution: "Dieses Dokument erlaubt nur das Drucken in niedriger Auflösung ({dpi} DPI).",
|
|
264
|
+
failed: "Der Ausdruck konnte nicht vorbereitet werden.",
|
|
265
|
+
cancel: "Abbrechen",
|
|
266
|
+
print: "Drucken"
|
|
267
|
+
},
|
|
216
268
|
panels: {
|
|
217
269
|
thumbnails: "Seitenminiaturen",
|
|
218
270
|
outline: "Lesezeichen",
|
|
@@ -408,6 +460,46 @@ const de = {
|
|
|
408
460
|
noRotate: "Bleibt aufrecht, wenn die Seite gedreht wird",
|
|
409
461
|
invisible: "Veraltet: unbekannte Untertypen ausblenden"
|
|
410
462
|
},
|
|
463
|
+
attachments: {
|
|
464
|
+
loading: "Anhänge werden geladen…",
|
|
465
|
+
failed: "Die Anhänge konnten nicht gelesen werden.",
|
|
466
|
+
empty: "Dieses Dokument hat keine angehängten Dateien",
|
|
467
|
+
drop: "Dateien zum Anhängen hier ablegen",
|
|
468
|
+
dropHint: "Oder Dateien hier ablegen",
|
|
469
|
+
adding: "Wird hinzugefügt…",
|
|
470
|
+
onPage: "Seite {page}",
|
|
471
|
+
count: "{count} Datei",
|
|
472
|
+
countPlural: "{count} Dateien"
|
|
473
|
+
},
|
|
474
|
+
outline: {
|
|
475
|
+
filter: "Lesezeichen filtern",
|
|
476
|
+
loading: "Lesezeichen werden geladen…",
|
|
477
|
+
failed: "Die Lesezeichen konnten nicht gelesen werden.",
|
|
478
|
+
empty: "Dieses Dokument hat keine Lesezeichen",
|
|
479
|
+
noMatches: "Keine passenden Lesezeichen",
|
|
480
|
+
incomplete: "Ein Teil der Lesezeichen konnte nicht gelesen werden.",
|
|
481
|
+
untitled: "Unbenannt",
|
|
482
|
+
properties: {
|
|
483
|
+
title: "Lesezeicheneigenschaften",
|
|
484
|
+
name: "Titel",
|
|
485
|
+
color: "Farbe",
|
|
486
|
+
noColor: "Keine",
|
|
487
|
+
customColor: "Eigene Farbe",
|
|
488
|
+
bold: "Fett",
|
|
489
|
+
italic: "Kursiv",
|
|
490
|
+
open: "Beim Öffnen des Dokuments erweitert",
|
|
491
|
+
target: "Ziel",
|
|
492
|
+
targetNone: "Keins",
|
|
493
|
+
targetView: "Aktuelle Ansicht",
|
|
494
|
+
targetNamed: "Seitenaktion",
|
|
495
|
+
targetKept: "Unverändert",
|
|
496
|
+
keptNote: "Dieses Lesezeichen führt ein Skript aus oder öffnet eine andere Datei. Es kann hier nicht geändert werden.",
|
|
497
|
+
fit: "Anpassung",
|
|
498
|
+
fitKept: "Wie bisher",
|
|
499
|
+
save: "Speichern",
|
|
500
|
+
cancel: "Abbrechen"
|
|
501
|
+
}
|
|
502
|
+
},
|
|
411
503
|
linkEditor: {
|
|
412
504
|
toUrl: "Link zu einer URL",
|
|
413
505
|
url: "URL",
|
|
@@ -563,4 +655,4 @@ const de = {
|
|
|
563
655
|
//#endregion
|
|
564
656
|
exports.de = de;
|
|
565
657
|
|
|
566
|
-
//# sourceMappingURL=de-
|
|
658
|
+
//# sourceMappingURL=de-7_MvFWzN.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"de-7_MvFWzN.cjs","names":[],"sources":["../src/locales/de.ts"],"sourcesContent":["import type { Locale } from '@embedpdf/react/i18n';\n\n/**\n * German pack, in the words Adobe Acrobat's German edition uses. Machine-translated from the\n * English pack (`./en.ts`) and not yet reviewed by a native speaker.\n */\nexport const de: Locale = {\n code: 'de',\n name: 'Deutsch',\n translations: {\n measurement: {\n title: 'Messungen',\n distance: 'Abstand',\n perimeter: 'Umfang',\n area: 'Fläche',\n areaUnit: 'Flächeneinheit',\n resetLabel: 'Beschriftungsposition zurücksetzen',\n calibrate: 'Maßstab kalibrieren',\n scale: 'Maßstab',\n custom: 'Benutzerdefiniert',\n unavailable: 'Nicht verfügbar',\n instructions:\n 'Ziehen Sie, um einen Abstand zu messen, und klicken Sie dann, um die Maßlinie zu platzieren. Klicken Sie für einen Umfang oder eine Fläche auf die Eckpunkte und doppelklicken Sie zum Abschließen. Flächengrenzen dürfen sich nicht kreuzen; eine nicht verfügbare Vorschau kann nicht abgeschlossen werden. Drücken Sie Escape zum Abbrechen. Ziehen Sie die Beschriftung selbst, um sie zu verschieben.',\n sessionOnly: 'Diese Engine speichert die Seitenkalibrierung nur für diese Sitzung.',\n allPages: 'Auf alle Seiten anwenden',\n recalculate: 'Vorhandene Messungen neu berechnen',\n preset: 'Maßstabsvorgabe',\n choosePreset: 'Vorgabe auswählen',\n unit: 'Einheit',\n precision: 'Genauigkeit',\n selection: 'Ausgewählte Messungen',\n report: '{updated} aktualisiert · {skipped} übersprungen · {failed} fehlgeschlagen',\n knownLength: 'Geben Sie die tatsächliche Länge der gerade gezeichneten Linie ein.',\n length: 'Bekannte Länge',\n apply: 'Maßstab anwenden',\n applying: 'Wird angewendet…',\n },\n commands: {\n zoom: {\n in: 'Vergrößern',\n out: 'Verkleinern',\n fitPage: 'Ganze Seite',\n fitWidth: 'Seitenbreite',\n automatic: 'Automatisch',\n menu: 'Zoom',\n level: 'Zoomstufe',\n p50: '50 %',\n p100: '100 %',\n p150: '150 %',\n p200: '200 %',\n p400: '400 %',\n },\n pan: 'Verschieben',\n pointer: 'Auswählen',\n comment: 'Kommentar',\n style: 'Stil',\n menu: 'Menü',\n viewControls: 'Ansichtssteuerung',\n open: 'Öffnen',\n download: 'Herunterladen',\n print: 'Drucken',\n fullscreen: 'Vollbild',\n spread: {\n group: 'Seitenlayout',\n none: 'Einzelseite',\n odd: 'Zweiseitig',\n even: 'Deckblatt',\n },\n scroll: {\n group: 'Bildlauf',\n vertical: 'Vertikal',\n horizontal: 'Horizontal',\n },\n rotate: {\n group: 'Drehen',\n clockwise: 'Im Uhrzeigersinn drehen',\n counterclockwise: 'Gegen den Uhrzeigersinn drehen',\n },\n mode: {\n measure: 'Messen',\n group: 'Modus',\n view: 'Ansicht',\n annotate: 'Kommentieren',\n shapes: 'Formen',\n insert: 'Einfügen',\n form: 'Formular',\n redact: 'Schwärzen',\n },\n annotate: {\n cancelCreation: 'Zeichnen abbrechen',\n highlight: 'Hervorheben',\n strikeout: 'Durchstreichen',\n underline: 'Unterstreichen',\n squiggly: 'Wellenlinie',\n ink: 'Zeichnen',\n inkHighlight: 'Textmarker',\n text: 'Text',\n insertText: 'Text einfügen',\n replaceText: 'Text ersetzen',\n callout: 'Legende',\n note: 'Kommentar',\n link: 'Link',\n gotoLink: 'Link öffnen',\n saveFile: 'Datei speichern',\n removeLink: 'Link entfernen',\n delete: 'Löschen',\n group: 'Gruppieren',\n ungroup: 'Gruppierung aufheben',\n stampFromSelection: 'Stempel erstellen',\n strip: 'Aktionen für Anmerkungen',\n },\n selection: {\n copy: 'Kopieren',\n strip: 'Aktionen für Textauswahl',\n },\n shapes: {\n rectangle: 'Rechteck',\n circle: 'Ellipse',\n line: 'Linie',\n arrow: 'Pfeil',\n polygon: 'Polygon',\n polyline: 'Polylinie',\n },\n insert: {\n stamp: 'Stempel',\n attachment: 'Datei anhängen',\n signature: 'Unterschrift',\n image: 'Bild',\n },\n form: {\n textfield: 'Textfeld',\n checkbox: 'Kontrollkästchen',\n radio: 'Optionsfeld',\n select: 'Dropdown-Liste',\n listbox: 'Listenfeld',\n button: 'Schaltfläche',\n signature: 'Unterschriftsfeld',\n // The Form mode's design switch, which opens the form designer's sidebar.\n design: 'Formularentwurf',\n },\n redact: {\n mark: 'Zum Schwärzen markieren',\n applyAll: 'Schwärzungen anwenden',\n clearAll: 'Markierungen löschen',\n },\n undo: 'Rückgängig',\n redo: 'Wiederholen',\n page: {\n next: 'Nächste Seite',\n previous: 'Vorherige Seite',\n first: 'Erste Seite',\n last: 'Letzte Seite',\n goTo: 'Gehe zu Seite',\n },\n find: 'Suchen',\n shortcuts: 'Tastenkombinationen',\n notAllowed: {\n default: '{label} ist nicht zulässig',\n 'annotations-create': 'Hinzufügen von Anmerkungen ist nicht zulässig',\n 'doc-annotate-modify': 'Ändern von Anmerkungen ist nicht zulässig',\n 'doc-annotate-read': 'Anzeigen von Anmerkungen ist nicht zulässig',\n 'doc-attachments-modify': 'Das Hinzufügen von Dateien ist nicht erlaubt',\n 'doc-download': 'Herunterladen ist nicht zulässig',\n 'doc-forms-modify': 'Bearbeiten von Formularfeldern ist nicht zulässig',\n 'doc-outline-modify': 'Das Ändern der Lesezeichen ist nicht erlaubt',\n 'doc-pages-assemble': 'Das Ändern der Seiten ist nicht erlaubt',\n 'doc-print': 'Drucken ist nicht zulässig',\n 'doc-text-copy': 'Kopieren ist nicht zulässig',\n 'doc-text-search': 'Suchen ist nicht zulässig',\n },\n attachment: {\n add: 'Datei hinzufügen',\n save: 'Speichern',\n goTo: 'Gehe zu Seite',\n delete: 'Löschen',\n more: 'Weitere Optionen',\n },\n outline: {\n add: 'Lesezeichen hinzufügen',\n addChild: 'Untergeordnetes Lesezeichen hinzufügen',\n rename: 'Umbenennen',\n setDestination: 'Ziel auf aktuelle Ansicht setzen',\n properties: 'Eigenschaften…',\n delete: 'Löschen',\n expandAll: 'Alle erweitern',\n collapseAll: 'Alle reduzieren',\n more: 'Weitere Optionen',\n },\n // The page commands, in the Pages mode and a page's menu.\n pages: {\n rotateClockwise: 'Seite im Uhrzeigersinn drehen',\n rotateCounterclockwise: 'Seite gegen den Uhrzeigersinn drehen',\n delete: 'Seiten löschen',\n duplicate: 'Seiten duplizieren',\n insertBlank: 'Leere Seite einfügen',\n insertFile: 'Aus Datei einfügen…',\n extract: 'Seiten extrahieren',\n selectAll: 'Alle Seiten auswählen',\n more: 'Seitenoptionen',\n },\n turnedOff: '{label} ist nicht verfügbar',\n },\n passwordPrompt: {\n title: 'Kennwort erforderlich',\n required:\n 'Dieses Dokument ist kennwortgeschützt. Geben Sie das Kennwort ein, um es zu öffnen.',\n incorrect: 'Das Kennwort ist falsch. Bitte versuchen Sie es erneut.',\n incorrectWarning: 'Falsches Kennwort',\n label: 'Kennwort',\n placeholder: 'Kennwort eingeben',\n cancel: 'Abbrechen',\n open: 'Öffnen',\n opening: 'Wird geöffnet…',\n },\n dropToOpen: {\n label: 'PDF hier ablegen, um es zu öffnen',\n },\n documentError: {\n title: 'Dokument konnte nicht geöffnet werden',\n unknown: 'Das Dokument konnte nicht geöffnet werden.',\n notFound: 'Die Datei wurde nicht gefunden.',\n notAllowed: 'Sie haben keinen Zugriff auf dieses Dokument.',\n damaged: 'Diese Datei ist kein PDF oder ist beschädigt.',\n unsupported: 'Dieser Viewer kann diese Art von Dokument nicht öffnen.',\n retry: 'Erneut versuchen',\n close: 'Dokument schließen',\n },\n tabs: {\n close: '{name} schließen',\n loading: 'Wird geladen',\n untitled: 'Dokument {id}',\n },\n closeUnsaved: {\n title: 'Ohne Speichern schließen?',\n body: '„{name}“ enthält Änderungen, die nicht heruntergeladen wurden. Sie gehen verloren.',\n cancel: 'Abbrechen',\n close: 'Ohne Speichern schließen',\n },\n viewOnly: {\n label: 'Nur Ansicht',\n turnedOff: 'Die Werkzeuge zum Ändern dieses Dokuments sind deaktiviert',\n notAllowed: 'Sie können dieses Dokument lesen, aber nicht ändern',\n },\n panel: {\n close: 'Schließen',\n resize: 'Größe von {title} ändern',\n },\n menu: {\n back: 'Zurück',\n },\n shortcuts: {\n document: 'Dokument',\n viewing: 'Anzeige',\n editing: 'Bearbeiten',\n other: 'Sonstiges',\n },\n goToPage: {\n go: 'Los',\n },\n print: {\n title: 'Drucken',\n pages: 'Seiten',\n allPages: 'Alle Seiten',\n currentPage: 'Aktuelle Seite',\n range: 'Benutzerdefiniert',\n rangeLabel: 'Zu druckende Seiten',\n rangePlaceholder: 'z. B. 1-3, 5',\n rangeInvalid: 'Seitenzahlen von 1 bis {total}, z. B. 1-3, 5',\n annotations: 'Anmerkungen drucken',\n preparing: 'Wird vorbereitet…',\n preparingPage: 'Seite {page} von {total} wird vorbereitet…',\n ready: 'Bereit zum Drucken.',\n images: 'Die Seiten werden als Bilder mit {dpi} DPI gedruckt.',\n lowResolution: 'Dieses Dokument erlaubt nur das Drucken in niedriger Auflösung ({dpi} DPI).',\n failed: 'Der Ausdruck konnte nicht vorbereitet werden.',\n cancel: 'Abbrechen',\n print: 'Drucken',\n },\n panels: {\n thumbnails: 'Seitenminiaturen',\n outline: 'Lesezeichen',\n attachments: 'Anlagen',\n search: 'Suchen',\n comments: 'Kommentare',\n style: 'Stil',\n stamps: 'Stempel',\n signatures: 'Unterschriften',\n redaction: 'Schwärzungen',\n measurement: 'Messungen',\n formDesign: 'Formularentwurf',\n switch: 'Bereich wechseln',\n },\n annotation: {\n comment: 'Kommentar',\n highlight: 'Hervorhebung',\n underline: 'Unterstreichung',\n squiggly: 'Wellenlinie',\n strikeout: 'Durchstreichung',\n square: 'Rechteck',\n circle: 'Ellipse',\n line: 'Linie',\n polygon: 'Polygon',\n polyline: 'Polylinie',\n ink: 'Freihand',\n freeText: 'Text',\n stamp: 'Stempel',\n caret: 'Einfügemarke',\n redact: 'Schwärzung',\n fileAttachment: 'Dateianlage',\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: 'Deckkraft',\n stroke: 'Kontur',\n fill: 'Füllung',\n color: 'Farbe',\n strokeWidth: 'Linienstärke',\n border: 'Rahmen',\n borderStyle: 'Rahmenstil',\n borderColor: 'Rahmenfarbe',\n borderWidth: 'Rahmenstärke',\n background: 'Hintergrund',\n outline: 'Umriss',\n lineEndings: 'Linienenden',\n blendMode: 'Füllmethode',\n font: 'Schriftart',\n fontSize: 'Schriftgrad',\n textColor: 'Textfarbe',\n bold: 'Fett',\n italic: 'Kursiv',\n underline: 'Unterstrichen',\n align: 'Ausrichtung',\n alignment: 'Ausrichtung',\n label: 'Beschriftung',\n labelFont: 'Beschriftungsschrift',\n labelSize: 'Beschriftungsgröße',\n labelColor: 'Beschriftungsfarbe',\n icon: 'Symbol',\n link: 'Link',\n },\n // The annotation flags (`/F`).\n flags: {\n print: 'Drucken',\n hidden: 'Ausgeblendet',\n noView: 'Keine Anzeige',\n toggleNoView: 'Keine Anzeige umschalten',\n readOnly: 'Schreibgeschützt',\n locked: 'Gesperrt',\n lockedContents: 'Inhalt gesperrt',\n noZoom: 'Kein Zoom',\n noRotate: 'Keine Drehung',\n invisible: 'Unsichtbar',\n },\n borderStyles: { solid: 'Durchgezogen', dashed: 'Gestrichelt', cloudy: 'Wolkig' },\n lineEndings: {\n none: 'Ohne',\n square: 'Quadrat',\n circle: 'Kreis',\n diamond: 'Raute',\n openArrow: 'Offener Pfeil',\n closedArrow: 'Geschlossener Pfeil',\n butt: 'Querstrich',\n reverseOpenArrow: 'Umgekehrter offener Pfeil',\n reverseClosedArrow: 'Umgekehrter geschlossener Pfeil',\n slash: 'Schrägstrich',\n },\n blendModes: {\n normal: 'Normal',\n multiply: 'Multiplizieren',\n screen: 'Negativ multiplizieren',\n overlay: 'Ineinanderkopieren',\n darken: 'Abdunkeln',\n lighten: 'Aufhellen',\n colorDodge: 'Farbig abwedeln',\n colorBurn: 'Farbig nachbelichten',\n hardLight: 'Hartes Licht',\n softLight: 'Weiches Licht',\n difference: 'Differenz',\n exclusion: 'Ausschluss',\n hue: 'Farbton',\n saturation: 'Sättigung',\n color: 'Farbe',\n luminosity: 'Luminanz',\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: 'Links', center: 'Zentriert', right: 'Rechts' },\n noteIcons: {\n comment: 'Kommentar',\n key: 'Schlüssel',\n note: 'Notiz',\n help: 'Hilfe',\n newParagraph: 'Neuer Absatz',\n paragraph: 'Absatz',\n insert: 'Einfügen',\n },\n attachmentIcons: {\n pushPin: 'Stecknadel',\n paperclip: 'Büroklammer',\n graph: 'Diagramm',\n tag: 'Etikett',\n },\n },\n // A form field's settings, as the form plugin names them (`labelKey`).\n form: {\n settings: {\n name: 'Name',\n tooltip: 'QuickInfo',\n required: 'Erforderlich',\n readOnly: 'Schreibgeschützt',\n noExport: 'Nicht exportieren',\n defaultValue: 'Standardwert',\n maxLength: 'Maximale Länge',\n multiline: 'Mehrzeilig',\n password: 'Kennwort',\n comb: 'Ein Zeichen pro Kästchen',\n radiosInUnison: 'Optionsfelder mit gleichem Wert werden gemeinsam aktiviert',\n keepOneOn: 'Immer eines aktiviert lassen',\n options: 'Optionen',\n allowTyping: 'Texteingabe zulassen',\n multiSelect: 'Mehrfachauswahl',\n },\n },\n // A thumbnail's tooltip.\n thumbnails: { page: 'Seite {page}' },\n // The form designer's sidebar: the fields by page, and the selected one's buttons.\n formDesign: {\n empty: 'Noch keine Felder. Wählen Sie ein Feldwerkzeug, um eines hinzuzufügen.',\n page: 'Seite {page}',\n allFields: 'Alle Felder',\n buttons: 'Optionsfelder',\n boxes: 'Kästchen',\n box: 'Kästchen {number}',\n addButton: 'Optionsfeld hinzufügen',\n addBox: 'Kästchen hinzufügen',\n },\n // The style panel's own words around the properties.\n stylePanel: {\n mixed: '(gemischt)',\n // A color swatch that takes the color away.\n transparent: 'Transparent',\n lineStart: 'Anfang',\n lineEnd: 'Ende',\n empty: 'Wählen Sie ein Zeichenwerkzeug oder eine Anmerkung aus, um den Stil zu bearbeiten.',\n selected: '{count} ausgewählt',\n toolDefaults: 'Standardwerte: {tool}',\n defaults: 'Standardwerte',\n },\n // The flags section of the style panel: its title, and what each flag does.\n annotationFlags: {\n title: 'Kennzeichen (/F)',\n print: 'Beim Drucken der Seite mitdrucken',\n hidden: 'Überall ausgeblendet: Bildschirm, Klicks, Druck',\n noView: 'Auf dem Bildschirm ausgeblendet, kann gedruckt werden',\n toggleNoView: 'Nicht angezeigte Anmerkung einblenden, solange sie ausgewählt ist',\n readOnly: 'Sichtbar, aber nicht anklickbar',\n locked: 'Kein Verschieben / Skalieren / Löschen / Umgestalten',\n lockedContents: 'Text nicht änderbar; Geometrie schon',\n noZoom: 'Konstante Bildschirmgröße (oben links verankert)',\n noRotate: 'Bleibt aufrecht, wenn die Seite gedreht wird',\n invisible: 'Veraltet: unbekannte Untertypen ausblenden',\n },\n // The link editor over a selected annotation.\n attachments: {\n loading: 'Anhänge werden geladen…',\n failed: 'Die Anhänge konnten nicht gelesen werden.',\n empty: 'Dieses Dokument hat keine angehängten Dateien',\n drop: 'Dateien zum Anhängen hier ablegen',\n dropHint: 'Oder Dateien hier ablegen',\n adding: 'Wird hinzugefügt…',\n onPage: 'Seite {page}',\n count: '{count} Datei',\n countPlural: '{count} Dateien',\n },\n outline: {\n filter: 'Lesezeichen filtern',\n loading: 'Lesezeichen werden geladen…',\n failed: 'Die Lesezeichen konnten nicht gelesen werden.',\n empty: 'Dieses Dokument hat keine Lesezeichen',\n noMatches: 'Keine passenden Lesezeichen',\n incomplete: 'Ein Teil der Lesezeichen konnte nicht gelesen werden.',\n untitled: 'Unbenannt',\n properties: {\n title: 'Lesezeicheneigenschaften',\n name: 'Titel',\n color: 'Farbe',\n noColor: 'Keine',\n customColor: 'Eigene Farbe',\n bold: 'Fett',\n italic: 'Kursiv',\n open: 'Beim Öffnen des Dokuments erweitert',\n target: 'Ziel',\n targetNone: 'Keins',\n targetView: 'Aktuelle Ansicht',\n targetNamed: 'Seitenaktion',\n targetKept: 'Unverändert',\n keptNote:\n 'Dieses Lesezeichen führt ein Skript aus oder öffnet eine andere Datei. Es kann hier nicht geändert werden.',\n fit: 'Anpassung',\n fitKept: 'Wie bisher',\n save: 'Speichern',\n cancel: 'Abbrechen',\n },\n },\n linkEditor: {\n toUrl: 'Link zu einer URL',\n url: 'URL',\n toPage: 'Link zu einer Seite',\n page: 'Seite',\n urlPlaceholder: 'https://…',\n pagePlaceholder: 'Seitenzahl',\n add: 'Link hinzufügen',\n update: 'Link aktualisieren',\n },\n demo: {\n starting: 'Viewer wird gestartet…',\n opening: 'Dokument wird geöffnet…',\n more: 'Mehr',\n searchPlaceholder: 'Dokument durchsuchen…',\n searchCaseSensitive: 'Groß-/Kleinschreibung',\n searchWholeWord: 'Nur ganze Wörter',\n searchRegex: 'Regulärer Ausdruck',\n searchSearching: 'Suche läuft…',\n searchResults: '{count} Treffer gefunden',\n searchNoResults: 'Keine Treffer',\n searchPrevious: 'Vorheriger Treffer',\n searchNext: 'Nächster Treffer',\n searchPage: 'Seite {page}',\n commentsForbidden: 'Sie haben keinen Zugriff auf die Kommentare dieses Dokuments.',\n commentsLoading: 'Kommentare werden geladen…',\n commentsError: 'Kommentare konnten nicht geladen werden.',\n commentsRetry: 'Erneut versuchen',\n commentsEmpty: 'Noch keine Kommentare. Beginnen Sie mit dem Notiz-Werkzeug eine Diskussion.',\n commentsEmptyReadOnly: 'Dieses Dokument enthält keine Kommentare.',\n commentsAnonymous: 'Unbekannt',\n commentsPage: 'Seite {page}',\n commentCount: '{count} Kommentar',\n commentCountPlural: '{count} Kommentare',\n commentsReply: 'Antworten',\n commentsReplyPlaceholder: 'Antworten…',\n commentsAddPlaceholder: 'Kommentar hinzufügen…',\n commentsDelete: 'Kommentar löschen',\n commentsDeleteThread: 'Diskussion löschen',\n commentsEdit: 'Kommentar bearbeiten',\n commentsStatus: 'Status',\n commentsStatusNone: 'Kein Status',\n commentsStatusAccepted: 'Akzeptiert',\n commentsStatusRejected: 'Abgelehnt',\n commentsStatusCancelled: 'Abgebrochen',\n commentsStatusCompleted: 'Abgeschlossen',\n empty: 'In diesem Demo-Bereich gibt es noch nichts.',\n page: 'Seite {current} von {total}',\n goToPage: 'Gehe zu Seite',\n cancel: 'Abbrechen',\n pageBadge: 'S. {page}',\n redactionEmpty:\n 'Keine ausstehenden Schwärzungen. Markieren Sie Text oder Bereiche mit dem Werkzeug „Schwärzen“.',\n redactionArea: 'Bereichsmarkierung',\n redactionText: 'Textmarkierung',\n redactionRemove: 'Markierung entfernen',\n redactConfirmTitle: 'Schwärzungen anwenden?',\n redactConfirmBody:\n 'Inhalt unter den Schwärzungsmarkierungen ({count}) endgültig entfernen. Dies kann nicht rückgängig gemacht werden.',\n redactConfirmCollateral: 'Außerdem werden weitere Anmerkungen entfernt: {count}.',\n redactApply: 'Anwenden',\n redactApplying: 'Wird angewendet…',\n formatLabel: 'Format',\n fieldSettingsTitle: 'Feld',\n fieldOptionLabel: 'Beschriftung',\n fieldOptionValue: 'Wert',\n fieldOptionAdd: 'Option hinzufügen',\n fieldOptionRemove: 'Option entfernen',\n fieldNone: 'Keine',\n redactLabelTitle: 'Überlagerungstext',\n redactLabelPlaceholder: 'z. B. GESCHWÄRZT',\n redactLabelRepeat: 'Überlagerungstext im Bereich wiederholen',\n stampsAll: 'Alle Stempel',\n stampsLoading: 'Stempel werden geladen…',\n stampsEmpty:\n 'Noch keine Stempel. Importieren Sie eine PDF-Datei, um jede ihrer Seiten in einen Stempel umzuwandeln.',\n stampsRemoveStamp: 'Stempel entfernen',\n stampsArmedHint: 'Klicken Sie auf eine Seite, um den Stempel zu platzieren.',\n stampsImport: 'PDF importieren…',\n stampsImporting: 'Wird importiert…',\n stampsImportHint:\n 'Importieren Sie eine PDF-Datei als Stempelbibliothek – jede Seite wird zu einem Stempel.',\n stampsRemoveLibrary: 'Bibliothek entfernen',\n stampsExportLibrary: 'Bibliothek als PDF exportieren',\n stampsCustomLibrary: 'Meine Stempel',\n stampsCustomLabel: 'Benutzerdefinierter Stempel',\n stampsError: 'Die integrierten Stempel konnten nicht geladen werden.',\n stampsArmError: 'Dieser Stempel konnte nicht aktiviert werden.',\n stampsImportError: 'Diese PDF-Datei konnte nicht als Stempelbibliothek importiert werden.',\n quickStampsLabel: 'Schnellstempel',\n signaturesEmpty: 'Noch keine Unterschriften. Erstellen Sie eine, um damit zu unterschreiben.',\n signaturesNew: 'Neue Unterschrift…',\n signaturesArmedHint:\n 'Klicken Sie auf ein Unterschriftsfeld, um es zu unterschreiben, oder auf eine beliebige Stelle einer Seite, um die Unterschrift dort zu platzieren.',\n signaturesTargetHint: 'Wählen Sie eine Unterschrift für das ausgewählte Feld.',\n signaturesInDocument: 'In diesem Dokument',\n signaturesNone: 'Dieses Dokument enthält keine Unterschriftsfelder.',\n signaturesValidate: 'Überprüfen',\n signaturesValidating: 'Wird überprüft…',\n signaturesSigned: 'Unterschrieben',\n signaturesUnsigned: 'Nicht unterschrieben',\n signaturesRename: 'Umbenennen',\n signaturesRemove: 'Entfernen',\n signaturesExport: 'Als PDF exportieren',\n signaturesAddInitials: 'Initialen hinzufügen',\n signatureLabel: 'Unterschrift',\n initialsLabel: 'Initialen',\n makerTitle: 'Neue Unterschrift',\n makerName: 'Name',\n makerNamePlaceholder: 'Ihr Name',\n makerDraw: 'Zeichnen',\n makerType: 'Eingeben',\n makerUpload: 'Hochladen',\n makerTypePlaceholder: 'Geben Sie Ihren Namen ein',\n makerFont: 'Schriftart',\n makerUploadHint: 'Wählen Sie eine PNG-, JPEG- oder einseitige PDF-Datei',\n makerClear: 'Löschen',\n makerOptional: '(optional)',\n makerSave: 'Speichern',\n makerSaving: 'Wird gespeichert…',\n makerError: 'Die Unterschrift konnte nicht gespeichert werden.',\n signTitle: 'Dieses Feld unterschreiben',\n signReason: 'Grund',\n signLocation: 'Ort',\n signKind: 'Was danach geändert werden darf',\n signKindApproval:\n 'Genehmigungsunterschrift – Ausfüllen von Formularen und weitere Unterschriften bleiben gültig',\n signKindCertifyAnnotate:\n 'Zertifizieren – Kommentare, Ausfüllen von Formularen und Unterschriften zulassen',\n signKindCertifyFill:\n 'Zertifizieren – nur Ausfüllen von Formularen und Unterschriften zulassen',\n signKindCertifyLocked: 'Zertifizieren – keine Änderungen zulassen',\n signButton: 'Unterschreiben',\n signSigning: 'Wird unterschrieben…',\n signFill: 'Platzieren, ohne zu unterschreiben',\n signError: 'Das Feld konnte nicht unterschrieben werden.',\n inspectTitle: 'Unterschrift',\n inspectSigner: 'Unterschrieben von',\n inspectReason: 'Grund',\n inspectLocation: 'Ort',\n inspectTime: 'Zeitpunkt',\n inspectIntegrity: 'Dokument',\n inspectCryptography: 'Unterschrift',\n inspectTrust: 'Unterzeichner',\n inspectChanges: 'Änderungen seitdem',\n inspectDownload: 'Unterschriebene Version herunterladen',\n verdictValid: 'Gültig',\n verdictValidUntrusted: 'Gültig, Unterzeichner nicht vertrauenswürdig',\n verdictInvalid: 'Ungültig – nach dem Unterschreiben geändert',\n verdictWillInvalidate: 'Gültig, nach dem Speichern ungültig',\n signaturesInvalidating:\n 'Diese Änderung macht {field} beim Speichern des Dokuments ungültig. Machen Sie sie rückgängig, um die Unterschrift zu erhalten.',\n verdictIndeterminate: 'Konnte nicht überprüft werden',\n verdictUnchanged: 'Keine',\n verdictRestored: 'Geändert, dann wiederhergestellt',\n inspectLaterRevisions: 'Revisionen nach dem Unterschreiben',\n verdictPermitted: 'Zulässig',\n verdictForbidden: 'Nicht zulässig',\n },\n },\n};\n"],"mappings":"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"}
|
|
@@ -99,6 +99,7 @@ const de = {
|
|
|
99
99
|
note: "Kommentar",
|
|
100
100
|
link: "Link",
|
|
101
101
|
gotoLink: "Link öffnen",
|
|
102
|
+
saveFile: "Datei speichern",
|
|
102
103
|
removeLink: "Link entfernen",
|
|
103
104
|
delete: "Löschen",
|
|
104
105
|
group: "Gruppieren",
|
|
@@ -155,12 +156,44 @@ const de = {
|
|
|
155
156
|
"annotations-create": "Hinzufügen von Anmerkungen ist nicht zulässig",
|
|
156
157
|
"doc-annotate-modify": "Ändern von Anmerkungen ist nicht zulässig",
|
|
157
158
|
"doc-annotate-read": "Anzeigen von Anmerkungen ist nicht zulässig",
|
|
159
|
+
"doc-attachments-modify": "Das Hinzufügen von Dateien ist nicht erlaubt",
|
|
158
160
|
"doc-download": "Herunterladen ist nicht zulässig",
|
|
159
161
|
"doc-forms-modify": "Bearbeiten von Formularfeldern ist nicht zulässig",
|
|
162
|
+
"doc-outline-modify": "Das Ändern der Lesezeichen ist nicht erlaubt",
|
|
163
|
+
"doc-pages-assemble": "Das Ändern der Seiten ist nicht erlaubt",
|
|
160
164
|
"doc-print": "Drucken ist nicht zulässig",
|
|
161
165
|
"doc-text-copy": "Kopieren ist nicht zulässig",
|
|
162
166
|
"doc-text-search": "Suchen ist nicht zulässig"
|
|
163
167
|
},
|
|
168
|
+
attachment: {
|
|
169
|
+
add: "Datei hinzufügen",
|
|
170
|
+
save: "Speichern",
|
|
171
|
+
goTo: "Gehe zu Seite",
|
|
172
|
+
delete: "Löschen",
|
|
173
|
+
more: "Weitere Optionen"
|
|
174
|
+
},
|
|
175
|
+
outline: {
|
|
176
|
+
add: "Lesezeichen hinzufügen",
|
|
177
|
+
addChild: "Untergeordnetes Lesezeichen hinzufügen",
|
|
178
|
+
rename: "Umbenennen",
|
|
179
|
+
setDestination: "Ziel auf aktuelle Ansicht setzen",
|
|
180
|
+
properties: "Eigenschaften…",
|
|
181
|
+
delete: "Löschen",
|
|
182
|
+
expandAll: "Alle erweitern",
|
|
183
|
+
collapseAll: "Alle reduzieren",
|
|
184
|
+
more: "Weitere Optionen"
|
|
185
|
+
},
|
|
186
|
+
pages: {
|
|
187
|
+
rotateClockwise: "Seite im Uhrzeigersinn drehen",
|
|
188
|
+
rotateCounterclockwise: "Seite gegen den Uhrzeigersinn drehen",
|
|
189
|
+
delete: "Seiten löschen",
|
|
190
|
+
duplicate: "Seiten duplizieren",
|
|
191
|
+
insertBlank: "Leere Seite einfügen",
|
|
192
|
+
insertFile: "Aus Datei einfügen…",
|
|
193
|
+
extract: "Seiten extrahieren",
|
|
194
|
+
selectAll: "Alle Seiten auswählen",
|
|
195
|
+
more: "Seitenoptionen"
|
|
196
|
+
},
|
|
164
197
|
turnedOff: "{label} ist nicht verfügbar"
|
|
165
198
|
},
|
|
166
199
|
passwordPrompt: {
|
|
@@ -213,6 +246,25 @@ const de = {
|
|
|
213
246
|
other: "Sonstiges"
|
|
214
247
|
},
|
|
215
248
|
goToPage: { go: "Los" },
|
|
249
|
+
print: {
|
|
250
|
+
title: "Drucken",
|
|
251
|
+
pages: "Seiten",
|
|
252
|
+
allPages: "Alle Seiten",
|
|
253
|
+
currentPage: "Aktuelle Seite",
|
|
254
|
+
range: "Benutzerdefiniert",
|
|
255
|
+
rangeLabel: "Zu druckende Seiten",
|
|
256
|
+
rangePlaceholder: "z. B. 1-3, 5",
|
|
257
|
+
rangeInvalid: "Seitenzahlen von 1 bis {total}, z. B. 1-3, 5",
|
|
258
|
+
annotations: "Anmerkungen drucken",
|
|
259
|
+
preparing: "Wird vorbereitet…",
|
|
260
|
+
preparingPage: "Seite {page} von {total} wird vorbereitet…",
|
|
261
|
+
ready: "Bereit zum Drucken.",
|
|
262
|
+
images: "Die Seiten werden als Bilder mit {dpi} DPI gedruckt.",
|
|
263
|
+
lowResolution: "Dieses Dokument erlaubt nur das Drucken in niedriger Auflösung ({dpi} DPI).",
|
|
264
|
+
failed: "Der Ausdruck konnte nicht vorbereitet werden.",
|
|
265
|
+
cancel: "Abbrechen",
|
|
266
|
+
print: "Drucken"
|
|
267
|
+
},
|
|
216
268
|
panels: {
|
|
217
269
|
thumbnails: "Seitenminiaturen",
|
|
218
270
|
outline: "Lesezeichen",
|
|
@@ -408,6 +460,46 @@ const de = {
|
|
|
408
460
|
noRotate: "Bleibt aufrecht, wenn die Seite gedreht wird",
|
|
409
461
|
invisible: "Veraltet: unbekannte Untertypen ausblenden"
|
|
410
462
|
},
|
|
463
|
+
attachments: {
|
|
464
|
+
loading: "Anhänge werden geladen…",
|
|
465
|
+
failed: "Die Anhänge konnten nicht gelesen werden.",
|
|
466
|
+
empty: "Dieses Dokument hat keine angehängten Dateien",
|
|
467
|
+
drop: "Dateien zum Anhängen hier ablegen",
|
|
468
|
+
dropHint: "Oder Dateien hier ablegen",
|
|
469
|
+
adding: "Wird hinzugefügt…",
|
|
470
|
+
onPage: "Seite {page}",
|
|
471
|
+
count: "{count} Datei",
|
|
472
|
+
countPlural: "{count} Dateien"
|
|
473
|
+
},
|
|
474
|
+
outline: {
|
|
475
|
+
filter: "Lesezeichen filtern",
|
|
476
|
+
loading: "Lesezeichen werden geladen…",
|
|
477
|
+
failed: "Die Lesezeichen konnten nicht gelesen werden.",
|
|
478
|
+
empty: "Dieses Dokument hat keine Lesezeichen",
|
|
479
|
+
noMatches: "Keine passenden Lesezeichen",
|
|
480
|
+
incomplete: "Ein Teil der Lesezeichen konnte nicht gelesen werden.",
|
|
481
|
+
untitled: "Unbenannt",
|
|
482
|
+
properties: {
|
|
483
|
+
title: "Lesezeicheneigenschaften",
|
|
484
|
+
name: "Titel",
|
|
485
|
+
color: "Farbe",
|
|
486
|
+
noColor: "Keine",
|
|
487
|
+
customColor: "Eigene Farbe",
|
|
488
|
+
bold: "Fett",
|
|
489
|
+
italic: "Kursiv",
|
|
490
|
+
open: "Beim Öffnen des Dokuments erweitert",
|
|
491
|
+
target: "Ziel",
|
|
492
|
+
targetNone: "Keins",
|
|
493
|
+
targetView: "Aktuelle Ansicht",
|
|
494
|
+
targetNamed: "Seitenaktion",
|
|
495
|
+
targetKept: "Unverändert",
|
|
496
|
+
keptNote: "Dieses Lesezeichen führt ein Skript aus oder öffnet eine andere Datei. Es kann hier nicht geändert werden.",
|
|
497
|
+
fit: "Anpassung",
|
|
498
|
+
fitKept: "Wie bisher",
|
|
499
|
+
save: "Speichern",
|
|
500
|
+
cancel: "Abbrechen"
|
|
501
|
+
}
|
|
502
|
+
},
|
|
411
503
|
linkEditor: {
|
|
412
504
|
toUrl: "Link zu einer URL",
|
|
413
505
|
url: "URL",
|
|
@@ -563,4 +655,4 @@ const de = {
|
|
|
563
655
|
//#endregion
|
|
564
656
|
export { de };
|
|
565
657
|
|
|
566
|
-
//# sourceMappingURL=de-
|
|
658
|
+
//# sourceMappingURL=de-BUhwc9-x.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"de-BUhwc9-x.js","names":[],"sources":["../src/locales/de.ts"],"sourcesContent":["import type { Locale } from '@embedpdf/react/i18n';\n\n/**\n * German pack, in the words Adobe Acrobat's German edition uses. Machine-translated from the\n * English pack (`./en.ts`) and not yet reviewed by a native speaker.\n */\nexport const de: Locale = {\n code: 'de',\n name: 'Deutsch',\n translations: {\n measurement: {\n title: 'Messungen',\n distance: 'Abstand',\n perimeter: 'Umfang',\n area: 'Fläche',\n areaUnit: 'Flächeneinheit',\n resetLabel: 'Beschriftungsposition zurücksetzen',\n calibrate: 'Maßstab kalibrieren',\n scale: 'Maßstab',\n custom: 'Benutzerdefiniert',\n unavailable: 'Nicht verfügbar',\n instructions:\n 'Ziehen Sie, um einen Abstand zu messen, und klicken Sie dann, um die Maßlinie zu platzieren. Klicken Sie für einen Umfang oder eine Fläche auf die Eckpunkte und doppelklicken Sie zum Abschließen. Flächengrenzen dürfen sich nicht kreuzen; eine nicht verfügbare Vorschau kann nicht abgeschlossen werden. Drücken Sie Escape zum Abbrechen. Ziehen Sie die Beschriftung selbst, um sie zu verschieben.',\n sessionOnly: 'Diese Engine speichert die Seitenkalibrierung nur für diese Sitzung.',\n allPages: 'Auf alle Seiten anwenden',\n recalculate: 'Vorhandene Messungen neu berechnen',\n preset: 'Maßstabsvorgabe',\n choosePreset: 'Vorgabe auswählen',\n unit: 'Einheit',\n precision: 'Genauigkeit',\n selection: 'Ausgewählte Messungen',\n report: '{updated} aktualisiert · {skipped} übersprungen · {failed} fehlgeschlagen',\n knownLength: 'Geben Sie die tatsächliche Länge der gerade gezeichneten Linie ein.',\n length: 'Bekannte Länge',\n apply: 'Maßstab anwenden',\n applying: 'Wird angewendet…',\n },\n commands: {\n zoom: {\n in: 'Vergrößern',\n out: 'Verkleinern',\n fitPage: 'Ganze Seite',\n fitWidth: 'Seitenbreite',\n automatic: 'Automatisch',\n menu: 'Zoom',\n level: 'Zoomstufe',\n p50: '50 %',\n p100: '100 %',\n p150: '150 %',\n p200: '200 %',\n p400: '400 %',\n },\n pan: 'Verschieben',\n pointer: 'Auswählen',\n comment: 'Kommentar',\n style: 'Stil',\n menu: 'Menü',\n viewControls: 'Ansichtssteuerung',\n open: 'Öffnen',\n download: 'Herunterladen',\n print: 'Drucken',\n fullscreen: 'Vollbild',\n spread: {\n group: 'Seitenlayout',\n none: 'Einzelseite',\n odd: 'Zweiseitig',\n even: 'Deckblatt',\n },\n scroll: {\n group: 'Bildlauf',\n vertical: 'Vertikal',\n horizontal: 'Horizontal',\n },\n rotate: {\n group: 'Drehen',\n clockwise: 'Im Uhrzeigersinn drehen',\n counterclockwise: 'Gegen den Uhrzeigersinn drehen',\n },\n mode: {\n measure: 'Messen',\n group: 'Modus',\n view: 'Ansicht',\n annotate: 'Kommentieren',\n shapes: 'Formen',\n insert: 'Einfügen',\n form: 'Formular',\n redact: 'Schwärzen',\n },\n annotate: {\n cancelCreation: 'Zeichnen abbrechen',\n highlight: 'Hervorheben',\n strikeout: 'Durchstreichen',\n underline: 'Unterstreichen',\n squiggly: 'Wellenlinie',\n ink: 'Zeichnen',\n inkHighlight: 'Textmarker',\n text: 'Text',\n insertText: 'Text einfügen',\n replaceText: 'Text ersetzen',\n callout: 'Legende',\n note: 'Kommentar',\n link: 'Link',\n gotoLink: 'Link öffnen',\n saveFile: 'Datei speichern',\n removeLink: 'Link entfernen',\n delete: 'Löschen',\n group: 'Gruppieren',\n ungroup: 'Gruppierung aufheben',\n stampFromSelection: 'Stempel erstellen',\n strip: 'Aktionen für Anmerkungen',\n },\n selection: {\n copy: 'Kopieren',\n strip: 'Aktionen für Textauswahl',\n },\n shapes: {\n rectangle: 'Rechteck',\n circle: 'Ellipse',\n line: 'Linie',\n arrow: 'Pfeil',\n polygon: 'Polygon',\n polyline: 'Polylinie',\n },\n insert: {\n stamp: 'Stempel',\n attachment: 'Datei anhängen',\n signature: 'Unterschrift',\n image: 'Bild',\n },\n form: {\n textfield: 'Textfeld',\n checkbox: 'Kontrollkästchen',\n radio: 'Optionsfeld',\n select: 'Dropdown-Liste',\n listbox: 'Listenfeld',\n button: 'Schaltfläche',\n signature: 'Unterschriftsfeld',\n // The Form mode's design switch, which opens the form designer's sidebar.\n design: 'Formularentwurf',\n },\n redact: {\n mark: 'Zum Schwärzen markieren',\n applyAll: 'Schwärzungen anwenden',\n clearAll: 'Markierungen löschen',\n },\n undo: 'Rückgängig',\n redo: 'Wiederholen',\n page: {\n next: 'Nächste Seite',\n previous: 'Vorherige Seite',\n first: 'Erste Seite',\n last: 'Letzte Seite',\n goTo: 'Gehe zu Seite',\n },\n find: 'Suchen',\n shortcuts: 'Tastenkombinationen',\n notAllowed: {\n default: '{label} ist nicht zulässig',\n 'annotations-create': 'Hinzufügen von Anmerkungen ist nicht zulässig',\n 'doc-annotate-modify': 'Ändern von Anmerkungen ist nicht zulässig',\n 'doc-annotate-read': 'Anzeigen von Anmerkungen ist nicht zulässig',\n 'doc-attachments-modify': 'Das Hinzufügen von Dateien ist nicht erlaubt',\n 'doc-download': 'Herunterladen ist nicht zulässig',\n 'doc-forms-modify': 'Bearbeiten von Formularfeldern ist nicht zulässig',\n 'doc-outline-modify': 'Das Ändern der Lesezeichen ist nicht erlaubt',\n 'doc-pages-assemble': 'Das Ändern der Seiten ist nicht erlaubt',\n 'doc-print': 'Drucken ist nicht zulässig',\n 'doc-text-copy': 'Kopieren ist nicht zulässig',\n 'doc-text-search': 'Suchen ist nicht zulässig',\n },\n attachment: {\n add: 'Datei hinzufügen',\n save: 'Speichern',\n goTo: 'Gehe zu Seite',\n delete: 'Löschen',\n more: 'Weitere Optionen',\n },\n outline: {\n add: 'Lesezeichen hinzufügen',\n addChild: 'Untergeordnetes Lesezeichen hinzufügen',\n rename: 'Umbenennen',\n setDestination: 'Ziel auf aktuelle Ansicht setzen',\n properties: 'Eigenschaften…',\n delete: 'Löschen',\n expandAll: 'Alle erweitern',\n collapseAll: 'Alle reduzieren',\n more: 'Weitere Optionen',\n },\n // The page commands, in the Pages mode and a page's menu.\n pages: {\n rotateClockwise: 'Seite im Uhrzeigersinn drehen',\n rotateCounterclockwise: 'Seite gegen den Uhrzeigersinn drehen',\n delete: 'Seiten löschen',\n duplicate: 'Seiten duplizieren',\n insertBlank: 'Leere Seite einfügen',\n insertFile: 'Aus Datei einfügen…',\n extract: 'Seiten extrahieren',\n selectAll: 'Alle Seiten auswählen',\n more: 'Seitenoptionen',\n },\n turnedOff: '{label} ist nicht verfügbar',\n },\n passwordPrompt: {\n title: 'Kennwort erforderlich',\n required:\n 'Dieses Dokument ist kennwortgeschützt. Geben Sie das Kennwort ein, um es zu öffnen.',\n incorrect: 'Das Kennwort ist falsch. Bitte versuchen Sie es erneut.',\n incorrectWarning: 'Falsches Kennwort',\n label: 'Kennwort',\n placeholder: 'Kennwort eingeben',\n cancel: 'Abbrechen',\n open: 'Öffnen',\n opening: 'Wird geöffnet…',\n },\n dropToOpen: {\n label: 'PDF hier ablegen, um es zu öffnen',\n },\n documentError: {\n title: 'Dokument konnte nicht geöffnet werden',\n unknown: 'Das Dokument konnte nicht geöffnet werden.',\n notFound: 'Die Datei wurde nicht gefunden.',\n notAllowed: 'Sie haben keinen Zugriff auf dieses Dokument.',\n damaged: 'Diese Datei ist kein PDF oder ist beschädigt.',\n unsupported: 'Dieser Viewer kann diese Art von Dokument nicht öffnen.',\n retry: 'Erneut versuchen',\n close: 'Dokument schließen',\n },\n tabs: {\n close: '{name} schließen',\n loading: 'Wird geladen',\n untitled: 'Dokument {id}',\n },\n closeUnsaved: {\n title: 'Ohne Speichern schließen?',\n body: '„{name}“ enthält Änderungen, die nicht heruntergeladen wurden. Sie gehen verloren.',\n cancel: 'Abbrechen',\n close: 'Ohne Speichern schließen',\n },\n viewOnly: {\n label: 'Nur Ansicht',\n turnedOff: 'Die Werkzeuge zum Ändern dieses Dokuments sind deaktiviert',\n notAllowed: 'Sie können dieses Dokument lesen, aber nicht ändern',\n },\n panel: {\n close: 'Schließen',\n resize: 'Größe von {title} ändern',\n },\n menu: {\n back: 'Zurück',\n },\n shortcuts: {\n document: 'Dokument',\n viewing: 'Anzeige',\n editing: 'Bearbeiten',\n other: 'Sonstiges',\n },\n goToPage: {\n go: 'Los',\n },\n print: {\n title: 'Drucken',\n pages: 'Seiten',\n allPages: 'Alle Seiten',\n currentPage: 'Aktuelle Seite',\n range: 'Benutzerdefiniert',\n rangeLabel: 'Zu druckende Seiten',\n rangePlaceholder: 'z. B. 1-3, 5',\n rangeInvalid: 'Seitenzahlen von 1 bis {total}, z. B. 1-3, 5',\n annotations: 'Anmerkungen drucken',\n preparing: 'Wird vorbereitet…',\n preparingPage: 'Seite {page} von {total} wird vorbereitet…',\n ready: 'Bereit zum Drucken.',\n images: 'Die Seiten werden als Bilder mit {dpi} DPI gedruckt.',\n lowResolution: 'Dieses Dokument erlaubt nur das Drucken in niedriger Auflösung ({dpi} DPI).',\n failed: 'Der Ausdruck konnte nicht vorbereitet werden.',\n cancel: 'Abbrechen',\n print: 'Drucken',\n },\n panels: {\n thumbnails: 'Seitenminiaturen',\n outline: 'Lesezeichen',\n attachments: 'Anlagen',\n search: 'Suchen',\n comments: 'Kommentare',\n style: 'Stil',\n stamps: 'Stempel',\n signatures: 'Unterschriften',\n redaction: 'Schwärzungen',\n measurement: 'Messungen',\n formDesign: 'Formularentwurf',\n switch: 'Bereich wechseln',\n },\n annotation: {\n comment: 'Kommentar',\n highlight: 'Hervorhebung',\n underline: 'Unterstreichung',\n squiggly: 'Wellenlinie',\n strikeout: 'Durchstreichung',\n square: 'Rechteck',\n circle: 'Ellipse',\n line: 'Linie',\n polygon: 'Polygon',\n polyline: 'Polylinie',\n ink: 'Freihand',\n freeText: 'Text',\n stamp: 'Stempel',\n caret: 'Einfügemarke',\n redact: 'Schwärzung',\n fileAttachment: 'Dateianlage',\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: 'Deckkraft',\n stroke: 'Kontur',\n fill: 'Füllung',\n color: 'Farbe',\n strokeWidth: 'Linienstärke',\n border: 'Rahmen',\n borderStyle: 'Rahmenstil',\n borderColor: 'Rahmenfarbe',\n borderWidth: 'Rahmenstärke',\n background: 'Hintergrund',\n outline: 'Umriss',\n lineEndings: 'Linienenden',\n blendMode: 'Füllmethode',\n font: 'Schriftart',\n fontSize: 'Schriftgrad',\n textColor: 'Textfarbe',\n bold: 'Fett',\n italic: 'Kursiv',\n underline: 'Unterstrichen',\n align: 'Ausrichtung',\n alignment: 'Ausrichtung',\n label: 'Beschriftung',\n labelFont: 'Beschriftungsschrift',\n labelSize: 'Beschriftungsgröße',\n labelColor: 'Beschriftungsfarbe',\n icon: 'Symbol',\n link: 'Link',\n },\n // The annotation flags (`/F`).\n flags: {\n print: 'Drucken',\n hidden: 'Ausgeblendet',\n noView: 'Keine Anzeige',\n toggleNoView: 'Keine Anzeige umschalten',\n readOnly: 'Schreibgeschützt',\n locked: 'Gesperrt',\n lockedContents: 'Inhalt gesperrt',\n noZoom: 'Kein Zoom',\n noRotate: 'Keine Drehung',\n invisible: 'Unsichtbar',\n },\n borderStyles: { solid: 'Durchgezogen', dashed: 'Gestrichelt', cloudy: 'Wolkig' },\n lineEndings: {\n none: 'Ohne',\n square: 'Quadrat',\n circle: 'Kreis',\n diamond: 'Raute',\n openArrow: 'Offener Pfeil',\n closedArrow: 'Geschlossener Pfeil',\n butt: 'Querstrich',\n reverseOpenArrow: 'Umgekehrter offener Pfeil',\n reverseClosedArrow: 'Umgekehrter geschlossener Pfeil',\n slash: 'Schrägstrich',\n },\n blendModes: {\n normal: 'Normal',\n multiply: 'Multiplizieren',\n screen: 'Negativ multiplizieren',\n overlay: 'Ineinanderkopieren',\n darken: 'Abdunkeln',\n lighten: 'Aufhellen',\n colorDodge: 'Farbig abwedeln',\n colorBurn: 'Farbig nachbelichten',\n hardLight: 'Hartes Licht',\n softLight: 'Weiches Licht',\n difference: 'Differenz',\n exclusion: 'Ausschluss',\n hue: 'Farbton',\n saturation: 'Sättigung',\n color: 'Farbe',\n luminosity: 'Luminanz',\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: 'Links', center: 'Zentriert', right: 'Rechts' },\n noteIcons: {\n comment: 'Kommentar',\n key: 'Schlüssel',\n note: 'Notiz',\n help: 'Hilfe',\n newParagraph: 'Neuer Absatz',\n paragraph: 'Absatz',\n insert: 'Einfügen',\n },\n attachmentIcons: {\n pushPin: 'Stecknadel',\n paperclip: 'Büroklammer',\n graph: 'Diagramm',\n tag: 'Etikett',\n },\n },\n // A form field's settings, as the form plugin names them (`labelKey`).\n form: {\n settings: {\n name: 'Name',\n tooltip: 'QuickInfo',\n required: 'Erforderlich',\n readOnly: 'Schreibgeschützt',\n noExport: 'Nicht exportieren',\n defaultValue: 'Standardwert',\n maxLength: 'Maximale Länge',\n multiline: 'Mehrzeilig',\n password: 'Kennwort',\n comb: 'Ein Zeichen pro Kästchen',\n radiosInUnison: 'Optionsfelder mit gleichem Wert werden gemeinsam aktiviert',\n keepOneOn: 'Immer eines aktiviert lassen',\n options: 'Optionen',\n allowTyping: 'Texteingabe zulassen',\n multiSelect: 'Mehrfachauswahl',\n },\n },\n // A thumbnail's tooltip.\n thumbnails: { page: 'Seite {page}' },\n // The form designer's sidebar: the fields by page, and the selected one's buttons.\n formDesign: {\n empty: 'Noch keine Felder. Wählen Sie ein Feldwerkzeug, um eines hinzuzufügen.',\n page: 'Seite {page}',\n allFields: 'Alle Felder',\n buttons: 'Optionsfelder',\n boxes: 'Kästchen',\n box: 'Kästchen {number}',\n addButton: 'Optionsfeld hinzufügen',\n addBox: 'Kästchen hinzufügen',\n },\n // The style panel's own words around the properties.\n stylePanel: {\n mixed: '(gemischt)',\n // A color swatch that takes the color away.\n transparent: 'Transparent',\n lineStart: 'Anfang',\n lineEnd: 'Ende',\n empty: 'Wählen Sie ein Zeichenwerkzeug oder eine Anmerkung aus, um den Stil zu bearbeiten.',\n selected: '{count} ausgewählt',\n toolDefaults: 'Standardwerte: {tool}',\n defaults: 'Standardwerte',\n },\n // The flags section of the style panel: its title, and what each flag does.\n annotationFlags: {\n title: 'Kennzeichen (/F)',\n print: 'Beim Drucken der Seite mitdrucken',\n hidden: 'Überall ausgeblendet: Bildschirm, Klicks, Druck',\n noView: 'Auf dem Bildschirm ausgeblendet, kann gedruckt werden',\n toggleNoView: 'Nicht angezeigte Anmerkung einblenden, solange sie ausgewählt ist',\n readOnly: 'Sichtbar, aber nicht anklickbar',\n locked: 'Kein Verschieben / Skalieren / Löschen / Umgestalten',\n lockedContents: 'Text nicht änderbar; Geometrie schon',\n noZoom: 'Konstante Bildschirmgröße (oben links verankert)',\n noRotate: 'Bleibt aufrecht, wenn die Seite gedreht wird',\n invisible: 'Veraltet: unbekannte Untertypen ausblenden',\n },\n // The link editor over a selected annotation.\n attachments: {\n loading: 'Anhänge werden geladen…',\n failed: 'Die Anhänge konnten nicht gelesen werden.',\n empty: 'Dieses Dokument hat keine angehängten Dateien',\n drop: 'Dateien zum Anhängen hier ablegen',\n dropHint: 'Oder Dateien hier ablegen',\n adding: 'Wird hinzugefügt…',\n onPage: 'Seite {page}',\n count: '{count} Datei',\n countPlural: '{count} Dateien',\n },\n outline: {\n filter: 'Lesezeichen filtern',\n loading: 'Lesezeichen werden geladen…',\n failed: 'Die Lesezeichen konnten nicht gelesen werden.',\n empty: 'Dieses Dokument hat keine Lesezeichen',\n noMatches: 'Keine passenden Lesezeichen',\n incomplete: 'Ein Teil der Lesezeichen konnte nicht gelesen werden.',\n untitled: 'Unbenannt',\n properties: {\n title: 'Lesezeicheneigenschaften',\n name: 'Titel',\n color: 'Farbe',\n noColor: 'Keine',\n customColor: 'Eigene Farbe',\n bold: 'Fett',\n italic: 'Kursiv',\n open: 'Beim Öffnen des Dokuments erweitert',\n target: 'Ziel',\n targetNone: 'Keins',\n targetView: 'Aktuelle Ansicht',\n targetNamed: 'Seitenaktion',\n targetKept: 'Unverändert',\n keptNote:\n 'Dieses Lesezeichen führt ein Skript aus oder öffnet eine andere Datei. Es kann hier nicht geändert werden.',\n fit: 'Anpassung',\n fitKept: 'Wie bisher',\n save: 'Speichern',\n cancel: 'Abbrechen',\n },\n },\n linkEditor: {\n toUrl: 'Link zu einer URL',\n url: 'URL',\n toPage: 'Link zu einer Seite',\n page: 'Seite',\n urlPlaceholder: 'https://…',\n pagePlaceholder: 'Seitenzahl',\n add: 'Link hinzufügen',\n update: 'Link aktualisieren',\n },\n demo: {\n starting: 'Viewer wird gestartet…',\n opening: 'Dokument wird geöffnet…',\n more: 'Mehr',\n searchPlaceholder: 'Dokument durchsuchen…',\n searchCaseSensitive: 'Groß-/Kleinschreibung',\n searchWholeWord: 'Nur ganze Wörter',\n searchRegex: 'Regulärer Ausdruck',\n searchSearching: 'Suche läuft…',\n searchResults: '{count} Treffer gefunden',\n searchNoResults: 'Keine Treffer',\n searchPrevious: 'Vorheriger Treffer',\n searchNext: 'Nächster Treffer',\n searchPage: 'Seite {page}',\n commentsForbidden: 'Sie haben keinen Zugriff auf die Kommentare dieses Dokuments.',\n commentsLoading: 'Kommentare werden geladen…',\n commentsError: 'Kommentare konnten nicht geladen werden.',\n commentsRetry: 'Erneut versuchen',\n commentsEmpty: 'Noch keine Kommentare. Beginnen Sie mit dem Notiz-Werkzeug eine Diskussion.',\n commentsEmptyReadOnly: 'Dieses Dokument enthält keine Kommentare.',\n commentsAnonymous: 'Unbekannt',\n commentsPage: 'Seite {page}',\n commentCount: '{count} Kommentar',\n commentCountPlural: '{count} Kommentare',\n commentsReply: 'Antworten',\n commentsReplyPlaceholder: 'Antworten…',\n commentsAddPlaceholder: 'Kommentar hinzufügen…',\n commentsDelete: 'Kommentar löschen',\n commentsDeleteThread: 'Diskussion löschen',\n commentsEdit: 'Kommentar bearbeiten',\n commentsStatus: 'Status',\n commentsStatusNone: 'Kein Status',\n commentsStatusAccepted: 'Akzeptiert',\n commentsStatusRejected: 'Abgelehnt',\n commentsStatusCancelled: 'Abgebrochen',\n commentsStatusCompleted: 'Abgeschlossen',\n empty: 'In diesem Demo-Bereich gibt es noch nichts.',\n page: 'Seite {current} von {total}',\n goToPage: 'Gehe zu Seite',\n cancel: 'Abbrechen',\n pageBadge: 'S. {page}',\n redactionEmpty:\n 'Keine ausstehenden Schwärzungen. Markieren Sie Text oder Bereiche mit dem Werkzeug „Schwärzen“.',\n redactionArea: 'Bereichsmarkierung',\n redactionText: 'Textmarkierung',\n redactionRemove: 'Markierung entfernen',\n redactConfirmTitle: 'Schwärzungen anwenden?',\n redactConfirmBody:\n 'Inhalt unter den Schwärzungsmarkierungen ({count}) endgültig entfernen. Dies kann nicht rückgängig gemacht werden.',\n redactConfirmCollateral: 'Außerdem werden weitere Anmerkungen entfernt: {count}.',\n redactApply: 'Anwenden',\n redactApplying: 'Wird angewendet…',\n formatLabel: 'Format',\n fieldSettingsTitle: 'Feld',\n fieldOptionLabel: 'Beschriftung',\n fieldOptionValue: 'Wert',\n fieldOptionAdd: 'Option hinzufügen',\n fieldOptionRemove: 'Option entfernen',\n fieldNone: 'Keine',\n redactLabelTitle: 'Überlagerungstext',\n redactLabelPlaceholder: 'z. B. GESCHWÄRZT',\n redactLabelRepeat: 'Überlagerungstext im Bereich wiederholen',\n stampsAll: 'Alle Stempel',\n stampsLoading: 'Stempel werden geladen…',\n stampsEmpty:\n 'Noch keine Stempel. Importieren Sie eine PDF-Datei, um jede ihrer Seiten in einen Stempel umzuwandeln.',\n stampsRemoveStamp: 'Stempel entfernen',\n stampsArmedHint: 'Klicken Sie auf eine Seite, um den Stempel zu platzieren.',\n stampsImport: 'PDF importieren…',\n stampsImporting: 'Wird importiert…',\n stampsImportHint:\n 'Importieren Sie eine PDF-Datei als Stempelbibliothek – jede Seite wird zu einem Stempel.',\n stampsRemoveLibrary: 'Bibliothek entfernen',\n stampsExportLibrary: 'Bibliothek als PDF exportieren',\n stampsCustomLibrary: 'Meine Stempel',\n stampsCustomLabel: 'Benutzerdefinierter Stempel',\n stampsError: 'Die integrierten Stempel konnten nicht geladen werden.',\n stampsArmError: 'Dieser Stempel konnte nicht aktiviert werden.',\n stampsImportError: 'Diese PDF-Datei konnte nicht als Stempelbibliothek importiert werden.',\n quickStampsLabel: 'Schnellstempel',\n signaturesEmpty: 'Noch keine Unterschriften. Erstellen Sie eine, um damit zu unterschreiben.',\n signaturesNew: 'Neue Unterschrift…',\n signaturesArmedHint:\n 'Klicken Sie auf ein Unterschriftsfeld, um es zu unterschreiben, oder auf eine beliebige Stelle einer Seite, um die Unterschrift dort zu platzieren.',\n signaturesTargetHint: 'Wählen Sie eine Unterschrift für das ausgewählte Feld.',\n signaturesInDocument: 'In diesem Dokument',\n signaturesNone: 'Dieses Dokument enthält keine Unterschriftsfelder.',\n signaturesValidate: 'Überprüfen',\n signaturesValidating: 'Wird überprüft…',\n signaturesSigned: 'Unterschrieben',\n signaturesUnsigned: 'Nicht unterschrieben',\n signaturesRename: 'Umbenennen',\n signaturesRemove: 'Entfernen',\n signaturesExport: 'Als PDF exportieren',\n signaturesAddInitials: 'Initialen hinzufügen',\n signatureLabel: 'Unterschrift',\n initialsLabel: 'Initialen',\n makerTitle: 'Neue Unterschrift',\n makerName: 'Name',\n makerNamePlaceholder: 'Ihr Name',\n makerDraw: 'Zeichnen',\n makerType: 'Eingeben',\n makerUpload: 'Hochladen',\n makerTypePlaceholder: 'Geben Sie Ihren Namen ein',\n makerFont: 'Schriftart',\n makerUploadHint: 'Wählen Sie eine PNG-, JPEG- oder einseitige PDF-Datei',\n makerClear: 'Löschen',\n makerOptional: '(optional)',\n makerSave: 'Speichern',\n makerSaving: 'Wird gespeichert…',\n makerError: 'Die Unterschrift konnte nicht gespeichert werden.',\n signTitle: 'Dieses Feld unterschreiben',\n signReason: 'Grund',\n signLocation: 'Ort',\n signKind: 'Was danach geändert werden darf',\n signKindApproval:\n 'Genehmigungsunterschrift – Ausfüllen von Formularen und weitere Unterschriften bleiben gültig',\n signKindCertifyAnnotate:\n 'Zertifizieren – Kommentare, Ausfüllen von Formularen und Unterschriften zulassen',\n signKindCertifyFill:\n 'Zertifizieren – nur Ausfüllen von Formularen und Unterschriften zulassen',\n signKindCertifyLocked: 'Zertifizieren – keine Änderungen zulassen',\n signButton: 'Unterschreiben',\n signSigning: 'Wird unterschrieben…',\n signFill: 'Platzieren, ohne zu unterschreiben',\n signError: 'Das Feld konnte nicht unterschrieben werden.',\n inspectTitle: 'Unterschrift',\n inspectSigner: 'Unterschrieben von',\n inspectReason: 'Grund',\n inspectLocation: 'Ort',\n inspectTime: 'Zeitpunkt',\n inspectIntegrity: 'Dokument',\n inspectCryptography: 'Unterschrift',\n inspectTrust: 'Unterzeichner',\n inspectChanges: 'Änderungen seitdem',\n inspectDownload: 'Unterschriebene Version herunterladen',\n verdictValid: 'Gültig',\n verdictValidUntrusted: 'Gültig, Unterzeichner nicht vertrauenswürdig',\n verdictInvalid: 'Ungültig – nach dem Unterschreiben geändert',\n verdictWillInvalidate: 'Gültig, nach dem Speichern ungültig',\n signaturesInvalidating:\n 'Diese Änderung macht {field} beim Speichern des Dokuments ungültig. Machen Sie sie rückgängig, um die Unterschrift zu erhalten.',\n verdictIndeterminate: 'Konnte nicht überprüft werden',\n verdictUnchanged: 'Keine',\n verdictRestored: 'Geändert, dann wiederhergestellt',\n inspectLaterRevisions: 'Revisionen nach dem Unterschreiben',\n verdictPermitted: 'Zulässig',\n verdictForbidden: 'Nicht zulässig',\n },\n },\n};\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { c as holdFocus, n as SCRIM_CLASS, o as
|
|
1
|
+
import { c as attachViewerLayer, l as holdFocus, n as SCRIM_CLASS, o as LAYER_CLASS, s as POPOVER } from "./sheet-DyjKfAq0.js";
|
|
2
2
|
import { useLayoutEffect, useRef } from "react";
|
|
3
3
|
import { jsx, jsxs } from "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
|
...POPOVER,
|
|
31
31
|
"data-epdf-layer": "",
|
|
32
|
-
className:
|
|
32
|
+
className: `${LAYER_CLASS} place-items-center p-4 open:grid`,
|
|
33
33
|
style: {
|
|
34
34
|
position: "fixed",
|
|
35
35
|
inset: "auto",
|
|
@@ -52,4 +52,4 @@ function Dialog({ labelledBy, onClose, className, children }) {
|
|
|
52
52
|
//#endregion
|
|
53
53
|
export { Dialog as t };
|
|
54
54
|
|
|
55
|
-
//# sourceMappingURL=dialog-
|
|
55
|
+
//# sourceMappingURL=dialog-BIb373cg.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dialog-BIb373cg.js","names":[],"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,QAAQ,OAAuB,IAAI;CACzC,MAAM,QAAQ,OAAuB,IAAI;CACzC,MAAM,QAAQ,OAAO,OAAO;CAC5B,MAAM,UAAU;CAChB,sBAAsB;EACpB,MAAM,eAAe,MAAM;EAC3B,MAAM,eAAe,MAAM;EAC3B,IAAI,CAAC,gBAAgB,CAAC,cAAc;EACpC,MAAM,YAAY,kBAAkB,YAAY;EAChD,MAAM,OAAO,UAAU,cAAc,EAAE,gBAAgB,MAAM,QAAQ,EAAE,CAAC;EACxE,aAAa;GACX,KAAK,QAAQ;GACb,UAAU;EACZ;CAEF,GAAG,CAAC,CAAC;CACL,OACE,qBAAC,OAAD;EACE,KAAK;EACL,GAAI;EACJ,mBAAgB;EAChB,WAAW,GAAG,YAAY;EAC1B,OAAO;GAAE,UAAU;GAAS,OAAO;GAAQ,UAAU;GAAQ,WAAW;EAAO;EALjF,UAAA,CAOE,oBAAC,OAAD;GAAK,eAAY;GAAO,WAAW,oBAAoB;EAAgB,CAAA,GACvE,oBAAC,OAAD;GACE,KAAK;GACL,MAAK;GACL,cAAW;GACX,mBAAiB;GACjB,WAAW,kDAAkD;GAE5D;EACE,CAAA,CACF;;AAET"}
|