@operato/app 10.8.0 → 10.9.0

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 (44) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/dist/src/grist-editor/ox-grist-editor-code.d.ts +1 -0
  3. package/dist/src/grist-editor/ox-grist-editor-code.js +2 -0
  4. package/dist/src/grist-editor/ox-grist-editor-code.js.map +1 -1
  5. package/dist/src/grist-editor/ox-grist-editor-json.d.ts +1 -0
  6. package/dist/src/grist-editor/ox-grist-editor-json.js +2 -0
  7. package/dist/src/grist-editor/ox-grist-editor-json.js.map +1 -1
  8. package/dist/src/grist-editor/ox-grist-editor-privilege.d.ts +1 -0
  9. package/dist/src/grist-editor/ox-grist-editor-privilege.js +2 -0
  10. package/dist/src/grist-editor/ox-grist-editor-privilege.js.map +1 -1
  11. package/dist/src/grist-editor/ox-grist-editor-resource-code.d.ts +1 -0
  12. package/dist/src/grist-editor/ox-grist-editor-resource-code.js +2 -0
  13. package/dist/src/grist-editor/ox-grist-editor-resource-code.js.map +1 -1
  14. package/dist/src/grist-editor/ox-grist-editor-resource-id.d.ts +1 -0
  15. package/dist/src/grist-editor/ox-grist-editor-resource-id.js +2 -0
  16. package/dist/src/grist-editor/ox-grist-editor-resource-id.js.map +1 -1
  17. package/dist/src/grist-editor/ox-grist-editor-resource-object-legacy.d.ts +1 -0
  18. package/dist/src/grist-editor/ox-grist-editor-resource-object-legacy.js +2 -0
  19. package/dist/src/grist-editor/ox-grist-editor-resource-object-legacy.js.map +1 -1
  20. package/dist/src/grist-editor/ox-grist-editor-resource-object.d.ts +1 -0
  21. package/dist/src/grist-editor/ox-grist-editor-resource-object.js +2 -0
  22. package/dist/src/grist-editor/ox-grist-editor-resource-object.js.map +1 -1
  23. package/dist/src/relation/ox-relation-view.d.ts +88 -0
  24. package/dist/src/relation/ox-relation-view.js +262 -0
  25. package/dist/src/relation/ox-relation-view.js.map +1 -0
  26. package/dist/src/relation/relation-groups.d.ts +33 -0
  27. package/dist/src/relation/relation-groups.js +87 -0
  28. package/dist/src/relation/relation-groups.js.map +1 -0
  29. package/dist/src/selector/ox-selector-resource-object-legacy.js +13 -1
  30. package/dist/src/selector/ox-selector-resource-object-legacy.js.map +1 -1
  31. package/dist/src/selector/ox-selector-resource-object.d.ts +40 -2
  32. package/dist/src/selector/ox-selector-resource-object.js +180 -16
  33. package/dist/src/selector/ox-selector-resource-object.js.map +1 -1
  34. package/dist/test/selector-confirm-keeps-value.test.d.ts +1 -0
  35. package/dist/test/selector-confirm-keeps-value.test.js +108 -0
  36. package/dist/test/selector-confirm-keeps-value.test.js.map +1 -0
  37. package/dist/tsconfig.tsbuildinfo +1 -1
  38. package/package.json +61 -53
  39. package/test/selector-confirm-keeps-value.test.ts +127 -0
  40. package/translations/en.json +18 -0
  41. package/translations/es.json +20 -0
  42. package/translations/ja.json +20 -0
  43. package/translations/ko.json +18 -0
  44. package/translations/zh.json +18 -0
package/CHANGELOG.md CHANGED
@@ -3,6 +3,37 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [10.9.0](https://github.com/hatiolab/operato/compare/v10.8.1...v10.9.0) (2026-09-05)
7
+
8
+
9
+ ### :memo: Documentation
10
+
11
+ * **app:** 타입 관계를 그림에서 빼는 근거를 그 자리에 적는다 ([d9da892](https://github.com/hatiolab/operato/commit/d9da89277f151e34ba403ace7c993e01ebc8e585))
12
+
13
+
14
+ ### :rocket: New Features
15
+
16
+ * **app:** 관계 그림과 그 변환기를 공용으로 올린다 ([ad8ad58](https://github.com/hatiolab/operato/commit/ad8ad5822f569004fb70aa1bfac9fb885a655682))
17
+ * **app:** 참조 선택기가 여럿 고르기를 받는다 ([1ac49ab](https://github.com/hatiolab/operato/commit/1ac49ab5ad4ffa2ea31bf7eecd718691eebedfe5))
18
+ * **data-grist, popup:** 표식은 값의 빈자리에, 팝업은 닫히면 제자리로 ([cdcd84c](https://github.com/hatiolab/operato/commit/cdcd84c53cdb12ba0664cc9d2bb4c8238e4ea9f4))
19
+ * **data-grist:** 팝업으로 고치는 칸에 표식을 둔다 ([69fae8f](https://github.com/hatiolab/operato/commit/69fae8f92024bd59ac21e90b9b2837be95f222cf))
20
+
21
+
22
+ ### :bug: Bug Fix
23
+
24
+ * **app:** 관계 낱말의 접두를 ops.rel.* 로 옮긴다 ([4d942f9](https://github.com/hatiolab/operato/commit/4d942f97b305904db76079d65ed35f534aaa3de9))
25
+ * **app:** 참조 선택기의 확인이 값을 지우던 것을 막고, 왜 못 누르는지 말한다 ([40c6f3b](https://github.com/hatiolab/operato/commit/40c6f3bb2a4008d839e5b1efd12509c1513c0fec)), closes [#262e38](https://github.com/hatiolab/operato/issues/262e38) [#0c7a4](https://github.com/hatiolab/operato/issues/0c7a4) [#f0f2f4](https://github.com/hatiolab/operato/issues/f0f2f4)
26
+
27
+
28
+
29
+ ### [10.8.1](https://github.com/hatiolab/operato/compare/v10.8.0...v10.8.1) (2026-09-04)
30
+
31
+ **Note:** Version bump only for package @operato/app
32
+
33
+
34
+
35
+
36
+
6
37
  ## [10.8.0](https://github.com/hatiolab/operato/compare/v10.7.0...v10.8.0) (2026-09-04)
7
38
 
8
39
 
@@ -1,6 +1,7 @@
1
1
  import '@operato/data-grist/ox-popup-code-input.js';
2
2
  import { OxGristEditor } from '@operato/data-grist';
3
3
  export declare class OxGristEditorCode extends OxGristEditor {
4
+ static opensPopup: boolean;
4
5
  get editorTemplate(): import("lit-html").TemplateResult<1>;
5
6
  _onclick(e: Event): void;
6
7
  _onkeydown(e: KeyboardEvent): void;
@@ -50,6 +50,8 @@ let OxGristEditorCode = class OxGristEditorCode extends OxGristEditor {
50
50
  });
51
51
  }
52
52
  };
53
+ /* 팝업으로 고친다 — 칸에 표식이 붙는다(OxGristEditor.opensPopup). */
54
+ OxGristEditorCode.opensPopup = true;
53
55
  OxGristEditorCode = __decorate([
54
56
  customElement('ox-grist-editor-code')
55
57
  ], OxGristEditorCode);
@@ -1 +1 @@
1
- {"version":3,"file":"ox-grist-editor-code.js","sourceRoot":"","sources":["../../../src/grist-editor/ox-grist-editor-code.ts"],"names":[],"mappings":";AAAA,OAAO,4CAA4C,CAAA;AAEnD,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAA;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAEjD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAGpC,IAAM,iBAAiB,GAAvB,MAAM,iBAAkB,SAAQ,aAAa;IAClD,IAAI,cAAc;QAChB,OAAO,IAAI,CAAA,sBAAsB,IAAI,CAAC,KAAK,IAAI,EAAE,SAAS,CAAA;IAC5D,CAAC;IAED,QAAQ,CAAC,CAAQ;QACf,CAAC,CAAC,eAAe,EAAE,CAAA;QACnB,IAAI,CAAC,eAAe,EAAE,CAAA;IACxB,CAAC;IAED,UAAU,CAAC,CAAgB;QACzB,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAA;QACjB,IAAI,GAAG,IAAI,OAAO,EAAE,CAAC;YACnB,CAAC,CAAC,eAAe,EAAE,CAAA;YACnB,IAAI,CAAC,eAAe,EAAE,CAAA;QACxB,CAAC;IACH,CAAC;IAED,eAAe;;QACb,IAAI,EAAE,IAAI,EAAE,QAAQ,GAAG,YAAY,EAAE,GAAG,CAAA,MAAA,IAAI,CAAC,MAAM,CAAC,MAAM,0CAAE,OAAO,KAAI,EAAE,CAAA;QAEzE,IAAI,MAAM,GAAG,CAAC,KAAa,EAAE,EAAE;YAC7B,IAAI,CAAC,aAAa,CAChB,IAAI,WAAW,CAAC,cAAc,EAAE;gBAC9B,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,IAAI;gBACd,MAAM,EAAE;oBACN,MAAM,EAAE,IAAI,CAAC,KAAK;oBAClB,KAAK,EAAE,KAAK;oBACZ,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,GAAG,EAAE,IAAI,CAAC,GAAG;iBACd;aACF,CAAC,CACH,CAAA;QACH,CAAC,CAAA;QAED,IAAI,KAAK,GAAG,SAAS,CACnB,IAAI,CAAA;;mBAES,IAAI,CAAC,KAAK;iBACZ,IAAI;6BACQ,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;qBACzB,QAAQ;;OAEtB,EACD;YACE,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,iBAAiB,CAAC;YACnC,IAAI,EAAE,8BAA8B;SACrC,CACF,CAAA;IACH,CAAC;CACF,CAAA;AArDY,iBAAiB;IAD7B,aAAa,CAAC,sBAAsB,CAAC;GACzB,iBAAiB,CAqD7B","sourcesContent":["import '@operato/data-grist/ox-popup-code-input.js'\n\nimport { html } from 'lit'\nimport { customElement } from 'lit/decorators.js'\n\nimport { OxGristEditor } from '@operato/data-grist'\nimport { i18next } from '@operato/i18n'\nimport { openPopup } from '@operato/layout'\n\n@customElement('ox-grist-editor-code')\nexport class OxGristEditorCode extends OxGristEditor {\n get editorTemplate() {\n return html` <div tabindex=\"0\">${this.value || ''}</div> `\n }\n\n _onclick(e: Event): void {\n e.stopPropagation()\n this.showEditorPopup()\n }\n\n _onkeydown(e: KeyboardEvent): void {\n const key = e.key\n if (key == 'Enter') {\n e.stopPropagation()\n this.showEditorPopup()\n }\n }\n\n showEditorPopup() {\n var { mode, language = 'javascript' } = this.column.record?.options || {}\n\n var change = (value: string) => {\n this.dispatchEvent(\n new CustomEvent('field-change', {\n bubbles: true,\n composed: true,\n detail: {\n before: this.value,\n after: value,\n column: this.column,\n record: this.record,\n row: this.row\n }\n })\n )\n }\n\n var popup = openPopup(\n html`\n <ox-popup-code-input\n .value=${this.value}\n mode=${mode}\n .confirmCallback=${change.bind(this)}\n language=${language}\n ></ox-popup-code-input>\n `,\n {\n backdrop: true,\n title: i18next.t('title.edit code'),\n help: 'data-grist/grist-editor/code'\n }\n )\n }\n}\n"]}
1
+ {"version":3,"file":"ox-grist-editor-code.js","sourceRoot":"","sources":["../../../src/grist-editor/ox-grist-editor-code.ts"],"names":[],"mappings":";AAAA,OAAO,4CAA4C,CAAA;AAEnD,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAA;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAEjD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAGpC,IAAM,iBAAiB,GAAvB,MAAM,iBAAkB,SAAQ,aAAa;IAIlD,IAAI,cAAc;QAChB,OAAO,IAAI,CAAA,sBAAsB,IAAI,CAAC,KAAK,IAAI,EAAE,SAAS,CAAA;IAC5D,CAAC;IAED,QAAQ,CAAC,CAAQ;QACf,CAAC,CAAC,eAAe,EAAE,CAAA;QACnB,IAAI,CAAC,eAAe,EAAE,CAAA;IACxB,CAAC;IAED,UAAU,CAAC,CAAgB;QACzB,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAA;QACjB,IAAI,GAAG,IAAI,OAAO,EAAE,CAAC;YACnB,CAAC,CAAC,eAAe,EAAE,CAAA;YACnB,IAAI,CAAC,eAAe,EAAE,CAAA;QACxB,CAAC;IACH,CAAC;IAED,eAAe;;QACb,IAAI,EAAE,IAAI,EAAE,QAAQ,GAAG,YAAY,EAAE,GAAG,CAAA,MAAA,IAAI,CAAC,MAAM,CAAC,MAAM,0CAAE,OAAO,KAAI,EAAE,CAAA;QAEzE,IAAI,MAAM,GAAG,CAAC,KAAa,EAAE,EAAE;YAC7B,IAAI,CAAC,aAAa,CAChB,IAAI,WAAW,CAAC,cAAc,EAAE;gBAC9B,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,IAAI;gBACd,MAAM,EAAE;oBACN,MAAM,EAAE,IAAI,CAAC,KAAK;oBAClB,KAAK,EAAE,KAAK;oBACZ,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,GAAG,EAAE,IAAI,CAAC,GAAG;iBACd;aACF,CAAC,CACH,CAAA;QACH,CAAC,CAAA;QAED,IAAI,KAAK,GAAG,SAAS,CACnB,IAAI,CAAA;;mBAES,IAAI,CAAC,KAAK;iBACZ,IAAI;6BACQ,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;qBACzB,QAAQ;;OAEtB,EACD;YACE,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,iBAAiB,CAAC;YACnC,IAAI,EAAE,8BAA8B;SACrC,CACF,CAAA;IACH,CAAC;;AAtDD,sDAAsD;AAC/C,4BAAU,GAAG,IAAI,AAAP,CAAO;AAFb,iBAAiB;IAD7B,aAAa,CAAC,sBAAsB,CAAC;GACzB,iBAAiB,CAwD7B","sourcesContent":["import '@operato/data-grist/ox-popup-code-input.js'\n\nimport { html } from 'lit'\nimport { customElement } from 'lit/decorators.js'\n\nimport { OxGristEditor } from '@operato/data-grist'\nimport { i18next } from '@operato/i18n'\nimport { openPopup } from '@operato/layout'\n\n@customElement('ox-grist-editor-code')\nexport class OxGristEditorCode extends OxGristEditor {\n /* 팝업으로 고친다 — 칸에 표식이 붙는다(OxGristEditor.opensPopup). */\n static opensPopup = true\n\n get editorTemplate() {\n return html` <div tabindex=\"0\">${this.value || ''}</div> `\n }\n\n _onclick(e: Event): void {\n e.stopPropagation()\n this.showEditorPopup()\n }\n\n _onkeydown(e: KeyboardEvent): void {\n const key = e.key\n if (key == 'Enter') {\n e.stopPropagation()\n this.showEditorPopup()\n }\n }\n\n showEditorPopup() {\n var { mode, language = 'javascript' } = this.column.record?.options || {}\n\n var change = (value: string) => {\n this.dispatchEvent(\n new CustomEvent('field-change', {\n bubbles: true,\n composed: true,\n detail: {\n before: this.value,\n after: value,\n column: this.column,\n record: this.record,\n row: this.row\n }\n })\n )\n }\n\n var popup = openPopup(\n html`\n <ox-popup-code-input\n .value=${this.value}\n mode=${mode}\n .confirmCallback=${change.bind(this)}\n language=${language}\n ></ox-popup-code-input>\n `,\n {\n backdrop: true,\n title: i18next.t('title.edit code'),\n help: 'data-grist/grist-editor/code'\n }\n )\n }\n}\n"]}
@@ -1,6 +1,7 @@
1
1
  import '@operato/data-grist/ox-popup-code-input.js';
2
2
  import { OxGristEditor } from '@operato/data-grist';
3
3
  export declare class OxGristEditorJson extends OxGristEditor {
4
+ static opensPopup: boolean;
4
5
  get editorTemplate(): import("lit-html").TemplateResult<1>;
5
6
  _onclick(e: Event): void;
6
7
  _onkeydown(e: KeyboardEvent): void;
@@ -51,6 +51,8 @@ let OxGristEditorJson = class OxGristEditorJson extends OxGristEditor {
51
51
  });
52
52
  }
53
53
  };
54
+ /* 팝업으로 고친다 — 칸에 표식이 붙는다(OxGristEditor.opensPopup). */
55
+ OxGristEditorJson.opensPopup = true;
54
56
  OxGristEditorJson = __decorate([
55
57
  customElement('ox-grist-editor-json')
56
58
  ], OxGristEditorJson);
@@ -1 +1 @@
1
- {"version":3,"file":"ox-grist-editor-json.js","sourceRoot":"","sources":["../../../src/grist-editor/ox-grist-editor-json.ts"],"names":[],"mappings":";AAAA,OAAO,4CAA4C,CAAA;AAEnD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAA;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAGpC,IAAM,iBAAiB,GAAvB,MAAM,iBAAkB,SAAQ,aAAa;IAClD,IAAI,cAAc;QAChB,OAAO,IAAI,CAAA,sBAAsB,IAAI,CAAC,KAAK,IAAI,EAAE,SAAS,CAAA;IAC5D,CAAC;IAED,QAAQ,CAAC,CAAQ;QACf,CAAC,CAAC,eAAe,EAAE,CAAA;QACnB,IAAI,CAAC,eAAe,EAAE,CAAA;IACxB,CAAC;IAED,UAAU,CAAC,CAAgB;QACzB,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAA;QACjB,IAAI,GAAG,IAAI,OAAO,EAAE,CAAC;YACnB,CAAC,CAAC,eAAe,EAAE,CAAA;YACnB,IAAI,CAAC,eAAe,EAAE,CAAA;QACxB,CAAC;IACH,CAAC;IAED,eAAe;QACb,IAAI,MAAM,GAAG,CAAC,KAAa,EAAE,EAAE;YAC7B,IAAI,CAAC,aAAa,CAChB,IAAI,WAAW,CAAC,QAAQ,EAAE;gBACxB,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,IAAI;gBACd,MAAM,EAAE;oBACN,MAAM,EAAE,IAAI,CAAC,KAAK;oBAClB,KAAK,EAAE,KAAK;oBACZ,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,GAAG,EAAE,IAAI,CAAC,GAAG;iBACd;aACF,CAAC,CACH,CAAA;QACH,CAAC,CAAA;QAED,IAAI,KAAK,GAAG,SAAS,CACnB,IAAI,CAAA;;mBAES,IAAI,CAAC,KAAK;;oBAET,CAAC,CAAc,EAAE,EAAE;YAC3B,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YACtB,KAAK,CAAC,KAAK,EAAE,CAAA;QACf,CAAC;;;OAGJ,EACD;YACE,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,iBAAiB,CAAC;YACnC,IAAI,EAAE,8BAA8B;SACrC,CACF,CAAA;IACH,CAAC;CACF,CAAA;AAtDY,iBAAiB;IAD7B,aAAa,CAAC,sBAAsB,CAAC;GACzB,iBAAiB,CAsD7B","sourcesContent":["import '@operato/data-grist/ox-popup-code-input.js'\n\nimport { OxGristEditor } from '@operato/data-grist'\nimport { customElement } from 'lit/decorators.js'\nimport { html } from 'lit'\nimport { i18next } from '@operato/i18n'\nimport { openPopup } from '@operato/layout'\n\n@customElement('ox-grist-editor-json')\nexport class OxGristEditorJson extends OxGristEditor {\n get editorTemplate() {\n return html` <div tabindex=\"0\">${this.value || ''}</div> `\n }\n\n _onclick(e: Event): void {\n e.stopPropagation()\n this.showEditorPopup()\n }\n\n _onkeydown(e: KeyboardEvent): void {\n const key = e.key\n if (key == 'Enter') {\n e.stopPropagation()\n this.showEditorPopup()\n }\n }\n\n showEditorPopup() {\n var change = (value: string) => {\n this.dispatchEvent(\n new CustomEvent('change', {\n bubbles: true,\n composed: true,\n detail: {\n before: this.value,\n after: value,\n column: this.column,\n record: this.record,\n row: this.row\n }\n })\n )\n }\n\n var popup = openPopup(\n html`\n <ox-popup-code-input\n .value=${this.value}\n mode=\"javascript\"\n @change=${(e: CustomEvent) => {\n change(e.detail.value)\n popup.close()\n }}\n lanugage=\"json\"\n ></ox-popup-code-input>\n `,\n {\n backdrop: true,\n title: i18next.t('title.edit json'),\n help: 'data-grist/grist-editor/json'\n }\n )\n }\n}\n"]}
1
+ {"version":3,"file":"ox-grist-editor-json.js","sourceRoot":"","sources":["../../../src/grist-editor/ox-grist-editor-json.ts"],"names":[],"mappings":";AAAA,OAAO,4CAA4C,CAAA;AAEnD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAA;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAGpC,IAAM,iBAAiB,GAAvB,MAAM,iBAAkB,SAAQ,aAAa;IAIlD,IAAI,cAAc;QAChB,OAAO,IAAI,CAAA,sBAAsB,IAAI,CAAC,KAAK,IAAI,EAAE,SAAS,CAAA;IAC5D,CAAC;IAED,QAAQ,CAAC,CAAQ;QACf,CAAC,CAAC,eAAe,EAAE,CAAA;QACnB,IAAI,CAAC,eAAe,EAAE,CAAA;IACxB,CAAC;IAED,UAAU,CAAC,CAAgB;QACzB,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAA;QACjB,IAAI,GAAG,IAAI,OAAO,EAAE,CAAC;YACnB,CAAC,CAAC,eAAe,EAAE,CAAA;YACnB,IAAI,CAAC,eAAe,EAAE,CAAA;QACxB,CAAC;IACH,CAAC;IAED,eAAe;QACb,IAAI,MAAM,GAAG,CAAC,KAAa,EAAE,EAAE;YAC7B,IAAI,CAAC,aAAa,CAChB,IAAI,WAAW,CAAC,QAAQ,EAAE;gBACxB,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,IAAI;gBACd,MAAM,EAAE;oBACN,MAAM,EAAE,IAAI,CAAC,KAAK;oBAClB,KAAK,EAAE,KAAK;oBACZ,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,GAAG,EAAE,IAAI,CAAC,GAAG;iBACd;aACF,CAAC,CACH,CAAA;QACH,CAAC,CAAA;QAED,IAAI,KAAK,GAAG,SAAS,CACnB,IAAI,CAAA;;mBAES,IAAI,CAAC,KAAK;;oBAET,CAAC,CAAc,EAAE,EAAE;YAC3B,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YACtB,KAAK,CAAC,KAAK,EAAE,CAAA;QACf,CAAC;;;OAGJ,EACD;YACE,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,iBAAiB,CAAC;YACnC,IAAI,EAAE,8BAA8B;SACrC,CACF,CAAA;IACH,CAAC;;AAvDD,sDAAsD;AAC/C,4BAAU,GAAG,IAAI,AAAP,CAAO;AAFb,iBAAiB;IAD7B,aAAa,CAAC,sBAAsB,CAAC;GACzB,iBAAiB,CAyD7B","sourcesContent":["import '@operato/data-grist/ox-popup-code-input.js'\n\nimport { OxGristEditor } from '@operato/data-grist'\nimport { customElement } from 'lit/decorators.js'\nimport { html } from 'lit'\nimport { i18next } from '@operato/i18n'\nimport { openPopup } from '@operato/layout'\n\n@customElement('ox-grist-editor-json')\nexport class OxGristEditorJson extends OxGristEditor {\n /* 팝업으로 고친다 — 칸에 표식이 붙는다(OxGristEditor.opensPopup). */\n static opensPopup = true\n\n get editorTemplate() {\n return html` <div tabindex=\"0\">${this.value || ''}</div> `\n }\n\n _onclick(e: Event): void {\n e.stopPropagation()\n this.showEditorPopup()\n }\n\n _onkeydown(e: KeyboardEvent): void {\n const key = e.key\n if (key == 'Enter') {\n e.stopPropagation()\n this.showEditorPopup()\n }\n }\n\n showEditorPopup() {\n var change = (value: string) => {\n this.dispatchEvent(\n new CustomEvent('change', {\n bubbles: true,\n composed: true,\n detail: {\n before: this.value,\n after: value,\n column: this.column,\n record: this.record,\n row: this.row\n }\n })\n )\n }\n\n var popup = openPopup(\n html`\n <ox-popup-code-input\n .value=${this.value}\n mode=\"javascript\"\n @change=${(e: CustomEvent) => {\n change(e.detail.value)\n popup.close()\n }}\n lanugage=\"json\"\n ></ox-popup-code-input>\n `,\n {\n backdrop: true,\n title: i18next.t('title.edit json'),\n help: 'data-grist/grist-editor/json'\n }\n )\n }\n}\n"]}
@@ -1,6 +1,7 @@
1
1
  import './ox-popup-privilege-input.js';
2
2
  import { OxGristEditor } from '@operato/data-grist';
3
3
  export declare class OxGristEditorPrivilege extends OxGristEditor {
4
+ static opensPopup: boolean;
4
5
  get editorTemplate(): import("lit-html").TemplateResult<1>;
5
6
  _onclick(e: Event): void;
6
7
  _onkeydown(e: KeyboardEvent): void;
@@ -44,6 +44,8 @@ let OxGristEditorPrivilege = class OxGristEditorPrivilege extends OxGristEditor
44
44
  });
45
45
  }
46
46
  };
47
+ /* 팝업으로 고친다 — 칸에 표식이 붙는다(OxGristEditor.opensPopup). */
48
+ OxGristEditorPrivilege.opensPopup = true;
47
49
  OxGristEditorPrivilege = __decorate([
48
50
  customElement('ox-grist-editor-privilege')
49
51
  ], OxGristEditorPrivilege);
@@ -1 +1 @@
1
- {"version":3,"file":"ox-grist-editor-privilege.js","sourceRoot":"","sources":["../../../src/grist-editor/ox-grist-editor-privilege.ts"],"names":[],"mappings":";AAAA,OAAO,+BAA+B,CAAA;AAEtC,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAA;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAEjD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAGpC,IAAM,sBAAsB,GAA5B,MAAM,sBAAuB,SAAQ,aAAa;IACvD,IAAI,cAAc;QAChB,OAAO,IAAI,CAAA,+BAA+B,CAAA;IAC5C,CAAC;IAED,QAAQ,CAAC,CAAQ;QACf,CAAC,CAAC,eAAe,EAAE,CAAA;QACnB,IAAI,CAAC,eAAe,EAAE,CAAA;IACxB,CAAC;IAED,UAAU,CAAC,CAAgB;QACzB,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAA;QACjB,IAAI,GAAG,IAAI,OAAO,EAAE,CAAC;YACnB,CAAC,CAAC,eAAe,EAAE,CAAA;YACnB,IAAI,CAAC,eAAe,EAAE,CAAA;QACxB,CAAC;IACH,CAAC;IAED,eAAe;QACb,IAAI,MAAM,GAAG,CAAC,KAAa,EAAE,EAAE;YAC7B,IAAI,CAAC,aAAa,CAChB,IAAI,WAAW,CAAC,cAAc,EAAE;gBAC9B,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,IAAI;gBACd,MAAM,EAAE;oBACN,MAAM,EAAE,IAAI,CAAC,KAAK;oBAClB,KAAK,EAAE,KAAK;oBACZ,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,GAAG,EAAE,IAAI,CAAC,GAAG;iBACd;aACF,CAAC,CACH,CAAA;QACH,CAAC,CAAA;QAED,IAAI,KAAK,GAAG,SAAS,CACnB,IAAI,CAAA;2CACiC,IAAI,CAAC,KAAK,qBAAqB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;OACpF,EACD;YACE,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,sBAAsB,CAAC;YACxC,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,mCAAmC;SAC1C,CACF,CAAA;IACH,CAAC;CACF,CAAA;AA/CY,sBAAsB;IADlC,aAAa,CAAC,2BAA2B,CAAC;GAC9B,sBAAsB,CA+ClC","sourcesContent":["import './ox-popup-privilege-input.js'\n\nimport { html } from 'lit'\nimport { customElement } from 'lit/decorators.js'\n\nimport { OxGristEditor } from '@operato/data-grist'\nimport { i18next } from '@operato/i18n'\nimport { openPopup } from '@operato/layout'\n\n@customElement('ox-grist-editor-privilege')\nexport class OxGristEditorPrivilege extends OxGristEditor {\n get editorTemplate() {\n return html` <div tabindex=\"0\">...</div> `\n }\n\n _onclick(e: Event): void {\n e.stopPropagation()\n this.showEditorPopup()\n }\n\n _onkeydown(e: KeyboardEvent): void {\n const key = e.key\n if (key == 'Enter') {\n e.stopPropagation()\n this.showEditorPopup()\n }\n }\n\n showEditorPopup() {\n var change = (value: string) => {\n this.dispatchEvent(\n new CustomEvent('field-change', {\n bubbles: true,\n composed: true,\n detail: {\n before: this.value,\n after: value,\n column: this.column,\n record: this.record,\n row: this.row\n }\n })\n )\n }\n\n var popup = openPopup(\n html`\n <ox-popup-privilege-input .value=${this.value} .confirmCallback=${change.bind(this)}></ox-popup-privilege-input>\n `,\n {\n backdrop: true,\n title: i18next.t('title.edit privilege'),\n size: 'medium',\n help: 'data-grist/grist-editor/privilege'\n }\n )\n }\n}\n"]}
1
+ {"version":3,"file":"ox-grist-editor-privilege.js","sourceRoot":"","sources":["../../../src/grist-editor/ox-grist-editor-privilege.ts"],"names":[],"mappings":";AAAA,OAAO,+BAA+B,CAAA;AAEtC,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAA;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAEjD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAGpC,IAAM,sBAAsB,GAA5B,MAAM,sBAAuB,SAAQ,aAAa;IAIvD,IAAI,cAAc;QAChB,OAAO,IAAI,CAAA,+BAA+B,CAAA;IAC5C,CAAC;IAED,QAAQ,CAAC,CAAQ;QACf,CAAC,CAAC,eAAe,EAAE,CAAA;QACnB,IAAI,CAAC,eAAe,EAAE,CAAA;IACxB,CAAC;IAED,UAAU,CAAC,CAAgB;QACzB,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAA;QACjB,IAAI,GAAG,IAAI,OAAO,EAAE,CAAC;YACnB,CAAC,CAAC,eAAe,EAAE,CAAA;YACnB,IAAI,CAAC,eAAe,EAAE,CAAA;QACxB,CAAC;IACH,CAAC;IAED,eAAe;QACb,IAAI,MAAM,GAAG,CAAC,KAAa,EAAE,EAAE;YAC7B,IAAI,CAAC,aAAa,CAChB,IAAI,WAAW,CAAC,cAAc,EAAE;gBAC9B,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,IAAI;gBACd,MAAM,EAAE;oBACN,MAAM,EAAE,IAAI,CAAC,KAAK;oBAClB,KAAK,EAAE,KAAK;oBACZ,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,GAAG,EAAE,IAAI,CAAC,GAAG;iBACd;aACF,CAAC,CACH,CAAA;QACH,CAAC,CAAA;QAED,IAAI,KAAK,GAAG,SAAS,CACnB,IAAI,CAAA;2CACiC,IAAI,CAAC,KAAK,qBAAqB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;OACpF,EACD;YACE,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,sBAAsB,CAAC;YACxC,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,mCAAmC;SAC1C,CACF,CAAA;IACH,CAAC;;AAhDD,sDAAsD;AAC/C,iCAAU,GAAG,IAAI,AAAP,CAAO;AAFb,sBAAsB;IADlC,aAAa,CAAC,2BAA2B,CAAC;GAC9B,sBAAsB,CAkDlC","sourcesContent":["import './ox-popup-privilege-input.js'\n\nimport { html } from 'lit'\nimport { customElement } from 'lit/decorators.js'\n\nimport { OxGristEditor } from '@operato/data-grist'\nimport { i18next } from '@operato/i18n'\nimport { openPopup } from '@operato/layout'\n\n@customElement('ox-grist-editor-privilege')\nexport class OxGristEditorPrivilege extends OxGristEditor {\n /* 팝업으로 고친다 — 칸에 표식이 붙는다(OxGristEditor.opensPopup). */\n static opensPopup = true\n\n get editorTemplate() {\n return html` <div tabindex=\"0\">...</div> `\n }\n\n _onclick(e: Event): void {\n e.stopPropagation()\n this.showEditorPopup()\n }\n\n _onkeydown(e: KeyboardEvent): void {\n const key = e.key\n if (key == 'Enter') {\n e.stopPropagation()\n this.showEditorPopup()\n }\n }\n\n showEditorPopup() {\n var change = (value: string) => {\n this.dispatchEvent(\n new CustomEvent('field-change', {\n bubbles: true,\n composed: true,\n detail: {\n before: this.value,\n after: value,\n column: this.column,\n record: this.record,\n row: this.row\n }\n })\n )\n }\n\n var popup = openPopup(\n html`\n <ox-popup-privilege-input .value=${this.value} .confirmCallback=${change.bind(this)}></ox-popup-privilege-input>\n `,\n {\n backdrop: true,\n title: i18next.t('title.edit privilege'),\n size: 'medium',\n help: 'data-grist/grist-editor/privilege'\n }\n )\n }\n}\n"]}
@@ -1,5 +1,6 @@
1
1
  import '@material/web/icon/icon.js';
2
2
  import { OxGristEditor } from '@operato/data-grist';
3
3
  export declare class OxGristEditorResourceCode extends OxGristEditor {
4
+ static opensPopup: boolean;
4
5
  get editorTemplate(): import("lit-html").TemplateResult<1>;
5
6
  }
@@ -17,6 +17,8 @@ let OxGristEditorResourceCode = class OxGristEditorResourceCode extends OxGristE
17
17
  `;
18
18
  }
19
19
  };
20
+ /* 팝업으로 고친다 — 칸에 표식이 붙는다(OxGristEditor.opensPopup). */
21
+ OxGristEditorResourceCode.opensPopup = true;
20
22
  OxGristEditorResourceCode = __decorate([
21
23
  customElement('ox-grist-editor-resource-code')
22
24
  ], OxGristEditorResourceCode);
@@ -1 +1 @@
1
- {"version":3,"file":"ox-grist-editor-resource-code.js","sourceRoot":"","sources":["../../../src/grist-editor/ox-grist-editor-resource-code.ts"],"names":[],"mappings":";AAAA,OAAO,4BAA4B,CAAA;AACnC,OAAO,EAAE,aAAa,EAAgB,MAAM,qBAAqB,CAAA;AAEjE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAA;AASnB,IAAM,yBAAyB,GAA/B,MAAM,yBAA0B,SAAQ,aAAa;IAC1D,IAAI,cAAc;QAChB,IAAI,EAAE,KAAK,EAAE,aAAa,GAAG,WAAW,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAA;QAErE,OAAO,IAAI,CAAA;;UAEL,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CACjB,CAAC,IAAsB,EAAE,EAAE,CAAC,IAAI,CAAA;gCACV,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,UAAU,IAAI,CAAC,IAAI;gBAC1D,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC;;WAEtG,CACF;;KAEJ,CAAA;IACH,CAAC;CACF,CAAA;AAhBY,yBAAyB;IADrC,aAAa,CAAC,+BAA+B,CAAC;GAClC,yBAAyB,CAgBrC","sourcesContent":["import '@material/web/icon/icon.js'\nimport { OxGristEditor, RecordConfig } from '@operato/data-grist'\n\nimport { customElement } from 'lit/decorators.js'\nimport { html } from 'lit'\n\ntype CommonCodeDetail = {\n name: string\n description: string\n rank: number\n}\n\n@customElement('ox-grist-editor-resource-code')\nexport class OxGristEditorResourceCode extends OxGristEditor {\n get editorTemplate() {\n var { codes, selectDispOpt = 'code-name' } = this.column.record || {}\n\n return html`\n <select>\n ${(codes || []).map(\n (code: CommonCodeDetail) => html`\n <option ?selected=${code.name == this.value} value=${code.name}>\n ${code.name == '' ? '' : selectDispOpt.replace('name', code.description).replace('code', code.name)}\n </option>\n `\n )}\n </select>\n `\n }\n}\n"]}
1
+ {"version":3,"file":"ox-grist-editor-resource-code.js","sourceRoot":"","sources":["../../../src/grist-editor/ox-grist-editor-resource-code.ts"],"names":[],"mappings":";AAAA,OAAO,4BAA4B,CAAA;AACnC,OAAO,EAAE,aAAa,EAAgB,MAAM,qBAAqB,CAAA;AAEjE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAA;AASnB,IAAM,yBAAyB,GAA/B,MAAM,yBAA0B,SAAQ,aAAa;IAI1D,IAAI,cAAc;QAChB,IAAI,EAAE,KAAK,EAAE,aAAa,GAAG,WAAW,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAA;QAErE,OAAO,IAAI,CAAA;;UAEL,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CACjB,CAAC,IAAsB,EAAE,EAAE,CAAC,IAAI,CAAA;gCACV,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,UAAU,IAAI,CAAC,IAAI;gBAC1D,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC;;WAEtG,CACF;;KAEJ,CAAA;IACH,CAAC;;AAjBD,sDAAsD;AAC/C,oCAAU,GAAG,IAAI,AAAP,CAAO;AAFb,yBAAyB;IADrC,aAAa,CAAC,+BAA+B,CAAC;GAClC,yBAAyB,CAmBrC","sourcesContent":["import '@material/web/icon/icon.js'\nimport { OxGristEditor, RecordConfig } from '@operato/data-grist'\n\nimport { customElement } from 'lit/decorators.js'\nimport { html } from 'lit'\n\ntype CommonCodeDetail = {\n name: string\n description: string\n rank: number\n}\n\n@customElement('ox-grist-editor-resource-code')\nexport class OxGristEditorResourceCode extends OxGristEditor {\n /* 팝업으로 고친다 — 칸에 표식이 붙는다(OxGristEditor.opensPopup). */\n static opensPopup = true\n\n get editorTemplate() {\n var { codes, selectDispOpt = 'code-name' } = this.column.record || {}\n\n return html`\n <select>\n ${(codes || []).map(\n (code: CommonCodeDetail) => html`\n <option ?selected=${code.name == this.value} value=${code.name}>\n ${code.name == '' ? '' : selectDispOpt.replace('name', code.description).replace('code', code.name)}\n </option>\n `\n )}\n </select>\n `\n }\n}\n"]}
@@ -2,6 +2,7 @@ import '@material/web/icon/icon.js';
2
2
  import '../selector/ox-selector-resource-id.js';
3
3
  import { OxGristEditor } from '@operato/data-grist';
4
4
  export declare class OxGristEditorResourceId extends OxGristEditor {
5
+ static opensPopup: boolean;
5
6
  private popup?;
6
7
  render(): import("lit-html").TemplateResult<1>;
7
8
  _onclick(e: Event): void;
@@ -70,6 +70,8 @@ let OxGristEditorResourceId = class OxGristEditorResourceId extends OxGristEdito
70
70
  });
71
71
  }
72
72
  };
73
+ /* 팝업으로 고친다 — 칸에 표식이 붙는다(OxGristEditor.opensPopup). */
74
+ OxGristEditorResourceId.opensPopup = true;
73
75
  OxGristEditorResourceId = __decorate([
74
76
  customElement('ox-grist-editor-resource-id')
75
77
  ], OxGristEditorResourceId);
@@ -1 +1 @@
1
- {"version":3,"file":"ox-grist-editor-resource-id.js","sourceRoot":"","sources":["../../../src/grist-editor/ox-grist-editor-resource-id.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/web/icon/icon.js'\nimport '../selector/ox-selector-resource-id.js'\n\nimport { html } from 'lit'\nimport { customElement } from 'lit/decorators.js'\n\nimport { GristRecord, OxGristEditor } from '@operato/data-grist'\nimport { openPopup, PopupHandle } from '@operato/layout'\n\n@customElement('ox-grist-editor-resource-id')\nexport class OxGristEditorResourceId extends OxGristEditor {\n private popup?: PopupHandle\n\n render() {\n var { nameField = 'name', descriptionField = 'description' } = this.column.record.options || {}\n var value = this.value\n\n return html`\n ${!value\n ? html`<span tabindex=\"0\"></span>`\n : html` <span tabindex=\"0\">${value[nameField]} (${value[descriptionField]})</span> `}\n <md-icon>arrow_drop_down</md-icon>\n `\n }\n\n _onclick(e: Event): void {\n e.stopPropagation()\n this.openSelector()\n }\n\n _onkeydown(e: KeyboardEvent): void {\n const key = e.key\n if (key == 'Enter') {\n e.stopPropagation()\n this.openSelector()\n }\n }\n\n openSelector() {\n if (this.popup) {\n delete this.popup\n }\n\n const confirmCallback: (record?: GristRecord) => void = selected => {\n if (!selected) {\n return\n }\n\n var { idField = 'id', nameField = 'name', descriptionField = 'description' } = this.column.record.options || {}\n\n this.dispatchEvent(\n new CustomEvent('field-change', {\n bubbles: true,\n composed: true,\n detail: {\n before: this.value,\n after: selected\n ? {\n [idField]: selected[idField],\n [nameField]: selected[nameField],\n [descriptionField]: selected[descriptionField]\n }\n : null,\n record: this.record,\n column: this.column,\n row: this.row\n }\n })\n )\n }\n\n var value = this.value || {}\n var template = html`\n <ox-selector-resource-id\n .value=${value.id}\n .confirmCallback=${confirmCallback.bind(this)}\n .queryName=${this.column.record.options.queryName}\n .basicArgs=${this.column.record.options.basicArgs}\n ></ox-selector-resource-id>\n `\n\n this.popup = openPopup(template, {\n backdrop: true,\n size: 'large',\n title: 'select item'\n })\n }\n}\n"]}
1
+ {"version":3,"file":"ox-grist-editor-resource-id.js","sourceRoot":"","sources":["../../../src/grist-editor/ox-grist-editor-resource-id.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/web/icon/icon.js'\nimport '../selector/ox-selector-resource-id.js'\n\nimport { html } from 'lit'\nimport { customElement } from 'lit/decorators.js'\n\nimport { GristRecord, OxGristEditor } from '@operato/data-grist'\nimport { openPopup, PopupHandle } from '@operato/layout'\n\n@customElement('ox-grist-editor-resource-id')\nexport class OxGristEditorResourceId extends OxGristEditor {\n /* 팝업으로 고친다 — 칸에 표식이 붙는다(OxGristEditor.opensPopup). */\n static opensPopup = true\n\n private popup?: PopupHandle\n\n render() {\n var { nameField = 'name', descriptionField = 'description' } = this.column.record.options || {}\n var value = this.value\n\n return html`\n ${!value\n ? html`<span tabindex=\"0\"></span>`\n : html` <span tabindex=\"0\">${value[nameField]} (${value[descriptionField]})</span> `}\n <md-icon>arrow_drop_down</md-icon>\n `\n }\n\n _onclick(e: Event): void {\n e.stopPropagation()\n this.openSelector()\n }\n\n _onkeydown(e: KeyboardEvent): void {\n const key = e.key\n if (key == 'Enter') {\n e.stopPropagation()\n this.openSelector()\n }\n }\n\n openSelector() {\n if (this.popup) {\n delete this.popup\n }\n\n const confirmCallback: (record?: GristRecord) => void = selected => {\n if (!selected) {\n return\n }\n\n var { idField = 'id', nameField = 'name', descriptionField = 'description' } = this.column.record.options || {}\n\n this.dispatchEvent(\n new CustomEvent('field-change', {\n bubbles: true,\n composed: true,\n detail: {\n before: this.value,\n after: selected\n ? {\n [idField]: selected[idField],\n [nameField]: selected[nameField],\n [descriptionField]: selected[descriptionField]\n }\n : null,\n record: this.record,\n column: this.column,\n row: this.row\n }\n })\n )\n }\n\n var value = this.value || {}\n var template = html`\n <ox-selector-resource-id\n .value=${value.id}\n .confirmCallback=${confirmCallback.bind(this)}\n .queryName=${this.column.record.options.queryName}\n .basicArgs=${this.column.record.options.basicArgs}\n ></ox-selector-resource-id>\n `\n\n this.popup = openPopup(template, {\n backdrop: true,\n size: 'large',\n title: 'select item'\n })\n }\n}\n"]}
@@ -2,6 +2,7 @@ import '../selector/ox-selector-resource-object-legacy.js';
2
2
  import { TemplateResult } from 'lit';
3
3
  import { OxGristEditor } from '@operato/data-grist';
4
4
  export declare class OxGristEditorResourceObjectLegacy extends OxGristEditor {
5
+ static opensPopup: boolean;
5
6
  private popup?;
6
7
  private template?;
7
8
  get editorTemplate(): TemplateResult<1>;
@@ -105,6 +105,8 @@ let OxGristEditorResourceObjectLegacy = class OxGristEditorResourceObjectLegacy
105
105
  });
106
106
  }
107
107
  };
108
+ /* 팝업으로 고친다 — 칸에 표식이 붙는다(OxGristEditor.opensPopup). */
109
+ OxGristEditorResourceObjectLegacy.opensPopup = true;
108
110
  OxGristEditorResourceObjectLegacy = __decorate([
109
111
  customElement('ox-grist-editor-resource-object-legacy')
110
112
  ], OxGristEditorResourceObjectLegacy);
@@ -1 +1 @@
1
- {"version":3,"file":"ox-grist-editor-resource-object-legacy.js","sourceRoot":"","sources":["../../../src/grist-editor/ox-grist-editor-resource-object-legacy.ts"],"names":[],"mappings":"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","sourcesContent":["import '../selector/ox-selector-resource-object-legacy.js'\n\nimport { html, TemplateResult } from 'lit'\nimport { customElement } from 'lit/decorators.js'\n\nimport { OxGristEditor } from '@operato/data-grist'\nimport { i18next } from '@operato/i18n'\nimport { openPopup, PopupHandle } from '@operato/layout'\n\n@customElement('ox-grist-editor-resource-object-legacy')\nexport class OxGristEditorResourceObjectLegacy extends OxGristEditor {\n private popup?: PopupHandle\n private template?: TemplateResult\n\n get editorTemplate() {\n var value = this.value || {}\n\n var { nameField = 'name', descriptionField = 'description' } = this.column.record.options || {}\n var name, description\n if (typeof nameField === 'function') {\n name = nameField(value)\n } else {\n name = value[nameField]\n }\n\n if (typeof descriptionField === 'function') {\n description = descriptionField(value)\n } else {\n description = value[descriptionField] && `(${value[descriptionField]})`\n }\n\n return html`\n ${!value\n ? html`<span tabindex=\"0\"></span>`\n : html` <span tabindex=\"0\" style=\"flex:1\">${name || ''}${description || ''}</span> `}\n `\n }\n\n async firstUpdated() {\n super.firstUpdated()\n this.template = ((this.column.record || {}).options || {}).template\n }\n\n _onclick(e: Event): void {\n e.stopPropagation()\n }\n\n _onkeydown(e: KeyboardEvent): void {\n const key = e.key\n if (key == 'Enter') {\n e.stopPropagation()\n this.openSelector()\n }\n }\n\n _ondblclick(e: MouseEvent): void {\n e.stopPropagation()\n this.openSelector()\n }\n\n openSelector() {\n if (this.popup) {\n delete this.popup\n }\n\n var {\n idField = 'id',\n nameField = 'name',\n descriptionField = 'description',\n valueField = 'id',\n queryName,\n basicArgs,\n select,\n list\n } = this.column.record.options || {}\n\n const confirmCallback = (selected?: { [field: string]: any }) => {\n this.dispatchEvent(\n new CustomEvent('field-change', {\n bubbles: true,\n composed: true,\n detail: {\n before: this.value,\n after: selected\n ? {\n ...(this.column.record.options.select || [])\n .map((field: any) => field.name)\n .reduce(\n (obj: { [field: string]: any }, fieldName: string) => {\n return (obj = {\n ...obj,\n [fieldName]: selected[fieldName]\n })\n },\n {} as { [field: string]: any }\n ),\n [idField]: selected[idField],\n [nameField]: selected[nameField],\n [descriptionField]: selected[descriptionField]\n }\n : null,\n record: this.record,\n column: this.column,\n row: this.row\n }\n })\n )\n }\n\n var value = this.value || {}\n var actualValue\n if (typeof valueField === 'function') {\n actualValue = valueField(value)\n } else {\n actualValue = value[valueField]\n }\n\n var template =\n this.template ||\n html`\n <ox-selector-resource-object-legacy\n .value=${actualValue}\n .confirmCallback=${confirmCallback.bind(this)}\n .queryName=${queryName}\n .select=${select}\n .list=${list}\n .basicArgs=${basicArgs}\n .valueField=${valueField}\n ></ox-selector-resource-object-legacy>\n `\n\n this.popup = openPopup(template, {\n backdrop: true,\n size: 'large',\n title: i18next.t('title.select_item')\n })\n }\n}\n"]}
1
+ {"version":3,"file":"ox-grist-editor-resource-object-legacy.js","sourceRoot":"","sources":["../../../src/grist-editor/ox-grist-editor-resource-object-legacy.ts"],"names":[],"mappings":"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","sourcesContent":["import '../selector/ox-selector-resource-object-legacy.js'\n\nimport { html, TemplateResult } from 'lit'\nimport { customElement } from 'lit/decorators.js'\n\nimport { OxGristEditor } from '@operato/data-grist'\nimport { i18next } from '@operato/i18n'\nimport { openPopup, PopupHandle } from '@operato/layout'\n\n@customElement('ox-grist-editor-resource-object-legacy')\nexport class OxGristEditorResourceObjectLegacy extends OxGristEditor {\n /* 팝업으로 고친다 — 칸에 표식이 붙는다(OxGristEditor.opensPopup). */\n static opensPopup = true\n\n private popup?: PopupHandle\n private template?: TemplateResult\n\n get editorTemplate() {\n var value = this.value || {}\n\n var { nameField = 'name', descriptionField = 'description' } = this.column.record.options || {}\n var name, description\n if (typeof nameField === 'function') {\n name = nameField(value)\n } else {\n name = value[nameField]\n }\n\n if (typeof descriptionField === 'function') {\n description = descriptionField(value)\n } else {\n description = value[descriptionField] && `(${value[descriptionField]})`\n }\n\n return html`\n ${!value\n ? html`<span tabindex=\"0\"></span>`\n : html` <span tabindex=\"0\" style=\"flex:1\">${name || ''}${description || ''}</span> `}\n `\n }\n\n async firstUpdated() {\n super.firstUpdated()\n this.template = ((this.column.record || {}).options || {}).template\n }\n\n _onclick(e: Event): void {\n e.stopPropagation()\n }\n\n _onkeydown(e: KeyboardEvent): void {\n const key = e.key\n if (key == 'Enter') {\n e.stopPropagation()\n this.openSelector()\n }\n }\n\n _ondblclick(e: MouseEvent): void {\n e.stopPropagation()\n this.openSelector()\n }\n\n openSelector() {\n if (this.popup) {\n delete this.popup\n }\n\n var {\n idField = 'id',\n nameField = 'name',\n descriptionField = 'description',\n valueField = 'id',\n queryName,\n basicArgs,\n select,\n list\n } = this.column.record.options || {}\n\n const confirmCallback = (selected?: { [field: string]: any }) => {\n this.dispatchEvent(\n new CustomEvent('field-change', {\n bubbles: true,\n composed: true,\n detail: {\n before: this.value,\n after: selected\n ? {\n ...(this.column.record.options.select || [])\n .map((field: any) => field.name)\n .reduce(\n (obj: { [field: string]: any }, fieldName: string) => {\n return (obj = {\n ...obj,\n [fieldName]: selected[fieldName]\n })\n },\n {} as { [field: string]: any }\n ),\n [idField]: selected[idField],\n [nameField]: selected[nameField],\n [descriptionField]: selected[descriptionField]\n }\n : null,\n record: this.record,\n column: this.column,\n row: this.row\n }\n })\n )\n }\n\n var value = this.value || {}\n var actualValue\n if (typeof valueField === 'function') {\n actualValue = valueField(value)\n } else {\n actualValue = value[valueField]\n }\n\n var template =\n this.template ||\n html`\n <ox-selector-resource-object-legacy\n .value=${actualValue}\n .confirmCallback=${confirmCallback.bind(this)}\n .queryName=${queryName}\n .select=${select}\n .list=${list}\n .basicArgs=${basicArgs}\n .valueField=${valueField}\n ></ox-selector-resource-object-legacy>\n `\n\n this.popup = openPopup(template, {\n backdrop: true,\n size: 'large',\n title: i18next.t('title.select_item')\n })\n }\n}\n"]}
@@ -2,6 +2,7 @@ import '../selector/ox-selector-resource-object.js';
2
2
  import { TemplateResult } from 'lit';
3
3
  import { OxGristEditor } from '@operato/data-grist';
4
4
  export declare class OxGristEditorResourceObject extends OxGristEditor {
5
+ static opensPopup: boolean;
5
6
  private popup?;
6
7
  private template?;
7
8
  get editorTemplate(): TemplateResult<1>;
@@ -125,6 +125,8 @@ let OxGristEditorResourceObject = class OxGristEditorResourceObject extends OxGr
125
125
  });
126
126
  }
127
127
  };
128
+ /* 팝업으로 고친다 — 칸에 표식이 붙는다(OxGristEditor.opensPopup). */
129
+ OxGristEditorResourceObject.opensPopup = true;
128
130
  OxGristEditorResourceObject = __decorate([
129
131
  customElement('ox-grist-editor-resource-object')
130
132
  ], OxGristEditorResourceObject);
@@ -1 +1 @@
1
- {"version":3,"file":"ox-grist-editor-resource-object.js","sourceRoot":"","sources":["../../../src/grist-editor/ox-grist-editor-resource-object.ts"],"names":[],"mappings":"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","sourcesContent":["import '../selector/ox-selector-resource-object.js'\n\nimport { html, TemplateResult } from 'lit'\nimport { customElement } from 'lit/decorators.js'\n\nimport { OxGristEditor } from '@operato/data-grist'\nimport { i18next } from '@operato/i18n'\nimport { openPopup, PopupHandle } from '@operato/layout'\n\n@customElement('ox-grist-editor-resource-object')\nexport class OxGristEditorResourceObject extends OxGristEditor {\n private popup?: PopupHandle\n private template?: TemplateResult\n\n get editorTemplate() {\n var value = this.value || {}\n\n var { nameField = 'name', descriptionField = 'description' } = this.column.record.options || {}\n var name, description\n if (typeof nameField === 'function') {\n name = nameField(value)\n } else {\n name = value[nameField]\n }\n\n if (typeof descriptionField === 'function') {\n description = descriptionField(value)\n } else {\n description = value[descriptionField] && `(${value[descriptionField]})`\n }\n\n return html`\n ${!value\n ? html`<span tabindex=\"0\"></span>`\n : html` <span tabindex=\"0\" style=\"flex:1\">${name || ''}${description || ''}</span> `}\n `\n }\n\n async firstUpdated() {\n super.firstUpdated()\n this.template = ((this.column.record || {}).options || {}).template\n }\n\n _onclick(e: Event): void {\n e.stopPropagation()\n }\n\n _onkeydown(e: KeyboardEvent): void {\n const key = e.key\n if (key == 'Enter') {\n e.stopPropagation()\n this.openSelector()\n }\n }\n\n _ondblclick(e: MouseEvent): void {\n e.stopPropagation()\n this.openSelector()\n }\n\n openSelector() {\n if (this.popup) {\n delete this.popup\n }\n\n var {\n title = '',\n idField = 'id',\n nameField = 'name',\n descriptionField = 'description',\n valueField = 'id',\n queryName,\n basicArgs,\n select,\n columns,\n pagination,\n list\n } = this.column.record.options || {}\n\n if (!queryName) {\n console.warn('queryName is empty')\n return\n }\n\n /* select options is only for compatability, it might be able to be deprecated. */\n columns = columns || select\n\n const confirmCallback = (selected?: { [field: string]: any }) => {\n this.dispatchEvent(\n new CustomEvent('field-change', {\n bubbles: true,\n composed: true,\n detail: {\n before: this.value,\n after: selected\n ? {\n ...(columns || [])\n .map((field: any) => field.name)\n .reduce(\n (obj: { [field: string]: any }, fieldName: string) => {\n return (obj = {\n ...obj,\n [fieldName]: selected[fieldName]\n })\n },\n {} as { [field: string]: any }\n ),\n [idField]: selected[idField],\n [nameField]: selected[nameField],\n [descriptionField]: selected[descriptionField]\n }\n : null,\n record: this.record,\n column: this.column,\n row: this.row\n }\n })\n )\n }\n\n var value = this.value || {}\n var actualValue\n if (typeof valueField === 'function') {\n actualValue = valueField(value)\n } else {\n actualValue = value[valueField]\n }\n\n var template =\n this.template ||\n html`\n <ox-selector-resource-object\n .value=${actualValue}\n .confirmCallback=${confirmCallback.bind(this)}\n .queryName=${queryName}\n .columns=${columns}\n .pagination=${pagination}\n .list=${list}\n .basicArgs=${basicArgs}\n .valueField=${valueField}\n ></ox-selector-resource-object>\n `\n\n this.popup = openPopup(template, {\n backdrop: true,\n size: 'large',\n search: {\n autofocus: true,\n placeholder: title || i18next.t('title.select_item'),\n handler: (instance: any, value: any) => {\n /* instance: template instance */\n instance.searchText(value)\n }\n },\n filter: {\n handler: (instance: any) => {\n /* instance: template instance */\n instance.toggleFilter()\n }\n }\n })\n }\n}\n"]}
1
+ {"version":3,"file":"ox-grist-editor-resource-object.js","sourceRoot":"","sources":["../../../src/grist-editor/ox-grist-editor-resource-object.ts"],"names":[],"mappings":"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","sourcesContent":["import '../selector/ox-selector-resource-object.js'\n\nimport { html, TemplateResult } from 'lit'\nimport { customElement } from 'lit/decorators.js'\n\nimport { OxGristEditor } from '@operato/data-grist'\nimport { i18next } from '@operato/i18n'\nimport { openPopup, PopupHandle } from '@operato/layout'\n\n@customElement('ox-grist-editor-resource-object')\nexport class OxGristEditorResourceObject extends OxGristEditor {\n /* 팝업으로 고친다 — 칸에 표식이 붙는다(OxGristEditor.opensPopup). */\n static opensPopup = true\n\n private popup?: PopupHandle\n private template?: TemplateResult\n\n get editorTemplate() {\n var value = this.value || {}\n\n var { nameField = 'name', descriptionField = 'description' } = this.column.record.options || {}\n var name, description\n if (typeof nameField === 'function') {\n name = nameField(value)\n } else {\n name = value[nameField]\n }\n\n if (typeof descriptionField === 'function') {\n description = descriptionField(value)\n } else {\n description = value[descriptionField] && `(${value[descriptionField]})`\n }\n\n return html`\n ${!value\n ? html`<span tabindex=\"0\"></span>`\n : html` <span tabindex=\"0\" style=\"flex:1\">${name || ''}${description || ''}</span> `}\n `\n }\n\n async firstUpdated() {\n super.firstUpdated()\n this.template = ((this.column.record || {}).options || {}).template\n }\n\n _onclick(e: Event): void {\n e.stopPropagation()\n }\n\n _onkeydown(e: KeyboardEvent): void {\n const key = e.key\n if (key == 'Enter') {\n e.stopPropagation()\n this.openSelector()\n }\n }\n\n _ondblclick(e: MouseEvent): void {\n e.stopPropagation()\n this.openSelector()\n }\n\n openSelector() {\n if (this.popup) {\n delete this.popup\n }\n\n var {\n title = '',\n idField = 'id',\n nameField = 'name',\n descriptionField = 'description',\n valueField = 'id',\n queryName,\n basicArgs,\n select,\n columns,\n pagination,\n list\n } = this.column.record.options || {}\n\n if (!queryName) {\n console.warn('queryName is empty')\n return\n }\n\n /* select options is only for compatability, it might be able to be deprecated. */\n columns = columns || select\n\n const confirmCallback = (selected?: { [field: string]: any }) => {\n this.dispatchEvent(\n new CustomEvent('field-change', {\n bubbles: true,\n composed: true,\n detail: {\n before: this.value,\n after: selected\n ? {\n ...(columns || [])\n .map((field: any) => field.name)\n .reduce(\n (obj: { [field: string]: any }, fieldName: string) => {\n return (obj = {\n ...obj,\n [fieldName]: selected[fieldName]\n })\n },\n {} as { [field: string]: any }\n ),\n [idField]: selected[idField],\n [nameField]: selected[nameField],\n [descriptionField]: selected[descriptionField]\n }\n : null,\n record: this.record,\n column: this.column,\n row: this.row\n }\n })\n )\n }\n\n var value = this.value || {}\n var actualValue\n if (typeof valueField === 'function') {\n actualValue = valueField(value)\n } else {\n actualValue = value[valueField]\n }\n\n var template =\n this.template ||\n html`\n <ox-selector-resource-object\n .value=${actualValue}\n .confirmCallback=${confirmCallback.bind(this)}\n .queryName=${queryName}\n .columns=${columns}\n .pagination=${pagination}\n .list=${list}\n .basicArgs=${basicArgs}\n .valueField=${valueField}\n ></ox-selector-resource-object>\n `\n\n this.popup = openPopup(template, {\n backdrop: true,\n size: 'large',\n search: {\n autofocus: true,\n placeholder: title || i18next.t('title.select_item'),\n handler: (instance: any, value: any) => {\n /* instance: template instance */\n instance.searchText(value)\n }\n },\n filter: {\n handler: (instance: any) => {\n /* instance: template instance */\n instance.toggleFilter()\n }\n }\n })\n }\n}\n"]}
@@ -0,0 +1,88 @@
1
+ import { LitElement, type TemplateResult } from 'lit';
2
+ /** 그릴 수 있는 노드 하나. `reachable=false` 면 갈 곳이 없다 — 문처럼 보이지 않게 그린다. */
3
+ export interface RelationNode {
4
+ id: string;
5
+ label?: string;
6
+ /**
7
+ * 식별자 자리에 **대신 보일 말** — 없으면 `id` 를 보인다.
8
+ *
9
+ * 정체성은 긴 URI 일 수 있지만(`https://…/class/product-B0000080-lot-L26…`) 사람이 대조하는 것은
10
+ * 원본의 코드다. 부르는 쪽이 그 말을 알고 있으므로 여기서 만들지 않고 받는다 — 이 부품은 뜻을
11
+ * 모른 채 자리만 내준다. 전체 식별자는 도구설명에 그대로 남는다(복사·추적의 키다).
12
+ */
13
+ sub?: string;
14
+ /** 이 노드가 속한 갈래(축·종류). 부르는 쪽의 어휘 그대로 — 이 부품은 뜻을 알지 않는다. */
15
+ kind?: string;
16
+ /**
17
+ * 걸어갈 수 있나. **막다른 링크는 없는 링크보다 나쁘다** — 눌렀는데 아무 일도 안 일어나면
18
+ * 사용자는 그것을 고장으로 받아들인다. 갈 수 없으면 처음부터 문처럼 보이지 않아야 한다.
19
+ */
20
+ reachable?: boolean;
21
+ /** 이 이웃이 실제로는 없는 것을 가리킨다(끊어진 참조). 눈에 띄어야 한다. */
22
+ broken?: boolean;
23
+ }
24
+ /** 한 관계 묶음 — "무슨 관계로" + "어느 방향으로" 이어진 이웃들. */
25
+ export interface RelationGroup {
26
+ /** 관계 이름(이미 번역된 표시명). 선 위에 적힌다. */
27
+ via: string;
28
+ /** `out` = 내가 가리킨다 · `in` = 나를 가리킨다. */
29
+ direction: 'out' | 'in';
30
+ nodes: RelationNode[];
31
+ /** 전체 건수(상한에 걸려 일부만 왔을 수 있다). 없으면 `nodes.length`. */
32
+ total?: number;
33
+ /** 선언은 되어 있는데 이웃이 없다 — 그루터기로 그린다. */
34
+ empty?: boolean;
35
+ /** 이 관계가 선택인가 — 비어 있음이 결손인지 정상인지 구분한다. */
36
+ optional?: boolean;
37
+ /**
38
+ * 이 이어짐을 **어디서 알았나.**
39
+ *
40
+ * `declared` — 원본이 선언한 관계다(모델이 그렇게 생겼다).
41
+ * `observed` — 이벤트에서 함께 나타났다(실제로 그렇게 움직였다).
42
+ *
43
+ * 둘은 다른 사실이고 섞으면 안 된다. 선언에 없는 이어짐을 선언인 것처럼 그리면 사용자는
44
+ * 모델이 그렇게 되어 있다고 믿게 되고, 반대로 관측된 동반을 안 그리면 실제로 함께 움직이는
45
+ * 것을 놓친다. 그래서 **둘 다 그리되 구별해서** 그린다.
46
+ */
47
+ source?: 'declared' | 'observed';
48
+ /** 관측에서 온 것이면 **어느 범위를 보고 말하는가**(예: 최근 이력 50건). 오류보고없이 자르지 않는다. */
49
+ basis?: string;
50
+ }
51
+ export declare class OxRelationView extends LitElement {
52
+ /** 가운데 — 지금 보고 있는 것. */
53
+ center: RelationNode;
54
+ groups: RelationGroup[];
55
+ /** 이웃이 없는 관계도 그루터기로 남길까. 기본은 **남긴다**(부재가 정보다). */
56
+ hideEmpty: boolean;
57
+ /** 선을 그리려면 위치를 재야 한다 — 재고 나서 한 번 더 그린다. */
58
+ private edges;
59
+ private ro?;
60
+ static styles: import("lit").CSSResult;
61
+ connectedCallback(): void;
62
+ disconnectedCallback(): void;
63
+ protected updated(): void;
64
+ /**
65
+ * 선을 잇는다 — **그린 뒤에 재고, 잰 값이 달라졌을 때만 다시 그린다.**
66
+ * 조건 없이 상태를 쓰면 `updated` → `measure` → `updated` 로 무한히 반복된다.
67
+ */
68
+ private measure;
69
+ private pick;
70
+ private expand;
71
+ render(): TemplateResult;
72
+ /** 한 묶음 — 관계 이름과 그 관계로 이어진 노드들. */
73
+ private renderGroup;
74
+ /**
75
+ * 노드 하나.
76
+ *
77
+ * **제자리에서 더 펼치지 않는다.** 한때 노드마다 자기 이웃을 오른쪽에 이어 그리게 했는데,
78
+ * 양방향 그래프에서는 자식이 거의 언제나 부모를 도로 보여 준다 — 같은 id 가 사방에 되풀이되고
79
+ * 그림이 아니라 털뭉치가 된다. 깊이는 **걸어서** 간다(노드를 누르면 그것이 가운데가 된다).
80
+ * 한 방향으로 여러 단을 봐야 하는 것(BOM 전개)은 되돌아오는 선이 없는 **다른 읽기**다.
81
+ */
82
+ private renderNode;
83
+ }
84
+ declare global {
85
+ interface HTMLElementTagNameMap {
86
+ 'ox-relation-view': OxRelationView;
87
+ }
88
+ }