@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":"es-DoXTqFoO.js","names":[],"sources":["../src/locales/es.ts"],"sourcesContent":["import type { Locale } from '@embedpdf/react/i18n';\n\n/**\n * Spanish pack, in the words Adobe Acrobat's Spanish edition uses (redaction is \"Censurar\").\n * Its longer labels make the measured toolbar move more buttons into \"More\" on a switch.\n */\nexport const es: Locale = {\n code: 'es',\n name: 'Español',\n translations: {\n measurement: {\n title: 'Mediciones',\n distance: 'Distancia',\n perimeter: 'Perímetro',\n area: 'Área',\n areaUnit: 'Unidad de área',\n resetLabel: 'Restablecer posición de la etiqueta',\n calibrate: 'Calibrar escala',\n scale: 'Escala',\n custom: 'Personalizada',\n unavailable: 'No disponible',\n instructions:\n 'Arrastra para medir una distancia y haz clic para colocar la línea de cota. Marca los vértices de un perímetro o área y haz doble clic para terminar. Los bordes del área no deben cruzarse; una vista previa no disponible no puede finalizarse. Pulsa Escape para cancelar. Arrastra la etiqueta para moverla.',\n sessionOnly: 'Este motor conserva la calibración de página solo durante esta sesión.',\n allPages: 'Aplicar a todas las páginas',\n recalculate: 'Recalcular las mediciones existentes',\n preset: 'Escala predefinida',\n choosePreset: 'Elegir una escala',\n unit: 'Unidad',\n precision: 'Precisión',\n selection: 'Mediciones seleccionadas',\n report: '{updated} actualizadas · {skipped} omitidas · {failed} fallidas',\n knownLength: 'Introduce la longitud real representada por la línea que acabas de dibujar.',\n length: 'Longitud conocida',\n apply: 'Aplicar escala',\n applying: 'Aplicando…',\n },\n commands: {\n zoom: {\n in: 'Acercar',\n out: 'Alejar',\n fitPage: 'Ajustar a la página',\n fitWidth: 'Ajustar al ancho',\n automatic: 'Automático',\n menu: 'Zoom',\n level: 'Nivel de zoom',\n p50: '50 %',\n p100: '100 %',\n p150: '150 %',\n p200: '200 %',\n p400: '400 %',\n },\n pan: 'Desplazar',\n pointer: 'Puntero',\n comment: 'Comentario',\n style: 'Estilo',\n menu: 'Menú',\n viewControls: 'Controles de vista',\n open: 'Abrir',\n download: 'Descargar',\n print: 'Imprimir',\n fullscreen: 'Pantalla completa',\n spread: {\n group: 'Diseño de página',\n none: 'Una página',\n odd: 'Dos páginas',\n even: 'Portada',\n },\n scroll: {\n group: 'Desplazamiento',\n vertical: 'Vertical',\n horizontal: 'Horizontal',\n },\n rotate: {\n group: 'Girar',\n clockwise: 'Girar a la derecha',\n counterclockwise: 'Girar a la izquierda',\n },\n mode: {\n measure: 'Medir',\n group: 'Modo',\n view: 'Ver',\n annotate: 'Anotar',\n shapes: 'Formas',\n insert: 'Insertar',\n form: 'Formulario',\n redact: 'Censurar',\n },\n annotate: {\n cancelCreation: 'Cancelar dibujo',\n highlight: 'Resaltar',\n strikeout: 'Tachar',\n underline: 'Subrayar',\n squiggly: 'Ondulado',\n ink: 'Dibujar',\n inkHighlight: 'Resaltador a mano alzada',\n text: 'Texto',\n insertText: 'Insertar texto',\n replaceText: 'Reemplazar texto',\n callout: 'Llamada',\n note: 'Comentario',\n link: 'Enlace',\n gotoLink: 'Ir al enlace',\n saveFile: 'Guardar archivo',\n removeLink: 'Quitar enlace',\n delete: 'Eliminar',\n group: 'Agrupar',\n ungroup: 'Desagrupar',\n stampFromSelection: 'Crear sello',\n strip: 'Acciones de anotación',\n },\n selection: {\n copy: 'Copiar',\n strip: 'Acciones de selección de texto',\n },\n shapes: {\n rectangle: 'Rectángulo',\n circle: 'Círculo',\n line: 'Línea',\n arrow: 'Flecha',\n polygon: 'Polígono',\n polyline: 'Polilínea',\n },\n insert: {\n stamp: 'Sello',\n attachment: 'Adjuntar archivo',\n signature: 'Firma',\n image: 'Imagen',\n },\n form: {\n textfield: 'Campo de texto',\n checkbox: 'Casilla',\n radio: 'Botón de opción',\n select: 'Desplegable',\n listbox: 'Lista',\n button: 'Botón',\n signature: 'Campo de firma',\n // The Form mode's design switch, which opens the form designer's sidebar.\n design: 'Diseño de formulario',\n },\n redact: {\n mark: 'Marcar para censurar',\n applyAll: 'Aplicar censuras',\n clearAll: 'Borrar marcas',\n },\n undo: 'Deshacer',\n redo: 'Rehacer',\n page: {\n next: 'Página siguiente',\n previous: 'Página anterior',\n first: 'Primera página',\n last: 'Última página',\n goTo: 'Ir a la página',\n },\n find: 'Buscar',\n shortcuts: 'Atajos de teclado',\n notAllowed: {\n default: '{label} no está permitido',\n 'annotations-create': 'No está permitido añadir anotaciones',\n 'doc-annotate-modify': 'No está permitido cambiar anotaciones',\n 'doc-annotate-read': 'No está permitido ver anotaciones',\n 'doc-attachments-modify': 'No se permite agregar archivos',\n 'doc-download': 'No está permitido descargar',\n 'doc-forms-modify': 'No está permitido editar campos de formulario',\n 'doc-outline-modify': 'No se permite cambiar el esquema',\n 'doc-pages-assemble': 'No se permite cambiar las páginas',\n 'doc-print': 'No está permitido imprimir',\n 'doc-text-copy': 'No está permitido copiar',\n 'doc-text-search': 'No está permitido buscar',\n },\n attachment: {\n add: 'Agregar archivo',\n save: 'Guardar',\n goTo: 'Ir a la página',\n delete: 'Eliminar',\n more: 'Más opciones',\n },\n outline: {\n add: 'Añadir elemento',\n addChild: 'Añadir elemento secundario',\n rename: 'Cambiar nombre',\n setDestination: 'Establecer destino en la vista actual',\n properties: 'Propiedades…',\n delete: 'Eliminar',\n expandAll: 'Expandir todo',\n collapseAll: 'Contraer todo',\n more: 'Más opciones',\n },\n // The page commands, in the Pages mode and a page's menu.\n pages: {\n rotateClockwise: 'Girar la página en sentido horario',\n rotateCounterclockwise: 'Girar la página en sentido antihorario',\n delete: 'Eliminar páginas',\n duplicate: 'Duplicar páginas',\n insertBlank: 'Insertar página en blanco',\n insertFile: 'Insertar desde archivo…',\n extract: 'Extraer páginas',\n selectAll: 'Seleccionar todas las páginas',\n more: 'Opciones de página',\n },\n turnedOff: '{label} no está disponible',\n },\n passwordPrompt: {\n title: 'Contraseña requerida',\n required: 'Este documento está protegido con contraseña. Introdúcela para abrirlo.',\n incorrect: 'La contraseña es incorrecta. Inténtalo de nuevo.',\n incorrectWarning: 'Contraseña incorrecta',\n label: 'Contraseña',\n placeholder: 'Introduce la contraseña',\n cancel: 'Cancelar',\n open: 'Abrir',\n opening: 'Abriendo…',\n },\n dropToOpen: {\n label: 'Suelta un PDF para abrirlo',\n },\n documentError: {\n title: 'No se pudo abrir el documento',\n unknown: 'El documento no se pudo abrir.',\n notFound: 'No se encontró el archivo.',\n notAllowed: 'No tienes acceso a este documento.',\n damaged: 'Este archivo no es un PDF o está dañado.',\n unsupported: 'Este visor no puede abrir este tipo de documento.',\n retry: 'Reintentar',\n close: 'Cerrar documento',\n },\n tabs: {\n close: 'Cerrar {name}',\n loading: 'Cargando',\n untitled: 'Documento {id}',\n },\n closeUnsaved: {\n title: '¿Cerrar sin guardar?',\n body: '«{name}» tiene cambios que no se han descargado. Se perderán.',\n cancel: 'Cancelar',\n close: 'Cerrar sin guardar',\n },\n viewOnly: {\n label: 'Solo lectura',\n turnedOff: 'Las herramientas que cambian este documento están desactivadas',\n notAllowed: 'Puedes leer este documento, pero no cambiarlo',\n },\n panel: {\n close: 'Cerrar',\n resize: 'Cambiar el ancho de {title}',\n },\n menu: {\n back: 'Atrás',\n },\n shortcuts: {\n document: 'Documento',\n viewing: 'Visualización',\n editing: 'Edición',\n other: 'Otros',\n },\n goToPage: {\n go: 'Ir',\n },\n print: {\n title: 'Imprimir',\n pages: 'Páginas',\n allPages: 'Todas las páginas',\n currentPage: 'Página actual',\n range: 'Personalizado',\n rangeLabel: 'Páginas que imprimir',\n rangePlaceholder: 'p. ej. 1-3, 5',\n rangeInvalid: 'Números de página del 1 al {total}, por ejemplo 1-3, 5',\n annotations: 'Imprimir anotaciones',\n preparing: 'Preparando…',\n preparingPage: 'Preparando la página {page} de {total}…',\n ready: 'Listo para imprimir.',\n images: 'Las páginas se imprimen como imágenes a {dpi} DPI.',\n lowResolution: 'Este documento solo permite imprimir en baja resolución ({dpi} DPI).',\n failed: 'No se pudo preparar la impresión.',\n cancel: 'Cancelar',\n print: 'Imprimir',\n },\n panels: {\n thumbnails: 'Miniaturas',\n outline: 'Esquema',\n attachments: 'Adjuntos',\n search: 'Buscar',\n comments: 'Comentarios',\n style: 'Estilo',\n stamps: 'Sellos',\n signatures: 'Firmas',\n redaction: 'Censuras',\n measurement: 'Mediciones',\n formDesign: 'Diseño de formulario',\n switch: 'Cambiar de panel',\n },\n annotation: {\n comment: 'Comentario',\n highlight: 'Resaltado',\n underline: 'Subrayado',\n squiggly: 'Ondulado',\n strikeout: 'Tachado',\n square: 'Cuadrado',\n circle: 'Círculo',\n line: 'Línea',\n polygon: 'Polígono',\n polyline: 'Polilínea',\n ink: 'Tinta',\n freeText: 'Texto',\n stamp: 'Sello',\n caret: 'Intercalación',\n redact: 'Censura',\n fileAttachment: 'Adjunto',\n // The style panel's labels, as the annotation kinds name them (`labelKey`), by wording:\n // one field is called different things by different kinds.\n style: {\n opacity: 'Opacidad',\n stroke: 'Trazo',\n fill: 'Relleno',\n color: 'Color',\n strokeWidth: 'Grosor del trazo',\n border: 'Borde',\n borderStyle: 'Estilo de borde',\n borderColor: 'Color de borde',\n borderWidth: 'Grosor de borde',\n background: 'Fondo',\n outline: 'Contorno',\n lineEndings: 'Extremos de línea',\n blendMode: 'Modo de fusión',\n font: 'Fuente',\n fontSize: 'Tamaño de fuente',\n textColor: 'Color del texto',\n bold: 'Negrita',\n italic: 'Cursiva',\n underline: 'Subrayado',\n align: 'Alineación',\n alignment: 'Alineación',\n label: 'Etiqueta',\n labelFont: 'Fuente de la etiqueta',\n labelSize: 'Tamaño de la etiqueta',\n labelColor: 'Color de la etiqueta',\n icon: 'Icono',\n link: 'Enlace',\n },\n // The annotation flags (`/F`).\n flags: {\n print: 'Imprimir',\n hidden: 'Oculta',\n noView: 'Sin vista',\n toggleNoView: 'Alternar sin vista',\n readOnly: 'Solo lectura',\n locked: 'Bloqueada',\n lockedContents: 'Contenido bloqueado',\n noZoom: 'Sin zoom',\n noRotate: 'Sin rotación',\n invisible: 'Invisible',\n },\n borderStyles: { solid: 'Sólido', dashed: 'Discontinuo', cloudy: 'Nube' },\n lineEndings: {\n none: 'Ninguno',\n square: 'Cuadrado',\n circle: 'Círculo',\n diamond: 'Rombo',\n openArrow: 'Flecha abierta',\n closedArrow: 'Flecha cerrada',\n butt: 'Tope',\n reverseOpenArrow: 'Flecha abierta inversa',\n reverseClosedArrow: 'Flecha cerrada inversa',\n slash: 'Barra diagonal',\n },\n blendModes: {\n normal: 'Normal',\n multiply: 'Multiplicar',\n screen: 'Trama',\n overlay: 'Superponer',\n darken: 'Oscurecer',\n lighten: 'Aclarar',\n colorDodge: 'Sobreexponer color',\n colorBurn: 'Subexponer color',\n hardLight: 'Luz fuerte',\n softLight: 'Luz suave',\n difference: 'Diferencia',\n exclusion: 'Exclusión',\n hue: 'Tono',\n saturation: 'Saturación',\n color: 'Color',\n luminosity: 'Luminosidad',\n },\n // The standard PDF fonts, by their names: a language may keep them as they are.\n fonts: {\n courier: 'Courier',\n courierBold: 'Courier Bold',\n courierBoldOblique: 'Courier Bold Oblique',\n courierOblique: 'Courier Oblique',\n helvetica: 'Helvetica',\n helveticaBold: 'Helvetica Bold',\n helveticaBoldOblique: 'Helvetica Bold Oblique',\n helveticaOblique: 'Helvetica Oblique',\n timesRoman: 'Times Roman',\n timesBold: 'Times Bold',\n timesBoldItalic: 'Times Bold Italic',\n timesItalic: 'Times Italic',\n symbol: 'Symbol',\n zapfDingbats: 'Zapf Dingbats',\n },\n alignments: { left: 'Izquierda', center: 'Centro', right: 'Derecha' },\n noteIcons: {\n comment: 'Comentario',\n key: 'Clave',\n note: 'Nota',\n help: 'Ayuda',\n newParagraph: 'Párrafo nuevo',\n paragraph: 'Párrafo',\n insert: 'Insertar',\n },\n attachmentIcons: {\n pushPin: 'Chincheta',\n paperclip: 'Clip',\n graph: 'Gráfico',\n tag: 'Etiqueta',\n },\n },\n // A form field's settings, as the form plugin names them (`labelKey`).\n form: {\n settings: {\n name: 'Nombre',\n tooltip: 'Información sobre herramientas',\n required: 'Obligatorio',\n readOnly: 'Solo lectura',\n noExport: 'No exportar',\n defaultValue: 'Valor predeterminado',\n maxLength: 'Longitud máxima',\n multiline: 'Multilínea',\n password: 'Contraseña',\n comb: 'Un carácter por casilla',\n radiosInUnison: 'Los botones con el mismo valor se activan a la vez',\n keepOneOn: 'Mantener uno activado',\n options: 'Opciones',\n allowTyping: 'Permitir escribir',\n multiSelect: 'Selección múltiple',\n },\n },\n // A thumbnail's tooltip.\n thumbnails: { page: 'Página {page}' },\n // The form designer's sidebar: the fields by page, and the selected one's buttons.\n formDesign: {\n empty: 'Aún no hay campos. Elige una herramienta de campo para añadir uno.',\n page: 'Página {page}',\n allFields: 'Todos los campos',\n buttons: 'Botones',\n boxes: 'Casillas',\n box: 'Casilla {number}',\n addButton: 'Añadir botón',\n addBox: 'Añadir casilla',\n },\n // The style panel's own words around the properties.\n stylePanel: {\n mixed: '(mixto)',\n // A color swatch that takes the color away.\n transparent: 'Transparente',\n lineStart: 'Inicio',\n lineEnd: 'Fin',\n empty: 'Elige una herramienta de dibujo o selecciona una anotación para editar su estilo.',\n selected: 'Seleccionadas: {count}',\n toolDefaults: 'Valores predeterminados: {tool}',\n defaults: 'Valores predeterminados',\n },\n // The flags section of the style panel: its title, and what each flag does.\n annotationFlags: {\n title: 'Indicadores (/F)',\n print: 'Incluir al imprimir la página',\n hidden: 'Oculta en todas partes: pantalla, clics, impresión',\n noView: 'Oculta en pantalla, puede imprimirse',\n toggleNoView: 'Mostrar una anotación sin vista mientras está seleccionada',\n readOnly: 'Visible, pero no admite clics',\n locked: 'No se puede mover / redimensionar / eliminar / cambiar el estilo',\n lockedContents: 'El texto no puede cambiar; la geometría sí',\n noZoom: 'Tamaño fijo en pantalla (anclada arriba a la izquierda)',\n noRotate: 'Se mantiene derecha al girar la página',\n invisible: 'Heredado: ocultar subtipos desconocidos',\n },\n // The link editor over a selected annotation.\n attachments: {\n loading: 'Cargando adjuntos…',\n failed: 'No se pudieron leer los adjuntos.',\n empty: 'Este documento no tiene archivos adjuntos',\n drop: 'Suelte archivos para adjuntarlos',\n dropHint: 'O suelte archivos aquí',\n adding: 'Agregando…',\n onPage: 'Página {page}',\n count: '{count} archivo',\n countPlural: '{count} archivos',\n },\n outline: {\n filter: 'Filtrar esquema',\n loading: 'Cargando esquema…',\n failed: 'No se pudo leer el esquema.',\n empty: 'Este documento no tiene esquema',\n noMatches: 'Ningún elemento coincide',\n incomplete: 'No se pudo leer parte del esquema.',\n untitled: 'Sin título',\n properties: {\n title: 'Propiedades del elemento',\n name: 'Título',\n color: 'Color',\n noColor: 'Ninguno',\n customColor: 'Color personalizado',\n bold: 'Negrita',\n italic: 'Cursiva',\n open: 'Expandido al abrir el documento',\n target: 'Destino',\n targetNone: 'Ninguno',\n targetView: 'Vista actual',\n targetNamed: 'Acción de página',\n targetKept: 'Se mantiene igual',\n keptNote: 'Este elemento ejecuta un script o abre otro archivo. No se puede cambiar aquí.',\n fit: 'Ajuste',\n fitKept: 'Como está',\n save: 'Guardar',\n cancel: 'Cancelar',\n },\n },\n linkEditor: {\n toUrl: 'Enlazar a una URL',\n url: 'URL',\n toPage: 'Enlazar a una página',\n page: 'Página',\n urlPlaceholder: 'https://…',\n pagePlaceholder: 'Número de página',\n add: 'Añadir enlace',\n update: 'Actualizar enlace',\n },\n demo: {\n starting: 'Iniciando el visor…',\n opening: 'Abriendo el documento…',\n more: 'Más',\n searchPlaceholder: 'Buscar en el documento…',\n searchCaseSensitive: 'Distinguir mayúsculas',\n searchWholeWord: 'Palabra completa',\n searchRegex: 'Expresión regular',\n searchSearching: 'Buscando…',\n searchResults: '{count} resultados encontrados',\n searchNoResults: 'Sin resultados',\n searchPrevious: 'Resultado anterior',\n searchNext: 'Resultado siguiente',\n searchPage: 'Página {page}',\n commentsForbidden: 'No tienes acceso a los comentarios de este documento.',\n commentsLoading: 'Cargando comentarios…',\n commentsError: 'No se pudieron cargar los comentarios.',\n commentsRetry: 'Reintentar',\n commentsEmpty: 'Aún no hay comentarios. Usa la herramienta de nota para iniciar un hilo.',\n commentsEmptyReadOnly: 'Este documento no tiene comentarios.',\n commentsAnonymous: 'Desconocido',\n commentsPage: 'Página {page}',\n commentCount: '{count} comentario',\n commentCountPlural: '{count} comentarios',\n commentsReply: 'Responder',\n commentsReplyPlaceholder: 'Responder…',\n commentsAddPlaceholder: 'Añadir un comentario…',\n commentsDelete: 'Eliminar comentario',\n commentsDeleteThread: 'Eliminar hilo',\n commentsEdit: 'Editar comentario',\n commentsStatus: 'Estado',\n commentsStatusNone: 'Sin estado',\n commentsStatusAccepted: 'Aceptado',\n commentsStatusRejected: 'Rechazado',\n commentsStatusCancelled: 'Cancelado',\n commentsStatusCompleted: 'Completado',\n empty: 'Aquí todavía no hay nada en este panel de demostración.',\n page: 'Página {current} de {total}',\n goToPage: 'Ir a la página',\n cancel: 'Cancelar',\n pageBadge: 'pág. {page}',\n redactionEmpty:\n 'No hay censuras pendientes. Usa la herramienta Censurar para marcar texto o áreas.',\n redactionArea: 'Marca de área',\n redactionText: 'Marca de texto',\n redactionRemove: 'Quitar marca',\n redactConfirmTitle: '¿Aplicar censuras?',\n redactConfirmBody:\n 'Eliminar permanentemente el contenido bajo {count} marcas de censura. No se puede deshacer.',\n redactConfirmCollateral: 'También se eliminarán {count} otras anotaciones.',\n redactApply: 'Aplicar',\n redactApplying: 'Aplicando…',\n formatLabel: 'Formato',\n fieldSettingsTitle: 'Campo',\n fieldOptionLabel: 'Etiqueta',\n fieldOptionValue: 'Valor',\n fieldOptionAdd: 'Añadir opción',\n fieldOptionRemove: 'Quitar opción',\n fieldNone: 'Ninguno',\n redactLabelTitle: 'Etiqueta de censura',\n redactLabelPlaceholder: 'p. ej. CENSURADO',\n redactLabelRepeat: 'Repetir etiqueta en toda la región',\n stampsAll: 'Todos los sellos',\n stampsLoading: 'Cargando sellos…',\n stampsEmpty: 'Aún no hay sellos. Importa un PDF para convertir cada página en un sello.',\n stampsRemoveStamp: 'Quitar sello',\n stampsArmedHint: 'Haz clic en una página para colocar el sello.',\n stampsImport: 'Importar PDF…',\n stampsImporting: 'Importando…',\n stampsImportHint:\n 'Importa un PDF como biblioteca de sellos: cada página se convierte en un sello.',\n stampsRemoveLibrary: 'Quitar biblioteca',\n stampsExportLibrary: 'Exportar biblioteca como PDF',\n stampsCustomLibrary: 'Mis sellos',\n stampsCustomLabel: 'Sello personalizado',\n stampsError: 'No se pudieron cargar los sellos integrados.',\n stampsArmError: 'No se pudo activar ese sello.',\n stampsImportError: 'No se pudo importar ese PDF como biblioteca de sellos.',\n quickStampsLabel: 'Sellos rápidos',\n signaturesEmpty: 'Aún no hay firmas. Crea una para firmar.',\n signaturesNew: 'Nueva firma…',\n signaturesArmedHint:\n 'Haz clic en un campo de firma para firmarlo, o en cualquier parte de una página para colocar la marca.',\n signaturesTargetHint: 'Elige una marca para el campo seleccionado.',\n signaturesInDocument: 'En este documento',\n signaturesNone: 'Este documento no tiene campos de firma.',\n signaturesValidate: 'Validar',\n signaturesValidating: 'Validando…',\n signaturesSigned: 'Firmado',\n signaturesUnsigned: 'Sin firmar',\n signaturesRename: 'Renombrar',\n signaturesRemove: 'Quitar',\n signaturesExport: 'Exportar como PDF',\n signaturesAddInitials: 'Añadir iniciales',\n signatureLabel: 'Firma',\n initialsLabel: 'Iniciales',\n makerTitle: 'Nueva firma',\n makerName: 'Nombre',\n makerNamePlaceholder: 'Tu nombre',\n makerDraw: 'Dibujar',\n makerType: 'Escribir',\n makerUpload: 'Subir',\n makerTypePlaceholder: 'Escribe tu nombre',\n makerFont: 'Fuente',\n makerUploadHint: 'Elige un PNG, JPEG o PDF de una página',\n makerClear: 'Borrar',\n makerOptional: '(opcional)',\n makerSave: 'Guardar',\n makerSaving: 'Guardando…',\n makerError: 'No se pudo guardar la firma.',\n signTitle: 'Firmar este campo',\n signReason: 'Motivo',\n signLocation: 'Lugar',\n signKind: 'Qué puede cambiar después',\n signKindApproval:\n 'Firma de aprobación: rellenar formularios y más firmas siguen siendo válidos',\n signKindCertifyAnnotate: 'Certificar: permitir comentarios, rellenar formularios y firmas',\n signKindCertifyFill: 'Certificar: permitir solo rellenar formularios y firmas',\n signKindCertifyLocked: 'Certificar: no permitir cambios',\n signButton: 'Firmar',\n signSigning: 'Firmando…',\n signFill: 'Colocar sin firmar',\n signError: 'No se pudo firmar el campo.',\n inspectTitle: 'Firma',\n inspectSigner: 'Firmado por',\n inspectReason: 'Motivo',\n inspectLocation: 'Lugar',\n inspectTime: 'Fecha',\n inspectIntegrity: 'Documento',\n inspectCryptography: 'Firma',\n inspectTrust: 'Firmante',\n inspectChanges: 'Cambios posteriores',\n inspectDownload: 'Descargar versión firmada',\n verdictValid: 'Válida',\n verdictValidUntrusted: 'Válida, firmante no confiable',\n verdictInvalid: 'No válida: modificado después de firmar',\n verdictWillInvalidate: 'Válida, no válida al guardar',\n signaturesInvalidating:\n 'Este cambio invalidará {field} al guardar el documento. Deshazlo para conservar la firma.',\n verdictIndeterminate: 'No se pudo verificar',\n verdictUnchanged: 'Ninguno',\n verdictRestored: 'Modificado y luego restaurado',\n inspectLaterRevisions: 'Revisiones tras la firma',\n verdictPermitted: 'Permitidos',\n verdictForbidden: 'No permitidos',\n },\n },\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,418 @@
|
|
|
1
|
+
import { d as isFormDesignTool, n as FORM_DESIGN_TOOL } from "./commands-BkgLP3Om.js";
|
|
2
|
+
import { n as Icon } from "./icons-7dB0Y1ct.js";
|
|
3
|
+
import { t as useLabel } from "./labels-C6_i87Oj.js";
|
|
4
|
+
import { useEffect, useMemo, useState } from "react";
|
|
5
|
+
import { useOptionalCapability, useOptionalSelector, usePageList } from "@embedpdf/react/runtime";
|
|
6
|
+
import { useStage } from "@embedpdf/react/stage";
|
|
7
|
+
import { InteractionToken } from "@embedpdf/react/interaction";
|
|
8
|
+
import { AnnotationToken, useAnnotationState } from "@embedpdf/react/annotation";
|
|
9
|
+
import { FormToken } from "@embedpdf/react/form";
|
|
10
|
+
import { useT } from "@embedpdf/react/i18n";
|
|
11
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
12
|
+
//#region src/ui/field-settings.tsx
|
|
13
|
+
/**
|
|
14
|
+
* A field's settings, as the form plugin describes them (`getFieldSettings`),
|
|
15
|
+
* written with `form.update()`: the form designer's sidebar shows them for the
|
|
16
|
+
* selected field. Nothing here knows a field family: the description says what
|
|
17
|
+
* to draw.
|
|
18
|
+
*/
|
|
19
|
+
const inputClass = "border-border bg-surface text-fg w-full rounded-md border px-2 py-1.5 text-sm";
|
|
20
|
+
/** The field's settings, each with the control its description names. */
|
|
21
|
+
function FieldSettings({ field }) {
|
|
22
|
+
const form = useOptionalCapability(FormToken);
|
|
23
|
+
const settings = useOptionalSelector(FormToken, (capability) => capability.getFieldSettings(field.ref), null);
|
|
24
|
+
if (!form || !settings || !form.canDesign()) return null;
|
|
25
|
+
const write = (patch) => void form.update(field.ref, patch).catch(() => void 0);
|
|
26
|
+
return /* @__PURE__ */ jsx("div", { children: settings.properties.map((spec) => /* @__PURE__ */ jsx(SettingControl, {
|
|
27
|
+
fieldKey: JSON.stringify(field.ref),
|
|
28
|
+
spec,
|
|
29
|
+
value: settings.values[spec.key],
|
|
30
|
+
onChange: (value) => write({ [spec.key]: value })
|
|
31
|
+
}, `${spec.key}:${spec.control}`)) });
|
|
32
|
+
}
|
|
33
|
+
function SettingControl({ fieldKey, spec, value, onChange }) {
|
|
34
|
+
const t = useT();
|
|
35
|
+
const label = useLabel();
|
|
36
|
+
switch (spec.control) {
|
|
37
|
+
case "flag": return /* @__PURE__ */ jsxs("label", {
|
|
38
|
+
className: "text-fg mb-2 flex items-center gap-2 text-sm",
|
|
39
|
+
children: [/* @__PURE__ */ jsx("input", {
|
|
40
|
+
type: "checkbox",
|
|
41
|
+
checked: value === true,
|
|
42
|
+
onChange: (event) => onChange(event.target.checked)
|
|
43
|
+
}), label(spec)]
|
|
44
|
+
});
|
|
45
|
+
case "text": return /* @__PURE__ */ jsx(Setting, {
|
|
46
|
+
label: label(spec),
|
|
47
|
+
children: /* @__PURE__ */ jsx(CommittedInput, {
|
|
48
|
+
value: typeof value === "string" ? value : "",
|
|
49
|
+
onCommit: onChange
|
|
50
|
+
}, fieldKey)
|
|
51
|
+
});
|
|
52
|
+
case "number": return /* @__PURE__ */ jsx(Setting, {
|
|
53
|
+
label: label(spec),
|
|
54
|
+
children: /* @__PURE__ */ jsx(CommittedInput, {
|
|
55
|
+
type: "number",
|
|
56
|
+
min: spec.min,
|
|
57
|
+
placeholder: t("demo.fieldNone"),
|
|
58
|
+
value: typeof value === "number" ? String(value) : "",
|
|
59
|
+
onCommit: (text) => onChange(text === "" ? null : Math.max(spec.min, Number(text)))
|
|
60
|
+
}, fieldKey)
|
|
61
|
+
});
|
|
62
|
+
case "choice": return spec.free ? /* @__PURE__ */ jsxs(Setting, {
|
|
63
|
+
label: label(spec),
|
|
64
|
+
children: [/* @__PURE__ */ jsx(CommittedInput, {
|
|
65
|
+
list: `${fieldKey}-choices`,
|
|
66
|
+
value: typeof value === "string" ? value : "",
|
|
67
|
+
onCommit: onChange
|
|
68
|
+
}, fieldKey), /* @__PURE__ */ jsx("datalist", {
|
|
69
|
+
id: `${fieldKey}-choices`,
|
|
70
|
+
children: spec.options.map((option) => /* @__PURE__ */ jsx("option", { value: option }, option))
|
|
71
|
+
})]
|
|
72
|
+
}) : /* @__PURE__ */ jsx(Setting, {
|
|
73
|
+
label: label(spec),
|
|
74
|
+
children: /* @__PURE__ */ jsxs("select", {
|
|
75
|
+
className: inputClass,
|
|
76
|
+
value: typeof value === "string" ? value : "",
|
|
77
|
+
onChange: (event) => onChange(event.target.value === "" ? null : event.target.value),
|
|
78
|
+
children: [/* @__PURE__ */ jsx("option", {
|
|
79
|
+
value: "",
|
|
80
|
+
children: t("demo.fieldNone")
|
|
81
|
+
}), spec.options.map((option) => /* @__PURE__ */ jsx("option", {
|
|
82
|
+
value: option,
|
|
83
|
+
children: option
|
|
84
|
+
}, option))]
|
|
85
|
+
})
|
|
86
|
+
});
|
|
87
|
+
case "choices": {
|
|
88
|
+
const chosen = new Set(Array.isArray(value) ? value : []);
|
|
89
|
+
return /* @__PURE__ */ jsx(Setting, {
|
|
90
|
+
label: label(spec),
|
|
91
|
+
children: spec.options.map((option) => /* @__PURE__ */ jsxs("label", {
|
|
92
|
+
className: "text-fg mb-1 flex items-center gap-2 text-sm",
|
|
93
|
+
children: [/* @__PURE__ */ jsx("input", {
|
|
94
|
+
type: "checkbox",
|
|
95
|
+
checked: chosen.has(option),
|
|
96
|
+
onChange: (event) => onChange(spec.options.filter((each) => each === option ? event.target.checked : chosen.has(each)))
|
|
97
|
+
}), option]
|
|
98
|
+
}, option))
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
case "options": return /* @__PURE__ */ jsx(Setting, {
|
|
102
|
+
label: label(spec),
|
|
103
|
+
children: /* @__PURE__ */ jsx(OptionsEditor, {
|
|
104
|
+
options: Array.isArray(value) ? value : [],
|
|
105
|
+
onCommit: onChange
|
|
106
|
+
}, fieldKey)
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
function Setting({ label, children }) {
|
|
111
|
+
return /* @__PURE__ */ jsxs("section", {
|
|
112
|
+
className: "mb-3",
|
|
113
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
114
|
+
className: "text-fg mb-1 block text-sm font-medium",
|
|
115
|
+
children: label
|
|
116
|
+
}), children]
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
/** A text input that writes on blur or Enter, and keeps what's typed until then. */
|
|
120
|
+
function CommittedInput({ value, onCommit, ...input }) {
|
|
121
|
+
const [draft, setDraft] = useState(null);
|
|
122
|
+
useEffect(() => setDraft(null), [value]);
|
|
123
|
+
const commit = () => {
|
|
124
|
+
if (draft === null || draft === value) return;
|
|
125
|
+
onCommit(draft);
|
|
126
|
+
};
|
|
127
|
+
return /* @__PURE__ */ jsx("input", {
|
|
128
|
+
...input,
|
|
129
|
+
className: inputClass,
|
|
130
|
+
value: draft ?? value,
|
|
131
|
+
onChange: (event) => setDraft(event.target.value),
|
|
132
|
+
onBlur: commit,
|
|
133
|
+
onKeyDown: (event) => event.key === "Enter" && commit()
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
/** A dropdown's or list's options, each a label and a value; written as a whole on each edit. */
|
|
137
|
+
function OptionsEditor({ options, onCommit }) {
|
|
138
|
+
const t = useT();
|
|
139
|
+
const rows = options.map((option) => ({
|
|
140
|
+
label: option.label,
|
|
141
|
+
value: option.value
|
|
142
|
+
}));
|
|
143
|
+
const replace = (at, row) => onCommit(row === null ? rows.filter((_, index) => index !== at) : rows.map((each, index) => index === at ? row : each));
|
|
144
|
+
return /* @__PURE__ */ jsxs("div", { children: [rows.map((row, at) => /* @__PURE__ */ jsxs("div", {
|
|
145
|
+
className: "mb-1 flex gap-1",
|
|
146
|
+
children: [
|
|
147
|
+
/* @__PURE__ */ jsx(CommittedInput, {
|
|
148
|
+
"aria-label": t("demo.fieldOptionLabel"),
|
|
149
|
+
value: row.label,
|
|
150
|
+
onCommit: (label) => replace(at, {
|
|
151
|
+
...row,
|
|
152
|
+
label
|
|
153
|
+
})
|
|
154
|
+
}),
|
|
155
|
+
/* @__PURE__ */ jsx(CommittedInput, {
|
|
156
|
+
"aria-label": t("demo.fieldOptionValue"),
|
|
157
|
+
value: row.value,
|
|
158
|
+
onCommit: (value) => replace(at, {
|
|
159
|
+
...row,
|
|
160
|
+
value
|
|
161
|
+
})
|
|
162
|
+
}),
|
|
163
|
+
/* @__PURE__ */ jsx("button", {
|
|
164
|
+
type: "button",
|
|
165
|
+
title: t("demo.fieldOptionRemove"),
|
|
166
|
+
className: "text-fg-muted hover:text-fg px-1",
|
|
167
|
+
onClick: () => replace(at, null),
|
|
168
|
+
children: "×"
|
|
169
|
+
})
|
|
170
|
+
]
|
|
171
|
+
}, `${at}:${row.value}`)), /* @__PURE__ */ jsx("button", {
|
|
172
|
+
type: "button",
|
|
173
|
+
className: "text-accent text-sm",
|
|
174
|
+
onClick: () => {
|
|
175
|
+
const label = `Option ${rows.length + 1}`;
|
|
176
|
+
onCommit([...rows, {
|
|
177
|
+
label,
|
|
178
|
+
value: label
|
|
179
|
+
}]);
|
|
180
|
+
},
|
|
181
|
+
children: t("demo.fieldOptionAdd")
|
|
182
|
+
})] });
|
|
183
|
+
}
|
|
184
|
+
//#endregion
|
|
185
|
+
//#region src/ui/form-design-panel.tsx
|
|
186
|
+
/**
|
|
187
|
+
* The form designer's sidebar (`form-design`, which `form:design` opens): what the form's
|
|
188
|
+
* fields are. With no field selected it lists them by page, and a click selects one and
|
|
189
|
+
* scrolls to it; with one selected it shows its settings and, for a radio group or a checkbox,
|
|
190
|
+
* its buttons, with a + that adds one next in line (`form.addWidget`). How a field looks is the
|
|
191
|
+
* style panel's.
|
|
192
|
+
*/
|
|
193
|
+
/** Each family's icon and name, as its field tool shows them. */
|
|
194
|
+
const FAMILIES = {
|
|
195
|
+
text: {
|
|
196
|
+
icon: "formTextfield",
|
|
197
|
+
labelKey: "commands.form.textfield"
|
|
198
|
+
},
|
|
199
|
+
checkbox: {
|
|
200
|
+
icon: "formCheckbox",
|
|
201
|
+
labelKey: "commands.form.checkbox"
|
|
202
|
+
},
|
|
203
|
+
radio: {
|
|
204
|
+
icon: "formRadio",
|
|
205
|
+
labelKey: "commands.form.radio"
|
|
206
|
+
},
|
|
207
|
+
combobox: {
|
|
208
|
+
icon: "formSelect",
|
|
209
|
+
labelKey: "commands.form.select"
|
|
210
|
+
},
|
|
211
|
+
listbox: {
|
|
212
|
+
icon: "formListbox",
|
|
213
|
+
labelKey: "commands.form.listbox"
|
|
214
|
+
},
|
|
215
|
+
pushbutton: {
|
|
216
|
+
icon: "formButton",
|
|
217
|
+
labelKey: "commands.form.button"
|
|
218
|
+
},
|
|
219
|
+
signature: {
|
|
220
|
+
icon: "signature",
|
|
221
|
+
labelKey: "commands.form.signature"
|
|
222
|
+
}
|
|
223
|
+
};
|
|
224
|
+
const NO_FIELDS = [];
|
|
225
|
+
const NO_WIDGETS = [];
|
|
226
|
+
/** A widget's object number, the key its rows and its selection share. */
|
|
227
|
+
const numberOf = (widget) => widget.ref.kind === "objectNumber" ? widget.ref.objectNumber : -1;
|
|
228
|
+
/** The form's own actions: select a widget and show it, design on first if it was off. */
|
|
229
|
+
function useFormDesign() {
|
|
230
|
+
const annotation = useOptionalCapability(AnnotationToken);
|
|
231
|
+
const interaction = useOptionalCapability(InteractionToken);
|
|
232
|
+
const stage = useStage();
|
|
233
|
+
const activeTool = useOptionalSelector(InteractionToken, (tools) => tools.getActiveToolId(), null);
|
|
234
|
+
return {
|
|
235
|
+
select(widget) {
|
|
236
|
+
if (!isFormDesignTool(activeTool)) interaction?.activateTool(FORM_DESIGN_TOOL);
|
|
237
|
+
annotation?.selection.set([widget.ref]);
|
|
238
|
+
stage.reveal(widget.page, { rect: widget.box });
|
|
239
|
+
},
|
|
240
|
+
clear() {
|
|
241
|
+
annotation?.selection.set([]);
|
|
242
|
+
}
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
function FormDesignPanel() {
|
|
246
|
+
const form = useOptionalCapability(FormToken);
|
|
247
|
+
const selected = useOptionalSelector(FormToken, (capability) => capability.getSelectedField(), null);
|
|
248
|
+
if (!form) return null;
|
|
249
|
+
return selected ? /* @__PURE__ */ jsx(SelectedField, { field: selected }) : /* @__PURE__ */ jsx(FieldList, {});
|
|
250
|
+
}
|
|
251
|
+
/** Every field of the form, by page, in reading order. */
|
|
252
|
+
function FieldList() {
|
|
253
|
+
const t = useT();
|
|
254
|
+
const design = useFormDesign();
|
|
255
|
+
const pages = usePageList();
|
|
256
|
+
const form = useOptionalCapability(FormToken);
|
|
257
|
+
const fields = useOptionalSelector(FormToken, (capability) => capability.list(), NO_FIELDS);
|
|
258
|
+
const groups = useMemo(() => {
|
|
259
|
+
const indexOf = new Map(pages.map((page) => [page.ref.objectNumber, page.index]));
|
|
260
|
+
const rows = fields.flatMap((field) => {
|
|
261
|
+
const place = form?.getWidgets(field.ref)[0];
|
|
262
|
+
const index = place ? indexOf.get(place.page.objectNumber) : void 0;
|
|
263
|
+
return place && index !== void 0 ? [{
|
|
264
|
+
field,
|
|
265
|
+
place,
|
|
266
|
+
index
|
|
267
|
+
}] : [];
|
|
268
|
+
});
|
|
269
|
+
rows.sort((left, right) => left.index - right.index || left.place.box.y - right.place.box.y || left.place.box.x - right.place.box.x);
|
|
270
|
+
const byPage = /* @__PURE__ */ new Map();
|
|
271
|
+
for (const row of rows) byPage.set(row.index, [...byPage.get(row.index) ?? [], row]);
|
|
272
|
+
return [...byPage];
|
|
273
|
+
}, [
|
|
274
|
+
fields,
|
|
275
|
+
form,
|
|
276
|
+
pages
|
|
277
|
+
]);
|
|
278
|
+
if (groups.length === 0) return /* @__PURE__ */ jsxs("div", {
|
|
279
|
+
className: "flex flex-col items-center gap-3 px-4 py-10 text-center",
|
|
280
|
+
children: [/* @__PURE__ */ jsx(Icon, {
|
|
281
|
+
name: "formDesign",
|
|
282
|
+
size: 32,
|
|
283
|
+
className: "text-fg-muted"
|
|
284
|
+
}), /* @__PURE__ */ jsx("p", {
|
|
285
|
+
className: "text-fg-muted text-sm",
|
|
286
|
+
children: t("formDesign.empty")
|
|
287
|
+
})]
|
|
288
|
+
});
|
|
289
|
+
return /* @__PURE__ */ jsx("div", {
|
|
290
|
+
className: "min-h-0 flex-1 overflow-y-auto p-2",
|
|
291
|
+
children: groups.map(([index, rows]) => /* @__PURE__ */ jsxs("section", {
|
|
292
|
+
className: "mb-3",
|
|
293
|
+
children: [/* @__PURE__ */ jsx("h3", {
|
|
294
|
+
className: "text-fg-muted px-2 pb-1 text-[11px] font-semibold uppercase tracking-wide",
|
|
295
|
+
children: t("formDesign.page", { params: { page: index + 1 } })
|
|
296
|
+
}), /* @__PURE__ */ jsx("ul", {
|
|
297
|
+
className: "flex flex-col",
|
|
298
|
+
children: rows.map(({ field, place }) => {
|
|
299
|
+
const family = FAMILIES[field.family];
|
|
300
|
+
return /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs("button", {
|
|
301
|
+
type: "button",
|
|
302
|
+
onClick: () => design.select(place),
|
|
303
|
+
className: "hover:bg-hover flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-start",
|
|
304
|
+
children: [
|
|
305
|
+
/* @__PURE__ */ jsx(Icon, {
|
|
306
|
+
name: family?.icon ?? "formTextfield",
|
|
307
|
+
size: 16,
|
|
308
|
+
className: "text-fg-muted shrink-0"
|
|
309
|
+
}),
|
|
310
|
+
/* @__PURE__ */ jsx("span", {
|
|
311
|
+
className: "text-fg min-w-0 flex-1 truncate text-sm",
|
|
312
|
+
children: field.name
|
|
313
|
+
}),
|
|
314
|
+
family && /* @__PURE__ */ jsx("span", {
|
|
315
|
+
className: "sr-only",
|
|
316
|
+
children: t(family.labelKey)
|
|
317
|
+
})
|
|
318
|
+
]
|
|
319
|
+
}) }, field.name);
|
|
320
|
+
})
|
|
321
|
+
})]
|
|
322
|
+
}, index))
|
|
323
|
+
});
|
|
324
|
+
}
|
|
325
|
+
/** The selected field: its settings and, for a radio group or a checkbox, its buttons. */
|
|
326
|
+
function SelectedField({ field }) {
|
|
327
|
+
const t = useT();
|
|
328
|
+
const design = useFormDesign();
|
|
329
|
+
const family = FAMILIES[field.family];
|
|
330
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
331
|
+
className: "min-h-0 flex-1 overflow-y-auto p-4",
|
|
332
|
+
children: [
|
|
333
|
+
/* @__PURE__ */ jsxs("button", {
|
|
334
|
+
type: "button",
|
|
335
|
+
onClick: design.clear,
|
|
336
|
+
className: "text-accent mb-3 flex items-center gap-1 text-sm",
|
|
337
|
+
children: [/* @__PURE__ */ jsx(Icon, {
|
|
338
|
+
name: "chevronLeft",
|
|
339
|
+
size: 14
|
|
340
|
+
}), t("formDesign.allFields")]
|
|
341
|
+
}),
|
|
342
|
+
/* @__PURE__ */ jsxs("p", {
|
|
343
|
+
className: "text-fg mb-4 flex items-center gap-2 text-sm font-semibold",
|
|
344
|
+
children: [/* @__PURE__ */ jsx(Icon, {
|
|
345
|
+
name: family?.icon ?? "formTextfield",
|
|
346
|
+
size: 16,
|
|
347
|
+
className: "text-fg-muted shrink-0"
|
|
348
|
+
}), /* @__PURE__ */ jsx("span", {
|
|
349
|
+
className: "min-w-0 truncate",
|
|
350
|
+
children: field.name
|
|
351
|
+
})]
|
|
352
|
+
}),
|
|
353
|
+
/* @__PURE__ */ jsx("p", {
|
|
354
|
+
className: "text-fg-muted mb-3 text-[11px] font-semibold uppercase tracking-wide",
|
|
355
|
+
children: t("demo.fieldSettingsTitle")
|
|
356
|
+
}),
|
|
357
|
+
/* @__PURE__ */ jsx(FieldSettings, { field }),
|
|
358
|
+
(field.family === "radio" || field.family === "checkbox") && /* @__PURE__ */ jsx(Buttons, { field })
|
|
359
|
+
]
|
|
360
|
+
});
|
|
361
|
+
}
|
|
362
|
+
/** A radio group's or a checkbox's buttons, each selectable, and a + for one more. */
|
|
363
|
+
function Buttons({ field }) {
|
|
364
|
+
const t = useT();
|
|
365
|
+
const design = useFormDesign();
|
|
366
|
+
const form = useOptionalCapability(FormToken);
|
|
367
|
+
const places = useOptionalSelector(FormToken, (capability) => capability.getWidgets(field.ref), NO_WIDGETS);
|
|
368
|
+
const chosen = useAnnotationState((state) => state.selected);
|
|
369
|
+
const isChosen = (place) => chosen.some((record) => record.ref.kind === "objectNumber" && record.ref.objectNumber === numberOf(place));
|
|
370
|
+
const radio = field.family === "radio";
|
|
371
|
+
const add = async () => {
|
|
372
|
+
if (!form) return;
|
|
373
|
+
const { widget } = await form.addWidget(field.ref);
|
|
374
|
+
design.select(widget);
|
|
375
|
+
};
|
|
376
|
+
return /* @__PURE__ */ jsxs("section", {
|
|
377
|
+
className: "border-border-subtle mt-4 border-t pt-4",
|
|
378
|
+
children: [
|
|
379
|
+
/* @__PURE__ */ jsx("p", {
|
|
380
|
+
className: "text-fg-muted mb-2 text-[11px] font-semibold uppercase tracking-wide",
|
|
381
|
+
children: t(radio ? "formDesign.buttons" : "formDesign.boxes")
|
|
382
|
+
}),
|
|
383
|
+
/* @__PURE__ */ jsx("ul", {
|
|
384
|
+
className: "mb-2 flex flex-col",
|
|
385
|
+
children: places.map((place, at) => {
|
|
386
|
+
const widget = field.widgets.find((each) => each.objectNumber === numberOf(place));
|
|
387
|
+
return /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs("button", {
|
|
388
|
+
type: "button",
|
|
389
|
+
"aria-pressed": isChosen(place),
|
|
390
|
+
onClick: () => design.select(place),
|
|
391
|
+
className: `hover:bg-hover flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-start text-sm ${isChosen(place) ? "bg-selected text-accent" : "text-fg"}`,
|
|
392
|
+
children: [/* @__PURE__ */ jsx(Icon, {
|
|
393
|
+
name: radio ? "formRadio" : "formCheckbox",
|
|
394
|
+
size: 14,
|
|
395
|
+
className: "shrink-0"
|
|
396
|
+
}), /* @__PURE__ */ jsx("span", {
|
|
397
|
+
className: "min-w-0 flex-1 truncate",
|
|
398
|
+
children: radio && widget && "exportValue" in widget ? widget.exportValue : t("formDesign.box", { params: { number: at + 1 } })
|
|
399
|
+
})]
|
|
400
|
+
}) }, numberOf(place));
|
|
401
|
+
})
|
|
402
|
+
}),
|
|
403
|
+
/* @__PURE__ */ jsxs("button", {
|
|
404
|
+
type: "button",
|
|
405
|
+
onClick: () => void add().catch(() => void 0),
|
|
406
|
+
className: "text-accent flex items-center gap-1 text-sm",
|
|
407
|
+
children: [/* @__PURE__ */ jsx(Icon, {
|
|
408
|
+
name: "plus",
|
|
409
|
+
size: 14
|
|
410
|
+
}), t(radio ? "formDesign.addButton" : "formDesign.addBox")]
|
|
411
|
+
})
|
|
412
|
+
]
|
|
413
|
+
});
|
|
414
|
+
}
|
|
415
|
+
//#endregion
|
|
416
|
+
export { FormDesignPanel };
|
|
417
|
+
|
|
418
|
+
//# sourceMappingURL=form-design-panel-CgV_5YWC.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form-design-panel-CgV_5YWC.js","names":[],"sources":["../src/ui/field-settings.tsx","../src/ui/form-design-panel.tsx"],"sourcesContent":["/**\n * A field's settings, as the form plugin describes them (`getFieldSettings`),\n * written with `form.update()`: the form designer's sidebar shows them for the\n * selected field. Nothing here knows a field family: the description says what\n * to draw.\n */\nimport {\n FormToken,\n type FormFieldDTO,\n type FormFieldPatch,\n type FormFieldSetting,\n} from '@embedpdf/react/form';\nimport { useT } from '@embedpdf/react/i18n';\nimport { useOptionalCapability, useOptionalSelector } from '@embedpdf/react/runtime';\nimport { useEffect, useState } from 'react';\n\nimport { useLabel } from './labels';\n\nconst inputClass = 'border-border bg-surface text-fg w-full rounded-md border px-2 py-1.5 text-sm';\n\n/** One option of a dropdown or a list, as its settings hold it. */\ninterface Option {\n readonly label: string;\n readonly value: string;\n}\n\n/** The field's settings, each with the control its description names. */\nexport function FieldSettings({ field }: { field: FormFieldDTO }) {\n const form = useOptionalCapability(FormToken);\n const settings = useOptionalSelector(\n FormToken,\n (capability) => capability.getFieldSettings(field.ref),\n null,\n );\n if (!form || !settings || !form.canDesign()) return null;\n const write = (patch: Record<string, unknown>) =>\n void form.update(field.ref, patch as FormFieldPatch).catch(() => undefined);\n\n return (\n <div>\n {settings.properties.map((spec) => (\n <SettingControl\n key={`${spec.key}:${spec.control}`}\n fieldKey={JSON.stringify(field.ref)}\n spec={spec}\n value={settings.values[spec.key]}\n onChange={(value) => write({ [spec.key]: value })}\n />\n ))}\n </div>\n );\n}\n\nfunction SettingControl({\n fieldKey,\n spec,\n value,\n onChange,\n}: {\n /** The field it edits: a draft starts over when the selection moves to another field. */\n fieldKey: string;\n spec: FormFieldSetting;\n value: unknown;\n onChange: (value: unknown) => void;\n}) {\n const t = useT();\n const label = useLabel();\n switch (spec.control) {\n case 'flag':\n return (\n <label className=\"text-fg mb-2 flex items-center gap-2 text-sm\">\n <input\n type=\"checkbox\"\n checked={value === true}\n onChange={(event) => onChange(event.target.checked)}\n />\n {label(spec)}\n </label>\n );\n case 'text':\n return (\n <Setting label={label(spec)}>\n <CommittedInput\n key={fieldKey}\n value={typeof value === 'string' ? value : ''}\n onCommit={onChange}\n />\n </Setting>\n );\n case 'number':\n return (\n <Setting label={label(spec)}>\n <CommittedInput\n key={fieldKey}\n type=\"number\"\n min={spec.min}\n placeholder={t('demo.fieldNone')}\n value={typeof value === 'number' ? String(value) : ''}\n onCommit={(text) => onChange(text === '' ? null : Math.max(spec.min, Number(text)))}\n />\n </Setting>\n );\n case 'choice':\n return spec.free ? (\n <Setting label={label(spec)}>\n <CommittedInput\n key={fieldKey}\n list={`${fieldKey}-choices`}\n value={typeof value === 'string' ? value : ''}\n onCommit={onChange}\n />\n <datalist id={`${fieldKey}-choices`}>\n {spec.options.map((option) => (\n <option key={option} value={option} />\n ))}\n </datalist>\n </Setting>\n ) : (\n <Setting label={label(spec)}>\n <select\n className={inputClass}\n value={typeof value === 'string' ? value : ''}\n onChange={(event) => onChange(event.target.value === '' ? null : event.target.value)}\n >\n <option value=\"\">{t('demo.fieldNone')}</option>\n {spec.options.map((option) => (\n <option key={option} value={option}>\n {option}\n </option>\n ))}\n </select>\n </Setting>\n );\n case 'choices': {\n const chosen = new Set(Array.isArray(value) ? (value as string[]) : []);\n return (\n <Setting label={label(spec)}>\n {spec.options.map((option) => (\n <label key={option} className=\"text-fg mb-1 flex items-center gap-2 text-sm\">\n <input\n type=\"checkbox\"\n checked={chosen.has(option)}\n onChange={(event) =>\n onChange(\n spec.options.filter((each) =>\n each === option ? event.target.checked : chosen.has(each),\n ),\n )\n }\n />\n {option}\n </label>\n ))}\n </Setting>\n );\n }\n case 'options':\n return (\n <Setting label={label(spec)}>\n <OptionsEditor\n key={fieldKey}\n options={Array.isArray(value) ? (value as Option[]) : []}\n onCommit={onChange}\n />\n </Setting>\n );\n }\n}\n\nfunction Setting({ label, children }: { label: string; children: React.ReactNode }) {\n return (\n <section className=\"mb-3\">\n <span className=\"text-fg mb-1 block text-sm font-medium\">{label}</span>\n {children}\n </section>\n );\n}\n\n/** A text input that writes on blur or Enter, and keeps what's typed until then. */\nfunction CommittedInput({\n value,\n onCommit,\n ...input\n}: {\n value: string;\n onCommit: (value: string) => void;\n} & Omit<React.InputHTMLAttributes<HTMLInputElement>, 'value' | 'onChange'>) {\n const [draft, setDraft] = useState<string | null>(null);\n useEffect(() => setDraft(null), [value]);\n const commit = () => {\n if (draft === null || draft === value) return;\n onCommit(draft);\n };\n return (\n <input\n {...input}\n className={inputClass}\n value={draft ?? value}\n onChange={(event) => setDraft(event.target.value)}\n onBlur={commit}\n onKeyDown={(event) => event.key === 'Enter' && commit()}\n />\n );\n}\n\n/** A dropdown's or list's options, each a label and a value; written as a whole on each edit. */\nfunction OptionsEditor({\n options,\n onCommit,\n}: {\n options: readonly Option[];\n onCommit: (options: Option[]) => void;\n}) {\n const t = useT();\n const rows = options.map((option) => ({ label: option.label, value: option.value }));\n const replace = (at: number, row: Option | null) =>\n onCommit(\n row === null\n ? rows.filter((_, index) => index !== at)\n : rows.map((each, index) => (index === at ? row : each)),\n );\n return (\n <div>\n {rows.map((row, at) => (\n <div key={`${at}:${row.value}`} className=\"mb-1 flex gap-1\">\n <CommittedInput\n aria-label={t('demo.fieldOptionLabel')}\n value={row.label}\n onCommit={(label) => replace(at, { ...row, label })}\n />\n <CommittedInput\n aria-label={t('demo.fieldOptionValue')}\n value={row.value}\n onCommit={(value) => replace(at, { ...row, value })}\n />\n <button\n type=\"button\"\n title={t('demo.fieldOptionRemove')}\n className=\"text-fg-muted hover:text-fg px-1\"\n onClick={() => replace(at, null)}\n >\n ×\n </button>\n </div>\n ))}\n <button\n type=\"button\"\n className=\"text-accent text-sm\"\n onClick={() => {\n const label = `Option ${rows.length + 1}`;\n onCommit([...rows, { label, value: label }]);\n }}\n >\n {t('demo.fieldOptionAdd')}\n </button>\n </div>\n );\n}\n","/**\n * The form designer's sidebar (`form-design`, which `form:design` opens): what the form's\n * fields are. With no field selected it lists them by page, and a click selects one and\n * scrolls to it; with one selected it shows its settings and, for a radio group or a checkbox,\n * its buttons, with a + that adds one next in line (`form.addWidget`). How a field looks is the\n * style panel's.\n */\nimport { AnnotationToken, useAnnotationState } from '@embedpdf/react/annotation';\nimport {\n FormToken,\n type FormFieldDTO,\n type FormFieldFamily,\n type WidgetAnnotation,\n} from '@embedpdf/react/form';\nimport { useT } from '@embedpdf/react/i18n';\nimport { InteractionToken } from '@embedpdf/react/interaction';\nimport { useOptionalCapability, useOptionalSelector, usePageList } from '@embedpdf/react/runtime';\nimport { useStage } from '@embedpdf/react/stage';\nimport { useMemo } from 'react';\n\nimport { FORM_DESIGN_TOOL, isFormDesignTool } from '../config/commands';\nimport { FieldSettings } from './field-settings';\nimport { Icon } from './icons';\n\n/** Each family's icon and name, as its field tool shows them. */\nconst FAMILIES: Readonly<Partial<Record<FormFieldFamily, { icon: string; labelKey: string }>>> = {\n text: { icon: 'formTextfield', labelKey: 'commands.form.textfield' },\n checkbox: { icon: 'formCheckbox', labelKey: 'commands.form.checkbox' },\n radio: { icon: 'formRadio', labelKey: 'commands.form.radio' },\n combobox: { icon: 'formSelect', labelKey: 'commands.form.select' },\n listbox: { icon: 'formListbox', labelKey: 'commands.form.listbox' },\n pushbutton: { icon: 'formButton', labelKey: 'commands.form.button' },\n signature: { icon: 'signature', labelKey: 'commands.form.signature' },\n};\n\nconst NO_FIELDS: readonly FormFieldDTO[] = [];\nconst NO_WIDGETS: readonly WidgetAnnotation[] = [];\n\n/** A widget's object number, the key its rows and its selection share. */\nconst numberOf = (widget: WidgetAnnotation): number =>\n widget.ref.kind === 'objectNumber' ? widget.ref.objectNumber : -1;\n\n/** The form's own actions: select a widget and show it, design on first if it was off. */\nfunction useFormDesign() {\n const annotation = useOptionalCapability(AnnotationToken);\n const interaction = useOptionalCapability(InteractionToken);\n const stage = useStage();\n const activeTool = useOptionalSelector(\n InteractionToken,\n (tools) => tools.getActiveToolId(),\n null,\n );\n return {\n select(widget: WidgetAnnotation) {\n // The widgets are lent only while a form is designed.\n if (!isFormDesignTool(activeTool)) interaction?.activateTool(FORM_DESIGN_TOOL);\n annotation?.selection.set([widget.ref]);\n stage.reveal(widget.page, { rect: widget.box });\n },\n clear() {\n annotation?.selection.set([]);\n },\n };\n}\n\nexport function FormDesignPanel() {\n const form = useOptionalCapability(FormToken);\n const selected = useOptionalSelector(\n FormToken,\n (capability) => capability.getSelectedField(),\n null,\n );\n if (!form) return null;\n return selected ? <SelectedField field={selected} /> : <FieldList />;\n}\n\n/** Every field of the form, by page, in reading order. */\nfunction FieldList() {\n const t = useT();\n const design = useFormDesign();\n const pages = usePageList();\n const form = useOptionalCapability(FormToken);\n const fields = useOptionalSelector(FormToken, (capability) => capability.list(), NO_FIELDS);\n const groups = useMemo(() => {\n const indexOf = new Map(pages.map((page) => [page.ref.objectNumber, page.index]));\n const rows = fields.flatMap((field) => {\n const place = form?.getWidgets(field.ref)[0];\n const index = place ? indexOf.get(place.page.objectNumber) : undefined;\n return place && index !== undefined ? [{ field, place, index }] : [];\n });\n rows.sort(\n (left, right) =>\n left.index - right.index ||\n left.place.box.y - right.place.box.y ||\n left.place.box.x - right.place.box.x,\n );\n const byPage = new Map<number, typeof rows>();\n for (const row of rows) byPage.set(row.index, [...(byPage.get(row.index) ?? []), row]);\n return [...byPage];\n }, [fields, form, pages]);\n\n if (groups.length === 0) {\n return (\n <div className=\"flex flex-col items-center gap-3 px-4 py-10 text-center\">\n <Icon name=\"formDesign\" size={32} className=\"text-fg-muted\" />\n <p className=\"text-fg-muted text-sm\">{t('formDesign.empty')}</p>\n </div>\n );\n }\n return (\n <div className=\"min-h-0 flex-1 overflow-y-auto p-2\">\n {groups.map(([index, rows]) => (\n <section key={index} className=\"mb-3\">\n <h3 className=\"text-fg-muted px-2 pb-1 text-[11px] font-semibold uppercase tracking-wide\">\n {t('formDesign.page', { params: { page: index + 1 } })}\n </h3>\n <ul className=\"flex flex-col\">\n {rows.map(({ field, place }) => {\n const family = FAMILIES[field.family];\n return (\n <li key={field.name}>\n <button\n type=\"button\"\n onClick={() => design.select(place)}\n className=\"hover:bg-hover flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-start\"\n >\n <Icon\n name={family?.icon ?? 'formTextfield'}\n size={16}\n className=\"text-fg-muted shrink-0\"\n />\n <span className=\"text-fg min-w-0 flex-1 truncate text-sm\">{field.name}</span>\n {family && <span className=\"sr-only\">{t(family.labelKey)}</span>}\n </button>\n </li>\n );\n })}\n </ul>\n </section>\n ))}\n </div>\n );\n}\n\n/** The selected field: its settings and, for a radio group or a checkbox, its buttons. */\nfunction SelectedField({ field }: { field: FormFieldDTO }) {\n const t = useT();\n const design = useFormDesign();\n const family = FAMILIES[field.family];\n return (\n <div className=\"min-h-0 flex-1 overflow-y-auto p-4\">\n <button\n type=\"button\"\n onClick={design.clear}\n className=\"text-accent mb-3 flex items-center gap-1 text-sm\"\n >\n <Icon name=\"chevronLeft\" size={14} />\n {t('formDesign.allFields')}\n </button>\n <p className=\"text-fg mb-4 flex items-center gap-2 text-sm font-semibold\">\n <Icon name={family?.icon ?? 'formTextfield'} size={16} className=\"text-fg-muted shrink-0\" />\n <span className=\"min-w-0 truncate\">{field.name}</span>\n </p>\n <p className=\"text-fg-muted mb-3 text-[11px] font-semibold uppercase tracking-wide\">\n {t('demo.fieldSettingsTitle')}\n </p>\n <FieldSettings field={field} />\n {(field.family === 'radio' || field.family === 'checkbox') && <Buttons field={field} />}\n </div>\n );\n}\n\n/** A radio group's or a checkbox's buttons, each selectable, and a + for one more. */\nfunction Buttons({ field }: { field: FormFieldDTO & { family: 'radio' | 'checkbox' } }) {\n const t = useT();\n const design = useFormDesign();\n const form = useOptionalCapability(FormToken);\n const places = useOptionalSelector(\n FormToken,\n (capability) => capability.getWidgets(field.ref),\n NO_WIDGETS,\n );\n const chosen = useAnnotationState((state) => state.selected);\n const isChosen = (place: WidgetAnnotation) =>\n chosen.some(\n (record) => record.ref.kind === 'objectNumber' && record.ref.objectNumber === numberOf(place),\n );\n const radio = field.family === 'radio';\n const add = async () => {\n if (!form) return;\n const { widget } = await form.addWidget(field.ref);\n design.select(widget);\n };\n return (\n <section className=\"border-border-subtle mt-4 border-t pt-4\">\n <p className=\"text-fg-muted mb-2 text-[11px] font-semibold uppercase tracking-wide\">\n {t(radio ? 'formDesign.buttons' : 'formDesign.boxes')}\n </p>\n <ul className=\"mb-2 flex flex-col\">\n {places.map((place, at) => {\n const widget = field.widgets.find((each) => each.objectNumber === numberOf(place));\n return (\n <li key={numberOf(place)}>\n <button\n type=\"button\"\n aria-pressed={isChosen(place)}\n onClick={() => design.select(place)}\n className={`hover:bg-hover flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-start text-sm ${\n isChosen(place) ? 'bg-selected text-accent' : 'text-fg'\n }`}\n >\n <Icon name={radio ? 'formRadio' : 'formCheckbox'} size={14} className=\"shrink-0\" />\n <span className=\"min-w-0 flex-1 truncate\">\n {radio && widget && 'exportValue' in widget\n ? widget.exportValue\n : t('formDesign.box', { params: { number: at + 1 } })}\n </span>\n </button>\n </li>\n );\n })}\n </ul>\n <button\n type=\"button\"\n onClick={() => void add().catch(() => undefined)}\n className=\"text-accent flex items-center gap-1 text-sm\"\n >\n <Icon name=\"plus\" size={14} />\n {t(radio ? 'formDesign.addButton' : 'formDesign.addBox')}\n </button>\n </section>\n );\n}\n"],"mappings":"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"}
|