@operato/slot-layout-editor 10.29.51 → 10.29.56

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.
@@ -1 +1 @@
1
- {"version":3,"file":"ox-property-editor-slot-layout.js","sourceRoot":"","sources":["../../src/ox-property-editor-slot-layout.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAA;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,gBAAgB,EAAqB,MAAM,0BAA0B,CAAA;AAE9E,OAAO,4BAA4B,CAAA;AAS5B,IAAM,0BAA0B,GAAhC,MAAM,0BAA2B,SAAQ,gBAAgB;IAAzD;;QACG,aAAQ,GAA4B,EAAE,CAAA;QACtC,gBAAW,GAAY,MAAM,CAAC,MAAM,CAAC,CAAA;IA0C/C,CAAC;IAxCC,cAAc,CAAC,KAAU,EAAE,IAAkB;;QAC3C,uDAAuD;QACvD,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK,EAAE,CAAC;YAC/B,IAAI,CAAC,WAAW,GAAG,KAAK,CAAA;YACxB,IAAI,CAAC,QAAQ,GAAG,MAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,mCAAI,EAAE,CAAA;QAClD,CAAC;QACD,OAAO,IAAI,CAAA;;;iBAGE,KAAK;mBACH,IAAI,CAAC,QAAQ;mCACG,IAAI,CAAC,aAAa;;KAEhD,CAAA;IACH,CAAC;IAED,8EAA8E;IACtE,eAAe,CAAC,IAAkB;;QACxC,MAAM,IAAI,GAAG,MAAC,IAAI,CAAC,QAAkD,0CAAE,OAAO,CAAA;QAC9E,IAAI,OAAO,IAAI,KAAK,UAAU;YAAE,OAAO,SAAS,CAAA;QAChD,IAAI,QAA+B,CAAA;QACnC,IAAI,CAAC,aAAa,CAChB,IAAI,WAAW,CAAC,iBAAiB,EAAE;YACjC,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,IAAI;YACd,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAY,EAAE,EAAE,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE;SACvD,CAAC,CACH,CAAA;QACD,OAAO,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IAC9C,CAAC;IAEO,aAAa,CAAC,CAAQ;QAC5B,CAAC,CAAC,eAAe,EAAE,CAAA;QACnB,6EAA6E;QAC7E,iDAAiD;QACjD,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,sBAAsB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;QACxI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;YAAE,OAAM;QACvC,IAAI,CAAC,KAAK,GAAG,SAAS,CAAA;QACtB,IAAI,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;IAC5E,CAAC;CACF,CAAA;AA5CY,0BAA0B;IADtC,aAAa,CAAC,gCAAgC,CAAC;GACnC,0BAA0B,CA4CtC","sourcesContent":["/**\n * @license Copyright © HatioLab Inc. All rights reserved.\n *\n * 속성 패널용 자리 레이아웃 편집기 (편집기 타입 'slot-layout').\n *\n * 기존 속성 편집기 계약을 따른다: 값은 this.value, 바뀌면 change 를 보내고 호스트(속성 패널)가 컴포넌트에 반영한다.\n * 선택 컴포넌트가 필요한 옵션(값의 출처, 기본값, 상태 문구)은 'i-need-selected' 로 선택 목록을 받아\n * 속성 정의의 property.options(selected) 가 만든다. 편집기는 컴포넌트를 직접 바꾸지 않는다.\n *\n * [기본값 사용]은 값을 비우는 편집과 구분해 'property-use-default'(detail.name, 취소 가능) 를 먼저 알린다.\n * 호스트가 그것을 처리하고 preventDefault() 하면 끝이고, 아니면 값을 비우는 change 하나를 보낸다.\n * 그 뒤 보일 기본값은 호스트가 property.options 로 다시 준다.\n *\n * 속성 정의 예:\n * { type: 'slot-layout', name: 'loadLayout', label: 'load-slots',\n * property: { options: selected => ({ effective, notes, presets, ... }) } }\n */\n\nimport { html } from 'lit'\nimport { customElement } from 'lit/decorators.js'\nimport { OxPropertyEditor, type PropertySpec } from '@operato/property-editor'\n\nimport './ox-slot-layout-editor.js'\nimport type { SlotLayoutEditorOptions } from './ox-slot-layout-editor.js'\n\nexport interface SlotLayoutPropertyOptions {\n /** 선택 컴포넌트로 편집기 옵션을 만든다. 값이 바뀔 때마다 다시 부른다 */\n options?: (selected: unknown[]) => SlotLayoutEditorOptions | undefined\n}\n\n@customElement('ox-property-editor-slot-layout')\nexport class OxPropertyEditorSlotLayout extends OxPropertyEditor {\n private _options: SlotLayoutEditorOptions = {}\n private _optionsFor: unknown = Symbol('none')\n\n editorTemplate(value: any, spec: PropertySpec) {\n // 값이 바뀌었을 때만 옵션을 다시 만든다 (렌더마다 새 옵션을 주면 편집 중인 값이 초기화된다)\n if (this._optionsFor !== value) {\n this._optionsFor = value\n this._options = this._resolveOptions(spec) ?? {}\n }\n return html`\n <ox-slot-layout-editor\n id=\"editor\"\n .value=${value}\n .options=${this._options}\n @slot-layout-use-default=${this._onUseDefault}\n ></ox-slot-layout-editor>\n `\n }\n\n /** 'i-need-selected' 로 선택 목록을 받아 property.options 를 부른다. 받을 호스트가 없으면 옵션 없음 */\n private _resolveOptions(spec: PropertySpec): SlotLayoutEditorOptions | undefined {\n const make = (spec.property as SlotLayoutPropertyOptions | undefined)?.options\n if (typeof make !== 'function') return undefined\n let selected: unknown[] | undefined\n this.dispatchEvent(\n new CustomEvent('i-need-selected', {\n bubbles: true,\n composed: true,\n detail: { callback: (s: unknown[]) => (selected = s) }\n })\n )\n return selected ? make(selected) : undefined\n }\n\n private _onUseDefault(e: Event) {\n e.stopPropagation()\n // 의도를 먼저 알린다. 호스트가 직접 처리하고 preventDefault() 하면 값 변경을 보내지 않는다 (두 번 저장하지 않도록).\n // 처리하지 않는 호스트(기존 속성 패널)에는 값을 비우는 change 하나로 알린다.\n const intent = new CustomEvent('property-use-default', { bubbles: true, composed: true, cancelable: true, detail: { name: this.name } })\n if (!this.dispatchEvent(intent)) return\n this.value = undefined\n this.dispatchEvent(new Event('change', { bubbles: true, composed: true }))\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ox-property-editor-slot-layout': OxPropertyEditorSlotLayout\n }\n}\n"]}
1
+ {"version":3,"file":"ox-property-editor-slot-layout.js","sourceRoot":"","sources":["../../src/ox-property-editor-slot-layout.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAA;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,gBAAgB,EAAqB,MAAM,0BAA0B,CAAA;AAE9E,OAAO,4BAA4B,CAAA;AAS5B,IAAM,0BAA0B,GAAhC,MAAM,0BAA2B,SAAQ,gBAAgB;IAAzD;;QACG,aAAQ,GAA4B,EAAE,CAAA;QACtC,gBAAW,GAAY,MAAM,CAAC,MAAM,CAAC,CAAA;IA2C/C,CAAC;IAzCC,cAAc,CAAC,KAAU,EAAE,IAAkB;;QAC3C,uDAAuD;QACvD,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK,EAAE,CAAC;YAC/B,IAAI,CAAC,WAAW,GAAG,KAAK,CAAA;YACxB,IAAI,CAAC,QAAQ,GAAG,MAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,mCAAI,EAAE,CAAA;QAClD,CAAC;QACD,OAAO,IAAI,CAAA;;;;iBAIE,KAAK;mBACH,IAAI,CAAC,QAAQ;mCACG,IAAI,CAAC,aAAa;;KAEhD,CAAA;IACH,CAAC;IAED,8EAA8E;IACtE,eAAe,CAAC,IAAkB;;QACxC,MAAM,IAAI,GAAG,MAAC,IAAI,CAAC,QAAkD,0CAAE,OAAO,CAAA;QAC9E,IAAI,OAAO,IAAI,KAAK,UAAU;YAAE,OAAO,SAAS,CAAA;QAChD,IAAI,QAA+B,CAAA;QACnC,IAAI,CAAC,aAAa,CAChB,IAAI,WAAW,CAAC,iBAAiB,EAAE;YACjC,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,IAAI;YACd,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAY,EAAE,EAAE,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE;SACvD,CAAC,CACH,CAAA;QACD,OAAO,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IAC9C,CAAC;IAEO,aAAa,CAAC,CAAQ;QAC5B,CAAC,CAAC,eAAe,EAAE,CAAA;QACnB,6EAA6E;QAC7E,iDAAiD;QACjD,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,sBAAsB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;QACxI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;YAAE,OAAM;QACvC,IAAI,CAAC,KAAK,GAAG,SAAS,CAAA;QACtB,IAAI,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;IAC5E,CAAC;CACF,CAAA;AA7CY,0BAA0B;IADtC,aAAa,CAAC,gCAAgC,CAAC;GACnC,0BAA0B,CA6CtC","sourcesContent":["/**\n * @license Copyright © HatioLab Inc. All rights reserved.\n *\n * 속성 패널용 자리 레이아웃 편집기 (편집기 타입 'slot-layout').\n *\n * 기존 속성 편집기 계약을 따른다: 값은 this.value, 바뀌면 change 를 보내고 호스트(속성 패널)가 컴포넌트에 반영한다.\n * 편집기는 그림과 여러 구역을 가지므로 라벨 줄 아래 탭 전체 폭을 쓴다(fullwidth).\n * 선택 컴포넌트가 필요한 옵션(값의 출처, 기본값, 상태 문구)은 'i-need-selected' 로 선택 목록을 받아\n * 속성 정의의 property.options(selected) 가 만든다. 편집기는 컴포넌트를 직접 바꾸지 않는다.\n *\n * [기본값 사용]은 값을 비우는 편집과 구분해 'property-use-default'(detail.name, 취소 가능) 를 먼저 알린다.\n * 호스트가 그것을 처리하고 preventDefault() 하면 끝이고, 아니면 값을 비우는 change 하나를 보낸다.\n * 그 뒤 보일 기본값은 호스트가 property.options 로 다시 준다.\n *\n * 속성 정의 예:\n * { type: 'slot-layout', name: 'loadLayout', label: 'load-slots',\n * property: { options: selected => ({ effective, notes, presets, ... }) } }\n */\n\nimport { html } from 'lit'\nimport { customElement } from 'lit/decorators.js'\nimport { OxPropertyEditor, type PropertySpec } from '@operato/property-editor'\n\nimport './ox-slot-layout-editor.js'\nimport type { SlotLayoutEditorOptions } from './ox-slot-layout-editor.js'\n\nexport interface SlotLayoutPropertyOptions {\n /** 선택 컴포넌트로 편집기 옵션을 만든다. 값이 바뀔 때마다 다시 부른다 */\n options?: (selected: unknown[]) => SlotLayoutEditorOptions | undefined\n}\n\n@customElement('ox-property-editor-slot-layout')\nexport class OxPropertyEditorSlotLayout extends OxPropertyEditor {\n private _options: SlotLayoutEditorOptions = {}\n private _optionsFor: unknown = Symbol('none')\n\n editorTemplate(value: any, spec: PropertySpec) {\n // 값이 바뀌었을 때만 옵션을 다시 만든다 (렌더마다 새 옵션을 주면 편집 중인 값이 초기화된다)\n if (this._optionsFor !== value) {\n this._optionsFor = value\n this._options = this._resolveOptions(spec) ?? {}\n }\n return html`\n <ox-slot-layout-editor\n id=\"editor\"\n fullwidth\n .value=${value}\n .options=${this._options}\n @slot-layout-use-default=${this._onUseDefault}\n ></ox-slot-layout-editor>\n `\n }\n\n /** 'i-need-selected' 로 선택 목록을 받아 property.options 를 부른다. 받을 호스트가 없으면 옵션 없음 */\n private _resolveOptions(spec: PropertySpec): SlotLayoutEditorOptions | undefined {\n const make = (spec.property as SlotLayoutPropertyOptions | undefined)?.options\n if (typeof make !== 'function') return undefined\n let selected: unknown[] | undefined\n this.dispatchEvent(\n new CustomEvent('i-need-selected', {\n bubbles: true,\n composed: true,\n detail: { callback: (s: unknown[]) => (selected = s) }\n })\n )\n return selected ? make(selected) : undefined\n }\n\n private _onUseDefault(e: Event) {\n e.stopPropagation()\n // 의도를 먼저 알린다. 호스트가 직접 처리하고 preventDefault() 하면 값 변경을 보내지 않는다 (두 번 저장하지 않도록).\n // 처리하지 않는 호스트(기존 속성 패널)에는 값을 비우는 change 하나로 알린다.\n const intent = new CustomEvent('property-use-default', { bubbles: true, composed: true, cancelable: true, detail: { name: this.name } })\n if (!this.dispatchEvent(intent)) return\n this.value = undefined\n this.dispatchEvent(new Event('change', { bubbles: true, composed: true }))\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ox-property-editor-slot-layout': OxPropertyEditorSlotLayout\n }\n}\n"]}
@@ -1,40 +1,63 @@
1
1
  /**
2
2
  * @license Copyright © HatioLab Inc. All rights reserved.
3
3
  *
4
- * 자리 레이아웃 편집기. 홀더의 Tier·Slot 구성을 고치고, 검증하고, 미리 보고, [적용]으로 알린다.
4
+ * 자리 레이아웃 편집기. 홀더의 Tier·Slot 구성을 고치고, 검증하고, 미리 보고, 호스트에 알린다.
5
5
  * Tier 는 홀더가 주는 Anchor 하나에 서고, 그 Anchor 기준 위치·회전과 적재 방식(mount)을 갖는다.
6
6
  *
7
+ * 맨 위 그림은 Anchor 면(호스트가 크기를 주면)과 그 위의 자리, 실린 아이템을 Anchor 기준으로 보인다. 자리를 끌면 Tier 위치가,
8
+ * 끝 자리의 점을 끌면 간격이 바뀐다. 끄는 동안은 그림만 바뀌고, 놓을 때 한 번 편집이 된다. Esc 는 끌기 전으로 돌린다.
9
+ *
7
10
  * 컴포넌트 상태를 직접 바꾸지 않는다. 호스트에 두 가지만 알린다:
8
- * change — 적용한 레이아웃 (this.value)
11
+ * change — 적용한 레이아웃 (this.value). live 호스트에는 맞는 편집마다, 아니면 [적용]으로
9
12
  * slot-layout-use-default — 개별 설정을 지우고 기본값을 쓰겠다는 의도 (값을 비우는 편집과 다르다)
13
+ * 맞지 않는 초안은 알리지 않는다: 칸 옆에 문제를 보이고, 장면에는 마지막으로 알린 값이 남는다.
10
14
  * 기본값을 쓰게 된 뒤 보일 값은 호스트가 options.effective 로 다시 준다.
11
15
  */
12
16
  import { LitElement } from 'lit';
13
17
  import { type SlotLayout, type SlotSpaceOptions } from '@hatiolab/things-scene';
14
- import { type PresetSize, type SlotLayoutPreset } from './draft.js';
18
+ import { type HeldItem, type PresetSize, type SlotLayoutPreset } from './draft.js';
15
19
  import { type EditorIssue } from './issue-text.js';
16
20
  export interface SlotLayoutEditorNote {
17
- text: string;
21
+ /** 보일 문구. 없으면 issue 를 편집기의 문구로 보인다 */
22
+ text?: string;
18
23
  level?: 'info' | 'error';
24
+ /** 문구의 종류. OVERRIDE_INVALID: 개별 설정이 맞지 않아 자리가 없음 */
25
+ code?: string;
26
+ issue?: EditorIssue;
19
27
  }
20
28
  export interface SlotLayoutEditorOptions<L extends SlotLayout = SlotLayout> {
21
29
  /** 개별 설정이 없을 때 보이는 값 (호스트가 고른 기본값). 편집 시작점이 된다 */
22
30
  effective?: L;
23
31
  /** [기본값 사용]을 보일지. 기본은 개별 설정(value)이 있을 때 */
24
32
  canUseDefault?: boolean;
33
+ /** 맞는 편집마다 바로 알린다. [적용]·[변경 취소]가 없다. 끌기는 놓을 때 한 번 */
34
+ live?: boolean;
25
35
  /** 호스트가 주는 프리셋 */
26
36
  presets?: SlotLayoutPreset<L>[];
27
37
  /** 프리셋 크기 초기값 */
28
38
  presetSize?: Partial<PresetSize>;
29
39
  /** 상태 문구 (값의 출처, 단위 상태 등) */
30
40
  notes?: SlotLayoutEditorNote[];
31
- /** 홀더가 주는 Anchor. 주면 Tier 는 이 중 하나를 고르고, 없는 Anchor 는 문제로 보인다 */
41
+ /** 홀더가 주는 Anchor. 주면 Tier 는 이 중 하나를 고르고, 없는 Anchor 는 문제로 보인다. part·face 를 주면 면 이름으로 보인다 */
32
42
  anchors?: {
33
43
  id: string;
34
44
  label?: string;
45
+ part?: string;
46
+ face?: string;
35
47
  }[];
36
- /** Anchor 가 주는 적재면 크기 (Anchor 기준 X·Z). 주면 자리가 면 밖으로 나가는지와 확인 불가를 알린다 */
48
+ /** Anchor 가 주는 적재면 크기 (Anchor 기준 X·Z). 그림에 면을 그리고, 자리가 면 밖으로 나가는지 알린다. 없으면 확인 불가로 보인다 */
37
49
  anchorFaces?: SlotSpaceOptions['anchorFaces'];
50
+ /** 레이아웃 길이 단위 (예: mm). 그림과 칸 이름에 붙인다 */
51
+ unit?: string;
52
+ /** 받는 타입을 고르는 목록 (아이템 타입 코드·이름). 없으면 코드를 직접 적는다 */
53
+ itemTypes?: {
54
+ code: string;
55
+ name?: string;
56
+ }[];
57
+ /** 자리마다 받는 타입을 적어야 한다 (Figure 레이아웃). [모든 타입]을 보이지 않는다 */
58
+ acceptsRequired?: boolean;
59
+ /** 지금 실린 아이템 (읽기 전용). 편집 중인 레이아웃에서 어떻게 되는지 보인다 */
60
+ items?: HeldItem[];
38
61
  /** 호스트 고유 검증 (경로는 레이아웃 기준) */
39
62
  validate?: (layout: L) => EditorIssue[];
40
63
  /** 문제 문구. undefined 를 돌려주면 기본 문구 */
@@ -54,19 +77,26 @@ export declare class OxSlotLayoutEditor extends OxSlotLayoutEditor_base {
54
77
  presetKey: string;
55
78
  presetSize: Partial<PresetSize>;
56
79
  presetParams: Record<string, number>;
80
+ /** [면에 맞춤]을 할 수 없던 까닭 */
81
+ fitNote: string | undefined;
82
+ private _drag;
57
83
  willUpdate(changed: Map<string, unknown>): void;
58
- /** 편집 중인 값을 버리고 개별 설정(없으면 호스트 기본값)에서 다시 시작한다 */
84
+ /** 편집 중인 값을 버리고 개별 설정(없으면 호스트 기본값)에서 다시 시작한다. 고른 Tier 는 남아 있으면 그대로 */
59
85
  reset(): void;
60
86
  get issues(): EditorIssue[];
61
- /** 자리끼리 겹치거나 면 밖으로 나가는 설정 경고. 적용을 막지 않는다. 적재면 크기를 주지 않은 호스트에는 확인 불가를 보이지 않는다 */
87
+ /** 자리끼리 겹치거나 면 밖으로 나가는 설정, 면 크기를 몰라 확인하지 못한 Anchor. 적용을 막지 않는다 */
62
88
  get warnings(): EditorIssue[];
63
89
  /** 적용하면 뜻이 바뀌는 주소 (지금 적용된 값 기준) */
64
90
  get impact(): import("./draft.js").AddressImpact;
91
+ private _message;
65
92
  private _text;
66
93
  private _edit;
67
94
  private _apply;
68
95
  private _useDefault;
69
96
  render(): import("lit-html").TemplateResult<1>;
97
+ private _renderNotes;
98
+ /** 문제를 Tier·칸 이름과 함께. 칸을 모르면 경로 그대로 */
99
+ private _located;
70
100
  private _renderPreset;
71
101
  /** 적용 전에 뜻이 바뀌는 주소를 보인다. 놓인 Carrier 는 주소로 다시 읽혀 다른 자리에 그려지거나 예외가 된다 */
72
102
  private _renderImpact;
@@ -75,15 +105,37 @@ export declare class OxSlotLayoutEditor extends OxSlotLayoutEditor_base {
75
105
  private _renderDraft;
76
106
  /** 복사한 Tier 를 골라 둔다. 같은 자리에 겹쳐 생기므로 바로 이어서 배치를 고친다 */
77
107
  private _copyTier;
108
+ private _anchorName;
109
+ private _unit;
110
+ /** 고른 Tier 의 Anchor 면 위에서 본 자리 (Anchor 기준). 오른쪽이 +X, 위쪽이 −Z */
111
+ private _renderPicture;
112
+ /** 면 밖·겹침 경고. 고른 Tier 의 Anchor 면을 모른다는 것은 그림 아래에 이미 적었다 */
113
+ private _renderSpaceWarnings;
114
+ /**
115
+ * 실린 아이템이 편집 중인 레이아웃에서 어떻게 되는지. 자리가 없어지면 미배치로 남고(지우거나 옮기지 않는다), 받는 타입·규격은
116
+ * 공통 판정으로 본다. 치수를 모르는 아이템은 판정하지 않았다고 적는다 — 모양을 자리에 맞춰 그리는 것은 판정이 아니다.
117
+ */
118
+ private _renderItems;
119
+ private _point;
120
+ private _startDrag;
121
+ private _onDragKey;
122
+ private _endDrag;
123
+ disconnectedCallback(): void;
124
+ private _onDragMove;
125
+ /** 놓으면 한 번의 편집. 움직이지 않았으면 아무 일도 없다 */
126
+ private _onDragEnd;
127
+ private _cancelDrag;
128
+ private _row;
129
+ private _num;
130
+ private _seg;
78
131
  private _renderTier;
79
- /** Tier 가 선 Anchor, 적재 방식, Anchor 기준 위치·회전 */
80
- private _renderPlacement;
81
- /** 받는 타입: 모든 타입(accepts 생략) / 지정 타입만(빈 목록이면 아무것도 받지 않음) */
132
+ /** 자리를 어떻게 늘어놓는가: 패턴, 수, 간격, 방향, 1번 자리. 그리고 [면에 맞춤] */
133
+ private _renderArrangement;
134
+ /** 받는 타입: 목록에서 고른 코드(목록에 없는 코드는 그대로 두고 표시), 목록이 없으면 직접 적는다. 필수가 아니면 [모든 타입]도 */
82
135
  private _acceptsEditor;
83
- private _renderSpec;
136
+ /** 자리 하나의 크기·받는 것·쌓기 (이 Tier 의 모든 자리 공통). CUSTOM 은 자리 표에서 */
137
+ private _renderSlot;
84
138
  private _renderCustom;
85
- /** 위에서 본 자리 배치. 오른쪽이 +X, 위쪽이 −Z */
86
- private _renderPreview;
87
139
  }
88
140
  declare global {
89
141
  interface HTMLElementTagNameMap {