@wipco/sdui-editor 0.50.6 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +208 -53
- package/dist/index.js +3885 -3752
- package/package.json +3 -3
package/dist/index.d.ts
CHANGED
|
@@ -182,7 +182,15 @@ interface SpecStore {
|
|
|
182
182
|
/** 이력 조회. `capabilities.history`가 false면 구현이 없다. */
|
|
183
183
|
history?(id: string): Promise<PageRevision[]>;
|
|
184
184
|
}
|
|
185
|
-
/**
|
|
185
|
+
/**
|
|
186
|
+
* 대소문자만 다른 id가 이미 있을 때 — 같은 대상을 가리켜 기존 페이지를 파괴한다.
|
|
187
|
+
*
|
|
188
|
+
* 판정은 상류의 몫이다: 편집기는 목록 스냅숏밖에 없어 경합 없이 알 수 없다.
|
|
189
|
+
* 번들 REST 어댑터는 저장 응답 409의 **본문이 id 충돌을 가리킬 때**(`existingId`),
|
|
190
|
+
* 또는 생성 전용 저장의 409일 때 이 예외로 올린다(rest-store.ts) — 409 자체는
|
|
191
|
+
* If-Match 낙관적 잠금 실패에도 쓰이는 코드라 상태 코드만으로는 가를 수 없다.
|
|
192
|
+
* 커스텀 SpecStore도 같은 상황이면 이 형으로 던져야 편집기가 문구를 고를 수 있다.
|
|
193
|
+
*/
|
|
186
194
|
declare class PageIdConflictError extends Error {
|
|
187
195
|
readonly existingId: string;
|
|
188
196
|
constructor(existingId: string);
|
|
@@ -239,8 +247,18 @@ declare class PageIdRejectedError extends Error {
|
|
|
239
247
|
* 경로 탈출을 원천 차단한다. `{name}` 은 sdui-server 0.3.0 의 동적 상세 라우트
|
|
240
248
|
* 문법이다 — 이 패턴이 몰라서 편집기 목록·편집 진입에서 패턴 스펙이 통째로
|
|
241
249
|
* 사라졌던 적이 있다(실측: pages-index 에는 오는데 목록 필터가 걸러냄).
|
|
250
|
+
*
|
|
251
|
+
* 같은 규칙의 정규식 표현 — 공개 계약이라 남겨 둔다. **판정의 정본은
|
|
252
|
+
* {@link isValidPageId}가 위임하는 `@wipco/sdui`의 `isValidSpecId`다**(서버
|
|
253
|
+
* spec.rs 의 `valid_page_id`와 테스트로 짝을 맞춘 쪽). 규칙이 바뀌면 저쪽이
|
|
254
|
+
* 먼저 바뀌고 이 정규식은 따라간다.
|
|
242
255
|
*/
|
|
243
256
|
declare const PAGE_ID_PATTERN: RegExp;
|
|
257
|
+
/**
|
|
258
|
+
* id 문법 판정은 `isValidSpecId`에 위임한다 — 편집기가 정규식 사본으로 판정하면
|
|
259
|
+
* 서버와 어긋난 채 조용히 굴러간다(서버는 400, 편집기는 통과). 200자 상한만
|
|
260
|
+
* 편집기 쪽에서 덧댄다: 목록·URL이 다루는 길이를 묶는 편집기 자체 규칙이다.
|
|
261
|
+
*/
|
|
244
262
|
declare function isValidPageId(id: string): boolean;
|
|
245
263
|
/**
|
|
246
264
|
* 다이얼로그 조각 스펙의 id 접두.
|
|
@@ -254,6 +272,21 @@ declare function isValidPageId(id: string): boolean;
|
|
|
254
272
|
declare const DIALOG_PREFIX = "dialogs/";
|
|
255
273
|
/** 이 id가 다이얼로그 조각 관례를 따르는가 — {@link DIALOG_PREFIX} 접두 검사. */
|
|
256
274
|
declare function isDialogSpecId(id: string): boolean;
|
|
275
|
+
/**
|
|
276
|
+
* 화면 일부를 떼어 둔 조각 스펙의 id 접두 — `dialogs/`에 이은 두 번째 조각 이름공간.
|
|
277
|
+
*
|
|
278
|
+
* 0.48.0의 중첩 반복에서 생겼다: 바깥 `$index`를 안쪽으로 나르려면 그 자리가
|
|
279
|
+
* Fragment여야 해서(렌더러의 `$index`는 가장 안쪽 행을 읽는다) 다이얼로그가 아닌
|
|
280
|
+
* 조각이 필요해졌다. 소비 프로젝트(ERP)의 라우터는 둘 다 "주소창으로 열리면 안 되는
|
|
281
|
+
* 조각"으로 판정한다 — 편집기 목록도 같은 기준으로 갈라야 화면 탭에 조각이 섞이지 않는다.
|
|
282
|
+
*/
|
|
283
|
+
declare const FRAGMENT_PREFIX = "fragments/";
|
|
284
|
+
/**
|
|
285
|
+
* 이 id가 조각(단독 화면이 아니라 Fragment가 끼워 쓰는 재료) 관례를 따르는가.
|
|
286
|
+
* 다이얼로그 조각({@link DIALOG_PREFIX})과 화면 조각({@link FRAGMENT_PREFIX}) 둘 다다.
|
|
287
|
+
* 다이얼로그 **전용** 동작(미리보기 열림 시딩 등)은 {@link isDialogSpecId}를 그대로 쓴다.
|
|
288
|
+
*/
|
|
289
|
+
declare function isFragmentSpecId(id: string): boolean;
|
|
257
290
|
/** 스펙에서 표시용 제목 뽑기 — 모든 어댑터가 같은 규칙을 써야 목록이 갈리지 않는다 */
|
|
258
291
|
declare function titleOf(spec: unknown): string | null;
|
|
259
292
|
|
|
@@ -279,15 +312,20 @@ declare function titleOf(spec: unknown): string | null;
|
|
|
279
312
|
* {@link RestStoreConfig.headers}로 실어 주고(Bearer 등), 401은 그대로
|
|
280
313
|
* {@link StoreUnauthorizedError}로 올려 소비 프로젝트의 로그인 흐름에 넘긴다.
|
|
281
314
|
*
|
|
282
|
-
* ## ERP 실계약
|
|
283
|
-
* | 동작 |
|
|
315
|
+
* ## 기본 계약 = ERP 실계약
|
|
316
|
+
* | 동작 | 기본 경로 | 비고 |
|
|
284
317
|
* | --- | --- | --- |
|
|
285
318
|
* | 목록 | `GET /ui/pages-index` | 제목·수정자·수정시각·etag. 권한 `setting.update` 필요 |
|
|
286
319
|
* | 목록(대체) | `GET /ui/manifest` | `{count, specs:{id:etag}}` — **제목이 없다** |
|
|
287
320
|
* | 읽기 | `GET /ui/pages/{id}` | 스펙 JSON + `ETag`, `If-None-Match` → 304 |
|
|
288
|
-
* | 쓰기 | `PUT /ui/pages/{id}` | `{spec, title?}`, 권한 `setting.update` |
|
|
321
|
+
* | 쓰기 | `PUT /ui/pages/{id}` | `{spec, title?}`, `If-Match` 어긋나면 409, 권한 `setting.update` |
|
|
289
322
|
* | 삭제 | — | **없다.** `DELETE`는 405다 |
|
|
290
323
|
*
|
|
324
|
+
* 경로·안내 문구는 {@link RestStoreConfig}로 갈아끼울 수 있다. 기본값이 ERP 값인
|
|
325
|
+
* 이유는 하나다 — 지금 이 어댑터를 쓰는 실소비자가 ERP뿐이고, 기본값을 중립으로
|
|
326
|
+
* 바꾸면 그 소비자의 화면 문구가 소리 없이 바뀐다. ERP가 아닌 프로젝트는 자기
|
|
327
|
+
* 경로와 문구를 주입하면 남의 프로젝트 이름이 화면에 나가지 않는다.
|
|
328
|
+
*
|
|
291
329
|
* ## 목록의 제목 간극
|
|
292
330
|
* `/ui/manifest`에는 제목이 없지만 ERP에는 편집기 전용 목록 `GET /ui/pages-index`가
|
|
293
331
|
* 이미 있다(id·title·etag·updatedAt·updatedBy). 매니페스트는 모든 클라이언트가 진입할 때
|
|
@@ -303,10 +341,21 @@ declare function titleOf(spec: unknown): string | null;
|
|
|
303
341
|
* - **`_` 접두 id(`_nav`)**: `GET/PUT /ui/pages/_nav`는 404다(내비는 `/ui/nav-spec`이
|
|
304
342
|
* 따로 있다). 여기서는 왕복 전에 막고 이유를 밝힌다 — 그냥 흘려보내면 사용자는
|
|
305
343
|
* "페이지 없음"만 보고 왜인지 알 수 없다.
|
|
306
|
-
* - **원자적 낙관적 잠금**:
|
|
307
|
-
*
|
|
344
|
+
* - **원자적 낙관적 잠금**: 저장에는 `If-Match`를 실어 보낸다 — sdui-server처럼 이
|
|
345
|
+
* 헤더를 검사하는 상류에서는 선검사 뒤의 경합까지 409로 막힌다. 다만 `If-Match`를
|
|
346
|
+
* 읽지 않는 구버전 서버(엉뚱한 ETag를 보내도 200)에 붙을 수 있고, 200 응답만으로는
|
|
347
|
+
* 서버가 검사했는지 알 수 없다. 그래서 읽기→비교 선검사를 함께 유지하고
|
|
308
348
|
* `capabilities.atomicLocking = false`로 알린다.
|
|
309
349
|
*/
|
|
350
|
+
/** 스펙 저장소 경로 — 소비 프로젝트의 라우트가 `/ui/*`가 아닐 때 갈아끼운다. */
|
|
351
|
+
interface RestStorePaths {
|
|
352
|
+
/** 편집기용 목록. 기본 `/ui/pages-index` — 404면 {@link manifest}로 물러난다. */
|
|
353
|
+
index?: string;
|
|
354
|
+
/** 목록 폴백(제목 없음). 기본 `/ui/manifest`. */
|
|
355
|
+
manifest?: string;
|
|
356
|
+
/** 단건 읽기(GET)·쓰기(PUT). 기본 `` (id) => `/ui/pages/${id}` ``. */
|
|
357
|
+
page?: (id: string) => string;
|
|
358
|
+
}
|
|
310
359
|
interface RestStoreConfig {
|
|
311
360
|
/**
|
|
312
361
|
* 소비 프로젝트 백엔드의 베이스 URL. 기본값은 빈 문자열 = **같은 오리진**이다 —
|
|
@@ -326,12 +375,35 @@ interface RestStoreConfig {
|
|
|
326
375
|
timeoutMs?: number;
|
|
327
376
|
/** 401을 받았을 때 — 소비 프로젝트가 자기 로그인 흐름을 태울 자리 */
|
|
328
377
|
onUnauthorized?: () => void;
|
|
378
|
+
/** 저장소 HTTP 경로. 기본값은 sdui-server(ERP)의 `/ui/*` 배치다. */
|
|
379
|
+
paths?: RestStorePaths;
|
|
380
|
+
/**
|
|
381
|
+
* 목록 위 배너에 나가는 제약 문구. 기본값은 ERP 서버 형편을 설명한다 —
|
|
382
|
+
* ERP가 아닌 소비 프로젝트는 자기 서버의 제약(또는 빈 배열)으로 바꿔 단다.
|
|
383
|
+
*/
|
|
384
|
+
limitations?: string[];
|
|
385
|
+
/**
|
|
386
|
+
* 403인데 응답 본문에 메시지가 없을 때의 폴백 문구. 본문에 `message`/`error`가
|
|
387
|
+
* 있으면 **서버가 준 그 문장이 우선**이다 — 권한 체계는 소비 프로젝트마다 달라서
|
|
388
|
+
* 편집기가 권한 이름을 지어내면 남의 프로젝트에서 거짓 안내가 된다.
|
|
389
|
+
*/
|
|
390
|
+
forbiddenHint?: string;
|
|
391
|
+
/**
|
|
392
|
+
* `_` 접두 id를 거부할 때의 안내 문구. 접두 규칙 자체는 sdui-server의
|
|
393
|
+
* `servable_page_id` 계약(내부 데이터는 페이지 경로로 안 나온다)이라 끄지 않는다.
|
|
394
|
+
*/
|
|
395
|
+
internalIdHint?: string;
|
|
329
396
|
}
|
|
330
397
|
declare class RestSpecStore implements SpecStore {
|
|
331
398
|
readonly capabilities: StoreCapabilities;
|
|
332
399
|
private readonly baseUrl;
|
|
333
400
|
private readonly timeoutMs;
|
|
334
401
|
private readonly config;
|
|
402
|
+
private readonly indexPath;
|
|
403
|
+
private readonly manifestPath;
|
|
404
|
+
private readonly pagePath;
|
|
405
|
+
private readonly forbiddenHint;
|
|
406
|
+
private readonly internalIdHint;
|
|
335
407
|
constructor(config?: RestStoreConfig);
|
|
336
408
|
private request;
|
|
337
409
|
/** 상류 오류를 사람이 읽을 수 있는 문장으로 — 상류가 준 메시지가 있으면 그대로 싣는다 */
|
|
@@ -376,7 +448,7 @@ interface SduiEditorProps {
|
|
|
376
448
|
/**
|
|
377
449
|
* 스펙을 그릴 때 쓸 컴포넌트 어휘. **소비 프로젝트가 자기 것을 넣는 자리다.**
|
|
378
450
|
*
|
|
379
|
-
* 생략하면 라이브러리가 아는
|
|
451
|
+
* 생략하면 라이브러리가 아는 84종(기본 42 + DS 6 + 표시 위젯 36)으로 그린다.
|
|
380
452
|
* 위젯은 지연 로드라 안 쓰면 내려오지 않는다(`editorRegistry` 주석 참고).
|
|
381
453
|
*
|
|
382
454
|
* 소비 프로젝트가 `createRegistry`로 어휘를 넓혔다면 **그 레지스트리를 그대로 넘긴다.**
|
|
@@ -391,7 +463,7 @@ interface SduiEditorProps {
|
|
|
391
463
|
*/
|
|
392
464
|
registry?: SduiRegistry;
|
|
393
465
|
/**
|
|
394
|
-
* 팔레트·속성 패널이 볼 메타데이터. 생략하면 라이브러리 어휘
|
|
466
|
+
* 팔레트·속성 패널이 볼 메타데이터. 생략하면 라이브러리 어휘 89종.
|
|
395
467
|
*
|
|
396
468
|
* `registry`를 넓혔다면 여기도 같이 넓혀야 한다 — 레지스트리는 "그릴 수 있는 이름",
|
|
397
469
|
* 이쪽은 "빌더가 프롭을 그릴 줄 아는 이름"이라 둘은 따로 논다.
|
|
@@ -400,7 +472,8 @@ interface SduiEditorProps {
|
|
|
400
472
|
catalog?: Record<string, SduiComponentMeta>;
|
|
401
473
|
/**
|
|
402
474
|
* 뷰어에서 스펙의 `navigate` 액션이 나왔을 때. 주지 않으면 뷰어 안에서 그 페이지를
|
|
403
|
-
* 열어 본다
|
|
475
|
+
* 열어 본다 — 쿼리·해시는 페이지 id가 아니라 떼어 내고, 절대 URL은 무시한다
|
|
476
|
+
* (편집기를 마운트한 화면을 날려 버리지 않기 위해).
|
|
404
477
|
*/
|
|
405
478
|
onNavigate?: (to: string) => void;
|
|
406
479
|
/**
|
|
@@ -458,6 +531,19 @@ interface SduiEditorProps {
|
|
|
458
531
|
*/
|
|
459
532
|
declare function SduiEditor({ store, view, onViewChange, defaultView, chrome, registry, catalog, onNavigate, viewerAdapter, can, previewFetch, previewEntitySearch, className, }: SduiEditorProps): React.JSX.Element;
|
|
460
533
|
|
|
534
|
+
/**
|
|
535
|
+
* 주소 → 편집기 화면. `base`는 편집기가 마운트된 경로다(예: `/_editor`).
|
|
536
|
+
*
|
|
537
|
+
* pathname이 base 밖이거나 알 수 없는 꼴이면 목록으로 떨어진다 — 제어 모드에서
|
|
538
|
+
* "이상한 주소"의 답은 오류 화면이 아니라 안전한 시작점이다.
|
|
539
|
+
*/
|
|
540
|
+
declare function viewFromPath(base: string, pathname: string): SduiEditorView;
|
|
541
|
+
/**
|
|
542
|
+
* 편집기 화면 → 주소. {@link viewFromPath}의 역함수여야 뒤로 가기가 성립한다 —
|
|
543
|
+
* 그래서 인코딩도 같은 결로 세그먼트별이다(구분자 `/`는 살리고 세그먼트 안만 인코딩).
|
|
544
|
+
*/
|
|
545
|
+
declare function pathFromView(base: string, view: SduiEditorView): string;
|
|
546
|
+
|
|
461
547
|
interface PageListViewProps {
|
|
462
548
|
store: SpecStore;
|
|
463
549
|
onEdit: (id: string) => void;
|
|
@@ -473,14 +559,14 @@ interface EditorViewProps {
|
|
|
473
559
|
/**
|
|
474
560
|
* 이 화면(빌더 캔버스·JSON 미리보기)이 스펙을 그릴 때 쓸 레지스트리.
|
|
475
561
|
*
|
|
476
|
-
* 생략하면 {@link editorRegistry} — 라이브러리가 아는 어휘
|
|
562
|
+
* 생략하면 {@link editorRegistry} — 라이브러리가 아는 어휘 84종이다. 소비 앱이
|
|
477
563
|
* `createRegistry`로 자기 컴포넌트를 얹었다면 **그것을 그대로 넘겨야** 편집 화면과
|
|
478
564
|
* 운영 화면이 같은 그림이 된다. 두 렌더러(빌더·미리보기)에 같은 값이 간다 —
|
|
479
565
|
* 한쪽만 넓으면 모드를 바꿀 때 화면이 달라진다.
|
|
480
566
|
*/
|
|
481
567
|
registry?: SduiRegistry;
|
|
482
568
|
/**
|
|
483
|
-
* 팔레트·속성 패널이 볼 메타데이터. 생략하면 라이브러리 어휘
|
|
569
|
+
* 팔레트·속성 패널이 볼 메타데이터. 생략하면 라이브러리 어휘 89종
|
|
484
570
|
* (`@wipco/sdui/meta`의 `allComponentMeta`).
|
|
485
571
|
*
|
|
486
572
|
* `registry`에 앱 고유 컴포넌트를 얹었다면 그 메타데이터도 여기 합쳐 넘겨야
|
|
@@ -520,8 +606,8 @@ interface ViewerViewProps {
|
|
|
520
606
|
* 렌더링 어휘. **캔버스와 같은 값을 받아야 한다** — 편집 중에는 그려지던 위젯이
|
|
521
607
|
* "보기"로 넘어가면 사라지는 것이 사용자에게는 저장이 깨진 것으로 보인다.
|
|
522
608
|
*
|
|
523
|
-
* 생략하면 {@link editorRegistry}
|
|
524
|
-
* 예전에는 여기가 비면 `SduiRenderer`의 기본값(`defaultRegistry`
|
|
609
|
+
* 생략하면 {@link editorRegistry} 84종 — 캔버스의 기본값과 같은 값이다.
|
|
610
|
+
* 예전에는 여기가 비면 `SduiRenderer`의 기본값(`defaultRegistry`)으로 떨어졌다.
|
|
525
611
|
* `SduiEditor` 셸이 `registry ?? editorRegistry`로 때워 두었지만 `ViewerView`는
|
|
526
612
|
* 개별 export라, **자기 셸을 짜서 단독 마운트한 소비자에게는 그 때움이 안 닿았다.**
|
|
527
613
|
* 때우는 자리를 셸에서 프롭 기본값으로 내린 이유가 그것이다.
|
|
@@ -599,7 +685,24 @@ declare const TEMPLATES: PageTemplate[];
|
|
|
599
685
|
type GradedIssue = SpecIssue & {
|
|
600
686
|
severity: 'error' | 'warning';
|
|
601
687
|
};
|
|
602
|
-
|
|
688
|
+
interface GradeIssuesOptions {
|
|
689
|
+
/**
|
|
690
|
+
* 대조할 컴포넌트 어휘. 생략하면 기본 레지스트리(defaultRegistry) — 편집 화면은
|
|
691
|
+
* 자기가 실제로 그리는 레지스트리의 키 집합을 넘겨야 "그려지는데 경고가 뜨는"
|
|
692
|
+
* 어긋남이 없다.
|
|
693
|
+
*/
|
|
694
|
+
known?: Set<string>;
|
|
695
|
+
/**
|
|
696
|
+
* 컴포넌트 → 아는 슬롯 이름들(모르면 null = 검사 안 함). 검증기의 슬롯 이름 검사는
|
|
697
|
+
* 이 표가 있어야만 돈다 — 실측 사고(`Show`에 `slots.fallback`을 달아 UI가 조용히
|
|
698
|
+
* 사라졌는데 검증 통과)가 이 검사의 존재 이유다. `@wipco/sdui/meta`의
|
|
699
|
+
* `metaSlotNames`가 곧바로 쓸 수 있는 구현이다.
|
|
700
|
+
* (validate.ts의 `SlotNamesOf`와 같은 형 — 그 타입이 패키지 루트로 아직 안 나와
|
|
701
|
+
* 구조적으로 적는다.)
|
|
702
|
+
*/
|
|
703
|
+
slotNamesOf?: (component: string) => Set<string> | null;
|
|
704
|
+
}
|
|
705
|
+
declare function gradeIssues(spec: unknown, options?: GradeIssuesOptions): GradedIssue[];
|
|
603
706
|
|
|
604
707
|
/**
|
|
605
708
|
* 미리보기 시딩 — **순수 모듈**(DOM·React 없음, node:test로 그대로 검증된다).
|
|
@@ -847,6 +950,12 @@ interface DropTarget {
|
|
|
847
950
|
/** 삽입 위치. 슬롯 길이를 넘으면 끝에 붙는다(음수는 0). */
|
|
848
951
|
readonly index: number;
|
|
849
952
|
}
|
|
953
|
+
/**
|
|
954
|
+
* 같은 자리를 가리키는가 — 삽입 지점·드롭 힌트는 값이라 참조 비교로는 헛된 갱신이 난다.
|
|
955
|
+
* 비교가 여기(타입이 사는 곳) 한 벌인 이유: 트리와 리듀서가 각자 사본을 들면
|
|
956
|
+
* 한쪽만 고쳐질 때 두 화면의 "같은 자리" 판정이 어긋난다.
|
|
957
|
+
*/
|
|
958
|
+
declare function sameDropTarget(a: DropTarget | null, b: DropTarget | null): boolean;
|
|
850
959
|
interface BuilderText {
|
|
851
960
|
readonly kind: 'text';
|
|
852
961
|
readonly id: NodeId;
|
|
@@ -1018,7 +1127,7 @@ interface DropDomContext {
|
|
|
1018
1127
|
* ## 화이트리스트를 쓰지 않는 이유 (실측)
|
|
1019
1128
|
*
|
|
1020
1129
|
* 스펙 84개에 나타난 부모→자식 조합은 **232종**(슬롯까지 구분하면 242종)이고, 그중
|
|
1021
|
-
* 컴포넌트 이름이 이 라이브러리 어휘 69종 밖인 것도 스물 몇 가지다(소비 앱이 레지스트리에
|
|
1130
|
+
* 컴포넌트 이름이 이 라이브러리 어휘(잰 시점 69종) 밖인 것도 스물 몇 가지다(소비 앱이 레지스트리에
|
|
1022
1131
|
* 얹은 `ExcelUploadCard`·`ApprovalStepper` 같은 것들). 손으로 유지되는 허용 목록은
|
|
1023
1132
|
* 하루면 낡는다. 그래서 **막는 규칙은 최소로, 나머지는 추천으로** 나눴다.
|
|
1024
1133
|
*
|
|
@@ -1081,7 +1190,7 @@ declare function recommendedChildren(parent: string | null, slot?: string, limit
|
|
|
1081
1190
|
* psql -tA -d wipco_erp_dev_specs -c "select json_agg(spec) from ui_specs where id not like '\\_%'"
|
|
1082
1191
|
*
|
|
1083
1192
|
* 키는 `부모>자식` 또는 `부모#슬롯>자식`, 최상위는 `$body>자식`, 문자열 자식은 `#text`다.
|
|
1084
|
-
* 어휘 69종 밖의 이름(ExcelUploadCard·ApprovalStepper·Disclosure…)이 섞여 있는데
|
|
1193
|
+
* 어휘(잰 시점 69종) 밖의 이름(ExcelUploadCard·ApprovalStepper·Disclosure…)이 섞여 있는데
|
|
1085
1194
|
* 일부러 남겨 뒀다 — 소비 앱이 레지스트리에 얹은 컴포넌트도 편집 대상이고,
|
|
1086
1195
|
* 이 표는 **금지 목록이 아니라 추천 근거**라서 모르는 이름이 있어도 해롭지 않다.
|
|
1087
1196
|
*
|
|
@@ -1151,7 +1260,7 @@ declare const EMPTY_SELECTION: Selection;
|
|
|
1151
1260
|
declare function isSelected(selection: Selection, id: NodeId): boolean;
|
|
1152
1261
|
/** 다중 선택인가 — 정렬 도구·일괄 삭제 버튼을 켜는 조건. */
|
|
1153
1262
|
declare function isMultiSelection(selection: Selection): boolean;
|
|
1154
|
-
/** 같은 자리를
|
|
1263
|
+
/** 같은 자리를 가리키는가 — 구현은 {@link sameDropTarget} 하나다(이 이름은 공개 표면 호환용). */
|
|
1155
1264
|
declare function sameInsertionPoint(a: DropTarget | null, b: DropTarget | null): boolean;
|
|
1156
1265
|
/**
|
|
1157
1266
|
* 한 덩어리로 묶을 시간 창(ms).
|
|
@@ -1350,7 +1459,7 @@ interface BuilderViewProps {
|
|
|
1350
1459
|
readonly canvasInitialState?: Record<string, SduiPropValue>;
|
|
1351
1460
|
/**
|
|
1352
1461
|
* 캔버스가 그릴 때 쓸 레지스트리. 생략하면 {@link editorRegistry}(라이브러리 어휘
|
|
1353
|
-
*
|
|
1462
|
+
* 84종 + 렌더러 내장 `ForEach`·`Fragment`)다. 소비 앱이 자기 컴포넌트를 얹었다면 **그 레지스트리를
|
|
1354
1463
|
* 그대로 넘겨야** 캔버스에 앱과 같은 그림이 나온다 — 안 넘기면 앱 고유 이름
|
|
1355
1464
|
* (`ExcelUploadCard` 등)이 "등록되지 않은 컴포넌트" 자리 표시가 된다(선택·이동은 된다).
|
|
1356
1465
|
*/
|
|
@@ -1389,19 +1498,20 @@ declare function BuilderView({ spec, syncKey, onSpecChange, onOpenJson, onSave,
|
|
|
1389
1498
|
*
|
|
1390
1499
|
* ## 왜 `defaultRegistry`로는 모자라나
|
|
1391
1500
|
*
|
|
1392
|
-
* 팔레트는 메타데이터(`@wipco/sdui/meta`)가 아는 어휘 **
|
|
1393
|
-
* `Toast`만 빠져 화면에는
|
|
1394
|
-
* `defaultRegistry`는
|
|
1395
|
-
* 집을 수 있는 것의
|
|
1396
|
-
* 팔레트에 있는데 안 그려지는 것은 빌더의 전제를 깨는 종류의
|
|
1501
|
+
* 팔레트는 메타데이터(`@wipco/sdui/meta`)가 아는 어휘 **89종**을 내건다(`hidden`인
|
|
1502
|
+
* `Toast`만 빠져 화면에는 88종). 그런데
|
|
1503
|
+
* `defaultRegistry`는 42종(+ 렌더러 내장 `ForEach`·`Fragment`)뿐이라, 드롭인 사용자는
|
|
1504
|
+
* 팔레트에서 집을 수 있는 것의 절반 가까이를 집어 **아무것도 그려지지 않는 페이지**를
|
|
1505
|
+
* 만들 수 있었다. 팔레트에 있는데 안 그려지는 것은 빌더의 전제를 깨는 종류의
|
|
1506
|
+
* 어긋남이라 기본을 넓힌다.
|
|
1397
1507
|
*
|
|
1398
|
-
*
|
|
1399
|
-
* (`test/registry-default.test.ts`가 포함
|
|
1508
|
+
* 42 + DS 6 + 표시 위젯 36 = **84종**이고, `defaultRegistry`를 통째로 품는다
|
|
1509
|
+
* (`test/registry-default.test.ts`가 포함 관계와 개수를 실제로 센다).
|
|
1400
1510
|
*
|
|
1401
1511
|
* ## 넓히되 코드 분할은 깨지 않는다
|
|
1402
1512
|
*
|
|
1403
|
-
* 위젯
|
|
1404
|
-
* 초기 청크에 붙는다(측정치 77.4kB — 아래 청크 합). 0.3.0에서 위젯별 진입점을 만든 이유가
|
|
1513
|
+
* 위젯 36종을 `defaultRegistry`처럼 정적으로 물면 전부가 편집기를 쓰는 모든 소비자의
|
|
1514
|
+
* 초기 청크에 붙는다(21종이던 때 측정치 77.4kB — 아래 청크 합). 0.3.0에서 위젯별 진입점을 만든 이유가
|
|
1405
1515
|
* 정확히 그것을 막기 위해서였고, 묶음(`@wipco/sdui/widgets`)을 한 번이라도 정적으로 물면
|
|
1406
1516
|
* 개별 진입점의 `lazy`까지 도로 합쳐진다(widgets/index.ts 주석 참고).
|
|
1407
1517
|
*
|
|
@@ -1426,11 +1536,13 @@ declare function BuilderView({ spec, syncKey, onSpecChange, onOpenJson, onSave,
|
|
|
1426
1536
|
* 아니라 **청크 목록에 위젯 이름이 그대로 남아 있는가**다 — 하나라도 초기 청크로
|
|
1427
1537
|
* 합쳐졌다면 정적 경로가 어디선가 생긴 것이다.)
|
|
1428
1538
|
*
|
|
1429
|
-
* ## 여기 없는 것 — `Chart`·`MapPreview`
|
|
1539
|
+
* ## 여기 없는 것 — `Chart`·`MapPreview`·`ExcelUploadCard`
|
|
1430
1540
|
*
|
|
1431
|
-
* 메타데이터
|
|
1432
|
-
*
|
|
1433
|
-
*
|
|
1541
|
+
* 메타데이터 89종에서 이 셋과 `ForEach`·`Fragment`를 빼면 84다. **89가 아닌 이유가
|
|
1542
|
+
* 그 다섯이고, 이유는 두 갈래다.** `ForEach`·`Fragment`는 렌더러 내장이라 레지스트리를
|
|
1543
|
+
* 애초에 안 거친다(Fragment는 어댑터 훅으로 다른 스펙을 가져와야 해서 레지스트리
|
|
1544
|
+
* 컴포넌트로는 성립하지 않는다). `ExcelUploadCard`는 xlsx가 optional peer라 아래
|
|
1545
|
+
* 둘과 같은 이유로 뺐다(0.31.0에서 rich로 들어왔다). 나머지 둘은 이렇다.
|
|
1434
1546
|
*
|
|
1435
1547
|
* 그 둘은 `@wipco/sdui/rich`에 있고 recharts·ol이 **optional peerDependency**다
|
|
1436
1548
|
* (`packages/sdui/package.json`의 `peerDependenciesMeta`). 기본값이 그 진입점을 물면
|
|
@@ -1443,8 +1555,8 @@ declare function BuilderView({ spec, syncKey, onSpecChange, onOpenJson, onSave,
|
|
|
1443
1555
|
* `packages/sdui/node_modules`에서 둘을 찾아낸다. 진짜 소비자에게는 그 경로가 없다.
|
|
1444
1556
|
*
|
|
1445
1557
|
* 두 이름은 소비자가 `registry` 프롭으로 얹고(`richComponents`가 그 스위치다),
|
|
1446
|
-
* 얹지 않으면 팔레트가 "등록되지 않음"으로 표시한다.
|
|
1447
|
-
* 남는 유일한 격차이고, 그건 메우는 게 아니라 의도한 것이다.**
|
|
1558
|
+
* 얹지 않으면 팔레트가 "등록되지 않음"으로 표시한다. **ExcelUploadCard까지 이 3종이
|
|
1559
|
+
* 팔레트와 캔버스 사이에 남는 유일한 격차이고, 그건 메우는 게 아니라 의도한 것이다.**
|
|
1448
1560
|
*
|
|
1449
1561
|
* ## `AutocompleteField`는 넣는다
|
|
1450
1562
|
*
|
|
@@ -1456,10 +1568,10 @@ declare function BuilderView({ spec, syncKey, onSpecChange, onOpenJson, onSave,
|
|
|
1456
1568
|
*/
|
|
1457
1569
|
|
|
1458
1570
|
/**
|
|
1459
|
-
* 편집 화면(캔버스·미리보기·뷰어)의 기본 어휘
|
|
1571
|
+
* 편집 화면(캔버스·미리보기·뷰어)의 기본 어휘 84종.
|
|
1460
1572
|
*
|
|
1461
1573
|
* 기본값을 정하는 자리는 이 값 **하나**다. 파일 머리말의 순환 문제 때문에 값이
|
|
1462
|
-
* `BuilderView.tsx`에 갇혀 있던 동안 `Canvas`와 `ViewerView`가 각자 39
|
|
1574
|
+
* `BuilderView.tsx`에 갇혀 있던 동안 `Canvas`와 `ViewerView`가 각자 기본 39종(당시)으로 떨어졌고,
|
|
1463
1575
|
* 그 어긋남을 화면에서 설명하는 것이 아무 데도 없었다. 새 기본값이 필요하면
|
|
1464
1576
|
* 여기서만 바꾸고, 새 화면을 만들면 여기서 가져다 쓴다.
|
|
1465
1577
|
*/
|
|
@@ -1476,15 +1588,16 @@ interface CanvasProps {
|
|
|
1476
1588
|
/**
|
|
1477
1589
|
* 소비 앱이 자기 컴포넌트를 얹은 레지스트리.
|
|
1478
1590
|
*
|
|
1479
|
-
* 생략하면 {@link editorRegistry} — 라이브러리 어휘 **
|
|
1480
|
-
* 표시 위젯
|
|
1481
|
-
* 것은 `Chart`·`MapPreview`
|
|
1482
|
-
* 일부러 뺀 것이다(editor-registry.tsx 주석).
|
|
1591
|
+
* 생략하면 {@link editorRegistry} — 라이브러리 어휘 **84종**(렌더러 기본 42 + DS 6 +
|
|
1592
|
+
* 표시 위젯 36, 여기에 렌더러 내장 `ForEach`·`Fragment`)이다. 팔레트가 내거는 88종 중
|
|
1593
|
+
* 여기 없는 것은 `Chart`·`MapPreview`·`ExcelUploadCard` 셋뿐이고, 그건 recharts·ol·xlsx가
|
|
1594
|
+
* **optional peerDependency**라 일부러 뺀 것이다(editor-registry.tsx 주석).
|
|
1595
|
+
* 소비자가 그 셋을 쓰려면 직접 얹어야 한다.
|
|
1483
1596
|
*
|
|
1484
|
-
* 어휘 밖
|
|
1597
|
+
* 어휘 밖 컴포넌트를 쓰는 스펙을 편집하려면 반드시 넘겨야 한다 —
|
|
1485
1598
|
* 안 넘기면 그 노드는 "등록되지 않은 컴포넌트" 자리 표시로 그려진다(선택·이동은 된다).
|
|
1486
1599
|
* 넓힐 때는 `createRegistry({ ...editorRegistry, ...myComponents })`로 **얹어야** 한다.
|
|
1487
|
-
* `createRegistry(myComponents)`는 바탕이 `defaultRegistry`
|
|
1600
|
+
* `createRegistry(myComponents)`는 바탕이 `defaultRegistry` 42종이라 위젯 42종이 빠진다.
|
|
1488
1601
|
*/
|
|
1489
1602
|
registry?: SduiRegistry;
|
|
1490
1603
|
/** `Can`의 판정. 캔버스는 게이트를 열어 두므로 보통 넘길 일이 없다. */
|
|
@@ -1516,8 +1629,8 @@ interface CanvasProps {
|
|
|
1516
1629
|
declare function Canvas({ doc, catalog, selection, hover, dispatch,
|
|
1517
1630
|
/**
|
|
1518
1631
|
* 기본값이 여기 붙어 있는 이유 — 이 자리가 비면 한 단계 아래
|
|
1519
|
-
* `createEditRegistry(base = defaultRegistry)`가 받아 **
|
|
1520
|
-
* `BuilderView`로 열면 셸이
|
|
1632
|
+
* `createEditRegistry(base = defaultRegistry)`가 받아 **42종**으로 떨어진다.
|
|
1633
|
+
* `BuilderView`로 열면 셸이 84종을 내려 주지만, 자기 셸을 짜서 `Canvas`를 단독으로
|
|
1521
1634
|
* 마운트한 소비자에게는 그 셸이 없다. 그러면 팔레트가 `Timeline`을 멀쩡히 내걸고
|
|
1522
1635
|
* 캔버스는 "등록되지 않은 컴포넌트: Timeline"이라 답하는데, 왜 다른지 설명하는 것이
|
|
1523
1636
|
* 화면 어디에도 없다 — 소비자는 "라이브러리에 없구나"로 오귀인한다.
|
|
@@ -1529,7 +1642,7 @@ interface PaletteProps {
|
|
|
1529
1642
|
selection: Selection;
|
|
1530
1643
|
dispatch: (action: EditorAction) => void;
|
|
1531
1644
|
/**
|
|
1532
|
-
* 팔레트에 띄울 메타데이터. 생략하면 라이브러리 어휘
|
|
1645
|
+
* 팔레트에 띄울 메타데이터. 생략하면 라이브러리 어휘 89종(`allComponentMeta`).
|
|
1533
1646
|
* 소비 앱이 얹은 컴포넌트도 팔레트에 내려면 그 메타데이터를 합쳐 넘긴다.
|
|
1534
1647
|
*/
|
|
1535
1648
|
catalog?: Record<string, SduiComponentMeta>;
|
|
@@ -1916,11 +2029,20 @@ interface Candidate {
|
|
|
1916
2029
|
/**
|
|
1917
2030
|
* 액션이 들어가는 프롭인가.
|
|
1918
2031
|
*
|
|
1919
|
-
*
|
|
1920
|
-
*
|
|
1921
|
-
*
|
|
2032
|
+
* 판정 근거는 셋이고 이 순서로 세다.
|
|
2033
|
+
*
|
|
2034
|
+
* 1. **메타데이터가 아는 프롭은 메타가 정답이다.** `SearchResults.rowClick`처럼
|
|
2035
|
+
* `on*`이 아니어도 컴포넌트가 자기 손으로 dispatch하는 프롭은 `kind: 'action'`으로
|
|
2036
|
+
* 선언돼 있고, 반대로 `Tabs.onChrome`처럼 `on`으로 시작하지만 액션이 아닌 프롭도 있다.
|
|
2037
|
+
* 2. **메타가 모르는 프롭은 렌더러의 규칙을 따른다** — `on` 접두 + 값 모양
|
|
2038
|
+
* (`SduiRenderer`는 둘 다 봐야 핸들러로 바꾼다). 값이 안 실려 온 호출(문서 순회 등)과
|
|
2039
|
+
* **빈 배열**은 이름만으로 낙관한다 — 빈 목록은 "액션이 아니다"의 증거가 못 되고,
|
|
2040
|
+
* 여기서 강등되면 액션을 다 지운 `on*` 프롭이 액션 편집기 대신 일반 편집기로 열린다.
|
|
2041
|
+
* 3. 이름 규칙 밖이라도 **값이 액션 모양이면** 액션 편집기가 맞다. 값 모양만으로 판정하지
|
|
2042
|
+
* 않는 것은 1 때문이다 — 실측에 `Form.initial = {"action":"reject",…}` 같은 폼 초기값이
|
|
2043
|
+
* 있어서, 메타를 무시하고 모양만 보면 액션으로 오인한다.
|
|
1922
2044
|
*/
|
|
1923
|
-
declare function looksLikeActionProp(component: string, prop: string, catalog?: SduiCatalog): boolean;
|
|
2045
|
+
declare function looksLikeActionProp(component: string, prop: string, catalog?: SduiCatalog, value?: SduiPropValue): boolean;
|
|
1924
2046
|
|
|
1925
2047
|
/**
|
|
1926
2048
|
* `$item`/`$index`가 **의미를 갖는 자리인지** 판정한다.
|
|
@@ -1984,8 +2106,14 @@ interface BindingContext extends BindingSource {
|
|
|
1984
2106
|
readonly scope: ForEachScope;
|
|
1985
2107
|
}
|
|
1986
2108
|
declare function bindingContextFor(source: BindingSource, nodeId: NodeId | null): BindingContext;
|
|
1987
|
-
/**
|
|
1988
|
-
|
|
2109
|
+
/**
|
|
2110
|
+
* 한 번에 만들고 싶을 때(테스트·간단한 호출부). 위 두 단계를 그냥 붙인 것이다.
|
|
2111
|
+
*
|
|
2112
|
+
* `catalog`를 끝까지 내려보내야 소비 앱이 카탈로그로 선언한 액션 프롭
|
|
2113
|
+
* (`kind: 'action'`, 이름이 `on*`이 아닌 것)이 후보 수집(`forEachAction`)에 잡힌다 —
|
|
2114
|
+
* 안 넘기면 그 프롭 안의 open/close 키·경로·엔드포인트가 자동완성에서 빠진다.
|
|
2115
|
+
*/
|
|
2116
|
+
declare function createBindingContext(doc: BuilderDoc, nodeId: NodeId | null, pageIds?: readonly string[], catalog?: SduiCatalog): BindingContext;
|
|
1989
2117
|
|
|
1990
2118
|
/**
|
|
1991
2119
|
* 값 하나를 편집한다 — **상수인가 바인딩인가**를 고르고, 바인딩이면 종류까지.
|
|
@@ -2017,9 +2145,15 @@ interface BindingEditorProps {
|
|
|
2017
2145
|
depth?: number;
|
|
2018
2146
|
/** 바인딩을 받을 수 없는 자리(예: `$state`의 default)에서 종류 선택을 감춘다. */
|
|
2019
2147
|
literalOnly?: boolean;
|
|
2148
|
+
/**
|
|
2149
|
+
* 액션의 값 자리인가 — `{"$event"}` 참조가 사는 유일한 컨텍스트라, 켜야 종류
|
|
2150
|
+
* 선택지에 "이벤트"가 나온다(액션 밖에서 고르면 렌더 시점에 null이 된다).
|
|
2151
|
+
* 값이 이미 `$event`면 플래그와 무관하게 표시한다 — 감추면 고칠 창구가 사라진다.
|
|
2152
|
+
*/
|
|
2153
|
+
eventScope?: boolean;
|
|
2020
2154
|
'aria-label'?: string;
|
|
2021
2155
|
}
|
|
2022
|
-
declare function BindingEditor({ value, onChange, ctx, meta, autoFocus, depth, literalOnly, 'aria-label': ariaLabel, }: BindingEditorProps): React__default.JSX.Element;
|
|
2156
|
+
declare function BindingEditor({ value, onChange, ctx, meta, autoFocus, depth, literalOnly, eventScope, 'aria-label': ariaLabel, }: BindingEditorProps): React__default.JSX.Element;
|
|
2023
2157
|
|
|
2024
2158
|
/**
|
|
2025
2159
|
* `on*` 프롭에 붙는 **액션 목록**을 편집한다.
|
|
@@ -2071,13 +2205,34 @@ interface ActionList {
|
|
|
2071
2205
|
* 그래서 개수가 하나로 남는 한 원래 모양을 지킨다.
|
|
2072
2206
|
*/
|
|
2073
2207
|
readonly single: boolean;
|
|
2074
|
-
/**
|
|
2208
|
+
/**
|
|
2209
|
+
* 액션 객체가 아닌 항목 — 그대로 보존하되 화면에 알린다.
|
|
2210
|
+
*
|
|
2211
|
+
* `{"$arg":"이름"}`(조각이 전달받은 액션)도 여기로 온다. 렌더러에게는 액션 자리의
|
|
2212
|
+
* 1급 항목이지만, 편집기가 폼으로 그릴 본문이 없어 목록에는 내지 않는다 —
|
|
2213
|
+
* 대신 **원래 자리**({@link ActionList.strayAt})를 지켜 되쓴다.
|
|
2214
|
+
*/
|
|
2075
2215
|
readonly strays: readonly SduiPropValue[];
|
|
2216
|
+
/**
|
|
2217
|
+
* 각 stray **앞에 놓인 실제 액션의 수**(strays와 같은 순서).
|
|
2218
|
+
*
|
|
2219
|
+
* 렌더러는 `[{...고정}, {"$arg":"onSuccess"}]` 같은 혼합 목록을 **그 자리 순서대로**
|
|
2220
|
+
* 펼쳐 실행한다(`expandActionEntries`). 편집기가 stray를 꼬리로 몰아 되쓰면
|
|
2221
|
+
* 필드 하나 고친 저장에 실행 순서가 조용히 바뀐다 — 그 사고를 막는 좌석표다.
|
|
2222
|
+
*
|
|
2223
|
+
* 절대 인덱스가 아니라 "앞선 액션 수"인 이유: 편집기가 만지는 것은 액션뿐이라,
|
|
2224
|
+
* 절대 인덱스는 앞 액션 하나만 지워도 어긋난다. 액션 기준 앵커는 이웃 맞바꿈·삽입을
|
|
2225
|
+
* 그대로 견디고, 삭제만 {@link removeActionAt}이 앵커를 같이 당겨 주면 된다.
|
|
2226
|
+
*/
|
|
2227
|
+
readonly strayAt: readonly number[];
|
|
2076
2228
|
}
|
|
2077
2229
|
declare function readActionList(value: SduiPropValue | undefined): ActionList;
|
|
2078
2230
|
/**
|
|
2079
2231
|
* 다시 스펙 값으로. 액션이 하나도 없으면 `undefined`를 돌려주고,
|
|
2080
2232
|
* 호출부는 그걸로 프롭 자체를 지운다(`setProp(doc, id, name, undefined)`).
|
|
2233
|
+
*
|
|
2234
|
+
* stray는 {@link ActionList.strayAt}의 앵커대로 — 자기 앞에 그 수만큼 액션을 두고 —
|
|
2235
|
+
* 끼워 넣는다. 앵커가 남은 액션 수보다 크면 꼬리로 간다(상한일 뿐, "항상 꼬리로 몰림"은 없다).
|
|
2081
2236
|
*/
|
|
2082
2237
|
declare function writeActionList(list: ActionList): SduiPropValue | undefined;
|
|
2083
2238
|
|
|
@@ -2104,4 +2259,4 @@ declare function formatAction(action: ActionValue): string;
|
|
|
2104
2259
|
/** 액션 목록 전체를 한 줄로 — 프롭 목록에서 "무엇이 붙어 있나"를 볼 때. */
|
|
2105
2260
|
declare function formatActionList(actions: readonly ActionValue[]): string;
|
|
2106
2261
|
|
|
2107
|
-
export { ActionEditor, type ActionEditorProps, type ActionList, type ActionValue, type BindingContext, BindingEditor, type BindingEditorProps, type BindingSource, type BuilderChild, type BuilderDoc, type BuilderFidelity, type BuilderNode, type BuilderPageMeta, type BuilderText, BuilderView, type BuilderViewProps, COALESCE_WINDOW_MS, Canvas, type CanvasProps, type ChildLabel, DEFAULT_SLOT, DIALOG_PREFIX, type DropDomContext, type DropTarget, type DropVerdict, EMPTY_SELECTION, type EditorAction, type EditorState, EditorView, type EditorViewProps, type FlattenOptions, type GradedIssue, HISTORY_LIMIT, HistoryBar, type HistoryBarProps, type HistoryEntry, INITIAL_PREVIEW_SETUP, Inspector, type InspectorChange, type InspectorProps, type ManualSeed, type NodeId, PAGE_ID_PATTERN, PageExistsError, PageGoneError, PageIdConflictError, PageIdRejectedError, PageListView, type PageListViewProps, type PageMeta, type PageRecord, type PageRevision, type PageTemplate, Palette, type PaletteProps, type PreviewAdapterOptions, type PreviewEntityOption, type PreviewEntitySearch, type PreviewFetch, PreviewSeedPanel, type PreviewSeedPanelProps, type PreviewSetup, ROOT_ID, RestSpecStore, type RestStoreConfig, SPEC_PAIR_FREQ, type SduiCatalog, SduiEditor, type SduiEditorProps, type SduiEditorView, type Selection, type SlotDescriptor, type SpecStore, type StateKeyEntry, type StateKeyIndex, type StateKeyNode, type StateKeyOrigin, type StoreCapabilities, StoreUnauthorizedError, StoreUnavailableError, StoreUnsupportedError, TEMPLATES, TEXT_CHILD, type TransformResult, type TreeRow, type TreeRowKind, TreeView, type TreeViewProps, type VersionExpectation, VersionMismatchError, ViewerView, type ViewerViewProps, type WriteOptions, addressOf, ancestorIdsOf, argsWrapperPage, bindingContextFor, breadcrumbOf, buildStateKeyIndex, builderFidelity, canDrop, canDropAt, canMoveTo, canRedo, canUndo, collectStateKeys, createBindingContext, createBindingSource, createDataPreviewAdapter, createEditorState, createEditorUseSpec, createRestSpecStore, describeChild, dialogOpenSeeds, dropFrequency, dropTargetsAround, duplicate, editorReducer, editorRegistry, emptyDoc, flattenTree, formatAction, formatActionList, formatValue, fromPage, getChild, getNode, gradeIssues, inDocumentOrder, insert, isDescendantOf, isDialogSpecId, isMultiSelection, isSelected, isTypingTarget, isValidPageId, looksLikeActionProp, move, parseSeedValue, patternParams, readActionList, recommendedChildren, redoLabel, remove, replaceChild, resolvePreviewAdapter, sameInsertionPoint, sameSpecMeaning, seedSignature, seedsOf, setChildren, setNodeKey, setPageMeta, setProp, setProps, setText, slotsOf, specOf, stateKeyStatus, suggestStateKeys, titleOf, toPage, toSpec, topmost, undoLabel, useUndoRedoShortcuts, walkDoc, writeActionList };
|
|
2262
|
+
export { ActionEditor, type ActionEditorProps, type ActionList, type ActionValue, type BindingContext, BindingEditor, type BindingEditorProps, type BindingSource, type BuilderChild, type BuilderDoc, type BuilderFidelity, type BuilderNode, type BuilderPageMeta, type BuilderText, BuilderView, type BuilderViewProps, COALESCE_WINDOW_MS, Canvas, type CanvasProps, type ChildLabel, DEFAULT_SLOT, DIALOG_PREFIX, type DropDomContext, type DropTarget, type DropVerdict, EMPTY_SELECTION, type EditorAction, type EditorState, EditorView, type EditorViewProps, FRAGMENT_PREFIX, type FlattenOptions, type GradeIssuesOptions, type GradedIssue, HISTORY_LIMIT, HistoryBar, type HistoryBarProps, type HistoryEntry, INITIAL_PREVIEW_SETUP, Inspector, type InspectorChange, type InspectorProps, type ManualSeed, type NodeId, PAGE_ID_PATTERN, PageExistsError, PageGoneError, PageIdConflictError, PageIdRejectedError, PageListView, type PageListViewProps, type PageMeta, type PageRecord, type PageRevision, type PageTemplate, Palette, type PaletteProps, type PreviewAdapterOptions, type PreviewEntityOption, type PreviewEntitySearch, type PreviewFetch, PreviewSeedPanel, type PreviewSeedPanelProps, type PreviewSetup, ROOT_ID, RestSpecStore, type RestStoreConfig, type RestStorePaths, SPEC_PAIR_FREQ, type SduiCatalog, SduiEditor, type SduiEditorProps, type SduiEditorView, type Selection, type SlotDescriptor, type SpecStore, type StateKeyEntry, type StateKeyIndex, type StateKeyNode, type StateKeyOrigin, type StoreCapabilities, StoreUnauthorizedError, StoreUnavailableError, StoreUnsupportedError, TEMPLATES, TEXT_CHILD, type TransformResult, type TreeRow, type TreeRowKind, TreeView, type TreeViewProps, type VersionExpectation, VersionMismatchError, ViewerView, type ViewerViewProps, type WriteOptions, addressOf, ancestorIdsOf, argsWrapperPage, bindingContextFor, breadcrumbOf, buildStateKeyIndex, builderFidelity, canDrop, canDropAt, canMoveTo, canRedo, canUndo, collectStateKeys, createBindingContext, createBindingSource, createDataPreviewAdapter, createEditorState, createEditorUseSpec, createRestSpecStore, describeChild, dialogOpenSeeds, dropFrequency, dropTargetsAround, duplicate, editorReducer, editorRegistry, emptyDoc, flattenTree, formatAction, formatActionList, formatValue, fromPage, getChild, getNode, gradeIssues, inDocumentOrder, insert, isDescendantOf, isDialogSpecId, isFragmentSpecId, isMultiSelection, isSelected, isTypingTarget, isValidPageId, looksLikeActionProp, move, parseSeedValue, pathFromView, patternParams, readActionList, recommendedChildren, redoLabel, remove, replaceChild, resolvePreviewAdapter, sameDropTarget, sameInsertionPoint, sameSpecMeaning, seedSignature, seedsOf, setChildren, setNodeKey, setPageMeta, setProp, setProps, setText, slotsOf, specOf, stateKeyStatus, suggestStateKeys, titleOf, toPage, toSpec, topmost, undoLabel, useUndoRedoShortcuts, viewFromPath, walkDoc, writeActionList };
|