@g1cloud/entity-modeler-next 5.0.0-beta.4 → 5.0.0-beta.40

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/dist/adapter/diagramAdapter.d.ts +6 -0
  2. package/dist/adapter/healBackfill.d.ts +38 -0
  3. package/dist/agent/resolver.d.ts +140 -4
  4. package/dist/agent/symbolicOp.d.ts +9 -1
  5. package/dist/command/commands.d.ts +4 -3
  6. package/dist/command/op.d.ts +35 -1
  7. package/dist/command/opSync.d.ts +11 -1
  8. package/dist/command/stack.d.ts +11 -1
  9. package/dist/core/associationNav.d.ts +20 -0
  10. package/dist/core/attributeOrder.d.ts +9 -0
  11. package/dist/core/columnResolve.d.ts +22 -0
  12. package/dist/core/fkDerived.d.ts +37 -0
  13. package/dist/core/javaTypes.d.ts +5 -0
  14. package/dist/core/opSubject.d.ts +54 -0
  15. package/dist/core/projectActionLog.d.ts +7 -10
  16. package/dist/core/projectSeqDiff.d.ts +41 -0
  17. package/dist/core/propagation.d.ts +19 -2
  18. package/dist/core/quickFix.d.ts +9 -4
  19. package/dist/core/resolve.d.ts +0 -3
  20. package/dist/core/scaffoldJava.d.ts +30 -1
  21. package/dist/core/stereotype.d.ts +2 -0
  22. package/dist/core/types.d.ts +7 -0
  23. package/dist/core/validation.d.ts +1 -13
  24. package/dist/editor/controller.d.ts +34 -20
  25. package/dist/entity-modeler-next.css +1 -1
  26. package/dist/entity-modeler.js +14939 -13073
  27. package/dist/entity-modeler.umd.cjs +30 -26
  28. package/dist/i18n/ko.d.ts +46 -1
  29. package/dist/index.d.ts +28 -23
  30. package/dist/view/DiagramCanvas.vue.d.ts +4 -0
  31. package/dist/view/HistoryPanel.vue.d.ts +3 -0
  32. package/dist/view/diffOverlay.d.ts +14 -0
  33. package/dist/view/indexColumnRef.d.ts +5 -0
  34. package/dist/view/nodeInternals.d.ts +15 -0
  35. package/dist/view/opConflictNotice.d.ts +8 -6
  36. package/dist/view/swatches.d.ts +3 -2
  37. package/dist/view/useAttributeEditing.d.ts +82 -0
  38. package/package.json +6 -6
@@ -1,12 +1,17 @@
1
- import { JpaCascadeType, LogicalModel, ModelId } from './types';
1
+ import { IndexColumn, JpaCascadeType, LogicalModel, ModelId } from './types';
2
2
  import { ValidationIssue } from './validation';
3
- export interface QuickFixPlan {
3
+ export type QuickFixPlan = {
4
4
  ruleId: string;
5
- /** 현재는 association end의 cascade 재설정 한 종류(중복 제거). 확장 시 kind 분기 추가. */
6
5
  kind: 'setEndCascades';
7
6
  assocRef: ModelId;
8
7
  which: 'end1' | 'end2';
9
8
  cascades: JpaCascadeType[];
10
- }
9
+ } | {
10
+ ruleId: string;
11
+ kind: 'setIndexColumns';
12
+ entityRef: ModelId;
13
+ indexRef: ModelId;
14
+ columns: IndexColumn[];
15
+ };
11
16
  /** 이슈에 적용 가능한 결정적 quick-fix가 있으면 계획을, 없으면 null(순수·부수효과 없음). */
12
17
  export declare function resolveQuickFix(issue: ValidationIssue, model: LogicalModel): QuickFixPlan | null;
@@ -49,9 +49,6 @@ export interface ResolvedDiagram {
49
49
  notes: ResolvedNote[];
50
50
  /** 노트 → 대상 엔티티 연결선 (대상이 존재하는 것만; dangling은 prune) */
51
51
  noteConnections: ResolvedNoteConnection[];
52
- /** 레이아웃에만 있던(논리에 없는) 정리 대상 항목 */
53
- prunedEntityRefs: ModelId[];
54
- prunedAssociationRefs: ModelId[];
55
52
  }
56
53
  export interface AutoLayoutOptions {
57
54
  startX: number;
@@ -1,6 +1,17 @@
1
- import { LogicalModel, ModelId, SuperClassCatalog, EmbeddableCatalog } from './types';
1
+ import { Entity, LogicalModel, ModelId, SuperClassCatalog, EmbeddableCatalog } from './types';
2
2
  import { JavaTypeDef } from './javaTypes';
3
3
  export interface ScaffoldOptions {
4
+ /**
5
+ * **산출 불가 대상 자동 제외**(기본 `true`) — 엔티티명 미지정 / `@Id` 없는 JPA 엔티티는 파일을 만들지
6
+ * 않는다. 레거시 배치 선택 계층 패리티(`EntityJavaSrcGen.generateImplModel:105·108`이 각각
7
+ * `isBlank(entityName)`·`JPA_ENTITY && !hasIdField`를 `logger.warn + continue`로 스킵).
8
+ *
9
+ * ★레거시는 이 판정을 **선택 계층**(generateImplModel)에 두고 렌더러(EntityJavaFile)와 분리한다.
10
+ * lib은 두 역할이 `scaffoldEntityJava` 한 함수에 겹쳐 있어 옵션으로 seam을 만든다 — 모듈 산출
11
+ * (호스트 오라클)은 기본값을 쓰고, **렌더러로 직접 쓰는 경우**(단위 테스트·부분 렌더 프리뷰)는
12
+ * `false`로 꺼서 PK 없는 축약 모델도 렌더한다.
13
+ */
14
+ skipUngeneratable?: boolean;
4
15
  /** 저장값→소스 타입 역해소 카탈로그. 미주입 시 lib 내장 `JAVA_TYPES` 폴백(호스트 javaTypeCatalog 미러). */
5
16
  javaTypeCatalog?: readonly JavaTypeDef[];
6
17
  /** 임베더블 타입 해소용(EMBED_PREDEF 필드 타입·클래스명). 미주입 시 모델 type 폴백 + fillIn. */
@@ -59,4 +70,22 @@ export interface ScaffoldedEntity {
59
70
  * 대상 엔티티들을 JPA 자바 소스로 렌더한다. `logical`은 참조 폐포(FK 대상 등) 해소를 위해 전체를 받고,
60
71
  * `targetIds`가 실제 산출(파일 생성) 스코프다. 스코프 밖 엔티티는 읽기(폐포)에만 쓰이고 산출되지 않는다.
61
72
  */
73
+ /**
74
+ * 산출 대상 판정 — 레거시 배치 선택 계층(`EntityJavaSrcGen.generateImplModel:105·108`) 패리티.
75
+ *
76
+ * - 엔티티명 미지정: 방출하면 `undefined.java` / `public class undefined {`가 나간다(실측 module-order).
77
+ * - `@Id` 없는 JPA 엔티티: JPA는 식별자가 필수라 방출해도 부트스트랩 불가.
78
+ *
79
+ * 판정은 레거시 `hasIdField`→`countIdAttributes`(자기 속성 중 identifier, attrType 무관)와 동형.
80
+ * 레거시의 `countReferredIdAttributes` 보정분은 v2에선 식별 전파로 자식 attributes에 FK가
81
+ * `identifier=true`로 물질화되므로 여기에 이미 포함된다.
82
+ *
83
+ * ⚠️ 레거시는 abstractClass도 예외 없이 스킵한다(:108에 예외 조항 없음). lib `CHK-JPA-1`은 추상 베이스를
84
+ * 면제하므로 "모델은 정당한데 산출은 제외"되는 divergence가 이론상 가능하다 — 다만 abstract이면서 PK 없는
85
+ * `@Entity`는 `@MappedSuperclass` 없이 JPA 자체가 불가하고, 실 데이터(로컬 BNKR_SALES) PK 없는 JPA 엔티티
86
+ * 17건 중 abstract는 0건이라 레거시 시맨틱을 그대로 따른다.
87
+ *
88
+ * 모델 레벨 신호는 검증이 담당한다 — 엔티티명 빈값=`CHK-NAME-4`, PK 부재=`CHK-JPA-1`.
89
+ */
90
+ export declare function isGeneratable(entity: Entity): boolean;
62
91
  export declare function scaffoldEntityJava(logical: LogicalModel, targetIds: readonly ModelId[], opts?: ScaffoldOptions): ScaffoldedEntity[];
@@ -0,0 +1,2 @@
1
+ import { ClassStereotype } from './types';
2
+ export declare function stereotypeLabel(s: ClassStereotype): string;
@@ -321,6 +321,13 @@ export interface AssociationEnd {
321
321
  * 이 ref가 그것을 가리킨다(diagramAdapter.assocFromHydrated). 레이아웃 앵커는 layout.sourceColumnRef로 분리.
322
322
  */
323
323
  attributeRef?: ModelId;
324
+ /**
325
+ * inverse nav(RELATION_REF) 미실체화 시 마지막 nav 필드명 기억용. navigable=false면 nav 속성 자체는
326
+ * 삭제되어(불변식 "navigable=true ⟺ nav 속성 존재" 유지·코드젠 무영향) 저장된 이름이 없다 — 이 힌트가
327
+ * 사용자가 편집했던 이름을 보관해, 인스펙터 비활성 필드 표시 및 재활성화 시 기본명 대신 복원에 쓰인다.
328
+ * 실체화되면 속성 name이 SoT이므로 이 힌트는 정리(재-off 시 현재 name을 다시 캡처).
329
+ */
330
+ navFieldNameHint?: string;
324
331
  /**
325
332
  * 라운드트립 전용 — 레거시 EMBED 직렬화의 인라인 속성 원형(EMBED_REF/EMBED_OWN).
326
333
  * EMBED hydration은 load-only라 저장 시 소유자로 펼친 표시 속성을 버리고 이 원형을 verbatim 환원한다
@@ -1,4 +1,4 @@
1
- import { Attribute, DbColumn, EmbeddableCatalog, LogicalModel, ModelId, SuperClassCatalog } from './types';
1
+ import { EmbeddableCatalog, LogicalModel, ModelId, SuperClassCatalog } from './types';
2
2
  export declare const PHYSICAL_NAME_MAX_LENGTH = 63;
3
3
  /**
4
4
  * 물리명이 이식성 권장 한도를 초과하면 **초과 길이(문자 수)**, 아니면 null(비차단 — 호출부는 저장을
@@ -63,18 +63,6 @@ export interface ValidationContext {
63
63
  */
64
64
  superClassCatalog?: SuperClassCatalog;
65
65
  }
66
- /** 같은 키를 2회 이상 갖는 항목만 중복으로 — 중복 그룹의 모든 멤버를 반환(어느 쪽이든 보고 고치게). */
67
- /**
68
- * 임베드 서브컬럼의 **실효 물리명** — 물리명 override(비어있지 않은 physicalName)가 있으면 그 값, 없으면
69
- * 상속 기본값을 해석한다. EMBED_PREDEF·EMBED_OWN의 빈 슬롯은 "미매핑"이 아니라 카탈로그/임베더블 source의
70
- * 기본 컬럼명을 상속하므로(JPA @Embedded는 @AttributeOverride 부재 시 임베더블 선언 컬럼명 사용), 컬럼 충돌
71
- * 판정은 raw '' 가 아닌 이 실효 물리명으로 해야 한다. 특히 한 테이블에 같은 임베더블(예: Money)이 여러 번
72
- * 쓰이고 서브컬럼을 비워두면 전부 같은 기본명으로 상속돼 실제 컬럼 충돌이 난다.
73
- * - EMBED_PREDEF: 카탈로그 fields[index].physicalName (ctx 미주입이면 해석 불가 → '' 로 graceful degrade).
74
- * - EMBED_OWN: 임베더블 엔터티 source 컬럼[index]의 physicalName(선언순 평탄화 = flattenEmbeddableColumns 동형).
75
- * - NORMAL 등 그 외: raw physicalName 그대로(빈 값은 '' → 충돌 판정 제외).
76
- */
77
- export declare function resolveColumnPhysicalName(attr: Attribute, col: DbColumn, index: number, model: LogicalModel, ctx?: Pick<ValidationContext, 'embeddableCatalog'>): string;
78
66
  /**
79
67
  * 설계 품질 검증 — 논리 모델(+선택 컨텍스트)을 받아 이슈 목록을 돌려준다.
80
68
  * 순수 함수. 호출부가 심각도/차단정책/표시시점을 해석한다(예: 빈 이름 info는 저장 시점에만 표시).
@@ -11,11 +11,6 @@ import { ValidationIssue } from '../core/validation';
11
11
  import { UiLocale, Translator } from '../i18n';
12
12
  import { AssociationEnd, Attribute, DisplayMode, EmbeddableCatalog, Entity, EntityIndex, Geo, GroupCodeCatalog, LangCode, LogicalGroup, ModelId, Multiplicity, Operation, Point, PredefinedCustomTypeCatalog, SuperClassCatalog } from '../core/types';
13
13
  import * as cmd from '../command/commands';
14
- /**
15
- * 관계 파생 FK 직접 삭제 시도 시의 안내 — 뷰 tooltip(어포던스)과 차단 시 토스트(피드백)가 공유한다.
16
- * FK는 관계가 소유·관리하므로 컬럼을 직접 지우는 대신 연관관계선을 삭제해야 한다(Option B).
17
- */
18
- export declare const FK_MANAGED_DELETE_MESSAGE = "\uC678\uB798\uD0A4\uB294 \uC5F0\uAD00\uAD00\uACC4\uC5D0\uC11C \uD30C\uC0DD\uB429\uB2C8\uB2E4. \uC0AD\uC81C\uD558\uB824\uBA74 \uC5F0\uAD00\uAD00\uACC4\uC120\uC744 \uC120\uD0DD\uD574 \uC0AD\uC81C\uD558\uC138\uC694.";
19
14
  /** 엔티티 내부 속성을 가리키는 주소 원자 — 선택·컨텍스트·재정렬·연결 등 속성 단위 기능의 공통 참조점. */
20
15
  export type AttrRef = {
21
16
  entityId: ModelId;
@@ -219,7 +214,12 @@ export interface EditorController {
219
214
  undo(): void;
220
215
  redo(): void;
221
216
  markSaved(): void;
222
- addEntity(name?: string, location?: Point): ModelId;
217
+ /**
218
+ * add류 intent 공통 반환 계약: 성공 시 생성된 ModelId, 실패(조회 모드·충돌 프리즈·잠금·가드 차단) 시
219
+ * null. 거짓 성공 id를 돌려주면 뷰가 존재하지 않는 대상을 select(빈 폼)하므로, 소비처는 null 가드 후
220
+ * 후속 동작(자동 선택 등)을 수행해야 한다.
221
+ */
222
+ addEntity(name?: string, location?: Point): ModelId | null;
223
223
  renameEntity(id: ModelId, name: string): void;
224
224
  updateEntity(id: ModelId, patch: Partial<Entity>): void;
225
225
  moveEntity(id: ModelId, location: Point): void;
@@ -237,6 +237,11 @@ export interface EditorController {
237
237
  setEntityLocked(id: ModelId, locked: boolean): void;
238
238
  /** 엔티티 잠금 여부 조회 (레이아웃) */
239
239
  isEntityLocked(id: ModelId): boolean;
240
+ /**
241
+ * 연관 잠금 여부 조회 — 양 끝 엔티티 중 한쪽이라도 잠겼으면 true(내부 게이트 isAssocLockedFn와
242
+ * 동일 의미론 단일 출처). 뷰가 관계 편집 어포던스(삭제 메뉴·인스펙터 폼)를 억제할 때 사용.
243
+ */
244
+ isAssociationLocked(assocId: ModelId): boolean;
240
245
  /** 활성 다이어그램 전체 엔티티 접기/펼치기 — 사전 상태 캡처 단일 커맨드(1 undo 스텝) */
241
246
  collapseAll(): void;
242
247
  expandAll(): void;
@@ -259,10 +264,10 @@ export interface EditorController {
259
264
  setGroupLocked(groupId: ModelId, locked: boolean): void;
260
265
  /** 그룹 잠금 여부 조회 (레이아웃) */
261
266
  isGroupLocked(groupId: ModelId): boolean;
262
- /** 선택 엔티티들로 새 그룹 생성 (멤버 bbox에 박스 배치) */
267
+ /** 선택 엔티티들로 새 그룹 생성 (멤버 bbox에 박스 배치) — 빈 입력·조회 모드 시 null */
263
268
  createGroup(entityIds: ModelId[], name?: string): ModelId | null;
264
269
  /** 빈 그룹 박스 생성 (이후 드래그로 엔티티 편입) */
265
- addEmptyGroup(location: Point, name?: string): ModelId;
270
+ addEmptyGroup(location: Point, name?: string): ModelId | null;
266
271
  removeGroup(groupId: ModelId): void;
267
272
  /** 엔티티 이동 + 컨테인먼트에 따른 그룹 편입/해제를 한 명령으로 */
268
273
  dropEntity(entityId: ModelId, location: Point, targetGroupId: ModelId | null): void;
@@ -338,16 +343,16 @@ export interface EditorController {
338
343
  * dbAttr 슬롯은 레거시 `initAttributeDatabaseAttribute` 동형으로 **빈 골격**(physicalName/dataType
339
344
  * 미설정)만 시드하고, 표시·저장 시 카탈로그 메타모델로 폴백한다(`SVG:976` 대응). 참조가 아니므로
340
345
  * association은 만들지 않는다(entity.attributes 직접 보유 — 레거시 NORMAL 부류). 카탈로그에 없거나
341
- * 대상 엔티티가 없으면 no-op(undefined).
346
+ * 대상 엔티티가 없으면 no-op(null).
342
347
  */
343
- addPredefinedEmbed(entityId: ModelId, embeddableType: string): ModelId | undefined;
344
- addAttribute(entityId: ModelId, partial?: Partial<Attribute>): ModelId;
348
+ addPredefinedEmbed(entityId: ModelId, embeddableType: string): ModelId | null;
349
+ addAttribute(entityId: ModelId, partial?: Partial<Attribute>): ModelId | null;
345
350
  /**
346
351
  * 시각 구획 행(DIVIDER) 추가 — 거대 엔티티에서 속성 묶음을 끊는 구분선. DB 컬럼·타입·식별자 없이
347
352
  * 말미에 추가되며(이후 grip 드래그로 위치 조정), `name`은 선택적 섹션 라벨. divider 기본값을 단일
348
353
  * 출처로 보장하려고 addAttribute에 위임한다.
349
354
  */
350
- addDivider(entityId: ModelId): ModelId;
355
+ addDivider(entityId: ModelId): ModelId | null;
351
356
  updateAttribute(entityId: ModelId, attributeId: ModelId, patch: Partial<Attribute>): void;
352
357
  /**
353
358
  * ⑤ 파생 타입 결합 — 속성 groupCode를 설정/해제하며 type을 동반 조정한다(레거시 정합).
@@ -378,21 +383,21 @@ export interface EditorController {
378
383
  updateIndex(entityId: ModelId, indexId: ModelId, patch: Partial<EntityIndex>): void;
379
384
  removeIndex(entityId: ModelId, indexId: ModelId): void;
380
385
  /** 메서드(operation) 추가 — 신규는 visibility=PACKAGE, order=말미. 생성된 modelId 반환. */
381
- addOperation(entityId: ModelId, partial?: Partial<Operation>): ModelId;
386
+ addOperation(entityId: ModelId, partial?: Partial<Operation>): ModelId | null;
382
387
  updateOperation(entityId: ModelId, operationId: ModelId, patch: Partial<Operation>): void;
383
388
  removeOperation(entityId: ModelId, operationId: ModelId): void;
384
389
  /** 메서드 행 재정렬 — toIndex = 대상 제거 후 배열 기준 삽입 위치(단일 명령, undo 원자). */
385
390
  reorderOperations(entityId: ModelId, operationIds: ModelId[], toIndex: number): void;
386
391
  /** 메서드 강조 색 토큰 지정 (null이면 해제). */
387
392
  setOperationSwatch(entityId: ModelId, operationId: ModelId, token: string | null): void;
388
- addAssociation(sourceEntityId: ModelId, targetEntityId: ModelId, sourceColumnRef?: ModelId, targetColumnRef?: ModelId): ModelId;
393
+ addAssociation(sourceEntityId: ModelId, targetEntityId: ModelId, sourceColumnRef?: ModelId, targetColumnRef?: ModelId): ModelId | null;
389
394
  /**
390
395
  * 임베드 생성 — 소유자에 EMBED_OWN 표시 속성을 물질화(임베더블 source 컬럼 복사 + `embedded` 마커)하고
391
396
  * EMBED association(owner EXACTLY_ONE / embeddable EXACTLY_ONE+composition)을 한 composite로 추가한다.
392
397
  * 가드(결정 2 단일): 대상이 JPA_EMBEDDABLE이 아니거나 소유자가 이미 그 임베더블을 임베드했으면 no-op.
393
- * 반환은 생성된 association id, 가드 차단 시 undefined.
398
+ * 반환은 생성된 association id, 가드 차단 시 null.
394
399
  */
395
- addEmbedAssociation(ownerEntityId: ModelId, embeddableEntityId: ModelId): ModelId | undefined;
400
+ addEmbedAssociation(ownerEntityId: ModelId, embeddableEntityId: ModelId): ModelId | null;
396
401
  /**
397
402
  * 임베드 카디널리티 설정 — 임베더블 end multiplicity를 지정 값으로 바꾼다. 컬렉션(`@ElementCollection`)
398
403
  * 여부는 이 multiplicity에서 파생되는 값(권위=multiplicity, 결정 3): `*_MORE`(0..N / 1..N)면 컬렉션,
@@ -415,7 +420,7 @@ export interface EditorController {
415
420
  addWaypoint(assocId: ModelId, index: number, point: Point): void;
416
421
  removeWaypoint(assocId: ModelId, index: number): void;
417
422
  clearWaypoints(assocId: ModelId): void;
418
- addNote(memo?: string, location?: Point): ModelId;
423
+ addNote(memo?: string, location?: Point): ModelId | null;
419
424
  removeNote(noteId: ModelId): void;
420
425
  moveNote(noteId: ModelId, location: Point): void;
421
426
  resizeNote(noteId: ModelId, size: {
@@ -491,9 +496,11 @@ export declare function createEditorController(initial?: EditorState, options?:
491
496
  /** 시점 복원 transport(`restoreEntityDiagram` 라우트). 주입 + op-mode + editable 시 감사 패널 '복원' 활성. */
492
497
  restoreTransport?: RestoreTransport;
493
498
  /**
494
- * op 전송 실패(4xx/5xx/네트워크로 transport가 throw) 통지 — 진단용(opt-in). 하드 프리즈는 별도로
495
- * 발생하며(opConflict.kind='missing'), 콜백은 소실될 에러를 호스트가 로깅/리포팅하도록 넘긴다.
496
- * 미주입이어도 어댑터가 콘솔에 남긴다(정상 rev/layout 충돌은 이 경로가 아님 — throw만).
499
+ * op 전송 실패(4xx/5xx/네트워크로 transport가 throw) 통지 — 진단용(opt-in). 콜백은 소실될 원
500
+ * 에러를 호스트가 로깅/리포팅하도록 넘긴다. 미주입이어도 어댑터가 콘솔에 남긴다(정상 rev 충돌은
501
+ * 이 경로가 아님 — throw만).
502
+ * ⚠️ **발화 ≠ 프리즈**: 어댑터가 제한 재시도하므로 회복되는 시도도 통지된다(시도마다 1회).
503
+ * 하드 프리즈는 재시도 소진 후에만 발생하며 `opConflict.kind='missing'`으로 별도 노출된다.
497
504
  */
498
505
  onOpError?: (err: unknown) => void;
499
506
  /**
@@ -512,4 +519,11 @@ export declare function createEditorController(initial?: EditorState, options?:
512
519
  largeEntityThreshold?: number;
513
520
  /** CHK-DSN-3 초기 활성 여부 — 기본 false. 런타임은 flagEntitiesWithoutRelations로 사용자가 토글. */
514
521
  flagEntitiesWithoutRelations?: boolean;
522
+ /**
523
+ * 검증(validateModel) 재실행 디바운스 창(ms, 기본 250). validateModel은 전체 모델 스캔이라 키 입력마다
524
+ * 동기 재실행하면 대형 다이어그램에서 입력 지연의 주요 축(VE-1) — 기본은 변경 신호(revision) 기반
525
+ * 트레일링 디바운스. `0` 이하 주입 시 현행 동기 computed 그대로(변경 직후 즉시 일관성이 필요한
526
+ * 테스트·소비자용 escape hatch).
527
+ */
528
+ validationDebounceMs?: number;
515
529
  }): EditorController;