Saltar al contenido
SheetForge

Data Studio — La superficie de creación

Data Studio es una sola ventana para todo: consulta, búsqueda, edición de celdas, creación de filas/columnas/pestañas, creación y eliminación de hojas, y un lienzo de registros que muestra de qué está hecho un registro.

Una sola regla subyace a todo esto: la hoja es canónica. Studio escribe en el origen (archivo local / hoja de Google), nunca en los SO, y confirma cada cambio mediante una reimportación automática.

Tools ▸ SheetForge ▸ Data Studio la abre — la única entrada de creación en el menú. No necesita plugins: todo lo de abajo funciona solo con los tipos integrados del Core, y un plugin añade formas y espacios de clave de solo lectura encima (consulta Con y sin plugins).

Solo hay una ventana de creación. El antiguo Banco de trabajo — la ventana IMGUI original — ha sido eliminado, y todo lo que podía hacer, ahora lo hace Studio. Consulta qué pasó con el Banco de trabajo si estás actualizando.

Qué hay en pantalla

Barra superior

  • El chip del origen activo nombra al proveedor. Se atenúa cuando no hay ajustes activos.
  • ↓ Pull from source ejecuta la importación.
  • ↑ Push to source lleva una píldora que cuenta los cambios pendientes.
  • Un botón Discard se sitúa junto a él y descarta cada cambio preparado en la ventana. Primero pide una confirmación que nombra la cantidad, y aterriza como un único paso de Ctrl+Z, así que la preparación vuelve si descartas por error. El origen nunca se toca.
  • Las insignias isolated / draft.
  • Los contadores ⛔/⚠. Hacer clic en un contador salta al primer error/advertencia.
  • Un menú desplegable que contiene Ejecutar exportación, Hacer Push (Google Sheets), Exportar traducciones…, Importar traducciones…, Comprobación de estado, Abrir el informe de localización y Ajustes de tema…. Fuera de un origen de la API de Google, la línea de push a Google permanece visible pero deshabilitada, con el motivo añadido a la etiqueta; las dos líneas de traducción se comportan igual cuando el proyecto no contiene ninguna hoja de localización.

Barra lateral

  • Un elemento All se sitúa en la parte superior — búsqueda entre hojas, descrita más abajo.
  • Luego cada hoja con su recuento de filas, su punto de color, y una marca en cualquier hoja que tenga cambios preparados. La píldora de la barra superior da el total; esto indica de qué hojas viene.
  • Las hojas se agrupan en secciones según la etiqueta de grupo @style propia de la hoja. Clic derecho en una hoja ▸ Group & color ✎ para definirlas; las hojas sin etiqueta permanecen en la sección predeterminada.
  • Debajo de las hojas hay un grupo READ-ONLY que lista los registros de código registrados por plugins.
  • Aquí también viven insignias honestas: parse failed en una pestaña que falta en la vista previa, name clash cuando un registro de código reclama el nombre de una hoja real, y el aviso de cuarentena descrito más abajo.
  • Cada elemento del clic derecho que está bloqueado en ese momento permanece visible con su motivo adjunto.

Tabla

  • Un encabezado fijo de cuatro filas: la letra de columna de la hoja de origen sobre las celdas en bruto @name / @type / @desc. La columna A contiene los marcadores, así que los datos empiezan en B.
  • Un margen con el número de fila real de la hoja, y un chip de referencia por fila: shared N cuando dos o más registros apuntan a esta fila, ↩ 1 cuando exactamente uno lo hace, nada cuando ninguno.
  • La letra y el número de fila son las mismas coordenadas que imprime el informe de errores, así que "fila 5, columna C" se puede señalar directamente. Hacer clic en ellas selecciona la columna o la fila para las acciones multiobjetivo y los movimientos de arrastre — consulta Seleccionar filas y columnas más abajo.
  • La letra pertenece al asiento, no a la columna. Mueve una columna y muestra la letra de la posición que ocupará una vez reflejada. La misma regla le da a una columna que has añadido pero no has hecho push la letra que está a punto de recibir.
  • La edición de estructura vive en menús de clic derecho. Un encabezado de columna ofrece propiedades, mover, insertar a cada lado y eliminar; el margen del número de fila ofrece mover arriba, mover abajo y eliminar. Un elemento bloqueado permanece visible con su motivo.
  • Un encabezado de columna también ofrece Inmovilizar hasta esta columna, que mantiene esa columna y todo lo que está a su izquierda fuera del desplazamiento horizontal (ver más abajo).
  • El resto del menú de columna — ancho de columna, autoajustar ancho, ocultar, filtro, vaciar datos de la columna y los elementos de ordenar — se describe más abajo, en Ancho de columna, ocultar y filtros por columna. Un tirador de arrastre para cambiar el tamaño se sitúa en el borde derecho de cada celda de letra.
  • Dentro de una celda de referencia, solo se resaltan los fragmentos de lista rotos.

Lienzo

  • Se abre debajo de la tabla cuando activas una fila.
  • El registro que abriste se sitúa en el medio: lo que consume fluye desde la izquierda, lo que lo consume a él se sitúa a la derecha. Un control segmentado encima del lienzo elige hasta dónde llegar en cada dirección.
  • Arrastra el asa para redimensionar, Esc lo cierra.
  • Cada tarjeta de nodo muestra sus puertos de referencia y sus columnas simples como filas de valor editables, así que el lienzo es un segundo lugar donde editar, no una imagen (consulta Editar en el lienzo más abajo).

Inspector de nodo

Abajo a la derecha del lienzo. Contiene:

  • la dirección de celda del nodo (clic para enfocar esa celda en la cuadrícula);
  • una nota de "registro compartido" / "esta clave no existe" / "este registro es nuevo";
  • la lista Used by (clic en una entrada para ir hasta ella);
  • la acción integrada Go to this sheet;
  • Duplicate and split / Cancel new row donde correspondan.

Problems

El panel inferior lleva los mismos diagnósticos que produce una importación, renderizados por el mismo renderizador de informes. La canalización es la fuente de verdad; la ventana nunca inventa un mensaje. Hacer clic en una fila enfoca la celda causante y abre su lienzo.

Paneles de dominio

Un panel a la derecha con un segmento por cada panel registrado por un plugin, plegable, que recuerda cuál tenías abierto. Se dibuja solo cuando un plugin registra un panel — sin ninguno registrado no hay una caja vacía, porque una caja vacía sugiere que falta algo.

Modal de Push

El diff previo a la escritura: pestaña · clave de fila · campo · antiguo → nuevo para cada cambio preparado, más una nota cuando algunas ediciones están aisladas. Una sección Addressables lista cada registro de asset que hará el reflejo (añadir · mover · crear grupo — consulta Editar una celda). Cancelar no escribe nada.

Editar una celda

  • El widget sigue al @type. El @type que lee es el que está en pantalla, así que una columna que has añadido o retipado pero no has hecho push ya recibe el widget de ese tipo.
    • Un bool obligatorio es un interruptor; un bool opcional abre el mismo selector que usa la celda de enum, porque tiene tres estados.
    • Enum<T> se muestra como su valor seguido de una ▾ y abre el mismo selector con búsqueda que usa una celda de referencia. Un valor no reconocido permanece en la parte superior de la lista en lugar de reescribirse en silencio. Cuando el enum está definido en una hoja, el selector termina con "Add a new member…". Una celda opcional vacía muestra , o — (predeterminado).
    • Una columna RecordId@Tab recibe un menú desplegable de referencia (más abajo).
    • Una columna AssetRef@Group recibe un selector de asset y acepta soltar assets (más abajo).
    • Las columnas Color / AnimationCurve / Gradient reciben los propios campos de color, curva y degradado de Unity (más abajo).
    • Todo lo demás es texto en bruto canónico — números, strings, claves, List<> de no-referencias, wrappers, tipos personalizados — porque ese texto es lo que el parser hace round-trip.
  • Las celdas de referencia tienen un menú desplegable, siempre. Una celda RecordId@Tab es un cuadro de texto más un botón ▾; escribir una clave a mano también sigue funcionando. El botón está ahí incluso cuando la hoja destino no ofrece candidatos por el momento: ese estado normalmente significa que algo está roto ahora mismo, que es exactamente cuando necesitas la herramienta, y el selector lo indica y ofrece crear en lugar de abrir una lista vacía.
    • Una celda List<RecordId@Tab> recibe +▾. El selector permanece abierto y cada fila es una casilla de verificación, así que marcar tres registros te lleva una sola visita. Marcar añade, desmarcar elimina ese elemento, y cada marca es su propio paso de undo.
    • El orden de los elementos no es lo que responde un menú desplegable. Reordena los elementos desde el lienzo, donde cada elemento de lista tiene su propia fila ▲▼.
    • Una celda escalar reemplaza su valor y se cierra, con la clave ya presente en la celda marcada para que no puedas elegirla dos veces.
  • Una columna opcional se puede volver a dejar vacía. Donde la columna declara ? o =default, los selectores — de referencia, de enum y de booleano opcional por igual — llevan una fila dejar vacío etiquetada con el valor al que recae la celda. Una columna obligatoria no tiene esa fila, porque ahí una celda vacía es un error.
  • Crea el registro que te falta, desde la celda. Si la clave que quieres no existe, pulsa + Create a new … record en el selector: el cuadro de búsqueda se convierte en un cuadro de clave prerrellenado con el prefijo común de la hoja. Escribe un nombre, pulsa Enter, y la fila se crea y se escribe en esta celda como un solo paso de Ctrl+Z.
    • La línea no se ofrece cuando no podría funcionar. A un espacio de claves propiedad del código no se le puede añadir nada, y el selector lo indica en una frase. Un origen de solo lectura, una canalización en ejecución o una hoja respaldada por xlsx lo bloquean con la misma barrera que usa el lienzo.
  • Las celdas de asset tienen un selector y aceptan soltar. Una celda AssetRef@Group es un cuadro de texto más un botón , al estilo del campo de objeto de Unity. Sea cual sea la forma en que llega un asset, las reglas son las mismas.
    • abre el selector de asset de SheetForge: las direcciones que ya están en ese grupo — restringidas al <Type> de la columna cuando lo tiene, con los sub-assets listados después de su padre como parent[sub] — con búsqueda y el valor actual marcado. Una línea ⊙ Explorar el proyecto… debajo de la lista abre el propio selector de objetos de Unity filtrado a ese tipo.
    • También puedes arrastrar assets desde la ventana Project hasta la celda: un asset para una columna escalar, cualquier cantidad para un List<> (se añaden en orden; una clave que ya está en la celda se omite).
    • Un asset ya registrado en ese grupo conserva su dirección. Un asset que todavía no es addressable queda preparado para el registro: la celda recibe su dirección de inmediato — el nombre del archivo sin extensión — y la entrada del grupo, y el grupo mismo cuando todavía no existe, se crean al reflejar, después de que la escritura de la hoja haya tenido éxito. Nada en el proyecto cambia antes de eso, y descartar la preparación no cambia nada en absoluto.
    • Un asset registrado en otro grupo pregunta primero — un diálogo que nombra los dos grupos y cuántas otras celdas lo referencian a través del antiguo — y luego prepara un movimiento.
    • Se rechaza, con un toast que explica por qué: objetos de escena, carpetas, varios assets soltados sobre una celda escalar, un asset que no satisface el tipo de la columna, y una dirección que ya usa un asset distinto en ese grupo.
    • Los registros preparados aparecen en el modal de Push bajo Addressables y cuentan para la píldora de la barra superior. Ctrl+Z quita el valor de la celda y el registro juntos; volver a escribir la celda de modo que nada haga referencia ya a la dirección elimina el registro en el mismo paso, así que un registro obsoleto nunca sobrevive por sí solo.
    • Cada celda de asset también lleva un botón fijo a su derecha: pulsarlo hace que la ventana Project localice y seleccione ese asset — una celda de lista selecciona todos los assets que contiene y localiza el primero, y una dirección parent[sub] localiza el propio sub-objeto. Ctrl+clic (Cmd+clic en macOS) sobre la celda hace lo mismo, mientras que un clic simple sigue editando el texto. Cuando la dirección no resuelve a un asset, el botón permanece visible pero deshabilitado, con el motivo como tooltip.
    • Clic derecho en una celda para Localizar en el proyecto — también cubre las celdas de lista — y, en una columna opcional, Vaciar (predeterminado). Las filas de valor del lienzo llevan el mismo botón de localizar, porque son el mismo widget.
    • Problems reporta UnknownAssetKey y AssetTypeMismatch antes de reflejar, y un registro preparado no es un error — la proyección ya lo cuenta. Sin el paquete Addressables, el botón ⊙ y el soltar están deshabilitados con el motivo como tooltip; escribir una dirección a mano sigue funcionando.
  • Las celdas de asset muestran el propio asset. Cuando la dirección de una celda AssetRef resuelve, aparece una pequeña miniatura junto al texto — cualquier tipo de asset para el que el editor pueda renderizar una vista previa, dimensionada para que la altura de la fila nunca cambie; una celda List<> muestra la del primer elemento.
    • Haz clic en la miniatura y se abre una vista ampliada flotante; en el lienzo de registros, los assets de imagen se dibujan grandes en la tarjeta.
    • Una dirección que no resuelve simplemente no muestra miniatura — el botón de localizar ↗ ya lleva el motivo.
  • Las celdas AssetRef<AudioClip> reproducen sonido. Un botón de reproducción junto a la dirección del clip lo reproduce a través del propio canal de vista previa del editor; pulsarlo de nuevo lo detiene, igual que seguir adelante — cambiar de celda, cerrar la ventana, una recarga de dominio.
    • Cuando el build del editor no puede ofrecer la función de vista previa, el botón permanece visible pero deshabilitado, con el motivo como tooltip. En una celda cuyo asset no es un clip de audio simplemente no hay botón.
  • Las celdas de color, curva y degradado son los campos nativos. Una celda escalar Color, AnimationCurve o Gradient es el campo de color, el campo de curva o el campo de degradado de Unity — la celda entera, sin texto en bruto.
    • Cada cambio confirma el texto canónico (consulta Sintaxis de la hoja). Una ráfaga de cambios — arrastrar en el selector de color, una sesión en el editor de curva — se fusiona en un solo paso de undo, la misma regla que sigue la escritura.
    • En una columna opcional, una celda vacía muestra . Haz clic en ella para abrir el campo en el valor predeterminado del tipo, y clic derecho ▸ Vaciar (predeterminado) para vaciarla de nuevo.
    • List<Color>, List<AnimationCurve> y List<Gradient> son editores de chips: un chip por elemento (una muestra de color, una miniatura de curva, una barra de degradado) y un chip . Al hacer clic se abre un popup con un campo nativo por elemento más ▲▼ y ✕; añadir, quitar, reordenar y cada edición de elemento son cada uno su propio paso de undo, porque el orden de una lista es dato. Las listas de otros tipos permanecen como texto canónico.
    • Las filas de valor del lienzo usan exactamente los mismos widgets.
  • Restringe una columna de asset a un tipo desde el formulario de columna. En el formulario de propiedades de columna — y en los formularios de añadir columna y crear hoja — hay siempre un botón Tipo… junto al campo @type; está habilitado mientras la notación que se está escribiendo es un AssetRef@Group, y en caso contrario permanece deshabilitado, con el motivo como tooltip. Lista los tipos de asset que el proyecto puede cargar (con búsqueda, nombre corto con el nombre completo como subtítulo) y reescribe el campo a AssetRef@Group<Type>, dejando intactos List<>, ? y =default; Sin restricción (cualquier asset) elimina el <…>. Escribir la restricción a mano también funciona. El tooltip del encabezado de columna muestra el nombre completo resuelto del tipo.
  • Lo que escribes es lo que ves, de inmediato. El texto de la cuadrícula es el baseline más tu preparación, así que nunca espera a la validación. Un valor confirmado muestra su color de preparación en el mismo instante en que se confirma — tanto un valor elegido en un desplegable como una edición de valor visual o una escritura rápida, incluso mientras la celda todavía tiene el foco. La vista previa más pesada (Problems, contadores, chips, lienzo) se recalcula una vez por ráfaga de edición en lugar de una vez por pulsación de tecla. La excepción es un gesto puntual en el lienzo, que se redibuja al instante.
  • No hay validación en línea mientras escribes — los diagnósticos vienen de un solo canal (el validador de pre-flight/importación), mostrado en Problems.
  • + Row añade un registro con un id sugerido (detección de prefijo común, a prueba de colisiones). Cada cambio preparado — ediciones de celda, ediciones de clave, filas añadidas, descartar todo — es un paso de Ctrl+Z / Ctrl+Y. Cerrar la ventana con cambios preparados solicita guardar/descartar/cancelar.
  • ↑ Push to source ejecuta el dispatcher compartido: pre-flight → escritura de vuelta por origen → reimportación automática. Los renombrados de clave siguen preguntando "Se actualizarán N referencias — ¿continuar?", y un push a Google sigue mostrando la aprobación del plan antes de enviar nada.
  • Barreras honestas:
    • un origen de solo lectura (Google ExportUrl) deshabilita la edición y el push con un motivo al pasar el cursor;
    • una pestaña de origen xlsx es de solo lectura con una insignia (la escritura de vuelta omite xlsx);
    • mientras una importación/exportación/push está en ejecución, pull y push están deshabilitados.

Seleccionar filas y columnas — y arrastrarlas

Las coordenadas de la cuadrícula son asas, igual que en una hoja de cálculo.

  • Haz clic en un número de fila para seleccionar la fila; haz clic en una letra de columna para seleccionar la columna.
    • Ctrl+clic añade más elementos a la selección; Shift+clic toma el tramo desde el último clic.
    • El encabezado y el cuerpo resaltan todo lo seleccionado, y la celda en la que está el teclado dibuja un contorno de selección que sigue los movimientos con las flechas.
    • Cambiar de hoja descarta la selección — ahí los mismos números apuntarían a columnas distintas — y los menús llevan un elemento Quitar la selección.
  • Arrastra una selección para moverla. Toma un número de fila (o una letra de columna) seleccionado y arrastra: una línea de inserción sigue dónde aterrizaría el soltar, y soltar mueve la selección hasta ahí como un solo paso de Ctrl+Z.
    • Una selección no contigua — las filas 2, 5 y 9, por ejemplo — llega agrupada en el punto de destino, en el orden en que la seleccionaste.
    • Mientras un orden, una búsqueda o un filtro fija el orden visible, los movimientos de fila siguen rechazándose por la misma razón por la que los elementos de menú se deshabilitan a sí mismos — y empezar el arrastre lo indica en el momento en que empezaría, en lugar de simplemente no moverse.
  • Los menús de clic derecho actúan sobre toda la selección. Con varias columnas seleccionadas, Ancho de columna…, Autoajustar ancho de columna, Ocultar, los movimientos ◀▶, eliminar y Vaciar datos de la columna… se aplican a todas las columnas seleccionadas; con varias filas, los movimientos y la eliminación las cubren todas — cada lote como un solo paso de deshacer.
    • Los elementos que solo tienen sentido para un objetivo a la vez — propiedades, filtro, orden, congelar, insertar — están aparte en su propia sección de un solo objetivo.
    • Un elemento bloqueado permanece visible con su motivo, como en todas partes.

Seleccionar es un gesto de vista: nada de esto se prepara ni se escribe hasta que una acción lo usa.

Los menús en sí son ahora un solo componente. Todo menú contextual y desplegable de Studio — encabezados de columna, márgenes de fila, el de la barra de herramientas, la barra lateral, los nodos y cables del lienzo, los menús de celda — tiene la misma forma: secciones tituladas, marcas de verificación, navegación por teclado, y elementos deshabilitados que permanecen en su sitio con el motivo. Es la misma forma que tienen los menús de la app web, así que no hay que reaprender nada entre ambas.

Editar en el lienzo

El lienzo edita el mismo búfer de preparación que la tabla. Todo lo de abajo es un cambio preparado ordinario: aparece en el modal de Push, es un solo paso de Ctrl+Z, y se escribe de vuelta mediante la misma cadena de pre-flight y reimportación.

Qué se dibuja

Todo fluye en una dirección: los materiales a la izquierda, lo que los usa a la derecha, con el registro que abriste en medio.

Un control segmentado encima del lienzo elige hasta dónde llegar en cada dirección:

  • materiales → este → used by — un paso cada uno;
  • solo materiales — dos pasos, para seguir una cadena de ensamblaje;
  • solo used by.

Una hoja sin columnas de referencia propias no tiene nada a su izquierda, así que solo ofrece la última de esas opciones. El límite de pasos existe para que un material muy usado no vuelque todo el proyecto en la pantalla. Para ver más allá, haz doble clic en un vecino para convertirlo en el nuevo término.

  • El mismo registro alcanzado dos veces sigue siendo un solo nodo.
  • Un registro que no existe se dibuja de todas formas, marcado como roto, porque un enlace que no puedes ver es un enlace que no puedes arreglar.
  • Un ciclo tampoco se oculta: la arista que lo cierra corre de vuelta por un carril debajo de las tarjetas, discontinua, para que puedas seguir hasta dónde regresa.

El layout es determinista: los mismos datos siempre producen la misma imagen. Las posiciones de los nodos se pueden arrastrar durante la sesión, y el arrastre deliberadamente no se guarda.

Qué hay en un nodo

El encabezado lleva la clave, un subtítulo (su hoja, o el nombre legible que un plugin proporcionó), la dirección de celda, y una insignia que cuenta quién más apunta a este registro.

Debajo, los puertos de referencia siempre están visibles. Un puerto es donde se conecta un cable, así que ocultar uno haría que la imagen mintiera. Cada uno muestra un punto lleno o vacío, lo que acepta, y cuántos están enlazados. Un puerto de lista muestra sus elementos en orden, cada uno con controles de mover y quitar, porque el orden de una lista es dato.

Las columnas simples se pliegan en un grupo de "n valores", abierto en el término y cerrado en el resto. Cada fila es una fila de valor en la que puedes escribir — el mismo widget que usa la cuadrícula, confirmado mediante la misma barrera. Los puntos de puerto se tiñen con el color de la hoja que aceptan, así que una cadena se lee como un solo color.

Una tarjeta muestra la misma proyección que muestra la tabla. Una columna preparada en este lote — todavía no reflejada, tipos obligatorios y de referencia incluidos — ya aparece en la tarjeta, marcada como pendiente de la misma forma en que el encabezado de la tabla la marca, tooltip incluido: una columna de referencia preparada aparece como un puerto, una columna simple preparada como una fila de valor, un renombrado preparado muestra el nombre nuevo sobre el valor original, y una eliminación preparada quita la fila también de la tarjeta. Añadir una columna obligatoria a una hoja ya poblada no deja las tarjetas en blanco mientras las celdas vacías todavía se están rellenando — el lienzo sigue mostrando la hoja tal como quedará después del reflejo, exactamente igual que la cuadrícula.

En el hombro derecho hay un único punto de salida. Lo que este registro exporta es a sí mismo, así que hay solo uno. Arrastrar desde él plantea la pregunta opuesta ("¿dónde uso esto?") a arrastrar un puerto ("¿a qué apunta esto?").

Ese punto se dibuja solo cuando alguna hoja del proyecto realmente tiene una columna que acepta esta hoja, porque un punto sin adónde ir es una affordance condenada a fallar. La prueba es el esquema, no los datos: una columna que declara RecordId@ThisSheet mantiene el punto vivo incluso antes de que nadie haya escrito una sola fila.

Gestos y menús

El punto es el asa. Pulsar un punto de puerto inicia el gesto y pulsar en cualquier otro lugar de la fila no lo hace, así que nada se agarra por accidente. Pulsar y soltar sin mover sigue siendo un clic.

  • El encabezado de una tarjeta es su propia asa:
    • haz clic para seleccionarla, lo que también la eleva por encima de cualquier tarjeta que se solape con ella;
    • arrástralo para mover la tarjeta durante esta sesión;
    • haz doble clic para convertir ese registro en el nuevo término.
  • Clic derecho en lienzo vacío → registro nuevo. Se abre un selector en cascada: el panel izquierdo lista las hojas a las que apuntan los puertos actualmente dibujados, el panel derecho lleva la búsqueda, la creación y la lista de registros, y una tercera página pregunta qué puerto recibe el registro cuando más de uno podría.
    • Un plugin puede acotar o ampliar esa lista de hojas. Una hoja que declaró que ningún puerto en pantalla acepta permanece listada con su motivo adjunto en lugar de desaparecer.
    • Aquí no hay un "nuevo registro" sin contexto — todo registro nacido en el lienzo nace enlazado. Una fila independiente es para lo que sirve el + Row de la tabla.
  • Haz clic en un punto de puerto vacío, o clic derecho en un nodo → Connect, para enlazar esa columna. El selector se abre en el cursor y es la misma lista de claves con búsqueda que usa la cuadrícula.
    • Dos líneas de encabezado indican qué acepta el slot y en qué celda se escribirá la elección.
    • Cada fila lleva la clave, su nombre visible y cuántos lugares ya apuntan a ella, y las claves ya enlazadas aquí se marcan en lugar de duplicarse en silencio.
    • Si el registro que quieres todavía no existe, el cuadro de búsqueda se convierte en un cuadro de clave con el prefijo común de la hoja ya rellenado. Escribe un nombre, pulsa Enter, y se crea y se enlaza en un solo gesto que un Ctrl+Z deshace. Un nombre vacío o ya usado lo indica (y dónde) en lugar de crear nada.
  • Un registro que creas en el lienzo se convierte en el lienzo. La vista lo enruta de la misma forma que el doble clic en una tarjeta, así que el nuevo registro queda en el medio con el enlace que acabas de hacer al lado. (Bifurcar es la excepción — el objetivo de una bifurcación es que este término conserve su propia copia, así que la vista se queda donde está.)
  • Arrastra desde un punto de puerto vacío y el cable sigue al cursor: suéltalo sobre una tarjeta para enlazar, sobre lienzo vacío para abrir el selector ahí.
    • Arrastrar desde el punto de salida va en la otra dirección. Suelta sobre una tarjeta y el lienzo encuentra cuál de sus columnas puede tomar este registro — un candidato enlaza directamente, varios preguntan cuál. Soltar sobre lienzo vacío abre la cascada espejo de las hojas que podrían tomarlo, incluidas hojas que no están en pantalla.
    • Mientras un arrastre está activo, todo lo no relacionado se atenúa y los puertos que podrían aceptarlo brillan, así que los destinos válidos son visibles en lugar de adivinados.
    • Cada gesto completado responde con un breve toast que nombra la celda que escribió — y, cuando importa, que el enlace cerró un ciclo o que el registro ahora se comparte con alguien más.
  • Recoge un enlace que ya está conectado. Arrastrar un puerto de referencia única lleno levanta ese mismo cable, exactamente como sacar un cable de un enchufe. Suéltalo sobre otra tarjeta para reapuntarlo, o sobre otro puerto para mover el enlace entre dos celdas — sigue siendo un solo paso de undo, y ninguna celda se escribe a menos que ambos planes se sostengan. Suéltalo de vuelta donde estaba, o pulsa Esc, para no cambiar nada.
    • Soltarlo sobre lienzo vacío abre el selector de esa celda en el cursor, con desconectar ofrecido como una línea dentro de él en lugar de hecho al instante: una mano que resbala no debe borrar un enlace.
    • Hacer clic en ese punto sin mover selecciona ese cable en su lugar, así que los dos gestos nunca se cobran nada entre sí.
    • Un puerto escalar lleno sigue siendo un destino válido para el arrastre de otra persona — soltar sobre él significa reemplazar.
    • Los puertos de lista no tienen un cable único que levantar, así que siempre inician un enlace nuevo. Quitar o reordenar un elemento es para lo que sirve la propia fila ✕ / ▲▼ del elemento.
  • El cuerpo de un cable es para elegir, no para arrastrar. Haz clic en cualquier punto a lo largo de un cable — la franja clicable sigue cada segmento de su trayecto — para seleccionarlo y abrir el inspector de cable. Delete o clic derecho ▸ Disconnect lo desenlaza. Reapuntar es el gesto de puerto de arriba, así que hay exactamente una forma de hacer cada cosa.
  • Clic derecho en un nodo → Delete this record. Un solo diálogo nombra todo lo que se va: cuántas conexiones apuntan al registro, y cuántas ediciones preparadas en esa fila se descartarán.
  • Bifurca un registro compartido. Cuando un registro se usa en varios lugares, el inspector de nodo ofrece Duplicate and split: clona cada columna en una clave nueva (sugerida a partir del prefijo de la hoja), y reapunta solo los enlaces de este lienzo hacia la copia. Un solo paso de undo, y el registro que usan todos los demás queda intacto.
  • El inspector de cable se abre con el cable seleccionado. Dice una línea es un token: la celda en la que se escribe el enlace, y todo el texto de esa celda dividido en sus tokens con una marca en el que es esta línea.
    • Cuando el plugin que abrió la arista lo describe, una fila edita la parte del token que no es la clave (el add:10 de attack:add:10). Editar esa fila reescribe solo el resto; cambiar a qué apunta es reapuntar, que es el gesto de puerto.
    • Desde aquí también puedes abrir el registro al que apunta, o cortar el enlace.
  • La tecla Delete lee la selección, y pregunta qué significa esa selección aquí.
    • Con un cable seleccionado, lo desenlaza.
    • Con una tarjeta seleccionada depende de si la tarjeta es el registro que abriste. En el término — la tarjeta del medio, el registro del que trata esta pantalla — elimina el registro, mediante el mismo diálogo de confirmación que el elemento de menú.
    • En cualquier otra tarjeta corta todas las conexiones entre esa tarjeta y esta pantalla a la vez, porque desde aquí esa tarjeta es material, no el sujeto. Eso es un solo paso de undo, con los planes encadenados de modo que una columna de lista pierde todos sus elementos coincidentes en lugar de todos menos el último, y una conexión que no se pudo cortar dice por qué en lugar de fallar en silencio.
    • (Clic derecho ▸ Delete this record siempre significa eliminar, sea cual sea la tarjeta en la que esté — la tecla es el atajo cuyo significado sigue a la selección, la línea de menú es la explícita.)
    • Una tarjeta que dibujó un plugin y que no es una fila de hoja no tiene nada que eliminar o desenlazar, así que la tecla no hace nada en ella.
  • Un registro nuevo que no está enlazado a nada no se dibuja en el lienzo de otra persona. Una fila nueva aparece aquí solo mientras una conexión preparada la ata a algo en pantalla — de lo contrario, una sola fila sin terminar en la tabla seguiría a cada lienzo del proyecto a todas partes.
    • Nada se pierde por eso. Crear un registro desde el lienzo reenruta la vista hacia él de inmediato, así que la fila que acabas de hacer es lo que estás mirando. Una fila hecha en la tabla se queda en la tabla. Y una fila que termina sin enlazar a nada se nombra en la lista de descarte del diálogo de reflejo antes de eliminarse, se haya dibujado alguna vez o no.
  • Ctrl/Cmd + rueda hace zoom en el lienzo entre 25 % y 200 %, manteniendo fijo el punto bajo el cursor. El porcentaje en el encabezado del lienzo es un botón que vuelve a 100 %. La rueda sola sigue haciendo scroll.
  • Arrastra con el botón central del ratón — o Alt + botón izquierdo — para desplazar la vista (pan). El cursor cambia mientras lo mantienes, así queda claro que se está moviendo la vista y no algo dentro de ella.
    • El arrastre solo con el botón izquierdo sigue significando "seleccionar y enlazar", por eso el paneo tiene su propio botón. Alt + izquierdo es el mismo gesto para ratones y trackpads sin botón central.
    • El paneo se detiene en el borde del contenido: esto es una vista con scroll, no un plano infinito, así que no puedes perder el grafo en el espacio en blanco.

Desconectar y rechazos

Desconectar dice qué pasará antes de que lo pulses. Limpiar nunca se rechaza, pero la línea de menú explica la consecuencia:

  • una columna opcional con un valor predeterminado recae en ese valor predeterminado, así que el cable se va y el registro sigue resolviendo en tiempo de ejecución;
  • una columna opcional sin valor predeterminado simplemente queda vacía;
  • una columna obligatoria se convierte en una celda vacía que Problems reporta — puedes prepararlo así, y pre-flight detendrá el reflejo hasta que la rellenes;
  • una lista simplemente pierde ese elemento.

La validación vive en un solo canal; el lienzo nunca ejecuta uno segundo propio.

Dos cosas se rechazan en lugar de simularse, y el menú dice cuáles:

  • Un cable que no dice en qué celda está escrito no se puede editar. El core lo rellena para las referencias que él mismo lee; un plugin que añade un cable a mano lo aporta (o honestamente lo omite).
  • Un enlace enterrado dentro de un tipo personalizado — el nombre de la estadística dentro de un valor Modifier, por ejemplo — solo es editable si el plugin que abrió esa arista también se adhirió a IAuthorableEdgeContributor. De lo contrario, el cable es solo de visualización.

Las claves duplicadas, los orígenes de solo lectura, las pestañas respaldadas por xlsx y una importación en ejecución deshabilitan la creación en el lienzo exactamente igual que deshabilitan la de la tabla, cada una con su motivo en la línea de menú.

Edición de estructura

Todo lo de abajo se prepara como una edición de celda — visible de inmediato, deshacible, confirmado por una sola escritura de vuelta. Las affordances viven en los menús de clic derecho descritos arriba (encabezado de columna · margen de fila · hoja de la barra lateral).

Studio también mantiene botones fijos en la barra de encabezado de la hoja, junto al nombre de la hoja, para que los más usados se puedan encontrar sin saber que existen los menús de clic derecho — entre ellos + Row y + Column, que añade una columna al final. La misma barra lleva el de renombrar la hoja, el interruptor de la fila @overlap, y los controles de búsqueda y orden. Hacer clic derecho en un encabezado sigue siendo la forma de colocar una columna nueva en una posición particular.

  • Columnas: añade, elimina, mueve y edita propiedades en el mismo lugar.
    • El formulario de propiedades (properties ✎ en el encabezado) edita el nombre, @type, @desc y @overlap juntos. Solo cambian las celdas de marcador; las celdas de datos de la columna se preservan al 100% (sin pérdida de datos por eliminar-y-volver-a-añadir).
    • @overlap es una casilla de verificación. La fila se crea automáticamente la primera vez que se necesita, y la casilla está deshabilitada en columnas clave, que siempre son únicas.
    • La entrada de @type se valida mientras escribes. La validación previa luego verifica que cada celda existente sea compatible con el nuevo tipo antes de escribir nada.
  • Marcadores: añade/elimina la fila opcional @overlap. La etiqueta de grupo y el color propios @style de una hoja se preparan por la misma vía (clic derecho en la barra lateral ▸ Group & color ✎), así que la agrupación y el color se envían a la hoja como cualquier otra edición, en lugar de quedarse en un estado local del editor.
  • Filas: eliminar; reordenar con ▲▼ (en Studio, "move up" / "move down" en el menú del margen).
  • Reordenar columnas — cualquier número de movimientos, confirmados en un solo reflejo. Las columnas pendientes (recién añadidas) también se reordenan, incluso hasta el frente, por delante de las columnas existentes.
  • Los comentarios y las filas en blanco se preservan durante todas las ediciones de estructura.

WYSIWYG: la cuadrícula es una vista previa en vivo de la hoja tras el reflejo

Todo lo que preparas es inmediatamente lo que ves:

  • Una columna añadida aparece al instante — y puedes rellenar sus celdas en el mismo lote (tanto en filas existentes como en filas nuevas). Así es como añades una columna obligatoria a una pestaña ya poblada: añádela y rellena los valores juntos; las celdas obligatorias sin rellenar son detectadas por la validación previa.
  • Las columnas/filas eliminadas desaparecen al instante. El resumen de preparación en la parte inferior lista lo que está pendiente (Deleted: column 'hp' · Added: column 'mp') — solo a modo de visualización.
  • Todo se mezcla libremente en un solo lote: ediciones de valores, adiciones de filas, múltiples adiciones/eliminaciones de columnas, activaciones de marcadores y reordenamientos — sin restricciones de "una operación por lote".
  • Eliminar una columna/fila que ya tiene ediciones preparadas (o cancelar una columna nueva ya rellenada) pregunta "Se perderán N ediciones — ¿continuar?" — nada se descarta en silencio.

Renombrado de pestaña e intercambios A↔B — las referencias siguen a los datos

Renombrar pestaña ("Renombrar pestaña ✎") renombra el origen y actualiza cada referencia @type a la pestaña en todas las hojas (RecordId@FooRecordId@Bar, incluidas las formas de lista y personalizadas), después de un diálogo de confirmación. Renombrar el origen significa un renombrado de archivo con la extensión preservada en local, y un cambio de título con el contenido intacto en Google.

Los intercambios mutuos (A↔B) y los ciclos se admiten en un solo lote: preparar cualquiera de las dos mitades primero funciona, y las referencias siguen a los datos mediante una reescritura atómica del intercambio.

  • Lo local intercambia el contenido de los archivos en un solo paso de escritura y limpia los archivos obsoletos de extensión antigua.
  • Google ordena los cambios de título topológicamente, usando un título temporal para evitar cualquier duplicado momentáneo.

La reimportación se encarga de la limpieza automáticamente: renombrado de la clase generada, eliminación del archivo de la clase antigua, y nuevo registro del SO generado mediante bake y de la dirección de Addressables.

Renombrado de clave (RecordId) con propagación de referencias

Edita una celda de clave directamente en la cuadrícula. Al reflejar, cada celda de cada pestaña que hace referencia a esa clave (escalares RecordId@ThisTab y elementos de lista) se actualiza en conjunto, tras una confirmación "Se actualizarán N referencias — ¿continuar?". Funciona tanto en rutas locales como de Google. Límites:

  • La propagación solo toca celdas del baseline — el texto que acabas de escribir en el mismo lote nunca se reescribe en silencio; en su lugar, la validación previa detecta la referencia colgante para que la corrijas a sabiendas.
  • Si la propagación tocaría una pestaña de origen xlsx, se bloquea todo el reflejo (nunca se permite un reflejo parcial) — edita ese libro directamente y vuelve a importar.
  • La clave entera secundaria (IntId) se puede editar de la misma manera.

Ctrl+Z / Ctrl+Y — integrado con el Undo nativo de Unity

Cada cambio en preparación se integra con el Undo nativo de Unity:

  • ediciones de celda;
  • ediciones de clave;
  • adición/eliminación/cancelación de columna;
  • adición/eliminación de fila;
  • activaciones de marcador;
  • reordenamientos;
  • ediciones de propiedades;
  • renombrados de pestaña;
  • enlaces y desenlaces del lienzo;
  • soltados de asset, junto con los registros que preparan;
  • incluso "descartar todo".

Dos límites que debes conocer:

  • Mientras escribes en un campo de texto, el propio campo consume primero el Ctrl+Z (comportamiento estándar de Windows).
  • Después de un reflejo exitoso, el historial de preparación se borra — Ctrl+Z se mueve únicamente dentro de la sesión previa al reflejo. Los cambios ya escritos en la hoja se deshacen editando la hoja.

Las ediciones preparadas sobreviven a las reimportaciones

Las ediciones preparadas llevan una dirección lógica (pestaña · clave de fila · campo), no un número de fila físico, y se vuelven a resolver justo antes del reflejo, así que tu preparación sobrevive a las reimportaciones automáticas y a los cambios de baseline en segundo plano.

Una edición queda aislada cuando la hoja cambió externamente de una forma que rompe la resolución — la clave de la fila se renombró desde fuera, la fila se eliminó, o una clave ahora entra en conflicto. Una edición aislada se excluye del reflejo y se muestra con una insignia "aislada". No se descarta en silencio ni se le permite bloquear el resto de tu sesión; puedes descartarla individualmente tras la confirmación.

Validación previa — validar y luego reflejar

La escritura de vuelta primero valida todo el estado proyectado en memoria — integridad de referencias, unicidad de @overlap, claves de asset y tipos de asset (con los registros preparados en esta sesión contados como presentes), además de cualquier validador de dominio de plugin. Si la validación falla, no se escribe nada y obtienes el informe completo. La escritura solo comienza después de que todo el estado proyectado sea válido; los registros de Addressables preparados se ejecutan después de que la escritura de la hoja tenga éxito y antes de la reimportación automática, y un reflejo cuyo único cambio preparado es un registro igualmente lo ejecuta y reimporta (consulta Fuentes, exportación y envío).

Crear y eliminar hojas

  • Crear a partir de una de las dos plantillas integradas, de una plantilla registrada por un plugin, o desde cero definiendo campos. Un clic crea el archivo local o la pestaña de Google (tras una advertencia).
    • Las plantillas integradas son Ejemplo de ítem (solo tipos del núcleo) y Enum definitions, que dispone una hoja @enum (ver más abajo).
    • Una plantilla registrada por un plugin está presente solo cuando un plugin la proporciona — p. ej., las pestañas de habilidad del Plugin Demo.
  • Si creas en un origen distinto del que estás importando actualmente, el diálogo lo indica antes de actuar. La reimportación automática leería el origen antiguo y nunca vería la pestaña nueva, así que crear cambia el origen de importación al que creaste, y lo guarda en el asset de ajustes.
  • Eliminar limpia todo en conjunto: el origen, el baseline, el SO generado mediante bake y el .cs generado (advertencia enfática + aprobación).

Búsqueda entre hojas (la entrada All)

El primer elemento en la barra lateral es All: escribe un término y busca por coincidencia parcial en los ids y valores de campo de todas las hojas, listando hoja · clave · campo · valor, 50 filas por página. Con el cuadro vacío, recorre todos los registros de todas las hojas.

Lee las bases de datos generadas mediante bake, así que necesita una importación exitosa primero, y lo indica con claridad cuando todavía no hay ninguna. Los resultados se actualizan solos cuando una importación se completa o cambian los ajustes activos, en lugar de mostrar una respuesta obsoleta.

Una fila de resultado es una puerta, no solo un listado. Haz doble clic en ella — o selecciónala y pulsa Enter — y esa hoja se abre con la celda coincidente seleccionada; un solo clic solo selecciona la fila. Como los resultados provienen de datos generados mediante bake, un resultado puede nombrar una hoja que la sesión actual no ha cargado — esa fila no navega, y un breve aviso debajo de la lista explica por qué en lugar de no hacer nada.

Abrir una hoja que falló al importar (cuarentena)

Antes, un error de validación te dejaba sin nada con qué corregirlo: la importación fallaba, así que no aparecía ninguna hoja en la ventana, y la única forma de avanzar era abrir la propia hoja de cálculo. Eso ahora está invertido.

Obtener y guardar están separados de validar. Mientras el origen se haya leído por completo, las hojas se guardan como la instantánea del baseline aunque la validación haya fallado — así que Studio las abre, muestra cada error contra las celdas causantes, y te deja corregir y hacer push exactamente como siempre.

Lo que permanece bloqueado es la salida: la generación de código y el bake no se ejecutan hasta que el recuento de errores sea cero, así que "sin ensamblaje parcial" se preserva donde corresponde — en la salida.

  • Se te informa, no se te deja adivinando. La consola indica que las hojas se guardaron y qué está bloqueado. La barra lateral lleva un aviso ⛔ N error(s) — code generation and baking are blocked que salta al primer error al hacer clic, y las insignias de error por hoja provienen de los diagnósticos de proyección que ya ves en Problems. Una hoja que no se pudo analizar en absoluto lo indica en lugar de aparecer vacía.
  • Hacer push de tu corrección pregunta una vez. Mientras la hoja está en cuarentena, la escritura de vuelta muestra una confirmación extra: los errores existentes permanecen, y un error nuevo que introduzca esta edición también se escribe — la validación no lo detendrá. Todo lo que encuentra se lista como advertencia en el informe de ese reflejo, y la reimportación automática vuelve a validar toda la hoja después. En una hoja sana nada cambia: pre-flight sigue siendo una barrera estricta.
  • Las salidas permanecen cerradas. Export y Push a la hoja en vivo se rechazan mientras está en cuarentena, porque ambos empalman los últimos valores generados mediante bake con éxito en las hojas más nuevas — lo que revertiría justo los valores que alguien acaba de corregir. Una build se detiene por la comprobación de frescura por la misma razón, y la ventana Primeros pasos también muestra el estado.
  • La marca se borra en exactamente un lugar — el momento en que una importación se ejecuta hasta el final, pasando por el bake. Ningún paso anterior puede borrarla, así que un fallo posterior no puede dejar atrás un falso "todo despejado".

Ordenar y filtrar (solo visualización)

Studio añade un orden por hoja (cualquier columna, ascendente/descendente, comparación consciente del tipo, persistida por proyecto) y un filtro de texto. Ambos cambian solo el orden de visualización: el margen conserva los números de fila reales de la hoja, y nada de lo relacionado con ordenar o filtrar toca la preparación, el reflejo, el push o la exportación.

Mientras un orden o filtro está activo, los elementos de mover fila en el menú del margen se deshabilitan a sí mismos y explican por qué, porque el "vecino visible" no sería el vecino real. Los filtros de valor por columna y el ocultamiento de columnas descritos más abajo siguen la misma regla.

Columnas congeladas (solo visualización)

Clic derecho en un encabezado de columna ▸ Inmovilizar hasta esta columna y esa columna, más todas las columnas a su izquierda, se mueven a su propio panel fuera del desplazamiento horizontal — así la clave permanece a la vista mientras te desplazas hasta una columna lejana. Quitar la inmovilización de columnas las libera. Al menos una columna tiene que seguir siendo desplazable, así que congelar la última se rechaza con el motivo indicado; una tabla con una sola columna no tiene nada que congelar.

Lo que está congelado es un recuento de columnas desde la izquierda, no una columna concreta con nombre — así que mover una columna cambia cuáles quedan retenidas, exactamente como se comportan los paneles congelados en una hoja de cálculo.

Igual que ordenar y filtrar, es un ajuste de vista, almacenado por hoja en las preferencias por proyecto. Nunca llega a la hoja, así que funciona en hojas de solo lectura y respaldadas por xlsx y mientras una importación está en ejecución, y no aparece en ningún push ni exportación.

Ancho de columna, ocultar y filtros por columna (solo visualización)

Toda columna — tanto en las hojas de datos como en las hojas de definición de enum — se puede ajustar a mano: arrastra el tirador en el borde derecho de la celda de letra de la columna, haz doble clic en el tirador para volver al ancho medido, o usa Ancho de columna… en el menú de columna para un número exacto y Autoajustar ancho de columna para volver a medir. El límite inferior es de 24 px y no hay límite superior. Los anchos se guardan por hoja y se restauran cuando la hoja o el editor vuelven a abrirse, y el autoajuste mide todas las filas — no solo las visibles — de modo que un filtro no puede hacer que los anchos salten.

El mismo menú de columna lleva el resto del conjunto de hoja de cálculo:

  • Ocultar columna / Mostrar columnas ocultas (n) — ocultar es un ajuste de vista: las letras siguen nombrando las posiciones reales de la hoja (A · C · D), una línea de límite en negrita en el encabezado y en el cuerpo marca dónde están las columnas ocultas, y un chip de la barra de herramientas las cuenta. La última columna visible se niega a ocultarse, con el motivo indicado. Las columnas ocultas siguen existiendo en todos los demás lugares — el lienzo, la validación, Export y Push ven la hoja sin cambios.
  • Filtro… — una lista de verificación de los valores de la columna (con una entrada (En blanco) para las celdas vacías) más una condición: contiene / no contiene / está vacío / no está vacío en cualquier columna, y es igual a / no es igual a / mayor que / menor que / mayor o igual que / menor o igual que en columnas numéricas. Sin nada marcado, todos los valores pasan y la condición sigue aplicándose. Un filtro se combina con el cuadro de búsqueda, las filas recién añadidas siempre permanecen visibles, el chip de la barra de herramientas cuenta las columnas filtradas, y Borrar filtro elimina uno.
  • Vaciar datos de la columna… — tras una confirmación, vacía el valor de esa columna en todas las filas (incluidas las filas filtradas y las filas nuevas preparadas) como un solo paso de deshacer. La columna clave se niega — el nombre de cada fila vive ahí; cámbialo en su celda — y una columna obligatoria informa honestamente de errores hasta que se vuelva a rellenar. Una columna sin nada que vaciar no prepara nada.
  • Ordenar ascendente / descendente / (sheet order) — el orden por hoja, ahora también en el menú de columna, con una marca de verificación en la opción activa.

Igual que ordenar y las columnas congeladas, todo esto es solo de visualización: ajustes de vista por hoja que nunca llegan a la hoja, a un push ni a una exportación.

Hojas de definición de enum

Una hoja que define enums (consulta Sintaxis de la hoja) no tiene registros, así que Studio le da su propia cuadrícula en lugar de la tabla de registros. La cuadrícula muestra una columna por enum con sus miembros listados en orden, una insignia Enum definitions en la barra lateral, y un recuento de cuántos enums contiene. Se lee como cualquier otra hoja: letras de columna en la parte superior, números de fila reales de la hoja en el margen, los mismos menús de clic derecho en el mismo orden, y los cambios preparados marcados con los mismos colores que usa la tabla de datos.

La estructura de la hoja se edita en el mismo sitio, exactamente igual que la de una hoja de datos:

  • Define un enum nuevo con el botón + Enum de la barra de encabezado (la única forma de poner el primer enum en una hoja de definición que todavía no tiene ninguno) o desde el menú de clic derecho del encabezado de una columna, en una posición elegida. El formulario pide el nombre, el tipo subyacente y la descripción opcionales, y los primeros miembros — al menos uno, porque un enum sin miembros no se puede importar. El orden de los miembros son sus valores enteros.
  • Renombra un enum, y cada celda @type que lo referencia en todas las hojas se reescribe en el mismo lote, así que la reimportación tras la escritura sigue resolviendo. Edita el tipo subyacente y la descripción en el mismo sitio — las filas de marcador se muestran incluso antes de que la hoja las tenga, y se crean cuando el cambio se confirma.
  • Elimina un enum — se rechaza mientras alguna hoja todavía lo use, con las columnas que lo usan nombradas. Reordena columnas con libertad; la posición de columna de un enum no tiene ningún significado, así que esto siempre es seguro.
  • Todo se prepara como cualquier otra edición: visible de inmediato, un paso de Ctrl+Z por gesto, escrito por un solo reflejo. Cada decisión — si el nombre es legal o ya está tomado, si un miembro es válido, si el tipo subyacente está permitido, si el enum todavía está en uso — la toma el mismo código que valida la importación, así que el formulario y la reimportación no pueden discrepar. Una acción bloqueada permanece en su menú con el motivo en lugar de desaparecer.

Las filas de miembro solo se añaden al final y no hay ordenación, porque la posición de un miembro es su valor — reordenar los miembros renumeraría datos que ya están horneados (bake) en los assets.

Las celdas muestran exactamente lo que dice la hoja: un miembro fijado con la sintaxis Name=value aparece tal como se escribió. Las comprobaciones de duplicados comparan solo la parte del nombre, así que preparar Rare sobre una hoja que ya contiene Rare=10 se rechaza en lugar de duplicarse.

Para añadir un miembro ni siquiera hace falta abrir la hoja. El menú desplegable de una celda Enum<T> en cualquier parte del proyecto lleva "Add a new member…" al final: escribe el nombre y se prepara en la hoja de enum como un solo paso de Ctrl+Z, marcado como preparado hasta que el siguiente reflejo lo escriba.

La fila está ausente — en lugar de presente y fallando — en un enum que un plugin registró desde C#, porque la hoja no es la propietaria de ese.

La app web edita estas hojas de la misma manera, con las mismas reglas — consulta SheetForge Web.

Saltar de un error de consola a la celda

Cuando una importación o un reflejo encuentra errores, el informe legible para humanos de la consola añade un enlace en el que se puede hacer clic, "Abrir en Data Studio", junto a la coordenada de cada error. Al hacer clic, se abre Studio, cambia a esa pestaña, y resalta la celda (una barra a la izquierda de la fila y un borde en la celda). Los errores sin una celda específica (a nivel de archivo/pestaña) simplemente enfocan la pestaña.

El enlace se añade únicamente al informe legible para humanos; la línea de coordenadas legible por máquina, de la que dependen CI y el scraping de logs, se deja intacta.

Comprobación de estado

⋯ ▸ Comprobación de estado en la barra de herramientas de Studio ejecuta un diagnóstico rápido sin red. Imprime ✓/✗ con una solución sugerida para cada uno de:

  • los ajustes activos;
  • la accesibilidad del origen — una carpeta local que existe, o un id de Google + ruta de clave de cuenta de servicio;
  • un baseline de importación;
  • la frescura del código generado/bake/addressables.

Un diálogo resumen te indica cuántas comprobaciones necesitan atención.

Ajustes de importación activos

Cuando el proyecto tiene más de un asset SheetForgeSettings, la barra de herramientas muestra un menú desplegable para elegir cuál es el activo. Seleccionar uno lo activa de inmediato y reconstruye la vista; los menús, las importaciones y la ventana siguen la elección activa. Con un único asset de ajustes, el menú desplegable se oculta.

La elección activa se guarda por proyecto y por usuario, así que nunca toca el control de versiones. También puedes gestionarla desde la ventana Primeros pasos (Tools ▸ SheetForge ▸ Primeros pasos), o desde el inspector de un asset de ajustes, que muestra una insignia "activo" o un botón "Establecer como activo".

Redes de seguridad

  • Detección de cambios externos para orígenes locales.
  • Una advertencia al cerrar cuando existen cambios en preparación.
  • Anclas de generación de preparación que protegen contra actuar sobre una cuadrícula obsoleta.
  • Consciencia de modo: con un origen de solo lectura (Google ExportUrl), Push / reflejo / edición de estructura / eliminación se deshabilitan con una explicación al pasar el cursor.
  • Barras de progreso durante la importación/exportación/push, siempre despejadas (try/finally), localizadas.
  • Una extensión que se comporta mal no puede tumbar la ventana: los overrides de lienzo, los widgets y las acciones se llaman dentro de try/catch, y un fallo es una advertencia de consola en inglés mientras el resto de la ventana sigue funcionando.

Cosas que debes saber antes de renombrar (no reversibles después del reflejo)

  • El renombrado de columna / cambio de @type regenera el campo generado (nombre/tipo) — el código del juego que hace referencia a ese campo debe actualizarse a mano. El diálogo de confirmación lo indica explícitamente, y una ruptura de compilación resultante es abortada de forma segura por la cadena automática con una frase accionable. Los valores de la columna se preservan.
  • El renombrado de pestaña cambia el nombre de la clase generada (FooDatabaseBarDatabase) — misma regla.
  • Los intercambios mutuos y los ciclos siguen las mismas reglas que los renombrados simples (consulta la sección de renombrado de pestaña más arriba). Solo se rechaza un conflicto real — dos renombrados al mismo nombre.
  • Las pestañas de origen xlsx quedan excluidas del renombrado. El formulario explica por qué y Aplicar está deshabilitado; renombra la hoja en el propio libro y luego vuelve a importar.
  • En Google, queda un caso límite: dos pestañas intercambiadas que se referencian entre sí no se recolocan (lo local es totalmente correcto) — consulta Capacidades y límites.
  • Después del reflejo, esto no se puede deshacer con Ctrl+Z (la hoja ya se ha escrito).

Edición de prueba (ajuste temporal del SO)

El inspector del SO generado mediante bake tiene un interruptor de "edición de prueba" (desactivado de forma predeterminada = solo lectura). Actívalo para ajustar temporalmente los valores del SO y probar cifras en tiempo de ejecución — nunca se escribe en la hoja, desaparece en la siguiente reimportación. Los registros se pueden encontrar rápidamente por codeName/id, tanto en el editor como en el modo Play.

El botón separado del Banco de trabajo para "previsualizar mis valores preparados sobre los SO" desapareció junto con esa ventana. La superposición que impulsaba sigue siendo API pública para quien la quiera: EphemeralSoApply aplica lo que puede calcular de forma fiable, y rechaza las columnas pendientes y las celdas con error de análisis en lugar de simularlas. El interruptor de arriba cubre el caso cotidiano.

Con y sin plugins

Todo lo listado como Sin plugin (solo Core) funciona en un proyecto sin modificar. Cada línea Con un plugin es lo que añade un plugin de dominio. Todo se ejerce mediante el Plugin Demo incluido, así que puedes ver cada uno funcionando antes de escribir el tuyo propio (Creación de plugins).

  • Hojas, celdas, filas
    • Sin plugin: tabla completa, edición de celdas, añadir filas, preparación, Ctrl+Z, push.
    • Con un plugin: sin cambios.
  • Pull / Push
    • Sin plugin: importar desde el origen activo; hacer push mediante la misma cadena de pre-flight + reimportación.
    • Con un plugin: sin cambios.
  • Problems
    • Sin plugin: las cuatro validaciones del Core (claves, referencias, @overlap, claves de asset).
    • Con un plugin: más tus reglas IDomainValidator. La demo avisa sobre un ciclo de reacción sin freno y sobre un registro huérfano.
  • Lo que muestra el lienzo
    • Sin plugin: el registro que abriste, de qué está hecho y qué lo usa, dispuesto de forma determinista.
    • Con un plugin: más tu override por pestaña vía ISheetForgeGraphPlugin — identidades que no son registros de hoja, enlaces que el core no puede ver, columnas fijadas por orden de dominio (absoluto o contado desde el registro en pantalla), y el nombre legible por el que se conoce un registro. La demo añade nodos de evento y un bloque de código alrededor de un registro ExampleActions, fija las etapas de lanzamiento de un registro ExampleSkills, y convierte fireball en Fireball en la tarjeta y en el selector.
  • Aristas dibujadas
    • Sin plugin: cada referencia RecordId@Tab que ve el escáner del core (escalares, elementos de lista, valores predeterminados, interior de wrappers).
    • Con un plugin: más las aristas declaradas por un IEdgeContributor, y cualquier arista extra que revele un override de lienzo. La demo abre la referencia a estadística enterrada dentro de un valor de minisintaxis Modifier.
  • Editar en el lienzo
    • Sin plugin: crear, conectar, desconectar, reapuntar, bifurcar, eliminar y editar valores en línea para cada columna; se pueden crear registros nuevos en las hojas a las que apuntan los puertos dibujados.
    • Con un plugin: más IAuthorableGraphShape para decidir dónde se pueden crear registros nuevos, IAuthorableEdgeContributor para hacer editable la arista propia de un contribuyente, y IEdgeTokenEditor para exponer la parte de su token que no es la clave. El contribuyente de la demo reescribe la minisintaxis modifier cuando enlazas o desenlazas una estadística, y ofrece su op:value como una fila editable en el inspector de cable.
  • Widgets de celda
    • Sin plugin: las ramas integradas (interruptor, selector de opciones, selector de referencia, selector de asset con soltar, campos de color / curva / degradado, listas de chips para listas de esos tres, texto en bruto).
    • Con un plugin: más tu IStudioCellEditorProvider para un tipo de celda con nombre. Sin ningún código de widget, un StudioCellEditorHint nombra una de siete formas integradas (menú desplegable, multilínea, control deslizante, interruptor, color, curva, degradado) para ese tipo en su lugar. Un widget registrado gana; la pista (hint) gana sobre el valor predeterminado del Core — incluso sobre las pistas integradas de color / curva / degradado, cuando un paquete registra una pista bajo el mismo nombre de tipo.
  • Menús y paneles
    • Sin plugin: solo los elementos integrados.
    • Con un plugin: más tus registros ISheetForgeStudioPlugin — verbos al final del inspector, menú de fila, menú de encabezado de columna, menú de nodo de lienzo y de la barra superior, un panel de resumen a la derecha, y una insignia junto a un encabezado de columna. La demo prepara un freno de reacción en una fila, rellena una columna entera en un solo paso de Undo, y resume el ensamblaje de una habilidad con un indicador de tiempo de lanzamiento.
  • Paneles enriquecidos
    • Sin plugin: nada.
    • Con un plugin: IStudioPanelProvider pinta un panel arbitrario de UIToolkit. Registrado bajo el mismo id que un panel descrito, este gana aquí, mientras que el navegador dibuja el descrito.
  • Barra lateral
    • Sin plugin: solo tus hojas.
    • Con un plugin: más registros de código bloqueados estilo _Refs (ISheetForgeCodeRegistryPlugin) mostrados como una cuadrícula de solo lectura de clave/etiqueta/raises; las aristas que apuntan a esas claves no se dibujan como rotas.
  • Encima del lienzo
    • Sin plugin: nada (el core no incluye ningún widget).
    • Con un plugin: tu IStudioGraphWidget. La demo muestra una franja de etapas fija (VALIDATE → CAST → COMMIT → DELIVER → APPLY) rellenada desde la fila del término.
  • Inspector de nodo
    • Sin plugin: dirección, lista de used-by, "Go to this sheet", "Duplicate and split".
    • Con un plugin: más tus botones IStudioInspectorAction. La demo prepara brakeSeconds = 0.25 en una reacción sin freno (una edición preparada normal, deshacible).
  • Colores y etiquetas
    • Sin plugin: los preajustes integrados más el color @style propio de cada hoja.
    • Con un plugin: más tu preajuste ISheetForgeThemePlugin y las cadenas ISheetForgeStringsPlugin — registradas en Core, así que las etiquetas del mismo paquete también aparecen en el navegador.

Empezar con un proyecto vacío

Abierto sin ajustes de importación activos, Studio muestra un panel "Empieza" en lugar de la tabla — botones en línea para crear un asset de ajustes, importar la demo de Plugin/Core, o abrir Primeros pasos. Desaparece en cuanto existen ajustes.

Todavía más rápido: arrastra una carpeta sobre la ventana, o un único archivo .tsv/.csv/.xlsx, cuya carpeta padre se usa. Tras una confirmación, esto crea un asset de ajustes de importación que lee desde esa carpeta y lo activa. Si ya tienes ajustes activos, el diálogo lo indica y ofrece crear uno nuevo y cambiar.

Qué pasó con el Banco de trabajo

La ventana IMGUI original del Banco de trabajo ha sido eliminada. Compartía la sesión de creación de Studio, el motor de composición/validación y la vía de reflejo, así que no se perdió ningún comportamiento — y las tres cosas que solo ella ofrecía se trasladaron primero:

Función del Banco de trabajoDónde vive ahora
La pestaña All — búsqueda entre hojas con paginaciónLa entrada All en la parte superior de la barra lateral de Studio (misma búsqueda, mismo tamaño de página)
Incorporación por arrastrar y soltarEl propio Studio recibe el drop (arriba)
El panel de autocompletado de gid de Google / lista de pestañas en vivoEl inspector del asset de ajustes, bajo Google Sheets

Una capacidad se eliminó en lugar de trasladarse: el botón del Banco de trabajo para previsualizar valores preparados sobre los SO generados mediante bake. El interruptor de edición de prueba del inspector del SO cubre la misma necesidad (consulta Edición de prueba arriba).

Si tienes código o notas que apuntan a ella: no hay ninguna entrada de menú que actualizar — nunca tuvo una — y el inspector de ajustes, el inspector del SO generado mediante bake y la galería de plantillas de Primeros pasos abren todos Data Studio.

Páginas relacionadas