@embedpdf/viewer-chrome 3.0.0-next.14 → 3.0.0-next.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +175 -132
- package/dist/annotation-fonts-DWjVOTP0.js +80 -0
- package/dist/annotation-fonts-DWjVOTP0.js.map +1 -0
- package/dist/annotation-fonts-dpfVkhnq.cjs +91 -0
- package/dist/annotation-fonts-dpfVkhnq.cjs.map +1 -0
- package/dist/annotation-style-B3XKAyZ-.cjs +879 -0
- package/dist/annotation-style-B3XKAyZ-.cjs.map +1 -0
- package/dist/annotation-style-CXF3X47Z.js +879 -0
- package/dist/annotation-style-CXF3X47Z.js.map +1 -0
- package/dist/ar-B132r9bo.cjs +659 -0
- package/dist/ar-B132r9bo.cjs.map +1 -0
- package/dist/ar-BLWFJoA_.js +659 -0
- package/dist/ar-BLWFJoA_.js.map +1 -0
- package/dist/attachments-panel-Cxln8xos.cjs +217 -0
- package/dist/attachments-panel-Cxln8xos.cjs.map +1 -0
- package/dist/attachments-panel-H1ucRbwo.js +217 -0
- package/dist/attachments-panel-H1ucRbwo.js.map +1 -0
- package/dist/chrome.cjs +399 -242
- package/dist/chrome.cjs.map +1 -1
- package/dist/chrome.d.cts +5 -35
- package/dist/chrome.d.ts +5 -35
- package/dist/chrome.js +398 -239
- package/dist/chrome.js.map +1 -1
- package/dist/commands-BkgLP3Om.js +1348 -0
- package/dist/commands-BkgLP3Om.js.map +1 -0
- package/dist/commands-DL1gjZt7.cjs +1473 -0
- package/dist/commands-DL1gjZt7.cjs.map +1 -0
- package/dist/commands.cjs +13 -649
- package/dist/commands.d.cts +30 -3
- package/dist/commands.d.ts +30 -3
- package/dist/commands.js +2 -647
- package/dist/comments-panel-BsnWedTh.cjs +514 -0
- package/dist/comments-panel-BsnWedTh.cjs.map +1 -0
- package/dist/comments-panel-D7Eadws9.js +514 -0
- package/dist/comments-panel-D7Eadws9.js.map +1 -0
- package/dist/de-7_MvFWzN.cjs +658 -0
- package/dist/de-7_MvFWzN.cjs.map +1 -0
- package/dist/de-BUhwc9-x.js +658 -0
- package/dist/de-BUhwc9-x.js.map +1 -0
- package/dist/dialog-BIb373cg.js +55 -0
- package/dist/dialog-BIb373cg.js.map +1 -0
- package/dist/dialog-CngKTnAM.cjs +60 -0
- package/dist/dialog-CngKTnAM.cjs.map +1 -0
- package/dist/es-DgYj-1L3.cjs +658 -0
- package/dist/es-DgYj-1L3.cjs.map +1 -0
- package/dist/es-DoXTqFoO.js +658 -0
- package/dist/es-DoXTqFoO.js.map +1 -0
- package/dist/form-design-panel-CgV_5YWC.js +418 -0
- package/dist/form-design-panel-CgV_5YWC.js.map +1 -0
- package/dist/form-design-panel-D0FdmWXW.cjs +418 -0
- package/dist/form-design-panel-D0FdmWXW.cjs.map +1 -0
- package/dist/fr-B-8NDhBA.js +658 -0
- package/dist/fr-B-8NDhBA.js.map +1 -0
- package/dist/fr-C856dmQJ.cjs +658 -0
- package/dist/fr-C856dmQJ.cjs.map +1 -0
- package/dist/he-BFTeNc4t.cjs +659 -0
- package/dist/he-BFTeNc4t.cjs.map +1 -0
- package/dist/he-Dlh0fNXM.js +659 -0
- package/dist/he-Dlh0fNXM.js.map +1 -0
- package/dist/icons-1UfLUZ_y.cjs +1029 -0
- package/dist/icons-1UfLUZ_y.cjs.map +1 -0
- package/dist/icons-7dB0Y1ct.js +875 -0
- package/dist/icons-7dB0Y1ct.js.map +1 -0
- package/dist/index.cjs +3651 -5447
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +646 -144
- package/dist/index.d.ts +646 -144
- package/dist/index.js +3618 -5368
- package/dist/index.js.map +1 -1
- package/dist/it-Bef-2Yxq.cjs +658 -0
- package/dist/it-Bef-2Yxq.cjs.map +1 -0
- package/dist/it-BkirG7ol.js +658 -0
- package/dist/it-BkirG7ol.js.map +1 -0
- package/dist/ja-CGEjCE-s.js +658 -0
- package/dist/ja-CGEjCE-s.js.map +1 -0
- package/dist/ja-DNw2zqSD.cjs +658 -0
- package/dist/ja-DNw2zqSD.cjs.map +1 -0
- package/dist/ko-CTkl5vMh.js +658 -0
- package/dist/ko-CTkl5vMh.js.map +1 -0
- package/dist/ko-YHzeBqP6.cjs +658 -0
- package/dist/ko-YHzeBqP6.cjs.map +1 -0
- package/dist/labels-BiM9wp9K.cjs +21 -0
- package/dist/labels-BiM9wp9K.cjs.map +1 -0
- package/dist/labels-C6_i87Oj.js +16 -0
- package/dist/labels-C6_i87Oj.js.map +1 -0
- package/dist/link-editor-CAS7MZM2.cjs +125 -0
- package/dist/link-editor-CAS7MZM2.cjs.map +1 -0
- package/dist/link-editor-CkwtqRvb.js +125 -0
- package/dist/link-editor-CkwtqRvb.js.map +1 -0
- package/dist/measurement-CQdbnIrn.js +325 -0
- package/dist/measurement-CQdbnIrn.js.map +1 -0
- package/dist/measurement-Cxv1Ahxx.cjs +326 -0
- package/dist/measurement-Cxv1Ahxx.cjs.map +1 -0
- package/dist/nl-BjkbaLq3.cjs +658 -0
- package/dist/nl-BjkbaLq3.cjs.map +1 -0
- package/dist/nl-Dya4sR8_.js +658 -0
- package/dist/nl-Dya4sR8_.js.map +1 -0
- package/dist/outline-panel-BpGtBdj0.cjs +707 -0
- package/dist/outline-panel-BpGtBdj0.cjs.map +1 -0
- package/dist/outline-panel-DO5_REYw.js +707 -0
- package/dist/outline-panel-DO5_REYw.js.map +1 -0
- package/dist/outline-properties-BCa2cc0t.js +330 -0
- package/dist/outline-properties-BCa2cc0t.js.map +1 -0
- package/dist/outline-properties-DT3FIxCw.cjs +330 -0
- package/dist/outline-properties-DT3FIxCw.cjs.map +1 -0
- package/dist/pl-CKKdVnpZ.cjs +658 -0
- package/dist/pl-CKKdVnpZ.cjs.map +1 -0
- package/dist/pl-DA9b5NVg.js +658 -0
- package/dist/pl-DA9b5NVg.js.map +1 -0
- package/dist/print-dialog-BqIrHCBh.cjs +276 -0
- package/dist/print-dialog-BqIrHCBh.cjs.map +1 -0
- package/dist/print-dialog-DvcI2m2_.js +276 -0
- package/dist/print-dialog-DvcI2m2_.js.map +1 -0
- package/dist/pt-DLcszlzi.cjs +658 -0
- package/dist/pt-DLcszlzi.cjs.map +1 -0
- package/dist/pt-Nm8yyjbX.js +658 -0
- package/dist/pt-Nm8yyjbX.js.map +1 -0
- package/dist/redact-confirm-C6EiK8yN.cjs +83 -0
- package/dist/redact-confirm-C6EiK8yN.cjs.map +1 -0
- package/dist/redact-confirm-CKuv9iN_.js +83 -0
- package/dist/redact-confirm-CKuv9iN_.js.map +1 -0
- package/dist/redaction-panel-CgNZ-pQk.js +96 -0
- package/dist/redaction-panel-CgNZ-pQk.js.map +1 -0
- package/dist/redaction-panel-ZhX0dlMi.cjs +96 -0
- package/dist/redaction-panel-ZhX0dlMi.cjs.map +1 -0
- package/dist/search-panel-BE4xzWlm.js +249 -0
- package/dist/search-panel-BE4xzWlm.js.map +1 -0
- package/dist/search-panel-wcbTNG1z.cjs +249 -0
- package/dist/search-panel-wcbTNG1z.cjs.map +1 -0
- package/dist/sheet-DTBFiwde.cjs +461 -0
- package/dist/sheet-DTBFiwde.cjs.map +1 -0
- package/dist/sheet-DyjKfAq0.js +378 -0
- package/dist/sheet-DyjKfAq0.js.map +1 -0
- package/dist/sign-dialog-D5WGx-Yn.cjs +155 -0
- package/dist/sign-dialog-D5WGx-Yn.cjs.map +1 -0
- package/dist/sign-dialog-DerNe8qT.js +155 -0
- package/dist/sign-dialog-DerNe8qT.js.map +1 -0
- package/dist/signature-inspector-Bz6TAfZM.cjs +160 -0
- package/dist/signature-inspector-Bz6TAfZM.cjs.map +1 -0
- package/dist/signature-inspector-CsGr9EBk.js +160 -0
- package/dist/signature-inspector-CsGr9EBk.js.map +1 -0
- package/dist/signature-maker-D_YfBXLn.cjs +393 -0
- package/dist/signature-maker-D_YfBXLn.cjs.map +1 -0
- package/dist/signature-maker-Dnth4rV4.js +393 -0
- package/dist/signature-maker-Dnth4rV4.js.map +1 -0
- package/dist/signatures-panel-Ci_LaI1C.cjs +294 -0
- package/dist/signatures-panel-Ci_LaI1C.cjs.map +1 -0
- package/dist/signatures-panel-DZ9ywrjz.js +294 -0
- package/dist/signatures-panel-DZ9ywrjz.js.map +1 -0
- package/dist/stamp-store-BHvRs-Do.cjs +147 -0
- package/dist/stamp-store-BHvRs-Do.cjs.map +1 -0
- package/dist/stamp-store-WuF-L3Jj.js +112 -0
- package/dist/stamp-store-WuF-L3Jj.js.map +1 -0
- package/dist/stamps-panel-BrczStaz.js +225 -0
- package/dist/stamps-panel-BrczStaz.js.map +1 -0
- package/dist/stamps-panel-Cv9nJBwx.cjs +225 -0
- package/dist/stamps-panel-Cv9nJBwx.cjs.map +1 -0
- package/dist/theme-Be0OZokZ.js +97 -0
- package/dist/theme-Be0OZokZ.js.map +1 -0
- package/dist/theme-FR26JI3r.cjs +126 -0
- package/dist/theme-FR26JI3r.cjs.map +1 -0
- package/dist/toolbar-DF361xWY.js +1565 -0
- package/dist/toolbar-DF361xWY.js.map +1 -0
- package/dist/toolbar-ddvpsvTb.cjs +1660 -0
- package/dist/toolbar-ddvpsvTb.cjs.map +1 -0
- package/dist/zh-cn-BMPPkLpL.js +658 -0
- package/dist/zh-cn-BMPPkLpL.js.map +1 -0
- package/dist/zh-cn-CZOO3p4H.cjs +658 -0
- package/dist/zh-cn-CZOO3p4H.cjs.map +1 -0
- package/package.json +6 -4
- package/src/styles.css +161 -89
- package/dist/commands.cjs.map +0 -1
- package/dist/commands.js.map +0 -1
- package/dist/es-BXLlBo2b.cjs +0 -321
- package/dist/es-BXLlBo2b.cjs.map +0 -1
- package/dist/es-CLgTsFDS.js +0 -321
- package/dist/es-CLgTsFDS.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ko-YHzeBqP6.cjs","names":[],"sources":["../src/locales/ko.ts"],"sourcesContent":["import type { Locale } from '@embedpdf/react/i18n';\n\n/**\n * Korean pack, in the words Adobe Acrobat's Korean edition uses. Machine-translated from the\n * English pack (`./en.ts`) and not yet reviewed by a native speaker.\n */\nexport const ko: Locale = {\n code: 'ko',\n name: '한국어',\n translations: {\n measurement: {\n title: '측정',\n distance: '거리',\n perimeter: '둘레',\n area: '면적',\n areaUnit: '면적 단위',\n resetLabel: '레이블 위치 재설정',\n calibrate: '축척 보정',\n scale: '축척',\n custom: '사용자 정의',\n unavailable: '사용할 수 없음',\n instructions:\n '드래그하여 거리를 측정한 다음 클릭하여 치수선을 배치합니다. 둘레나 면적은 꼭짓점을 클릭하고 두 번 클릭하여 완료합니다. 면적 경계선은 서로 교차할 수 없으며, 사용할 수 없는 미리 보기는 완료할 수 없습니다. 취소하려면 Escape 키를 누르십시오. 레이블 자체를 드래그하면 이동할 수 있습니다.',\n sessionOnly: '이 엔진은 페이지 보정을 이 세션 동안만 유지합니다.',\n allPages: '모든 페이지에 적용',\n recalculate: '기존 측정값 다시 계산',\n preset: '축척 사전 설정',\n choosePreset: '사전 설정 선택',\n unit: '단위',\n precision: '정밀도',\n selection: '선택한 측정',\n report: '{updated}개 업데이트됨 · {skipped}개 건너뜀 · {failed}개 실패',\n knownLength: '방금 그린 선이 나타내는 실제 길이를 입력하십시오.',\n length: '알려진 길이',\n apply: '축척 적용',\n applying: '적용 중…',\n },\n commands: {\n zoom: {\n in: '확대',\n out: '축소',\n fitPage: '페이지에 맞추기',\n fitWidth: '너비에 맞추기',\n automatic: '자동',\n menu: '확대/축소',\n level: '배율',\n p50: '50%',\n p100: '100%',\n p150: '150%',\n p200: '200%',\n p400: '400%',\n },\n pan: '이동',\n pointer: '선택',\n comment: '댓글',\n style: '스타일',\n menu: '메뉴',\n viewControls: '보기 컨트롤',\n open: '열기',\n download: '다운로드',\n print: '인쇄',\n fullscreen: '전체 화면',\n spread: {\n group: '페이지 레이아웃',\n none: '단일 페이지',\n odd: '두 페이지',\n even: '표지 페이지',\n },\n scroll: {\n group: '스크롤',\n vertical: '세로',\n horizontal: '가로',\n },\n rotate: {\n group: '회전',\n clockwise: '시계 방향 회전',\n counterclockwise: '시계 반대 방향 회전',\n },\n mode: {\n measure: '측정',\n group: '모드',\n view: '보기',\n annotate: '주석',\n shapes: '도형',\n insert: '삽입',\n form: '양식',\n redact: '교정',\n },\n annotate: {\n cancelCreation: '그리기 취소',\n highlight: '강조 표시',\n strikeout: '취소선',\n underline: '밑줄',\n squiggly: '물결선',\n ink: '그리기',\n inkHighlight: '형광펜',\n text: '텍스트 상자',\n insertText: '텍스트 삽입',\n replaceText: '텍스트 바꾸기',\n callout: '설명선',\n note: '댓글',\n link: '링크',\n gotoLink: '링크로 이동',\n saveFile: '파일 저장',\n removeLink: '링크 제거',\n delete: '삭제',\n group: '그룹화',\n ungroup: '그룹 해제',\n stampFromSelection: '스탬프 만들기',\n strip: '주석 작업',\n },\n selection: {\n copy: '복사',\n strip: '텍스트 선택 작업',\n },\n shapes: {\n rectangle: '사각형',\n circle: '타원',\n line: '선',\n arrow: '화살표',\n polygon: '다각형',\n polyline: '꺾은선',\n },\n insert: {\n stamp: '스탬프',\n attachment: '파일 첨부',\n signature: '서명',\n image: '이미지',\n },\n form: {\n textfield: '텍스트 필드',\n checkbox: '확인란',\n radio: '라디오 단추',\n select: '드롭다운',\n listbox: '목록 상자',\n button: '단추',\n signature: '서명 필드',\n // The Form mode's design switch, which opens the form designer's sidebar.\n design: '양식 디자인',\n },\n redact: {\n mark: '교정 표시',\n applyAll: '교정 적용',\n clearAll: '표시 지우기',\n },\n undo: '실행 취소',\n redo: '다시 실행',\n page: {\n next: '다음 페이지',\n previous: '이전 페이지',\n first: '첫 페이지',\n last: '마지막 페이지',\n goTo: '페이지로 이동',\n },\n find: '찾기',\n shortcuts: '키보드 단축키',\n notAllowed: {\n default: '{label} 기능은 허용되지 않습니다',\n 'annotations-create': '주석 추가는 허용되지 않습니다',\n 'doc-annotate-modify': '주석 변경은 허용되지 않습니다',\n 'doc-annotate-read': '주석 보기는 허용되지 않습니다',\n 'doc-attachments-modify': '파일을 추가할 수 없습니다',\n 'doc-download': '다운로드는 허용되지 않습니다',\n 'doc-forms-modify': '양식 필드 편집은 허용되지 않습니다',\n 'doc-outline-modify': '책갈피 변경은 허용되지 않습니다',\n 'doc-pages-assemble': '페이지 변경은 허용되지 않습니다',\n 'doc-print': '인쇄는 허용되지 않습니다',\n 'doc-text-copy': '복사는 허용되지 않습니다',\n 'doc-text-search': '검색은 허용되지 않습니다',\n },\n attachment: {\n add: '파일 추가',\n save: '저장',\n goTo: '페이지로 이동',\n delete: '삭제',\n more: '추가 옵션',\n },\n outline: {\n add: '책갈피 추가',\n addChild: '하위 책갈피 추가',\n rename: '이름 바꾸기',\n setDestination: '대상을 현재 보기로 설정',\n properties: '속성…',\n delete: '삭제',\n expandAll: '모두 펼치기',\n collapseAll: '모두 접기',\n more: '추가 옵션',\n },\n // The page commands, in the Pages mode and a page's menu.\n pages: {\n rotateClockwise: '페이지를 시계 방향으로 회전',\n rotateCounterclockwise: '페이지를 시계 반대 방향으로 회전',\n delete: '페이지 삭제',\n duplicate: '페이지 복제',\n insertBlank: '빈 페이지 삽입',\n insertFile: '파일에서 삽입…',\n extract: '페이지 추출',\n selectAll: '모든 페이지 선택',\n more: '페이지 옵션',\n },\n turnedOff: '{label} 기능을 사용할 수 없습니다',\n },\n passwordPrompt: {\n title: '암호 필요',\n required: '이 문서는 암호로 보호되어 있습니다. 문서를 열려면 암호를 입력하십시오.',\n incorrect: '암호가 올바르지 않습니다. 다시 시도하십시오.',\n incorrectWarning: '잘못된 암호',\n label: '암호',\n placeholder: '암호 입력',\n cancel: '취소',\n open: '열기',\n opening: '여는 중…',\n },\n dropToOpen: {\n label: 'PDF를 끌어다 놓아 열기',\n },\n documentError: {\n title: '문서를 열 수 없음',\n unknown: '문서를 열 수 없습니다.',\n notFound: '파일을 찾을 수 없습니다.',\n notAllowed: '이 문서에 대한 액세스 권한이 없습니다.',\n damaged: '이 파일은 PDF가 아니거나 손상되었습니다.',\n unsupported: '이 뷰어로는 이 종류의 문서를 열 수 없습니다.',\n retry: '다시 시도',\n close: '문서 닫기',\n },\n tabs: {\n close: '{name} 닫기',\n loading: '로드 중',\n untitled: '문서 {id}',\n },\n closeUnsaved: {\n title: '저장하지 않고 닫으시겠습니까?',\n body: '‘{name}’에 다운로드하지 않은 변경 내용이 있습니다. 변경 내용이 손실됩니다.',\n cancel: '취소',\n close: '저장하지 않고 닫기',\n },\n viewOnly: {\n label: '보기 전용',\n turnedOff: '이 문서를 변경하는 도구가 꺼져 있습니다',\n notAllowed: '이 문서를 읽을 수는 있지만 변경할 수는 없습니다',\n },\n panel: {\n close: '닫기',\n resize: '{title} 크기 조정',\n },\n menu: {\n back: '뒤로',\n },\n shortcuts: {\n document: '문서',\n viewing: '보기',\n editing: '편집',\n other: '기타',\n },\n goToPage: {\n go: '이동',\n },\n print: {\n title: '인쇄',\n pages: '페이지',\n allPages: '모든 페이지',\n currentPage: '현재 페이지',\n range: '사용자 지정',\n rangeLabel: '인쇄할 페이지',\n rangePlaceholder: '예: 1-3, 5',\n rangeInvalid: '1부터 {total}까지의 페이지 번호를 입력하세요(예: 1-3, 5)',\n annotations: '주석 인쇄',\n preparing: '준비 중…',\n preparingPage: '{total}페이지 중 {page}페이지 준비 중…',\n ready: '인쇄할 준비가 되었습니다.',\n images: '페이지가 {dpi} DPI 이미지로 인쇄됩니다.',\n lowResolution: '이 문서는 저해상도({dpi} DPI) 인쇄만 허용합니다.',\n failed: '인쇄물을 준비하지 못했습니다.',\n cancel: '취소',\n print: '인쇄',\n },\n panels: {\n thumbnails: '축소판',\n outline: '책갈피',\n attachments: '첨부 파일',\n search: '검색',\n comments: '댓글',\n style: '스타일',\n stamps: '스탬프',\n signatures: '서명',\n redaction: '교정',\n measurement: '측정',\n formDesign: '양식 디자인',\n switch: '패널 전환',\n },\n annotation: {\n comment: '댓글',\n highlight: '강조 표시',\n underline: '밑줄',\n squiggly: '물결선',\n strikeout: '취소선',\n square: '사각형',\n circle: '타원',\n line: '선',\n polygon: '다각형',\n polyline: '꺾은선',\n ink: '자유 그리기',\n freeText: '텍스트 상자',\n stamp: '스탬프',\n caret: '캐럿',\n redact: '교정',\n fileAttachment: '첨부 파일',\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: '불투명도',\n stroke: '선',\n fill: '채우기',\n color: '색상',\n strokeWidth: '선 두께',\n border: '테두리',\n borderStyle: '테두리 스타일',\n borderColor: '테두리 색상',\n borderWidth: '테두리 두께',\n background: '배경',\n outline: '윤곽선',\n lineEndings: '선 끝 모양',\n blendMode: '혼합 모드',\n font: '글꼴',\n fontSize: '글꼴 크기',\n textColor: '텍스트 색상',\n bold: '굵게',\n italic: '기울임꼴',\n underline: '밑줄',\n align: '정렬',\n alignment: '정렬 방식',\n label: '레이블',\n labelFont: '레이블 글꼴',\n labelSize: '레이블 크기',\n labelColor: '레이블 색상',\n icon: '아이콘',\n link: '링크',\n },\n // The annotation flags (`/F`).\n flags: {\n print: '인쇄',\n hidden: '숨김',\n noView: '보기 안 함',\n toggleNoView: '보기 안 함 전환',\n readOnly: '읽기 전용',\n locked: '잠김',\n lockedContents: '내용 잠김',\n noZoom: '확대/축소 안 함',\n noRotate: '회전 안 함',\n invisible: '보이지 않음',\n },\n borderStyles: { solid: '실선', dashed: '파선', cloudy: '구름 모양' },\n lineEndings: {\n none: '없음',\n square: '사각형',\n circle: '원',\n diamond: '다이아몬드',\n openArrow: '열린 화살표',\n closedArrow: '닫힌 화살표',\n butt: '버트',\n reverseOpenArrow: '반대 방향 열린 화살표',\n reverseClosedArrow: '반대 방향 닫힌 화살표',\n slash: '슬래시',\n },\n blendModes: {\n normal: '표준',\n multiply: '곱하기',\n screen: '스크린',\n overlay: '오버레이',\n darken: '어둡게 하기',\n lighten: '밝게 하기',\n colorDodge: '색상 닷지',\n colorBurn: '색상 번',\n hardLight: '하드 라이트',\n softLight: '소프트 라이트',\n difference: '차이',\n exclusion: '제외',\n hue: '색조',\n saturation: '채도',\n color: '색상',\n luminosity: '광도',\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: '왼쪽', center: '가운데', right: '오른쪽' },\n noteIcons: {\n comment: '댓글',\n key: '키',\n note: '메모',\n help: '도움말',\n newParagraph: '새 단락',\n paragraph: '단락',\n insert: '삽입',\n },\n attachmentIcons: {\n pushPin: '압정',\n paperclip: '클립',\n graph: '그래프',\n tag: '태그',\n },\n },\n // A form field's settings, as the form plugin names them (`labelKey`).\n form: {\n settings: {\n name: '이름',\n tooltip: '도구 설명',\n required: '필수',\n readOnly: '읽기 전용',\n noExport: '내보내지 않음',\n defaultValue: '기본값',\n maxLength: '최대 길이',\n multiline: '여러 줄',\n password: '암호',\n comb: '한 칸에 한 문자',\n radiosInUnison: '값이 같은 단추가 함께 선택됨',\n keepOneOn: '항상 하나 선택',\n options: '옵션',\n allowTyping: '입력 허용',\n multiSelect: '여러 항목 선택',\n },\n },\n // A thumbnail's tooltip.\n thumbnails: { page: '{page}페이지' },\n // The form designer's sidebar: the fields by page, and the selected one's buttons.\n formDesign: {\n empty: '아직 필드가 없습니다. 필드 도구를 골라 필드를 추가하십시오.',\n page: '{page}페이지',\n allFields: '모든 필드',\n buttons: '단추',\n boxes: '확인란',\n box: '확인란 {number}',\n addButton: '단추 추가',\n addBox: '확인란 추가',\n },\n // The style panel's own words around the properties.\n stylePanel: {\n mixed: '(혼합)',\n // A color swatch that takes the color away.\n transparent: '투명',\n lineStart: '시작',\n lineEnd: '끝',\n empty: '그리기 도구를 고르거나 주석을 선택하여 스타일을 편집하십시오.',\n selected: '{count}개 선택됨',\n toolDefaults: '{tool} 기본값',\n defaults: '기본값',\n },\n // The flags section of the style panel: its title, and what each flag does.\n annotationFlags: {\n title: '플래그 (/F)',\n print: '페이지를 인쇄할 때 포함',\n hidden: '모든 곳에서 숨김: 화면, 클릭, 인쇄',\n noView: '화면에서는 숨김, 인쇄는 될 수 있음',\n toggleNoView: '선택한 동안 보기 안 함 주석 표시',\n readOnly: '표시되지만 클릭할 수 없음',\n locked: '이동/크기 조정/삭제/스타일 변경 불가',\n lockedContents: '텍스트는 변경 불가, 형태는 변경 가능',\n noZoom: '화면에서 크기 고정(왼쪽 위 기준)',\n noRotate: '페이지를 회전해도 똑바로 유지',\n invisible: '레거시: 알 수 없는 하위 유형 숨김',\n },\n // The link editor over a selected annotation.\n attachments: {\n loading: '첨부 파일 불러오는 중…',\n failed: '첨부 파일을 읽을 수 없습니다.',\n empty: '이 문서에는 첨부 파일이 없습니다',\n drop: '파일을 놓아 첨부하세요',\n dropHint: '또는 여기에 파일을 놓으세요',\n adding: '추가 중…',\n onPage: '{page}페이지',\n count: '파일 {count}개',\n countPlural: '파일 {count}개',\n },\n outline: {\n filter: '책갈피 필터',\n loading: '책갈피를 불러오는 중…',\n failed: '책갈피를 읽을 수 없습니다.',\n empty: '이 문서에는 책갈피가 없습니다',\n noMatches: '일치하는 책갈피가 없습니다',\n incomplete: '책갈피의 일부를 읽을 수 없습니다.',\n untitled: '제목 없음',\n properties: {\n title: '책갈피 속성',\n name: '제목',\n color: '색상',\n noColor: '없음',\n customColor: '사용자 지정 색상',\n bold: '굵게',\n italic: '기울임꼴',\n open: '문서를 열 때 펼침',\n target: '대상',\n targetNone: '없음',\n targetView: '현재 보기',\n targetNamed: '페이지 동작',\n targetKept: '그대로 유지',\n keptNote:\n '이 책갈피는 스크립트를 실행하거나 다른 파일을 엽니다. 여기에서 변경할 수 없습니다.',\n fit: '맞춤',\n fitKept: '현재 그대로',\n save: '저장',\n cancel: '취소',\n },\n },\n linkEditor: {\n toUrl: 'URL에 링크',\n url: 'URL',\n toPage: '페이지에 링크',\n page: '페이지',\n urlPlaceholder: 'https://…',\n pagePlaceholder: '페이지 번호',\n add: '링크 추가',\n update: '링크 업데이트',\n },\n demo: {\n starting: '뷰어 시작 중…',\n opening: '문서 여는 중…',\n more: '더 보기',\n searchPlaceholder: '문서 검색…',\n searchCaseSensitive: '대/소문자 구분',\n searchWholeWord: '전체 단어만',\n searchRegex: '정규식',\n searchSearching: '검색 중…',\n searchResults: '{count}개의 결과를 찾았습니다',\n searchNoResults: '결과 없음',\n searchPrevious: '이전 결과',\n searchNext: '다음 결과',\n searchPage: '{page}페이지',\n commentsForbidden: '이 문서의 댓글에 액세스할 수 없습니다.',\n commentsLoading: '댓글 로드 중…',\n commentsError: '댓글을 로드하지 못했습니다.',\n commentsRetry: '다시 시도',\n commentsEmpty: '아직 댓글이 없습니다. 댓글 도구를 사용하여 스레드를 시작하십시오.',\n commentsEmptyReadOnly: '이 문서에는 댓글이 없습니다.',\n commentsAnonymous: '알 수 없음',\n commentsPage: '{page}페이지',\n commentCount: '댓글 {count}개',\n commentCountPlural: '댓글 {count}개',\n commentsReply: '답글',\n commentsReplyPlaceholder: '답글…',\n commentsAddPlaceholder: '댓글 추가…',\n commentsDelete: '댓글 삭제',\n commentsDeleteThread: '스레드 삭제',\n commentsEdit: '댓글 편집',\n commentsStatus: '상태',\n commentsStatusNone: '상태 없음',\n commentsStatusAccepted: '수락됨',\n commentsStatusRejected: '거부됨',\n commentsStatusCancelled: '취소됨',\n commentsStatusCompleted: '완료됨',\n empty: '이 데모 패널에는 아직 아무것도 없습니다.',\n page: '{current} / {total}페이지',\n goToPage: '페이지로 이동',\n cancel: '취소',\n pageBadge: '{page}쪽',\n redactionEmpty:\n '대기 중인 교정이 없습니다. 교정 도구를 사용하여 텍스트나 영역을 표시하십시오.',\n redactionArea: '영역 표시',\n redactionText: '텍스트 표시',\n redactionRemove: '표시 제거',\n redactConfirmTitle: '교정을 적용하시겠습니까?',\n redactConfirmBody:\n '교정 표시 {count}개 아래의 콘텐츠를 영구적으로 제거합니다. 이 작업은 실행 취소할 수 없습니다.',\n redactConfirmCollateral: '다른 주석 {count}개도 제거됩니다.',\n redactApply: '적용',\n redactApplying: '적용 중…',\n formatLabel: '형식',\n fieldSettingsTitle: '필드',\n fieldOptionLabel: '레이블',\n fieldOptionValue: '값',\n fieldOptionAdd: '옵션 추가',\n fieldOptionRemove: '옵션 제거',\n fieldNone: '없음',\n redactLabelTitle: '교정 레이블',\n redactLabelPlaceholder: '예: 교정됨',\n redactLabelRepeat: '영역 전체에 레이블 반복',\n stampsAll: '모든 스탬프',\n stampsLoading: '스탬프 로드 중…',\n stampsEmpty: '아직 스탬프가 없습니다. PDF를 가져오면 각 페이지가 스탬프가 됩니다.',\n stampsRemoveStamp: '스탬프 제거',\n stampsArmedHint: '페이지를 클릭하여 스탬프를 배치합니다.',\n stampsImport: 'PDF 가져오기…',\n stampsImporting: '가져오는 중…',\n stampsImportHint: 'PDF를 스탬프 라이브러리로 가져옵니다. 각 페이지가 하나의 스탬프가 됩니다.',\n stampsRemoveLibrary: '라이브러리 제거',\n stampsExportLibrary: '라이브러리를 PDF로 내보내기',\n stampsCustomLibrary: '내 스탬프',\n stampsCustomLabel: '사용자 정의 스탬프',\n stampsError: '기본 제공 스탬프를 로드할 수 없습니다.',\n stampsArmError: '해당 스탬프를 선택할 수 없습니다.',\n stampsImportError: '해당 PDF를 스탬프 라이브러리로 가져올 수 없습니다.',\n quickStampsLabel: '빠른 스탬프',\n signaturesEmpty: '아직 서명이 없습니다. 서명에 사용할 서명을 만드십시오.',\n signaturesNew: '새 서명…',\n signaturesArmedHint:\n '서명 필드를 클릭하여 서명하거나, 페이지의 아무 곳이나 클릭하여 표시를 배치합니다.',\n signaturesTargetHint: '선택한 필드에 사용할 표시를 고르십시오.',\n signaturesInDocument: '이 문서',\n signaturesNone: '이 문서에는 서명 필드가 없습니다.',\n signaturesValidate: '유효성 검사',\n signaturesValidating: '유효성 검사 중…',\n signaturesSigned: '서명됨',\n signaturesUnsigned: '서명 안 됨',\n signaturesRename: '이름 바꾸기',\n signaturesRemove: '제거',\n signaturesExport: 'PDF로 내보내기',\n signaturesAddInitials: '이니셜 추가',\n signatureLabel: '서명',\n initialsLabel: '이니셜',\n makerTitle: '새 서명',\n makerName: '이름',\n makerNamePlaceholder: '이름',\n makerDraw: '그리기',\n makerType: '입력',\n makerUpload: '업로드',\n makerTypePlaceholder: '이름을 입력하십시오',\n makerFont: '글꼴',\n makerUploadHint: 'PNG, JPEG 또는 1페이지 PDF를 선택하십시오',\n makerClear: '지우기',\n makerOptional: '(선택 사항)',\n makerSave: '저장',\n makerSaving: '저장 중…',\n makerError: '서명을 저장할 수 없습니다.',\n signTitle: '이 필드에 서명',\n signReason: '이유',\n signLocation: '위치',\n signKind: '서명 후 허용할 변경',\n signKindApproval: '승인 서명 — 양식 작성 및 추가 서명 후에도 유효함',\n signKindCertifyAnnotate: '인증 — 주석, 양식 작성 및 서명 허용',\n signKindCertifyFill: '인증 — 양식 작성 및 서명만 허용',\n signKindCertifyLocked: '인증 — 변경 허용 안 함',\n signButton: '서명',\n signSigning: '서명 중…',\n signFill: '서명하지 않고 배치',\n signError: '필드에 서명할 수 없습니다.',\n inspectTitle: '서명',\n inspectSigner: '서명자',\n inspectReason: '이유',\n inspectLocation: '위치',\n inspectTime: '시간',\n inspectIntegrity: '문서',\n inspectCryptography: '서명',\n inspectTrust: '서명자',\n inspectChanges: '서명 후 변경',\n inspectDownload: '서명된 버전 다운로드',\n verdictValid: '유효함',\n verdictValidUntrusted: '유효함, 신뢰할 수 없는 서명자',\n verdictInvalid: '유효하지 않음 — 서명 후 수정됨',\n verdictWillInvalidate: '유효함, 저장하면 무효',\n signaturesInvalidating:\n '문서를 저장하면 이 변경으로 인해 {field} 필드의 서명이 무효화됩니다. 서명을 유지하려면 변경을 실행 취소하십시오.',\n verdictIndeterminate: '확인할 수 없음',\n verdictUnchanged: '없음',\n verdictRestored: '변경 후 복원됨',\n inspectLaterRevisions: '서명 이후 개정',\n verdictPermitted: '허용됨',\n verdictForbidden: '허용되지 않음',\n },\n },\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
let _embedpdf_react_i18n = require("@embedpdf/react/i18n");
|
|
2
|
+
//#region src/ui/labels.ts
|
|
3
|
+
/**
|
|
4
|
+
* The labels the libraries give in English with a translation key beside them: the annotation
|
|
5
|
+
* kinds' style properties and their options, and the form plugin's field settings. The viewer
|
|
6
|
+
* shows each in its language, and the English where a language has no string for the key.
|
|
7
|
+
*/
|
|
8
|
+
/** Reads a {@link Labelled} in the viewer's language. */
|
|
9
|
+
function useLabel() {
|
|
10
|
+
const t = (0, _embedpdf_react_i18n.useT)();
|
|
11
|
+
return (item) => t(item.labelKey, { fallback: item.label });
|
|
12
|
+
}
|
|
13
|
+
//#endregion
|
|
14
|
+
Object.defineProperty(exports, "useLabel", {
|
|
15
|
+
enumerable: true,
|
|
16
|
+
get: function() {
|
|
17
|
+
return useLabel;
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
//# sourceMappingURL=labels-BiM9wp9K.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"labels-BiM9wp9K.cjs","names":[],"sources":["../src/ui/labels.ts"],"sourcesContent":["/**\n * The labels the libraries give in English with a translation key beside them: the annotation\n * kinds' style properties and their options, and the form plugin's field settings. The viewer\n * shows each in its language, and the English where a language has no string for the key.\n */\nimport { useT } from '@embedpdf/react/i18n';\n\n/** A label as the libraries give it: the English, and its key. */\nexport interface Labelled {\n readonly label: string;\n readonly labelKey: string;\n}\n\n/** Reads a {@link Labelled} in the viewer's language. */\nexport function useLabel(): (item: Labelled) => string {\n const t = useT();\n return (item) => t(item.labelKey, { fallback: item.label });\n}\n"],"mappings":";;;;;;;;AAcA,SAAgB,WAAuC;CACrD,MAAM,KAAA,GAAA,qBAAA,KAAA,CAAS;CACf,QAAQ,SAAS,EAAE,KAAK,UAAU,EAAE,UAAU,KAAK,MAAM,CAAC;AAC5D"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { useT } from "@embedpdf/react/i18n";
|
|
2
|
+
//#region src/ui/labels.ts
|
|
3
|
+
/**
|
|
4
|
+
* The labels the libraries give in English with a translation key beside them: the annotation
|
|
5
|
+
* kinds' style properties and their options, and the form plugin's field settings. The viewer
|
|
6
|
+
* shows each in its language, and the English where a language has no string for the key.
|
|
7
|
+
*/
|
|
8
|
+
/** Reads a {@link Labelled} in the viewer's language. */
|
|
9
|
+
function useLabel() {
|
|
10
|
+
const t = useT();
|
|
11
|
+
return (item) => t(item.labelKey, { fallback: item.label });
|
|
12
|
+
}
|
|
13
|
+
//#endregion
|
|
14
|
+
export { useLabel as t };
|
|
15
|
+
|
|
16
|
+
//# sourceMappingURL=labels-C6_i87Oj.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"labels-C6_i87Oj.js","names":[],"sources":["../src/ui/labels.ts"],"sourcesContent":["/**\n * The labels the libraries give in English with a translation key beside them: the annotation\n * kinds' style properties and their options, and the form plugin's field settings. The viewer\n * shows each in its language, and the English where a language has no string for the key.\n */\nimport { useT } from '@embedpdf/react/i18n';\n\n/** A label as the libraries give it: the English, and its key. */\nexport interface Labelled {\n readonly label: string;\n readonly labelKey: string;\n}\n\n/** Reads a {@link Labelled} in the viewer's language. */\nexport function useLabel(): (item: Labelled) => string {\n const t = useT();\n return (item) => t(item.labelKey, { fallback: item.label });\n}\n"],"mappings":";;;;;;;;AAcA,SAAgB,WAAuC;CACrD,MAAM,IAAI,KAAK;CACf,QAAQ,SAAS,EAAE,KAAK,UAAU,EAAE,UAAU,KAAK,MAAM,CAAC;AAC5D"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
const require_icons = require("./icons-1UfLUZ_y.cjs");
|
|
2
|
+
let react = require("react");
|
|
3
|
+
let _embedpdf_react_runtime = require("@embedpdf/react/runtime");
|
|
4
|
+
let _embedpdf_react_annotation = require("@embedpdf/react/annotation");
|
|
5
|
+
let _embedpdf_react_i18n = require("@embedpdf/react/i18n");
|
|
6
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
7
|
+
//#region src/ui/link-editor.tsx
|
|
8
|
+
/**
|
|
9
|
+
* The link editor popover. It rides the same selection anchor as the action
|
|
10
|
+
* strip (`<AnnotationMenu>` solves where), opening from the strip's link icon
|
|
11
|
+
* (`annotation:link` toggles the `link-editor` shell surface) and rendering in
|
|
12
|
+
* place of the strip while open — one anchored card at a time.
|
|
13
|
+
*
|
|
14
|
+
* Reads the selection's current target from selection props (the `linkOf`
|
|
15
|
+
* lens — parents derive from their committed child annotations) and writes
|
|
16
|
+
* through the one `selection.updateLink(target)` path; the plugin's reconciler
|
|
17
|
+
* materializes/retargets the attached children. Links are a verb on the
|
|
18
|
+
* selection, not a style — which is why this is a popover, not a sidebar
|
|
19
|
+
* section.
|
|
20
|
+
*/
|
|
21
|
+
function ModeToggle({ active, title, onClick, children }) {
|
|
22
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
23
|
+
type: "button",
|
|
24
|
+
title,
|
|
25
|
+
onClick,
|
|
26
|
+
className: `rounded border px-2.5 py-1 text-xs font-medium transition-colors ${active ? "border-accent bg-accent text-on-accent" : "border-border bg-surface text-fg hover:bg-hover"}`,
|
|
27
|
+
children
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
function LinkEditorCard({ onClose }) {
|
|
31
|
+
const t = (0, _embedpdf_react_i18n.useT)();
|
|
32
|
+
const kernel = (0, _embedpdf_react_runtime.useKernel)();
|
|
33
|
+
const anno = (0, _embedpdf_react_annotation.useAnnotation)();
|
|
34
|
+
const value = (0, _embedpdf_react_annotation.useAnnotationProperties)().values.link ?? null;
|
|
35
|
+
const [mode, setMode] = (0, react.useState)(value?.kind === "goto" ? "page" : "uri");
|
|
36
|
+
const [uri, setUri] = (0, react.useState)(value?.kind === "uri" ? value.uri : "");
|
|
37
|
+
const [pageNo, setPageNo] = (0, react.useState)("1");
|
|
38
|
+
const apply = () => {
|
|
39
|
+
if (mode === "uri") {
|
|
40
|
+
const trimmed = uri.trim();
|
|
41
|
+
if (!trimmed) return;
|
|
42
|
+
anno.selection.updateLink({
|
|
43
|
+
kind: "uri",
|
|
44
|
+
uri: trimmed
|
|
45
|
+
});
|
|
46
|
+
onClose();
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
const page = kernel.documents.getPage(Math.max(0, Number(pageNo) - 1));
|
|
50
|
+
if (!page) return;
|
|
51
|
+
anno.selection.updateLink({
|
|
52
|
+
kind: "goto",
|
|
53
|
+
destination: {
|
|
54
|
+
kind: "fit",
|
|
55
|
+
page: page.ref
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
onClose();
|
|
59
|
+
};
|
|
60
|
+
const inputCls = "border-border bg-surface text-fg focus:border-accent w-full rounded border px-2.5 py-1.5 text-sm outline-none";
|
|
61
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
62
|
+
className: "border-border bg-surface w-64 rounded-lg border p-3 shadow-lg",
|
|
63
|
+
children: [
|
|
64
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
65
|
+
className: "mb-2 flex items-center justify-between",
|
|
66
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
67
|
+
className: "text-fg text-sm font-semibold",
|
|
68
|
+
children: t("commands.annotate.link")
|
|
69
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
70
|
+
type: "button",
|
|
71
|
+
onClick: onClose,
|
|
72
|
+
"aria-label": t("panel.close"),
|
|
73
|
+
title: t("panel.close"),
|
|
74
|
+
className: "text-fg-muted hover:bg-hover grid h-6 w-6 place-items-center rounded",
|
|
75
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_icons.Icon, {
|
|
76
|
+
name: "x",
|
|
77
|
+
size: 14
|
|
78
|
+
})
|
|
79
|
+
})]
|
|
80
|
+
}),
|
|
81
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
82
|
+
className: "mb-2 flex gap-1.5",
|
|
83
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(ModeToggle, {
|
|
84
|
+
title: t("linkEditor.toUrl"),
|
|
85
|
+
active: mode === "uri",
|
|
86
|
+
onClick: () => setMode("uri"),
|
|
87
|
+
children: t("linkEditor.url")
|
|
88
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ModeToggle, {
|
|
89
|
+
title: t("linkEditor.toPage"),
|
|
90
|
+
active: mode === "page",
|
|
91
|
+
onClick: () => setMode("page"),
|
|
92
|
+
children: t("linkEditor.page")
|
|
93
|
+
})]
|
|
94
|
+
}),
|
|
95
|
+
mode === "uri" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
96
|
+
type: "url",
|
|
97
|
+
className: inputCls,
|
|
98
|
+
placeholder: t("linkEditor.urlPlaceholder"),
|
|
99
|
+
autoFocus: true,
|
|
100
|
+
value: uri,
|
|
101
|
+
onChange: (event) => setUri(event.target.value),
|
|
102
|
+
onKeyDown: (event) => event.key === "Enter" && apply()
|
|
103
|
+
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
104
|
+
type: "number",
|
|
105
|
+
min: 1,
|
|
106
|
+
className: inputCls,
|
|
107
|
+
placeholder: t("linkEditor.pagePlaceholder"),
|
|
108
|
+
autoFocus: true,
|
|
109
|
+
value: pageNo,
|
|
110
|
+
onChange: (event) => setPageNo(event.target.value),
|
|
111
|
+
onKeyDown: (event) => event.key === "Enter" && apply()
|
|
112
|
+
}),
|
|
113
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
114
|
+
type: "button",
|
|
115
|
+
className: "bg-accent text-on-accent mt-2.5 w-full rounded px-2 py-1.5 text-sm font-medium",
|
|
116
|
+
onClick: apply,
|
|
117
|
+
children: value == null ? t("linkEditor.add") : t("linkEditor.update")
|
|
118
|
+
})
|
|
119
|
+
]
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
//#endregion
|
|
123
|
+
exports.LinkEditorCard = LinkEditorCard;
|
|
124
|
+
|
|
125
|
+
//# sourceMappingURL=link-editor-CAS7MZM2.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"link-editor-CAS7MZM2.cjs","names":["Icon"],"sources":["../src/ui/link-editor.tsx"],"sourcesContent":["/**\n * The link editor popover. It rides the same selection anchor as the action\n * strip (`<AnnotationMenu>` solves where), opening from the strip's link icon\n * (`annotation:link` toggles the `link-editor` shell surface) and rendering in\n * place of the strip while open — one anchored card at a time.\n *\n * Reads the selection's current target from selection props (the `linkOf`\n * lens — parents derive from their committed child annotations) and writes\n * through the one `selection.updateLink(target)` path; the plugin's reconciler\n * materializes/retargets the attached children. Links are a verb on the\n * selection, not a style — which is why this is a popover, not a sidebar\n * section.\n */\nimport { useState, type ReactNode } from 'react';\nimport { useAnnotation, useAnnotationProperties } from '@embedpdf/react/annotation';\nimport type { PdfLinkTarget } from '@embedpdf/react/link';\nimport { useKernel } from '@embedpdf/react/runtime';\nimport { useT } from '@embedpdf/react/i18n';\nimport { Icon } from './icons';\n\nfunction ModeToggle({\n active,\n title,\n onClick,\n children,\n}: {\n active: boolean;\n title: string;\n onClick: () => void;\n children: ReactNode;\n}) {\n return (\n <button\n type=\"button\"\n title={title}\n onClick={onClick}\n className={`rounded border px-2.5 py-1 text-xs font-medium transition-colors ${\n active\n ? 'border-accent bg-accent text-on-accent'\n : 'border-border bg-surface text-fg hover:bg-hover'\n }`}\n >\n {children}\n </button>\n );\n}\n\nexport function LinkEditorCard({ onClose }: { onClose: () => void }) {\n const t = useT();\n const kernel = useKernel();\n const anno = useAnnotation();\n const props = useAnnotationProperties();\n const value = (props.values.link ?? null) as PdfLinkTarget | null;\n const [mode, setMode] = useState<'uri' | 'page'>(value?.kind === 'goto' ? 'page' : 'uri');\n const [uri, setUri] = useState(value?.kind === 'uri' ? value.uri : '');\n const [pageNo, setPageNo] = useState('1');\n\n const apply = () => {\n if (mode === 'uri') {\n const trimmed = uri.trim();\n if (!trimmed) return;\n anno.selection.updateLink({ kind: 'uri', uri: trimmed });\n onClose();\n return;\n }\n // Page number (1-based) → the page's object number (stable across moves).\n const page = kernel.documents.getPage(Math.max(0, Number(pageNo) - 1));\n if (!page) return;\n anno.selection.updateLink({ kind: 'goto', destination: { kind: 'fit', page: page.ref } });\n onClose();\n };\n\n const inputCls =\n 'border-border bg-surface text-fg focus:border-accent w-full rounded border px-2.5 py-1.5 text-sm outline-none';\n return (\n <div className=\"border-border bg-surface w-64 rounded-lg border p-3 shadow-lg\">\n <div className=\"mb-2 flex items-center justify-between\">\n <span className=\"text-fg text-sm font-semibold\">{t('commands.annotate.link')}</span>\n <button\n type=\"button\"\n onClick={onClose}\n aria-label={t('panel.close')}\n title={t('panel.close')}\n className=\"text-fg-muted hover:bg-hover grid h-6 w-6 place-items-center rounded\"\n >\n <Icon name=\"x\" size={14} />\n </button>\n </div>\n <div className=\"mb-2 flex gap-1.5\">\n <ModeToggle\n title={t('linkEditor.toUrl')}\n active={mode === 'uri'}\n onClick={() => setMode('uri')}\n >\n {t('linkEditor.url')}\n </ModeToggle>\n <ModeToggle\n title={t('linkEditor.toPage')}\n active={mode === 'page'}\n onClick={() => setMode('page')}\n >\n {t('linkEditor.page')}\n </ModeToggle>\n </div>\n {mode === 'uri' ? (\n <input\n type=\"url\"\n className={inputCls}\n placeholder={t('linkEditor.urlPlaceholder')}\n autoFocus\n value={uri}\n onChange={(event) => setUri(event.target.value)}\n onKeyDown={(event) => event.key === 'Enter' && apply()}\n />\n ) : (\n <input\n type=\"number\"\n min={1}\n className={inputCls}\n placeholder={t('linkEditor.pagePlaceholder')}\n autoFocus\n value={pageNo}\n onChange={(event) => setPageNo(event.target.value)}\n onKeyDown={(event) => event.key === 'Enter' && apply()}\n />\n )}\n <button\n type=\"button\"\n className=\"bg-accent text-on-accent mt-2.5 w-full rounded px-2 py-1.5 text-sm font-medium\"\n onClick={apply}\n >\n {value == null ? t('linkEditor.add') : t('linkEditor.update')}\n </button>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { n as Icon } from "./icons-7dB0Y1ct.js";
|
|
2
|
+
import { useState } from "react";
|
|
3
|
+
import { useKernel } from "@embedpdf/react/runtime";
|
|
4
|
+
import { useAnnotation, useAnnotationProperties } from "@embedpdf/react/annotation";
|
|
5
|
+
import { useT } from "@embedpdf/react/i18n";
|
|
6
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
7
|
+
//#region src/ui/link-editor.tsx
|
|
8
|
+
/**
|
|
9
|
+
* The link editor popover. It rides the same selection anchor as the action
|
|
10
|
+
* strip (`<AnnotationMenu>` solves where), opening from the strip's link icon
|
|
11
|
+
* (`annotation:link` toggles the `link-editor` shell surface) and rendering in
|
|
12
|
+
* place of the strip while open — one anchored card at a time.
|
|
13
|
+
*
|
|
14
|
+
* Reads the selection's current target from selection props (the `linkOf`
|
|
15
|
+
* lens — parents derive from their committed child annotations) and writes
|
|
16
|
+
* through the one `selection.updateLink(target)` path; the plugin's reconciler
|
|
17
|
+
* materializes/retargets the attached children. Links are a verb on the
|
|
18
|
+
* selection, not a style — which is why this is a popover, not a sidebar
|
|
19
|
+
* section.
|
|
20
|
+
*/
|
|
21
|
+
function ModeToggle({ active, title, onClick, children }) {
|
|
22
|
+
return /* @__PURE__ */ jsx("button", {
|
|
23
|
+
type: "button",
|
|
24
|
+
title,
|
|
25
|
+
onClick,
|
|
26
|
+
className: `rounded border px-2.5 py-1 text-xs font-medium transition-colors ${active ? "border-accent bg-accent text-on-accent" : "border-border bg-surface text-fg hover:bg-hover"}`,
|
|
27
|
+
children
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
function LinkEditorCard({ onClose }) {
|
|
31
|
+
const t = useT();
|
|
32
|
+
const kernel = useKernel();
|
|
33
|
+
const anno = useAnnotation();
|
|
34
|
+
const value = useAnnotationProperties().values.link ?? null;
|
|
35
|
+
const [mode, setMode] = useState(value?.kind === "goto" ? "page" : "uri");
|
|
36
|
+
const [uri, setUri] = useState(value?.kind === "uri" ? value.uri : "");
|
|
37
|
+
const [pageNo, setPageNo] = useState("1");
|
|
38
|
+
const apply = () => {
|
|
39
|
+
if (mode === "uri") {
|
|
40
|
+
const trimmed = uri.trim();
|
|
41
|
+
if (!trimmed) return;
|
|
42
|
+
anno.selection.updateLink({
|
|
43
|
+
kind: "uri",
|
|
44
|
+
uri: trimmed
|
|
45
|
+
});
|
|
46
|
+
onClose();
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
const page = kernel.documents.getPage(Math.max(0, Number(pageNo) - 1));
|
|
50
|
+
if (!page) return;
|
|
51
|
+
anno.selection.updateLink({
|
|
52
|
+
kind: "goto",
|
|
53
|
+
destination: {
|
|
54
|
+
kind: "fit",
|
|
55
|
+
page: page.ref
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
onClose();
|
|
59
|
+
};
|
|
60
|
+
const inputCls = "border-border bg-surface text-fg focus:border-accent w-full rounded border px-2.5 py-1.5 text-sm outline-none";
|
|
61
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
62
|
+
className: "border-border bg-surface w-64 rounded-lg border p-3 shadow-lg",
|
|
63
|
+
children: [
|
|
64
|
+
/* @__PURE__ */ jsxs("div", {
|
|
65
|
+
className: "mb-2 flex items-center justify-between",
|
|
66
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
67
|
+
className: "text-fg text-sm font-semibold",
|
|
68
|
+
children: t("commands.annotate.link")
|
|
69
|
+
}), /* @__PURE__ */ jsx("button", {
|
|
70
|
+
type: "button",
|
|
71
|
+
onClick: onClose,
|
|
72
|
+
"aria-label": t("panel.close"),
|
|
73
|
+
title: t("panel.close"),
|
|
74
|
+
className: "text-fg-muted hover:bg-hover grid h-6 w-6 place-items-center rounded",
|
|
75
|
+
children: /* @__PURE__ */ jsx(Icon, {
|
|
76
|
+
name: "x",
|
|
77
|
+
size: 14
|
|
78
|
+
})
|
|
79
|
+
})]
|
|
80
|
+
}),
|
|
81
|
+
/* @__PURE__ */ jsxs("div", {
|
|
82
|
+
className: "mb-2 flex gap-1.5",
|
|
83
|
+
children: [/* @__PURE__ */ jsx(ModeToggle, {
|
|
84
|
+
title: t("linkEditor.toUrl"),
|
|
85
|
+
active: mode === "uri",
|
|
86
|
+
onClick: () => setMode("uri"),
|
|
87
|
+
children: t("linkEditor.url")
|
|
88
|
+
}), /* @__PURE__ */ jsx(ModeToggle, {
|
|
89
|
+
title: t("linkEditor.toPage"),
|
|
90
|
+
active: mode === "page",
|
|
91
|
+
onClick: () => setMode("page"),
|
|
92
|
+
children: t("linkEditor.page")
|
|
93
|
+
})]
|
|
94
|
+
}),
|
|
95
|
+
mode === "uri" ? /* @__PURE__ */ jsx("input", {
|
|
96
|
+
type: "url",
|
|
97
|
+
className: inputCls,
|
|
98
|
+
placeholder: t("linkEditor.urlPlaceholder"),
|
|
99
|
+
autoFocus: true,
|
|
100
|
+
value: uri,
|
|
101
|
+
onChange: (event) => setUri(event.target.value),
|
|
102
|
+
onKeyDown: (event) => event.key === "Enter" && apply()
|
|
103
|
+
}) : /* @__PURE__ */ jsx("input", {
|
|
104
|
+
type: "number",
|
|
105
|
+
min: 1,
|
|
106
|
+
className: inputCls,
|
|
107
|
+
placeholder: t("linkEditor.pagePlaceholder"),
|
|
108
|
+
autoFocus: true,
|
|
109
|
+
value: pageNo,
|
|
110
|
+
onChange: (event) => setPageNo(event.target.value),
|
|
111
|
+
onKeyDown: (event) => event.key === "Enter" && apply()
|
|
112
|
+
}),
|
|
113
|
+
/* @__PURE__ */ jsx("button", {
|
|
114
|
+
type: "button",
|
|
115
|
+
className: "bg-accent text-on-accent mt-2.5 w-full rounded px-2 py-1.5 text-sm font-medium",
|
|
116
|
+
onClick: apply,
|
|
117
|
+
children: value == null ? t("linkEditor.add") : t("linkEditor.update")
|
|
118
|
+
})
|
|
119
|
+
]
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
//#endregion
|
|
123
|
+
export { LinkEditorCard };
|
|
124
|
+
|
|
125
|
+
//# sourceMappingURL=link-editor-CkwtqRvb.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"link-editor-CkwtqRvb.js","names":[],"sources":["../src/ui/link-editor.tsx"],"sourcesContent":["/**\n * The link editor popover. It rides the same selection anchor as the action\n * strip (`<AnnotationMenu>` solves where), opening from the strip's link icon\n * (`annotation:link` toggles the `link-editor` shell surface) and rendering in\n * place of the strip while open — one anchored card at a time.\n *\n * Reads the selection's current target from selection props (the `linkOf`\n * lens — parents derive from their committed child annotations) and writes\n * through the one `selection.updateLink(target)` path; the plugin's reconciler\n * materializes/retargets the attached children. Links are a verb on the\n * selection, not a style — which is why this is a popover, not a sidebar\n * section.\n */\nimport { useState, type ReactNode } from 'react';\nimport { useAnnotation, useAnnotationProperties } from '@embedpdf/react/annotation';\nimport type { PdfLinkTarget } from '@embedpdf/react/link';\nimport { useKernel } from '@embedpdf/react/runtime';\nimport { useT } from '@embedpdf/react/i18n';\nimport { Icon } from './icons';\n\nfunction ModeToggle({\n active,\n title,\n onClick,\n children,\n}: {\n active: boolean;\n title: string;\n onClick: () => void;\n children: ReactNode;\n}) {\n return (\n <button\n type=\"button\"\n title={title}\n onClick={onClick}\n className={`rounded border px-2.5 py-1 text-xs font-medium transition-colors ${\n active\n ? 'border-accent bg-accent text-on-accent'\n : 'border-border bg-surface text-fg hover:bg-hover'\n }`}\n >\n {children}\n </button>\n );\n}\n\nexport function LinkEditorCard({ onClose }: { onClose: () => void }) {\n const t = useT();\n const kernel = useKernel();\n const anno = useAnnotation();\n const props = useAnnotationProperties();\n const value = (props.values.link ?? null) as PdfLinkTarget | null;\n const [mode, setMode] = useState<'uri' | 'page'>(value?.kind === 'goto' ? 'page' : 'uri');\n const [uri, setUri] = useState(value?.kind === 'uri' ? value.uri : '');\n const [pageNo, setPageNo] = useState('1');\n\n const apply = () => {\n if (mode === 'uri') {\n const trimmed = uri.trim();\n if (!trimmed) return;\n anno.selection.updateLink({ kind: 'uri', uri: trimmed });\n onClose();\n return;\n }\n // Page number (1-based) → the page's object number (stable across moves).\n const page = kernel.documents.getPage(Math.max(0, Number(pageNo) - 1));\n if (!page) return;\n anno.selection.updateLink({ kind: 'goto', destination: { kind: 'fit', page: page.ref } });\n onClose();\n };\n\n const inputCls =\n 'border-border bg-surface text-fg focus:border-accent w-full rounded border px-2.5 py-1.5 text-sm outline-none';\n return (\n <div className=\"border-border bg-surface w-64 rounded-lg border p-3 shadow-lg\">\n <div className=\"mb-2 flex items-center justify-between\">\n <span className=\"text-fg text-sm font-semibold\">{t('commands.annotate.link')}</span>\n <button\n type=\"button\"\n onClick={onClose}\n aria-label={t('panel.close')}\n title={t('panel.close')}\n className=\"text-fg-muted hover:bg-hover grid h-6 w-6 place-items-center rounded\"\n >\n <Icon name=\"x\" size={14} />\n </button>\n </div>\n <div className=\"mb-2 flex gap-1.5\">\n <ModeToggle\n title={t('linkEditor.toUrl')}\n active={mode === 'uri'}\n onClick={() => setMode('uri')}\n >\n {t('linkEditor.url')}\n </ModeToggle>\n <ModeToggle\n title={t('linkEditor.toPage')}\n active={mode === 'page'}\n onClick={() => setMode('page')}\n >\n {t('linkEditor.page')}\n </ModeToggle>\n </div>\n {mode === 'uri' ? (\n <input\n type=\"url\"\n className={inputCls}\n placeholder={t('linkEditor.urlPlaceholder')}\n autoFocus\n value={uri}\n onChange={(event) => setUri(event.target.value)}\n onKeyDown={(event) => event.key === 'Enter' && apply()}\n />\n ) : (\n <input\n type=\"number\"\n min={1}\n className={inputCls}\n placeholder={t('linkEditor.pagePlaceholder')}\n autoFocus\n value={pageNo}\n onChange={(event) => setPageNo(event.target.value)}\n onKeyDown={(event) => event.key === 'Enter' && apply()}\n />\n )}\n <button\n type=\"button\"\n className=\"bg-accent text-on-accent mt-2.5 w-full rounded px-2 py-1.5 text-sm font-medium\"\n onClick={apply}\n >\n {value == null ? t('linkEditor.add') : t('linkEditor.update')}\n </button>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAoBA,SAAS,WAAW,EAClB,QACA,OACA,SACA,YAMC;CACD,OACE,oBAAC,UAAD;EACE,MAAK;EACE;EACE;EACT,WAAW,oEACT,SACI,2CACA;EAGL;CACK,CAAA;AAEZ;AAEA,SAAgB,eAAe,EAAE,WAAoC;CACnE,MAAM,IAAI,KAAK;CACf,MAAM,SAAS,UAAU;CACzB,MAAM,OAAO,cAAc;CAE3B,MAAM,QADQ,wBACK,CAAC,CAAC,OAAO,QAAQ;CACpC,MAAM,CAAC,MAAM,WAAW,SAAyB,OAAO,SAAS,SAAS,SAAS,KAAK;CACxF,MAAM,CAAC,KAAK,UAAU,SAAS,OAAO,SAAS,QAAQ,MAAM,MAAM,EAAE;CACrE,MAAM,CAAC,QAAQ,aAAa,SAAS,GAAG;CAExC,MAAM,cAAc;EAClB,IAAI,SAAS,OAAO;GAClB,MAAM,UAAU,IAAI,KAAK;GACzB,IAAI,CAAC,SAAS;GACd,KAAK,UAAU,WAAW;IAAE,MAAM;IAAO,KAAK;GAAQ,CAAC;GACvD,QAAQ;GACR;EACF;EAEA,MAAM,OAAO,OAAO,UAAU,QAAQ,KAAK,IAAI,GAAG,OAAO,MAAM,IAAI,CAAC,CAAC;EACrE,IAAI,CAAC,MAAM;EACX,KAAK,UAAU,WAAW;GAAE,MAAM;GAAQ,aAAa;IAAE,MAAM;IAAO,MAAM,KAAK;GAAI;EAAE,CAAC;EACxF,QAAQ;CACV;CAEA,MAAM,WACJ;CACF,OACE,qBAAC,OAAD;EAAK,WAAU;EAAf,UAAA;GACE,qBAAC,OAAD;IAAK,WAAU;IAAf,UAAA,CACE,oBAAC,QAAD;KAAM,WAAU;KAAiC,UAAA,EAAE,wBAAwB;IAAQ,CAAA,GACnF,oBAAC,UAAD;KACE,MAAK;KACL,SAAS;KACT,cAAY,EAAE,aAAa;KAC3B,OAAO,EAAE,aAAa;KACtB,WAAU;KAEV,UAAA,oBAAC,MAAD;MAAM,MAAK;MAAI,MAAM;KAAK,CAAA;IACpB,CAAA,CACL;;GACL,qBAAC,OAAD;IAAK,WAAU;IAAf,UAAA,CACE,oBAAC,YAAD;KACE,OAAO,EAAE,kBAAkB;KAC3B,QAAQ,SAAS;KACjB,eAAe,QAAQ,KAAK;KAE3B,UAAA,EAAE,gBAAgB;IACT,CAAA,GACZ,oBAAC,YAAD;KACE,OAAO,EAAE,mBAAmB;KAC5B,QAAQ,SAAS;KACjB,eAAe,QAAQ,MAAM;KAE5B,UAAA,EAAE,iBAAiB;IACV,CAAA,CACT;;GACJ,SAAS,QACR,oBAAC,SAAD;IACE,MAAK;IACL,WAAW;IACX,aAAa,EAAE,2BAA2B;IAC1C,WAAA;IACA,OAAO;IACP,WAAW,UAAU,OAAO,MAAM,OAAO,KAAK;IAC9C,YAAY,UAAU,MAAM,QAAQ,WAAW,MAAM;GACtD,CAAA,IAED,oBAAC,SAAD;IACE,MAAK;IACL,KAAK;IACL,WAAW;IACX,aAAa,EAAE,4BAA4B;IAC3C,WAAA;IACA,OAAO;IACP,WAAW,UAAU,UAAU,MAAM,OAAO,KAAK;IACjD,YAAY,UAAU,MAAM,QAAQ,WAAW,MAAM;GACtD,CAAA;GAEH,oBAAC,UAAD;IACE,MAAK;IACL,WAAU;IACV,SAAS;IAER,UAAA,SAAS,OAAO,EAAE,gBAAgB,IAAI,EAAE,mBAAmB;GACtD,CAAA;EACL;;AAET"}
|