@genexus/genexus-ide-ui 0.0.62 → 0.0.63

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 (113) hide show
  1. package/dist/cjs/{ch-tree-x_3.cjs.entry.js → ch-checkbox_4.cjs.entry.js} +277 -71
  2. package/dist/cjs/ch-next-data-modeling-render.cjs.entry.js +242 -0
  3. package/dist/cjs/{ch-next-data-modeling-item.cjs.entry.js → ch-next-data-modeling_2.cjs.entry.js} +20 -1
  4. package/dist/cjs/ch-tree-view-render-wrapper.cjs.entry.js +160 -0
  5. package/dist/cjs/genexus-ide-ui.cjs.js +1 -1
  6. package/dist/cjs/gx-ide-kb-manager-export.cjs.entry.js +41 -39
  7. package/dist/cjs/gx-ide-kb-manager-import.cjs.entry.js +23 -11
  8. package/dist/cjs/gx-ide-test.cjs.entry.js +107 -122
  9. package/dist/cjs/gxg-color-picker.cjs.entry.js +2 -2
  10. package/dist/cjs/gxg-title-editable.cjs.entry.js +11 -4
  11. package/dist/cjs/{gxg-tree_2.cjs.entry.js → gxg-tree-item.cjs.entry.js} +0 -212
  12. package/dist/cjs/gxg-tree-view.cjs.entry.js +165 -0
  13. package/dist/cjs/gxg-tree.cjs.entry.js +218 -0
  14. package/dist/cjs/loader.cjs.js +1 -1
  15. package/dist/collection/collection-manifest.json +5 -3
  16. package/dist/collection/components/_test/test.css +5 -0
  17. package/dist/collection/components/_test/test.js +109 -220
  18. package/dist/collection/components/kb-manager-export/helpers.js +7 -23
  19. package/dist/collection/components/kb-manager-export/kb-manager-export.css +20 -0
  20. package/dist/collection/components/kb-manager-export/kb-manager-export.js +42 -22
  21. package/dist/collection/components/kb-manager-import/gx-ide-assets/kb-manager-import/langs/kb-manager-import.lang.en.json +1 -0
  22. package/dist/collection/components/kb-manager-import/kb-manager-import.js +23 -11
  23. package/dist/components/ch-next-data-modeling-item.js +1 -457
  24. package/dist/components/ch-next-data-modeling-render.js +295 -0
  25. package/dist/components/ch-next-data-modeling.js +1 -27
  26. package/dist/components/ch-tree-view-item.js +6 -0
  27. package/dist/components/ch-tree-view-render-wrapper.js +224 -0
  28. package/dist/components/ch-tree-view-render.js +6 -0
  29. package/dist/components/ch-tree-view.js +6 -0
  30. package/dist/components/gx-ide-kb-manager-export.js +75 -73
  31. package/dist/components/gx-ide-kb-manager-import.js +38 -20
  32. package/dist/components/gx-ide-references.js +21 -15
  33. package/dist/components/gx-ide-test.js +120 -160
  34. package/dist/components/gxg-color-picker.js +2 -2
  35. package/dist/components/gxg-title-editable.js +12 -4
  36. package/dist/components/gxg-tree-item.js +614 -1
  37. package/dist/components/gxg-tree-view.js +2 -2
  38. package/dist/components/gxg-tree.js +236 -1
  39. package/dist/components/index.js +5 -3
  40. package/dist/components/next-data-modeling-item.js +466 -0
  41. package/dist/{esm/ch-next-data-modeling.entry.js → components/next-data-modeling.js} +21 -7
  42. package/dist/components/{tree-x-list-item.js → tree-view-item.js} +9 -9
  43. package/dist/components/{ch-test-tree-x.js → tree-view-render.js} +168 -28
  44. package/dist/components/tree-view.js +410 -435
  45. package/dist/components/tree-view2.js +226 -0
  46. package/dist/esm/{ch-tree-x_3.entry.js → ch-checkbox_4.entry.js} +275 -70
  47. package/dist/esm/ch-next-data-modeling-render.entry.js +238 -0
  48. package/dist/esm/{ch-next-data-modeling-item.entry.js → ch-next-data-modeling_2.entry.js} +21 -3
  49. package/dist/esm/ch-tree-view-render-wrapper.entry.js +156 -0
  50. package/dist/esm/genexus-ide-ui.js +1 -1
  51. package/dist/esm/gx-ide-kb-manager-export.entry.js +41 -39
  52. package/dist/esm/gx-ide-kb-manager-import.entry.js +23 -11
  53. package/dist/esm/gx-ide-test.entry.js +108 -123
  54. package/dist/esm/gxg-color-picker.entry.js +2 -2
  55. package/dist/esm/gxg-title-editable.entry.js +11 -4
  56. package/dist/{components/gxg-tree-item2.js → esm/gxg-tree-item.entry.js} +9 -79
  57. package/dist/esm/gxg-tree-view.entry.js +161 -0
  58. package/dist/{components/gxg-tree2.js → esm/gxg-tree.entry.js} +8 -32
  59. package/dist/esm/loader.js +1 -1
  60. package/dist/genexus-ide-ui/genexus-ide-ui.css +1 -1
  61. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js +1 -1
  62. package/dist/genexus-ide-ui/gx-ide-assets/kb-manager-import/langs/kb-manager-import.lang.en.json +1 -0
  63. package/dist/genexus-ide-ui/p-13177896.entry.js +1 -0
  64. package/dist/genexus-ide-ui/p-19fef562.entry.js +1 -0
  65. package/dist/genexus-ide-ui/p-2781b92a.entry.js +1 -0
  66. package/dist/genexus-ide-ui/p-2c17e71d.entry.js +1 -0
  67. package/dist/genexus-ide-ui/p-40a57a36.entry.js +1 -0
  68. package/dist/genexus-ide-ui/p-636d02fa.entry.js +1 -0
  69. package/dist/genexus-ide-ui/p-7b63be93.entry.js +1 -0
  70. package/dist/genexus-ide-ui/p-8a7c4561.entry.js +1 -0
  71. package/dist/genexus-ide-ui/p-a2cb0e6b.entry.js +1 -0
  72. package/dist/genexus-ide-ui/p-a9c8b373.entry.js +1 -0
  73. package/dist/genexus-ide-ui/p-b819706e.entry.js +1 -0
  74. package/dist/genexus-ide-ui/p-bacd879c.entry.js +1 -0
  75. package/dist/node_modules/@genexus/chameleon-controls-library/dist/collection/components/next/data-modeling-render/next-data-modeling-render.css +3 -0
  76. package/dist/node_modules/@genexus/chameleon-controls-library/dist/collection/components/renders/tree-view/tree-view-render.css +3 -0
  77. package/dist/node_modules/@genexus/chameleon-controls-library/dist/collection/components/test/test-tree-view/tree-view-render-wrapper.css +0 -0
  78. package/dist/node_modules/@genexus/chameleon-controls-library/dist/collection/components/tree-view/tree-view/tree-view.css +45 -0
  79. package/dist/node_modules/@genexus/gemini/dist/collection/components/title-editable/title-editable.css +17 -3
  80. package/dist/node_modules/@genexus/gemini/dist/collection/components/tree-view/tree-view.css +5 -2
  81. package/dist/types/common/helpers.d.ts +2 -2
  82. package/dist/types/components/_test/test.d.ts +3 -35
  83. package/dist/types/components/kb-manager-export/helpers.d.ts +4 -4
  84. package/dist/types/components/kb-manager-export/kb-manager-export.d.ts +10 -5
  85. package/dist/types/components/kb-manager-import/helpers.d.ts +3 -3
  86. package/dist/types/components/kb-manager-import/kb-manager-import.d.ts +7 -6
  87. package/dist/types/components/references/helpers.d.ts +2 -2
  88. package/dist/types/components/references/references.d.ts +3 -3
  89. package/dist/types/components.d.ts +3 -60
  90. package/package.json +3 -3
  91. package/dist/cjs/ch-checkbox.cjs.entry.js +0 -93
  92. package/dist/cjs/ch-next-data-modeling.cjs.entry.js +0 -19
  93. package/dist/cjs/ch-test-tree-x.cjs.entry.js +0 -458
  94. package/dist/components/ch-tree-x-list-item.js +0 -6
  95. package/dist/components/ch-tree-x.js +0 -6
  96. package/dist/components/tree-x.js +0 -504
  97. package/dist/esm/ch-checkbox.entry.js +0 -89
  98. package/dist/esm/ch-test-tree-x.entry.js +0 -454
  99. package/dist/esm/gxg-tree_2.entry.js +0 -757
  100. package/dist/genexus-ide-ui/p-092ccacd.entry.js +0 -1
  101. package/dist/genexus-ide-ui/p-1ad68b23.entry.js +0 -3
  102. package/dist/genexus-ide-ui/p-3442d19a.entry.js +0 -1
  103. package/dist/genexus-ide-ui/p-39968306.entry.js +0 -1
  104. package/dist/genexus-ide-ui/p-5755f985.entry.js +0 -1
  105. package/dist/genexus-ide-ui/p-85597097.entry.js +0 -1
  106. package/dist/genexus-ide-ui/p-9e530c7d.entry.js +0 -1
  107. package/dist/genexus-ide-ui/p-ad5040e4.entry.js +0 -1
  108. package/dist/genexus-ide-ui/p-aeb3b032.entry.js +0 -1
  109. package/dist/genexus-ide-ui/p-c53522c9.entry.js +0 -1
  110. package/dist/genexus-ide-ui/p-d104f9a4.entry.js +0 -1
  111. package/dist/node_modules/@genexus/chameleon-controls-library/dist/collection/components/test/test-tree-x.css +0 -3
  112. package/dist/node_modules/@genexus/chameleon-controls-library/dist/collection/components/tree-view/tree-x/tree-x.css +0 -45
  113. /package/dist/node_modules/@genexus/chameleon-controls-library/dist/collection/components/tree-view/{tree-x-list-item/tree-x-list-item.css → tree-view-item/tree-view-item.css} +0 -0
@@ -58,7 +58,24 @@ export class GxIdeKbManagerImport {
58
58
  }
59
59
  };
60
60
  this.objectsTreeCheckedItemsChangedHandler = (event) => {
61
+ /* Begin of evaluate 'select/unselect checkbox' state*/
62
+ if (event.detail == null) {
63
+ this.toggleObjectsCheckboxEl.checked = false;
64
+ this.toggleObjectsCheckboxEl.indeterminate = false;
65
+ return;
66
+ }
61
67
  const allItemsWithCheckbox = [...event.detail.values()];
68
+ if (allItemsWithCheckbox.length === 0) {
69
+ this.toggleObjectsCheckboxEl.checked = false;
70
+ this.toggleObjectsCheckboxEl.indeterminate = false;
71
+ return;
72
+ }
73
+ const firstItemCheckedValue = allItemsWithCheckbox[0].item.checked;
74
+ const allItemsHaveTheSameCheckedValue = allItemsWithCheckbox.every(treeItem => treeItem.item.checked === firstItemCheckedValue);
75
+ this.toggleObjectsCheckboxEl.checked = firstItemCheckedValue;
76
+ this.toggleObjectsCheckboxEl.indeterminate =
77
+ !allItemsHaveTheSameCheckedValue;
78
+ /* End of evaluate 'select/unselect checkbox' state*/
62
79
  const checkedItems = allItemsWithCheckbox.filter(node => node.item.checked);
63
80
  // objects checked
64
81
  const checkedObjects = checkedItems.filter(node => node.item.class === "object");
@@ -88,12 +105,10 @@ export class GxIdeKbManagerImport {
88
105
  this.statusInfo.warning.number = 0;
89
106
  this.statusInfo.success.number = 0;
90
107
  };
91
- this.selectAllClickedHandler = (e) => {
92
- const checked = e.target.checked;
93
- if (checked && this.objectsTreeEl) {
94
- console.log("select all");
95
- this.objectsTreeEl.updateAllItemsProperties({ checked: true });
96
- }
108
+ this.toggleSelectionHandler = (e) => {
109
+ const checked = e.detail.value;
110
+ this.toggleObjectsCheckboxEl.indeterminate = false;
111
+ this.objectsTreeEl.updateAllItemsProperties({ checked: checked });
97
112
  };
98
113
  this.statusButtonsSelectionChangedHandler = (e) => {
99
114
  const activeStates = e.detail;
@@ -189,11 +204,8 @@ export class GxIdeKbManagerImport {
189
204
  "tree-container": true,
190
205
  "tree-container--objects-in-file": true,
191
206
  "tree-container--empty": this.noObjects
192
- } }, !this.noObjects ? (h("gxg-tree-view", { treeModel: this.objectsTreeState, dragDisabled: true, dropDisabled: true, toggleCheckboxes: true, onCheckedItemsChange: this.objectsTreeCheckedItemsChangedHandler, ref: el => (this.objectsTreeEl = el) })) : (h("div", { class: "gx-ide-message" }, h("gxg-text", { textAlign: config.gxgMessage.common.textAlign, padding: config.gxgMessage.common.textAlign, type: config.gxgMessage.common.type, maxWidth: config.gxgMessage.common.maxWidth, part: "objects-in-file-empty-status-message" }, "There are no Objects. ", h("br", null), h("gxg-text", { type: "text-link-no-line", onClick: this.selectFileHandler }, "Begin by selecting a file."))))), h("gxg-form-checkbox", { label: this.objectsTreeState.length > 0 &&
193
- this.objectsInFileTotalNodes ===
194
- this.checkedObjectsIds.length
195
- ? this._componentLocale.main.objectsInFile.deselectAll
196
- : this._componentLocale.main.objectsInFile.selectAll, part: "select-all-checkbox", slot: "footer-start", disabled: this.importingObjects || this.objectsTreeState.length === 0, checked: this.evaluateCheckAllValue(), onClick: this.selectAllClickedHandler }), h("gxg-button-group", { slot: "footer-end", ref: (el) => (this.objectsButtonsGroup = el) }, h("button", { id: "import-btn", part: "import-button", disabled: this.importingObjects ||
207
+ } }, !this.noObjects ? (h("gxg-tree-view", { treeModel: this.objectsTreeState, dragDisabled: true, dropDisabled: true, toggleCheckboxes: true, onCheckedItemsChange: this.objectsTreeCheckedItemsChangedHandler, ref: el => (this.objectsTreeEl = el) })) : (h("div", { class: "gx-ide-message" }, h("gxg-text", { textAlign: config.gxgMessage.common.textAlign, padding: config.gxgMessage.common.textAlign, type: config.gxgMessage.common.type, maxWidth: config.gxgMessage.common.maxWidth, part: "objects-in-file-empty-status-message" }, "There are no Objects. ", h("br", null), h("gxg-text", { type: "text-link-no-line", onClick: this.selectFileHandler }, "Begin by selecting a file."))))), h("gxg-form-checkbox", { label: this._componentLocale.main.objectsInFile.selectUnselect, part: "select-all-checkbox", slot: "footer-start", disabled: this.importingObjects || this.objectsTreeState.length === 0, checked: this.evaluateCheckAllValue(), onChange: this.toggleSelectionHandler, ref: (el) => (this.toggleObjectsCheckboxEl =
208
+ el) }), h("gxg-button-group", { slot: "footer-end", ref: (el) => (this.objectsButtonsGroup = el) }, h("button", { id: "import-btn", part: "import-button", disabled: this.importingObjects ||
197
209
  this.checkedObjectsIds.length === 0, onClick: this.importObjectsHandler }, this._componentLocale.main.objectsInFile.importButton), h("button", { id: "cancel-import-btn", part: "cancel-import-button", disabled: !this.importingObjects, onClick: this.cancelImportHandler }, this._componentLocale.main.objectsInFile.cancelButton)), h("gxg-button", { type: "secondary-icon-only", icon: "gemini-tools/settings", slot: "footer-end", part: "select-kb-btn", onClick: this.optionsHandler }, this._componentLocale.header.optionsButton)), h("gx-ide-container", { containerTitle: this._componentLocale.main.importStatus.title, noContentPadding: true, noBorderFooter: true, slimmerFooter: true, inactiveTitle: this.noImport, footerSubtleShadow: !this.noImport, titleType: "secondary" }, h("div", { class: {
198
210
  "tree-container": true,
199
211
  "tree-container--import-status": true,
@@ -1,460 +1,4 @@
1
- import { proxyCustomElement, HTMLElement, createEvent, h, Host } from '@stencil/core/internal/client';
2
- import { K as KEY_CODES } from './reserverd-names.js';
3
- import { d as defineCustomElement$2 } from './accordion.js';
4
-
5
- const nextDataModelingItemCss = ":where(button){all:unset;display:inline-flex;cursor:pointer}*,::before,::after{box-sizing:border-box}.error-text,.name{color:inherit;font:inherit;margin:0;padding:0;outline:0}gx-edit:is(.gx-edit--auto-fill,.gx-edit--auto-fill:focus-within,.gx-edit--auto-fill:hover){background-color:var(--gx-edit-auto-fill-background-color)}:host{display:grid;--chevron-color:#ccc}:host(:hover) .button-primary,:host(:focus-within) .button-primary{display:grid}:host(:hover) .button-primary::before,:host(:focus-within) .button-primary::before{content:\"\"}:host(.gx-disabled){pointer-events:none}.add-new-field--level-0{display:grid;grid-template:\"name . . .\" min-content \"field-name type confirm cancel\" 1fr \"error-text . confirm cancel\" min-content \"sub-item sub-item confirm cancel\" min-content/1fr min-content 56px 32px;row-gap:8px}.add-new-field--level-0 ::slotted(ch-next-data-modeling){grid-area:sub-item}.add-new-field--level-1{display:grid;grid-template:\"name . . .\" min-content \"field-name type confirm cancel\" 1fr \"error-text . . .\" min-content/1fr min-content 56px 32px;row-gap:8px}.add-new-field--level-2{display:grid;grid-template:\"sub-field name . . .\" min-content \". field-name type confirm cancel\" 1fr \". error-text . . .\" min-content/min-content 1fr min-content 56px 32px;row-gap:4px}.add-new-field--no-actions{grid-template:\"sub-field name .\" min-content \". field-name type\" 1fr \". error-text .\" min-content/min-content 1fr min-content}.accordion:hover .edit-button,.accordion:hover .delete-button,.accordion:focus-within .edit-button,.accordion:focus-within .delete-button{display:grid}.sub-field{grid-area:sub-field}.field-name{grid-area:field-name;margin-inline-end:8px}.button-confirm{grid-area:confirm;margin-inline:16px 8px}.button-cancel{grid-area:cancel}.error-text{grid-area:error-text;display:flex;white-space:break-spaces}.header{display:grid;grid-template:\"sub-field name type edit delete\" 1fr/min-content max-content 1fr min-content max-content;align-items:center;width:100%;margin-inline-end:12px}.accordion::part(accordion__header){column-gap:24px}.edit-mode{grid-template:\"sub-field field-name type confirm cancel\" min-content \"sub-field error-text error-text confirm cancel\" min-content/min-content 1fr min-content 56px 32px}.name{grid-area:name}.name-entity{text-decoration:underline}.type{grid-area:type}.select-wrapper{--chevron:url('data:image/svg+xml,<svg width=\"12\" height=\"8\" viewBox=\"0 0 12 8\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M1.41 0L6 4.59L10.59 0L12 1.42L6 7.42L0 1.42L1.41 0Z\"/></svg>');grid-area:type;position:relative}.select-wrapper::after{content:\"\";display:flex;position:absolute;inset-inline-end:0;inset-block-start:calc(50% - 3.75px);width:12px;height:7.5px;margin-inline:8px 16px;-webkit-mask:var(--chevron) no-repeat;background-color:var(--chevron-color);pointer-events:none}.select{display:flex;height:100%;appearance:none;background-color:unset;cursor:pointer;outline:unset;transition-property:background-color, border-color, color;transition-duration:250ms}.button-new-entity{align-items:center;transition:color 250ms}.optimization{display:contents}.button-primary{display:none;align-self:center;height:20px;padding:2px}.button-primary::before{display:flex}.button-edit{grid-area:edit;width:21px}.button-edit::before{-webkit-mask:var(--edit-icon) no-repeat}.button-delete{grid-area:delete;width:18px;margin-inline-start:12px}.button-delete::before{-webkit-mask:var(--delete-icon) no-repeat}.delete-mode,.waiting-mode{grid-area:delete;display:grid;grid-template-columns:1fr 24px 24px;align-items:center;column-gap:8px;cursor:auto;animation:fade-in 250ms ease-in-out}.waiting-mode{grid-template-columns:24px 1fr}.waiting-mode__loading{order:-1;width:100%;fill:none;animation:rotate 1.5s linear 0.125s infinite}circle{stroke:currentColor;stroke-dasharray:1, 200;stroke-linecap:round;animation:indeterminate-loading 1.25s ease-in-out 0.125s infinite}@keyframes fade-in{0%{opacity:0}}@keyframes rotate{100%{transform:rotate(1turn)}}@keyframes indeterminate-loading{50%,60%{stroke-dasharray:20, 200;stroke-dashoffset:-8px}100%{stroke-dashoffset:-24px}}";
6
-
7
- const NAME = "name";
8
- const PART_PREFIX = "dm-item__";
9
- const CANCEL_CLASS = "button-cancel";
10
- const CONFIRM_CLASS = "button-confirm";
11
- const BUTTON_CONFIRM_PART = (disabledPart) => `${PART_PREFIX}button-action confirm${disabledPart}`;
12
- const BUTTON_CANCEL_PART = (disabledPart) => `${PART_PREFIX}button-action cancel${disabledPart}`;
13
- const SELECT_OPTION_PART = `${PART_PREFIX}select-option`;
14
- const NextDataModelingSubitem = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
15
- constructor() {
16
- super();
17
- this.__registerHost();
18
- this.__attachShadow();
19
- this.deleteField = createEvent(this, "deleteField", 7);
20
- this.editField = createEvent(this, "editField", 7);
21
- this.newEntity = createEvent(this, "newEntity", 7);
22
- this.firstNewField = createEvent(this, "firstNewField", 7);
23
- this.firstNewFieldErrors = createEvent(this, "firstNewFieldErrors", 7);
24
- this.newField = createEvent(this, "newField", 7);
25
- /**
26
- * The metadata used for the different actions in the UI.
27
- */
28
- this.actions = (captions, disabledPart) => ({
29
- add: [
30
- {
31
- // Confirm add
32
- label: captions.confirm,
33
- class: CONFIRM_CLASS,
34
- part: BUTTON_CONFIRM_PART(disabledPart),
35
- event: this.confirmAction("new")
36
- },
37
- {
38
- // Cancel add
39
- label: captions.cancel,
40
- class: CANCEL_CLASS,
41
- part: BUTTON_CANCEL_PART(disabledPart),
42
- event: this.toggleShowNewField
43
- }
44
- ],
45
- delete: [
46
- {
47
- // Confirm delete
48
- label: captions.confirm,
49
- class: undefined,
50
- part: `${PART_PREFIX}button-delete-action confirm${disabledPart}`,
51
- event: this.emitDelete
52
- },
53
- {
54
- // Cancel delete
55
- label: captions.cancel,
56
- class: undefined,
57
- part: `${PART_PREFIX}button-delete-action cancel${disabledPart}`,
58
- event: this.toggleMode("delete")
59
- }
60
- ],
61
- edit: [
62
- {
63
- // Confirm edit
64
- label: captions.confirm,
65
- class: CONFIRM_CLASS,
66
- part: BUTTON_CONFIRM_PART(disabledPart),
67
- event: this.confirmAction("edit")
68
- },
69
- {
70
- // Cancel edit
71
- label: captions.cancel,
72
- class: CANCEL_CLASS,
73
- part: BUTTON_CANCEL_PART(disabledPart),
74
- event: this.toggleMode("edit")
75
- }
76
- ],
77
- normal: [
78
- {
79
- // Edit action
80
- label: captions.edit,
81
- class: "button-primary button-edit",
82
- part: `${PART_PREFIX}button-primary edit${disabledPart}`,
83
- event: this.toggleMode("edit")
84
- },
85
- {
86
- // Delete action
87
- label: captions.delete,
88
- class: "button-primary button-delete",
89
- part: `${PART_PREFIX}button-primary delete${disabledPart}`,
90
- event: this.toggleMode("delete")
91
- }
92
- ]
93
- });
94
- this.lastEditInfo = { name: "", type: "ATT" };
95
- this.focusInputInNextRender = false;
96
- this.expanded = false;
97
- // Modes
98
- this.errorType = "None";
99
- this.waitingMode = "none";
100
- /**
101
- * This attribute lets you specify if the actions in the `mode === "add"` are
102
- * visible.
103
- */
104
- this.actionsVisible = true;
105
- /**
106
- * The dataType of the field.
107
- */
108
- this.dataType = "";
109
- /**
110
- * This attribute lets you specify if the element is disabled.
111
- * If disabled, it will not fire any user interaction related event.
112
- */
113
- this.disabled = false;
114
- /**
115
- * This property maps entities of the current dataModel with their
116
- * corresponding ATTs.
117
- */
118
- this.entityNameToATTs = {};
119
- /**
120
- * This property specifies the defined field names of the entity parent.
121
- */
122
- this.fieldNames = [];
123
- /**
124
- * This property specifies at which collection level the field is located.
125
- */
126
- this.level = 1;
127
- /**
128
- * Determine the maximum amount of ATTs displayed per entity.
129
- */
130
- this.maxAtts = 3;
131
- /**
132
- * This attribute specifies the operating mode of the control
133
- */
134
- this.mode = "normal";
135
- /**
136
- * The name of the field.
137
- */
138
- this.name = "";
139
- /**
140
- * `true` to show the new field button when `mode === "add"`
141
- */
142
- this.showNewFieldBtn = true;
143
- /**
144
- * The type of the field.
145
- */
146
- this.type = "LEVEL";
147
- /**
148
- * Returns:
149
- * @example ```(Scorer, Goals)```
150
- * @example ```(Name, Age, Nationality (+3))```
151
- */
152
- this.makeAttsPrettier = (atts, maxAtts) => atts.length <= maxAtts
153
- ? "(" + atts.join(", ") + ")"
154
- : `(${atts.slice(0, maxAtts).join(", ")} (+${atts.length - maxAtts}))`;
155
- this.emitDelete = (event) => {
156
- // The subitem is the last one of the parent. Delete the parent instead
157
- if (this.level !== 0 && this.fieldNames.length === 1) {
158
- const parentItem = this.el.parentElement
159
- .parentElement;
160
- parentItem.delete(event);
161
- this.mode = "normal";
162
- return;
163
- }
164
- event.stopPropagation();
165
- this.waitingMode = "deleting";
166
- this.deleteField.emit();
167
- };
168
- this.toggleMode = (mode) => (event) => {
169
- event.stopPropagation();
170
- this.mode = this.mode === "normal" ? mode : "normal";
171
- this.focusInputInNextRender = mode === "edit";
172
- };
173
- this.toggleShowNewField = (event) => {
174
- event.stopPropagation();
175
- this.errorType = "None";
176
- const showNewFieldBtn = !this.showNewFieldBtn;
177
- this.showNewFieldBtn = showNewFieldBtn;
178
- this.focusInputInNextRender = !showNewFieldBtn;
179
- if (!showNewFieldBtn && this.level === 0) {
180
- const entityItem = this.el.firstElementChild
181
- .firstElementChild;
182
- entityItem.clearInput();
183
- }
184
- };
185
- /**
186
- * @todo TODO: Improve typing
187
- * WA function to get the gx-edit's input value
188
- * @param editElement An HTMLGxEditElement that is implemented in the web-controls-library
189
- */
190
- this.getGxEditInputValue = (editElement) => editElement.shadowRoot.firstElementChild.value;
191
- this.handleKeyDown = (actionType) => (event) => {
192
- if (event.code !== KEY_CODES.ENTER) {
193
- return;
194
- }
195
- event.preventDefault();
196
- this.confirmAction(actionType)(event);
197
- };
198
- this.checkChildErrors = (errors, event) => {
199
- this.el.firstElementChild
200
- .firstElementChild.checkErrors(errors, event);
201
- };
202
- this.validateErrorsWhenAddingEntity = (actionType, errors = "unknown", event) => {
203
- // Validate child errors when adding a new entity
204
- if (this.level === 0 && actionType === "new" && errors === "unknown") {
205
- this.checkChildErrors(errors, event);
206
- }
207
- // Validate parent errors when adding a new field in the new entity
208
- else if (!this.actionsVisible && errors === "unknown") {
209
- this.firstNewFieldErrors.emit();
210
- }
211
- };
212
- this.confirmAction = (actionType, errors = "unknown", itemInfo = null) => (event) => {
213
- event.stopPropagation();
214
- const trimmedInput = this.getGxEditInputValue(this.inputName).trim();
215
- // Force re-render. Useful when the error type don't change but the
216
- // displayed error text must change
217
- this.errorType = "None";
218
- if (trimmedInput === "") {
219
- this.errorType = "Empty";
220
- this.validateErrorsWhenAddingEntity(actionType, errors, event);
221
- return;
222
- }
223
- // The field already exists
224
- if (this.name !== trimmedInput &&
225
- this.fieldNames.includes(trimmedInput)) {
226
- this.errorType = "AlreadyDefined";
227
- this.errorName = trimmedInput;
228
- this.validateErrorsWhenAddingEntity(actionType, errors, event);
229
- return;
230
- }
231
- // New field
232
- if (actionType === "new") {
233
- this.lastEditInfo = {
234
- name: trimmedInput,
235
- type: this.level === 0 ? "ATT" : this.inputType.value // Doesn't matter the type when level = 0
236
- };
237
- // Adding a entity
238
- if (this.level === 0) {
239
- // Must check child errors
240
- if (errors === "unknown") {
241
- this.checkChildErrors(errors, event);
242
- }
243
- // The child does not have errors, commit the new entity
244
- else if (errors === "no") {
245
- this.waitingMode = "adding";
246
- this.expanded = true;
247
- this.newEntity.emit({ name: trimmedInput, level: [itemInfo] });
248
- this.toggleShowNewField(event);
249
- this.el.firstElementChild
250
- .firstElementChild.setAddingMode(); // TODO: Improve typing
251
- }
252
- }
253
- // Normal case: Adding a field that is not the first field of the entity
254
- else if (this.actionsVisible) {
255
- this.waitingMode = "adding";
256
- this.newField.emit(this.lastEditInfo);
257
- this.toggleShowNewField(event);
258
- }
259
- // Adding a field that is the first field of the entity
260
- else {
261
- this.firstNewField.emit(this.lastEditInfo);
262
- }
263
- return;
264
- }
265
- // Edit field (level 0 fields don't have a type, because they are always entities)
266
- if (this.name !== trimmedInput ||
267
- (this.level !== 0 && this.type !== this.inputType.value)) {
268
- this.waitingMode = "editing";
269
- this.lastEditInfo = {
270
- name: trimmedInput,
271
- type: this.level === 0 ? "ATT" : this.inputType.value // Doesn't matter the type when level = 0
272
- };
273
- this.editField.emit(this.lastEditInfo);
274
- }
275
- this.toggleMode("edit")(event);
276
- };
277
- this.loading = () => (h("svg", { class: "waiting-mode__loading", height: "28", viewBox: "6 6 12 12" }, h("circle", { cx: "12", cy: "12", r: "4", "stroke-width": "1.125" })));
278
- this.errorText = (errorTexts) => (h("p", { class: "error-text", part: `${PART_PREFIX}error-text` }, this.errorType === "Empty"
279
- ? errorTexts.Empty
280
- : [
281
- this.level === 0
282
- ? errorTexts.AlreadyDefinedEntity1
283
- : errorTexts.AlreadyDefined1,
284
- h("span", { part: `${PART_PREFIX}error-text-name` }, this.errorName),
285
- errorTexts.AlreadyDefined2
286
- ]));
287
- this.readonlyContent = (captions, name, type) => [
288
- // Readonly
289
- h("h1", { id: NAME, class: {
290
- name: true,
291
- "name-entity": type === "ENTITY"
292
- }, part: `${PART_PREFIX}name` }, name),
293
- this.level !== 0 && type !== "ATT" && (h("span", { class: "type", part: type === "LEVEL" ? `${PART_PREFIX}collection` : `${PART_PREFIX}entity` }, type === "LEVEL"
294
- ? captions.collection
295
- : this.makeAttsPrettier(this.entityNameToATTs[this.dataType] || [], this.maxAtts)))
296
- ];
297
- this.editableContent = (actionType, captions, disabledPart, errorPart) => [
298
- // Editable
299
- h("gx-edit", { class: "field-name", part: `${PART_PREFIX}input${errorPart}${disabledPart}`, disabled: this.disabled, type: "text", value: this.name, ref: el => (this.inputName = el), onKeydown: this.handleKeyDown(actionType) }),
300
- this.level !== 0 && (h("div", { class: "select-wrapper" }, h("select", { class: "select", part: `${PART_PREFIX}input${disabledPart} select`, disabled: this.disabled, ref: el => (this.inputType = el) }, h("option", { part: SELECT_OPTION_PART, value: "ATT", selected: this.type === "ATT" }, captions.ATT), h("option", { part: SELECT_OPTION_PART, value: "ENTITY", selected: this.type === "ENTITY" }, captions.ENTITY), h("option", { part: SELECT_OPTION_PART, value: "LEVEL", selected: this.type === "LEVEL" }, captions.LEVEL)))),
301
- this.errorType !== "None" && this.errorText(this.errorTexts)
302
- ];
303
- this.newFieldMode = (captions, errorPart, disabledPart, actions) => this.showNewFieldBtn ? (h("button", { class: "button-new-entity", part: `${PART_PREFIX}button-new-entity${disabledPart}`, disabled: this.disabled, type: "button", onClick: this.toggleShowNewField }, this.level === 0 ? captions.addNewEntity : captions.addNewField)) : (h("div", { slot: this.level === 0 ? "header" : undefined, class: {
304
- [`add-new-field--level-${this.level}`]: true,
305
- "add-new-field--no-actions": !this.actionsVisible
306
- }, part: `${PART_PREFIX}header-content`, tabindex: this.level !== 0 && this.actionsVisible ? "0" : undefined }, this.level === 2 && (h("div", { "aria-hidden": "true", class: "sub-field", part: `${PART_PREFIX}sub-field` })), h("h1", { class: "name", part: `${PART_PREFIX}name` }, this.level === 0 ? captions.newEntity : captions.newField), this.editableContent("new", captions, disabledPart, errorPart), this.level === 0 && h("slot", null), this.actionsVisible && [
307
- h("button", { "aria-label": actions[0].label, class: actions[0].class, part: actions[0].part, disabled: this.disabled, type: "button", onClick: actions[0].event }),
308
- h("button", { "aria-label": actions[1].label, class: actions[1].class, part: actions[1].part, disabled: this.disabled, type: "button", onClick: actions[1].event })
309
- ]));
310
- this.normalMode = (captions, errorPart, disabledPart, waitingModePart, actions, showWaitingModeTexts) => [
311
- h("div", { slot: this.level === 0 ? "header" : undefined, class: {
312
- header: true,
313
- "edit-mode": this.mode === "edit"
314
- }, part: `${PART_PREFIX}header-content`, tabindex: this.level !== 0 ? "0" : undefined }, this.level === 2 && (h("div", { "aria-hidden": "true", class: "sub-field", part: `${PART_PREFIX}sub-field` })), this.mode === "edit"
315
- ? this.editableContent("edit", captions, disabledPart, errorPart)
316
- : this.readonlyContent(captions, showWaitingModeTexts ? this.lastEditInfo.name : this.name, showWaitingModeTexts ? this.lastEditInfo.type : this.type), this.actionsVisible && (h("div", { class: {
317
- "delete-mode": this.mode === "delete",
318
- optimization: this.mode !== "delete",
319
- "waiting-mode": this.waitingMode !== "none"
320
- }, part: `${PART_PREFIX}delete-mode${waitingModePart}` }, this.waitingMode === "none"
321
- ? [
322
- this.mode === "delete" && captions.deleteMode,
323
- h("button", { "aria-label": actions[0].label, class: actions[0].class, part: actions[0].part, disabled: this.disabled, type: "button", onClick: actions[0].event }),
324
- h("button", { "aria-label": actions[1].label, class: actions[1].class, part: actions[1].part, disabled: this.disabled, type: "button", onClick: actions[1].event })
325
- ]
326
- : [captions[this.waitingMode], this.loading()]))),
327
- this.type === "LEVEL" &&
328
- (this.level === 0 ? (h("div", { slot: "content", part: `${PART_PREFIX}content` }, h("slot", null))) : (h("slot", null)))
329
- ];
330
- }
331
- handleExpandedChange(event) {
332
- event.stopPropagation();
333
- }
334
- handleFirstNewField(event) {
335
- if (this.level !== 0) {
336
- return;
337
- }
338
- this.confirmAction("new", "no", event.detail)(event);
339
- }
340
- handleFirstNewFieldErrors(event) {
341
- this.confirmAction("new", "yes")(event);
342
- }
343
- /**
344
- * Set the adding mode for the first field of the entity.
345
- */
346
- async setAddingMode() {
347
- this.clearInput();
348
- this.waitingMode = "adding";
349
- }
350
- /**
351
- * Remove the value of the input when mode === "add" | "edit"
352
- */
353
- async clearInput() {
354
- if (this.inputName) {
355
- const inputRef = this.inputName.shadowRoot
356
- .firstElementChild; // TODO: Improve typing
357
- inputRef.value = "";
358
- }
359
- this.errorType = "None";
360
- }
361
- /**
362
- * Check errors in the item when `level !== 0`
363
- */
364
- async checkErrors(errors, event) {
365
- this.confirmAction("new", errors)(event);
366
- }
367
- /**
368
- * Deletes the field.
369
- */
370
- async delete(event) {
371
- this.emitDelete(event);
372
- }
373
- /**
374
- * Hides the waiting mode to continue editing the field.
375
- */
376
- async hideWaitingMode() {
377
- if (this.mode === "add" && this.level === 0) {
378
- const entityItem = this.el.firstElementChild
379
- .firstElementChild;
380
- entityItem.hideWaitingMode();
381
- }
382
- // The add mode should not be changed
383
- else if (this.mode !== "add") {
384
- this.mode = "normal";
385
- }
386
- this.waitingMode = "none";
387
- }
388
- componentDidUpdate() {
389
- // Focus the edit input when the render method has finished
390
- if (this.focusInputInNextRender && this.inputName) {
391
- this.focusInputInNextRender = false;
392
- // Wait until the gx-edit control has render
393
- requestAnimationFrame(() => {
394
- this.inputName.click(); // The click method focuses the inner input of the gx-edit
395
- });
396
- }
397
- }
398
- render() {
399
- // Parts
400
- const disabledPart = this.disabled ? " disabled" : "";
401
- const waitingModePart = this.waitingMode === "none" ? "" : ` ${PART_PREFIX}waiting-mode`;
402
- const errorPart = this.errorType !== "None" ? " error" : "";
403
- const captions = this.captions;
404
- const actions = this.actions(captions, disabledPart)[this.mode];
405
- const showWaitingModeTexts = this.waitingMode === "editing" || this.waitingMode === "adding";
406
- return (h(Host, { role: "listitem", "aria-labelledby": NAME, class: {
407
- "gx-disabled": this.disabled
408
- } },
409
- // Add new field layout (last cell of the collection/entity)
410
- this.mode === "add" && this.waitingMode !== "adding" ? (this.newFieldMode(captions, errorPart, disabledPart, actions)) : this.level === 0 ? ( // Normal mode. Level === 0
411
- h("ch-accordion", { class: "accordion", part: `${PART_PREFIX}accordion`, accessibleName: this.name, expanded: this.expanded, exportparts: `accordion__chevron:${PART_PREFIX}chevron,accordion__expandable:${PART_PREFIX}expandable,accordion__header:${PART_PREFIX}header` }, this.normalMode(captions, errorPart, disabledPart, waitingModePart, actions, showWaitingModeTexts))) : (
412
- // Normal mode. Level !== 0
413
- this.normalMode(captions, errorPart, disabledPart, waitingModePart, actions, showWaitingModeTexts))));
414
- }
415
- get el() { return this; }
416
- static get style() { return nextDataModelingItemCss; }
417
- }, [1, "ch-next-data-modeling-item", {
418
- "actionsVisible": [4, "actions-visible"],
419
- "captions": [16],
420
- "dataType": [1, "data-type"],
421
- "disabled": [4],
422
- "entityNameToATTs": [16],
423
- "errorTexts": [16],
424
- "fieldNames": [16],
425
- "level": [2],
426
- "maxAtts": [2, "max-atts"],
427
- "mode": [1025],
428
- "name": [1],
429
- "showNewFieldBtn": [1028, "show-new-field-btn"],
430
- "type": [1],
431
- "expanded": [32],
432
- "errorType": [32],
433
- "waitingMode": [32],
434
- "setAddingMode": [64],
435
- "clearInput": [64],
436
- "checkErrors": [64],
437
- "delete": [64],
438
- "hideWaitingMode": [64]
439
- }, [[0, "expandedChange", "handleExpandedChange"], [0, "firstNewField", "handleFirstNewField"], [0, "firstNewFieldErrors", "handleFirstNewFieldErrors"]]]);
440
- function defineCustomElement$1() {
441
- if (typeof customElements === "undefined") {
442
- return;
443
- }
444
- const components = ["ch-next-data-modeling-item", "ch-accordion"];
445
- components.forEach(tagName => { switch (tagName) {
446
- case "ch-next-data-modeling-item":
447
- if (!customElements.get(tagName)) {
448
- customElements.define(tagName, NextDataModelingSubitem);
449
- }
450
- break;
451
- case "ch-accordion":
452
- if (!customElements.get(tagName)) {
453
- defineCustomElement$2();
454
- }
455
- break;
456
- } });
457
- }
1
+ import { N as NextDataModelingSubitem, d as defineCustomElement$1 } from './next-data-modeling-item.js';
458
2
 
459
3
  const ChNextDataModelingItem = NextDataModelingSubitem;
460
4
  const defineCustomElement = defineCustomElement$1;