kritzel-stencil 0.0.128 → 0.0.130

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 (154) hide show
  1. package/dist/cjs/index-CUSIflVf.js +2 -2
  2. package/dist/cjs/{index-C7Read21.js → index-CfXjPLHb.js} +46 -28
  3. package/dist/cjs/index-CfXjPLHb.js.map +1 -0
  4. package/dist/cjs/index.cjs.js +1 -1
  5. package/dist/cjs/{kritzel-brush-style_22.cjs.entry.js → kritzel-brush-style_23.cjs.entry.js} +502 -438
  6. package/dist/cjs/loader.cjs.js +1 -1
  7. package/dist/cjs/stencil.cjs.js +1 -1
  8. package/dist/collection/classes/commands/add-object.command.js +2 -2
  9. package/dist/collection/classes/commands/add-object.command.js.map +1 -1
  10. package/dist/collection/classes/commands/add-selection-group.command.js +3 -3
  11. package/dist/collection/classes/commands/add-selection-group.command.js.map +1 -1
  12. package/dist/collection/classes/commands/remove-object.command.js +4 -4
  13. package/dist/collection/classes/commands/remove-object.command.js.map +1 -1
  14. package/dist/collection/classes/commands/remove-selection-group.command.js +2 -2
  15. package/dist/collection/classes/commands/remove-selection-group.command.js.map +1 -1
  16. package/dist/collection/classes/commands/rotate-selection-group.command.js +2 -2
  17. package/dist/collection/classes/commands/rotate-selection-group.command.js.map +1 -1
  18. package/dist/collection/classes/handlers/selection.handler.js +5 -5
  19. package/dist/collection/classes/handlers/selection.handler.js.map +1 -1
  20. package/dist/collection/classes/objects/base-object.class.js +1 -1
  21. package/dist/collection/classes/objects/base-object.class.js.map +1 -1
  22. package/dist/collection/classes/objects/path.class.js +1 -1
  23. package/dist/collection/classes/objects/path.class.js.map +1 -1
  24. package/dist/collection/classes/objects/selection-group.class.js +6 -6
  25. package/dist/collection/classes/objects/selection-group.class.js.map +1 -1
  26. package/dist/collection/classes/store.class.js +9 -22
  27. package/dist/collection/classes/store.class.js.map +1 -1
  28. package/dist/collection/classes/structures/object-map.structure.js +42 -0
  29. package/dist/collection/classes/structures/object-map.structure.js.map +1 -0
  30. package/dist/collection/collection-manifest.json +1 -0
  31. package/dist/collection/components/core/kritzel-editor/kritzel-editor.css +7 -0
  32. package/dist/collection/components/core/kritzel-editor/kritzel-editor.js +12 -2
  33. package/dist/collection/components/core/kritzel-editor/kritzel-editor.js.map +1 -1
  34. package/dist/collection/components/core/kritzel-engine/kritzel-engine.js +17 -17
  35. package/dist/collection/components/core/kritzel-engine/kritzel-engine.js.map +1 -1
  36. package/dist/collection/components/shared/kritzel-menu/kritzel-menu.css +15 -155
  37. package/dist/collection/components/shared/kritzel-menu/kritzel-menu.js +167 -177
  38. package/dist/collection/components/shared/kritzel-menu/kritzel-menu.js.map +1 -1
  39. package/dist/collection/components/shared/kritzel-menu-item/kritzel-menu-item.css +129 -0
  40. package/dist/collection/components/shared/kritzel-menu-item/kritzel-menu-item.js +261 -0
  41. package/dist/collection/components/shared/kritzel-menu-item/kritzel-menu-item.js.map +1 -0
  42. package/dist/collection/components/shared/kritzel-portal/kritzel-portal.js +160 -43
  43. package/dist/collection/components/shared/kritzel-portal/kritzel-portal.js.map +1 -1
  44. package/dist/collection/components/shared/kritzel-split-button/kritzel-split-button.css +83 -74
  45. package/dist/collection/components/shared/kritzel-split-button/kritzel-split-button.js +142 -118
  46. package/dist/collection/components/shared/kritzel-split-button/kritzel-split-button.js.map +1 -1
  47. package/dist/collection/components/shared/kritzel-stroke-size/kritzel-stroke-size.js +1 -1
  48. package/dist/collection/components/shared/kritzel-tooltip/kritzel-tooltip.js +4 -4
  49. package/dist/collection/components/ui/kritzel-control-brush-config/kritzel-control-brush-config.js +2 -2
  50. package/dist/collection/components/ui/kritzel-control-text-config/kritzel-control-text-config.js +2 -2
  51. package/dist/collection/components/ui/kritzel-controls/kritzel-controls.css +5 -8
  52. package/dist/collection/components/ui/kritzel-controls/kritzel-controls.js +3 -3
  53. package/dist/collection/components/ui/kritzel-utility-panel/kritzel-utility-panel.js +1 -1
  54. package/dist/collection/components/ui/kritzel-workspace-manager/kritzel-workspace-manager.js +110 -88
  55. package/dist/collection/components/ui/kritzel-workspace-manager/kritzel-workspace-manager.js.map +1 -1
  56. package/dist/collection/configs/default-engine-state.js +1 -1
  57. package/dist/collection/configs/default-engine-state.js.map +1 -1
  58. package/dist/collection/helpers/keyboard.helper.js +18 -0
  59. package/dist/collection/helpers/keyboard.helper.js.map +1 -1
  60. package/dist/collection/index.js +1 -0
  61. package/dist/collection/index.js.map +1 -1
  62. package/dist/collection/interfaces/engine-state.interface.js.map +1 -1
  63. package/dist/collection/interfaces/menu-item.interface.js.map +1 -1
  64. package/dist/components/index.d.ts +2 -0
  65. package/dist/components/index.js +3 -2
  66. package/dist/components/index.js.map +1 -1
  67. package/dist/components/kritzel-control-brush-config.js +1 -1
  68. package/dist/components/kritzel-control-text-config.js +1 -1
  69. package/dist/components/kritzel-controls.js +1 -1
  70. package/dist/components/kritzel-editor.js +53 -39
  71. package/dist/components/kritzel-editor.js.map +1 -1
  72. package/dist/components/kritzel-engine.js +1 -1
  73. package/dist/components/kritzel-menu-item.d.ts +11 -0
  74. package/dist/components/kritzel-menu-item.js +9 -0
  75. package/dist/components/kritzel-menu-item.js.map +1 -0
  76. package/dist/components/kritzel-menu.js +1 -1
  77. package/dist/components/kritzel-portal.js +1 -1
  78. package/dist/components/kritzel-split-button.js +1 -1
  79. package/dist/components/kritzel-stroke-size.js +1 -1
  80. package/dist/components/kritzel-tooltip.js +1 -1
  81. package/dist/components/kritzel-utility-panel.js +1 -1
  82. package/dist/components/kritzel-workspace-manager.js +1 -1
  83. package/dist/components/{p-jG1e48OE.js → p-26poIWa_.js} +6 -6
  84. package/dist/components/{p-jG1e48OE.js.map → p-26poIWa_.js.map} +1 -1
  85. package/dist/components/{p-rQeWFfPG.js → p-BGccckxP.js} +3 -3
  86. package/dist/components/{p-rQeWFfPG.js.map → p-BGccckxP.js.map} +1 -1
  87. package/dist/components/p-BcQWRzsB.js +183 -0
  88. package/dist/components/p-BcQWRzsB.js.map +1 -0
  89. package/dist/components/p-C-DqsDXz.js +238 -0
  90. package/dist/components/p-C-DqsDXz.js.map +1 -0
  91. package/dist/components/{p-B7VrEdgP.js → p-C9-70hiF.js} +25 -7
  92. package/dist/components/p-C9-70hiF.js.map +1 -0
  93. package/dist/components/p-CJKA5zIE.js +10 -0
  94. package/dist/components/p-CJKA5zIE.js.map +1 -0
  95. package/dist/components/p-CaPdvVd4.js +127 -0
  96. package/dist/components/p-CaPdvVd4.js.map +1 -0
  97. package/dist/components/{p-a7KmQzo4.js → p-Cb1IUD_g.js} +5 -5
  98. package/dist/components/{p-a7KmQzo4.js.map → p-Cb1IUD_g.js.map} +1 -1
  99. package/dist/components/{p-BaKb8ZLg.js → p-Crni2OI4.js} +4 -4
  100. package/dist/components/{p-BaKb8ZLg.js.map → p-Crni2OI4.js.map} +1 -1
  101. package/dist/components/{p-BB22cVkU.js → p-D_Uh-xv_.js} +13 -18
  102. package/dist/components/p-D_Uh-xv_.js.map +1 -0
  103. package/dist/components/{p-BzSz74Ci.js → p-fyfT6A5K.js} +3 -3
  104. package/dist/components/{p-BzSz74Ci.js.map → p-fyfT6A5K.js.map} +1 -1
  105. package/dist/components/{p-D-zg05gA.js → p-jGaWxggY.js} +93 -179
  106. package/dist/components/p-jGaWxggY.js.map +1 -0
  107. package/dist/components/p-jpGLgpoq.js +237 -0
  108. package/dist/components/p-jpGLgpoq.js.map +1 -0
  109. package/dist/esm/{index-J4NpPimy.js → index-DqqxAoZI.js} +47 -29
  110. package/dist/esm/index-DqqxAoZI.js.map +1 -0
  111. package/dist/esm/index-NiIEUDzj.js +2 -2
  112. package/dist/esm/index.js +1 -1
  113. package/dist/esm/{kritzel-brush-style_22.entry.js → kritzel-brush-style_23.entry.js} +502 -439
  114. package/dist/esm/loader.js +1 -1
  115. package/dist/esm/stencil.js +1 -1
  116. package/dist/stencil/index.esm.js +1 -1
  117. package/dist/stencil/p-DqqxAoZI.js +2 -0
  118. package/dist/stencil/p-DqqxAoZI.js.map +1 -0
  119. package/dist/stencil/p-eebdbf65.entry.js +2 -0
  120. package/dist/stencil/p-eebdbf65.entry.js.map +1 -0
  121. package/dist/stencil/stencil.esm.js +1 -1
  122. package/dist/types/classes/structures/object-map.structure.d.ts +11 -0
  123. package/dist/types/components/core/kritzel-editor/kritzel-editor.d.ts +3 -0
  124. package/dist/types/components/shared/kritzel-menu/kritzel-menu.d.ts +18 -18
  125. package/dist/types/components/shared/kritzel-menu-item/kritzel-menu-item.d.ts +26 -0
  126. package/dist/types/components/shared/kritzel-portal/kritzel-portal.d.ts +15 -10
  127. package/dist/types/components/shared/kritzel-split-button/kritzel-split-button.d.ts +25 -16
  128. package/dist/types/components/ui/kritzel-workspace-manager/kritzel-workspace-manager.d.ts +18 -14
  129. package/dist/types/components.d.ts +90 -61
  130. package/dist/types/helpers/keyboard.helper.d.ts +1 -0
  131. package/dist/types/index.d.ts +1 -0
  132. package/dist/types/interfaces/engine-state.interface.d.ts +2 -2
  133. package/dist/types/interfaces/menu-item.interface.d.ts +21 -7
  134. package/package.json +1 -1
  135. package/dist/cjs/index-C7Read21.js.map +0 -1
  136. package/dist/collection/classes/structures/octree.structure.js +0 -115
  137. package/dist/collection/classes/structures/octree.structure.js.map +0 -1
  138. package/dist/components/p-B7VrEdgP.js.map +0 -1
  139. package/dist/components/p-BB22cVkU.js.map +0 -1
  140. package/dist/components/p-BmJbJwkH.js +0 -167
  141. package/dist/components/p-BmJbJwkH.js.map +0 -1
  142. package/dist/components/p-D-zg05gA.js.map +0 -1
  143. package/dist/components/p-DV4ERZv5.js +0 -112
  144. package/dist/components/p-DV4ERZv5.js.map +0 -1
  145. package/dist/components/p-hSuNJiIq.js +0 -152
  146. package/dist/components/p-hSuNJiIq.js.map +0 -1
  147. package/dist/components/p-sQmW5NRu.js +0 -156
  148. package/dist/components/p-sQmW5NRu.js.map +0 -1
  149. package/dist/esm/index-J4NpPimy.js.map +0 -1
  150. package/dist/stencil/p-4a0009e7.entry.js +0 -2
  151. package/dist/stencil/p-4a0009e7.entry.js.map +0 -1
  152. package/dist/stencil/p-J4NpPimy.js +0 -2
  153. package/dist/stencil/p-J4NpPimy.js.map +0 -1
  154. package/dist/types/classes/structures/octree.structure.d.ts +0 -18
@@ -1,166 +1,26 @@
1
1
  :host {
2
+ position: relative;
2
3
  display: flex;
3
4
  flex-direction: column;
4
- min-width: 180px;
5
- padding: var(--kritzel-controls-padding, 8px);
6
- background-color: var(--kritzel-controls-background-color, #ffffff);
7
- border-radius: var(--kritzel-controls-border-radius, 12px);
8
- box-shadow: var(--kritzel-controls-box-shadow, 0 0 3px rgba(0, 0, 0, 0.08));
9
- border: var(--kritzel-controls-border, 1px solid #ebebeb);
5
+ background-color: var(--kritzel-menu-background-color, #ffffff);
6
+ width: var(--kritzel-menu-width, 180px);
7
+ padding: var(--kritzel-menu-padding, 8px);
8
+ border-radius: var(--kritzel-menu-border-radius, 12px);
9
+ box-shadow: var(--kritzel-menu-box-shadow, 0 0 3px rgba(0, 0, 0, 0.08));
10
+ border: var(--kritzel-menu-border, 1px solid #ebebeb);
10
11
  z-index: 2;
11
12
  gap: var(--kritzel-menu-item-gap, 4px);
12
13
  overflow-y: auto;
13
14
  scrollbar-color: #ebebeb transparent;
14
15
  scrollbar-width: thin;
16
+ max-height: 300px;
15
17
  }
16
18
 
17
- button {
18
- all: unset;
19
- background: transparent;
20
- border: 0;
21
- padding: 0;
22
- margin: 0;
23
- font: inherit;
24
- color: inherit;
25
- line-height: inherit;
26
- text-align: inherit;
27
- cursor: pointer;
28
- appearance: none;
29
- -webkit-appearance: none;
30
- -moz-appearance: none;
31
- border-radius: 0;
32
- -webkit-tap-highlight-color: transparent;
33
- }
34
-
35
- button:focus {
36
- outline: none;
37
- }
38
-
39
- :host(:focus) {
40
- outline: none;
41
- }
42
-
43
- .menu-item {
44
- display: flex;
45
- align-items: center;
46
- justify-content: space-between;
47
- padding: var(--kritzel-context-menu-item-padding, 8px);
48
- border-radius: var(--kritzel-context-menu-item-border-radius, 12px);
49
- cursor: pointer;
50
- font-family: sans-serif;
51
- font-size: var(--kritzel-context-menu-item-font-size, 14px);
52
- color: var(--kritzel-context-menu-item-color, #333333);
53
- gap: var(--kritzel-context-menu-item-gap, 12px);
54
- }
55
-
56
- .menu-item:focus,
57
- .menu-item:focus-within {
58
- outline: none;
59
- background-color: var(--kritzel-context-menu-item-hover-background-color, hsl(0, 0%, 0%, 4.3%));
60
- }
61
-
62
- .menu-item-label {
63
- white-space: nowrap;
64
- overflow: hidden;
65
- text-overflow: ellipsis;
66
- }
67
-
68
- .menu-item:not(.disabled):not(.inactive):not(.active):hover {
69
- background-color: var(--kritzel-context-menu-item-hover-background-color, hsl(0, 0%, 0%, 4.3%));
70
- }
71
-
72
- .menu-item:not(.disabled):not(.inactive):not(.active):active {
73
- background-color: var(--kritzel-context-menu-item-active-background-color, hsl(0, 0%, 0%, 8.6%));
74
- }
75
-
76
- .menu-item.active {
77
- color: var(--kritzel-controls-background-color, #ffffff);
78
- background-color: var(--kritzel-controls-control-selected-background-color, #007aff);
79
- }
80
-
81
- .menu-item.active kritzel-icon {
82
- filter: brightness(0) invert(1);
83
- }
84
-
85
- .menu-item.active:hover {
86
- background-color: var(--kritzel-controls-control-selected-hover-background-color, #0075f1);
87
- }
88
-
89
- .menu-item.disabled {
90
- color: var(--kritzel-context-menu-item-disabled-color, #aaaaaa);
91
- background-color: transparent;
92
- cursor: default;
93
- }
94
-
95
- .menu-item.child-open {
96
- background-color: var(--kritzel-context-menu-item-hover-background-color, hsl(0, 0%, 0%, 4.3%)) !important;
97
- }
98
-
99
- .menu-item.active.menu-item.child-open {
100
- background-color: var(--kritzel-controls-control-selected-active-background-color, #0075f1) !important;
101
- }
102
-
103
- .menu-item kritzel-icon {
104
- opacity: 0.8;
105
- flex-shrink: 0;
106
- }
107
-
108
- .menu-item.disabled kritzel-icon {
109
- opacity: 0.4;
110
- }
111
-
112
- .menu-item.edit-mode input {
113
- background: transparent;
114
- border: none;
115
- outline: none;
116
- font-size: inherit;
117
- font-family: inherit;
118
- color: inherit;
119
- padding: 0;
120
- width: 100%;
121
- padding: 2px 0px;
122
- border-bottom: 1px solid var(--kritzel-context-menu-item-color, #333333);
123
- }
124
-
125
- .menu-item.active.edit-mode input {
126
- border-bottom: 1px solid var(--kritzel-controls-background-color, #ffffff);
127
- }
128
-
129
- .menu-item.edit-mode input::selection {
130
- background-color: var(--kritzel-controls-control-selected-background-color, #007aff);
131
- border-radius: 4px;
132
- color: var(--kritzel-controls-background-color, #ffffff);
133
- }
134
-
135
- .menu-item.active.edit-mode input::selection {
136
- background-color: var(--kritzel-menu-item-selected-input-background-color, #ffffff34);
137
- }
138
-
139
- .menu-item-button {
140
- background: transparent;
141
- border: none;
142
- outline: none;
143
- cursor: pointer;
144
- padding: 4px;
145
- border-radius: 8px;
146
- display: flex;
147
- align-items: center;
148
- justify-content: center;
149
- }
150
-
151
- .menu-item-button:hover {
152
- background-color: var(--kritzel-context-menu-item-hover-background-color, hsl(0, 0%, 0%, 4.3%));
153
- }
154
-
155
- .menu-item-button:focus {
156
- background-color: var(--kritzel-context-menu-item-hover-background-color, hsl(0, 0%, 0%, 4.3%));
157
- }
158
-
159
- .edit-container,
160
- .view-container {
161
- width: 100%;
162
- display: flex;
163
- align-items: center;
164
- justify-content: space-between;
165
- gap: var(--kritzel-context-menu-item-gap, 4px);
19
+ .has-open-child-overlay {
20
+ position: absolute;
21
+ top: 0;
22
+ left: 0;
23
+ right: 0;
24
+ bottom: 0;
25
+ z-index: 3;
166
26
  }
@@ -1,95 +1,47 @@
1
- import { h, Host } from "@stencil/core";
1
+ import { Host, h } from "@stencil/core";
2
2
  export class KritzelMenu {
3
3
  constructor() {
4
- this.items = [];
5
- this.parentIndex = null;
6
4
  this.parent = null;
7
- this.activeItemIndex = null;
8
- this.editingIndex = null;
9
- this.openChildMenuIndex = null;
10
- this.childMenuAnchor = null;
11
- this.cancelButton = null;
12
- this.saveButton = null;
13
- }
14
- onEditingIndexChange(newValue) {
15
- if (newValue === null) {
16
- this.openChildMenuIndex = null;
17
- this.editInput = undefined;
18
- return;
19
- }
20
- }
21
- handleWindowClick(event) {
22
- if (this.openChildMenuIndex === null) {
23
- return;
24
- }
25
- const target = event.target;
26
- if (!this.host.contains(target)) {
27
- this.openChildMenuIndex = null;
28
- }
29
- }
30
- handleEscape(event) {
31
- var _a;
32
- if (event.key === 'Escape') {
33
- if (this.openChildMenuIndex !== null) {
34
- return;
35
- }
36
- if (this.editingIndex !== null) {
37
- (_a = this.cancelButton) === null || _a === void 0 ? void 0 : _a.click();
38
- return;
39
- }
40
- this.close.emit();
41
- }
5
+ this.selectedIndex = null;
6
+ this.onOverlayClick = (event) => {
7
+ event.stopPropagation();
8
+ this.itemCloseChildMenu.emit(this.openChildMenuItem);
9
+ };
10
+ this.handleItemSelect = (event) => {
11
+ event.stopPropagation();
12
+ this.itemSelect.emit(event.detail);
13
+ };
14
+ this.handleSave = (event) => {
15
+ event.stopPropagation();
16
+ this.itemSave.emit(event.detail);
17
+ };
18
+ this.handleCancel = (event) => {
19
+ event.stopPropagation();
20
+ this.itemCancel.emit(event.detail);
21
+ };
22
+ this.handleToggleChildMenu = (event) => {
23
+ event.stopPropagation();
24
+ this.itemToggleChildMenu.emit(event.detail);
25
+ };
26
+ this.handleCloseChildMenu = (event) => {
27
+ event.stopPropagation();
28
+ this.itemCloseChildMenu.emit(event.detail);
29
+ };
42
30
  }
43
- handleEnter(event) {
44
- var _a;
45
- if (event.key === 'Enter') {
46
- if (this.editingIndex !== null) {
47
- (_a = this.saveButton) === null || _a === void 0 ? void 0 : _a.click();
48
- return;
49
- }
31
+ async setFocus() {
32
+ const firstItem = this.host.querySelector('kritzel-menu-item');
33
+ if (firstItem) {
34
+ firstItem.focus();
50
35
  }
51
36
  }
52
- componentDidLoad() {
53
- requestAnimationFrame(() => {
54
- this.host.focus();
55
- });
56
- }
57
- isViewMode(index) {
58
- return this.editingIndex !== index;
37
+ get openChildMenuItem() {
38
+ return this.items.find(item => item.isChildMenuOpen);
59
39
  }
60
- handleSelect(item) {
61
- var _a;
62
- if (item.disabled || this.editingIndex !== null || this.openChildMenuIndex !== null) {
63
- return;
64
- }
65
- (_a = item.select) === null || _a === void 0 ? void 0 : _a.call(item, item);
40
+ get editingMenuItem() {
41
+ return this.items.find(item => item.isEditing);
66
42
  }
67
43
  render() {
68
- return (h(Host, { key: '6d98c1d40c1af36b7b36c45ddc96fb89ab6ebdca', tabIndex: 0 }, this.items.map((item, index) => (h("button", { tabIndex: 0, class: {
69
- 'menu-item': true,
70
- 'disabled': item.disabled,
71
- 'inactive': this.openChildMenuIndex !== null && this.openChildMenuIndex !== index,
72
- 'child-open': this.openChildMenuIndex === index,
73
- 'edit-mode': this.editingIndex === index,
74
- 'active': this.activeItemIndex === index,
75
- }, onClick: () => this.handleSelect(item) }, this.isViewMode(index) === true && (h("div", { class: "view-container" }, h("span", { class: "menu-item-label" }, item.label), h("div", null, item.children && item.children.length > 0 && (h("button", { class: "menu-item-button", tabIndex: 0, onClick: event => {
76
- if (this.editingIndex !== null)
77
- return;
78
- event.stopPropagation();
79
- this.childMenuAnchor = this.openChildMenuIndex === index ? null : event.currentTarget;
80
- this.openChildMenuIndex = this.openChildMenuIndex === index ? null : index;
81
- } }, h("kritzel-icon", { name: "ellipsis-vertical", size: 16 }))), this.openChildMenuIndex === index && (h("kritzel-portal", { anchor: this.childMenuAnchor, offsetY: 4, onClose: () => this.openChildMenuIndex = null }, h("kritzel-menu", { style: { minWidth: '100px' }, items: item.children, parentIndex: index, parent: item, onClose: () => {
82
- var _a;
83
- this.openChildMenuIndex = null;
84
- (_a = this.childMenuAnchor) === null || _a === void 0 ? void 0 : _a.focus();
85
- } })))))), this.isViewMode(index) === false && (h("div", { class: "edit-container" }, h("input", { tabIndex: 0, ref: el => {
86
- this.editInput = el;
87
- requestAnimationFrame(() => {
88
- var _a, _b;
89
- (_a = this.editInput) === null || _a === void 0 ? void 0 : _a.focus();
90
- (_b = this.editInput) === null || _b === void 0 ? void 0 : _b.select();
91
- });
92
- }, type: "text", name: 'menu-item-' + index, value: item.label, onInput: e => (item.label = e.target.value) }), h("div", { style: { display: 'flex', gap: '8px' } }, h("button", { ref: el => (this.cancelButton = el), class: "menu-item-button", tabIndex: 0, onClick: () => { var _a; return (_a = item.cancel) === null || _a === void 0 ? void 0 : _a.call(item, item); } }, h("kritzel-icon", { name: "x", size: 16 })), h("button", { ref: el => (this.saveButton = el), class: "menu-item-button", tabIndex: 0, onClick: () => { var _a; return (_a = item.save) === null || _a === void 0 ? void 0 : _a.call(item, item); } }, h("kritzel-icon", { name: "check", size: 16 }))))))))));
44
+ return (h(Host, { key: 'c82bde4dc70fdc79df7471bb10396394f6c3870a', onClick: e => e.stopPropagation() }, this.openChildMenuItem && h("div", { key: '5fe0323aaa0da44abe736c6ef5e0516113c7820d', class: "has-open-child-overlay", onClick: this.onOverlayClick }), this.items.map((item) => (h("kritzel-menu-item", { key: item.id, item: item, parent: this.parent, style: { pointerEvents: this.editingMenuItem && !item.isEditing ? 'none' : 'auto' }, onItemSelect: this.handleItemSelect, onItemSave: this.handleSave, onItemCancel: this.handleCancel, onItemToggleChildMenu: this.handleToggleChildMenu, onItemCloseChildMenu: this.handleCloseChildMenu })))));
93
45
  }
94
46
  static get is() { return "kritzel-menu"; }
95
47
  static get encapsulation() { return "shadow"; }
@@ -110,13 +62,13 @@ export class KritzelMenu {
110
62
  "attribute": "items",
111
63
  "mutable": false,
112
64
  "complexType": {
113
- "original": "KritzelMenuItem[]",
114
- "resolved": "KritzelMenuItem<any>[]",
65
+ "original": "IKritzelMenuItem[]",
66
+ "resolved": "IKritzelMenuItem<any>[]",
115
67
  "references": {
116
- "KritzelMenuItem": {
68
+ "IKritzelMenuItem": {
117
69
  "location": "import",
118
70
  "path": "../../../interfaces/menu-item.interface",
119
- "id": "src/interfaces/menu-item.interface.ts::KritzelMenuItem"
71
+ "id": "src/interfaces/menu-item.interface.ts::IKritzelMenuItem"
120
72
  }
121
73
  }
122
74
  },
@@ -127,17 +79,22 @@ export class KritzelMenu {
127
79
  "text": ""
128
80
  },
129
81
  "getter": false,
130
- "setter": false,
131
- "defaultValue": "[]"
82
+ "setter": false
132
83
  },
133
- "parentIndex": {
134
- "type": "number",
135
- "attribute": "parent-index",
84
+ "parent": {
85
+ "type": "unknown",
86
+ "attribute": "parent",
136
87
  "mutable": false,
137
88
  "complexType": {
138
- "original": "number | null",
139
- "resolved": "number",
140
- "references": {}
89
+ "original": "IKritzelMenuItem",
90
+ "resolved": "IKritzelMenuItem<any>",
91
+ "references": {
92
+ "IKritzelMenuItem": {
93
+ "location": "import",
94
+ "path": "../../../interfaces/menu-item.interface",
95
+ "id": "src/interfaces/menu-item.interface.ts::IKritzelMenuItem"
96
+ }
97
+ }
141
98
  },
142
99
  "required": false,
143
100
  "optional": false,
@@ -147,83 +104,122 @@ export class KritzelMenu {
147
104
  },
148
105
  "getter": false,
149
106
  "setter": false,
150
- "reflect": false,
151
107
  "defaultValue": "null"
152
- },
153
- "parent": {
154
- "type": "unknown",
155
- "attribute": "parent",
156
- "mutable": false,
108
+ }
109
+ };
110
+ }
111
+ static get states() {
112
+ return {
113
+ "selectedIndex": {}
114
+ };
115
+ }
116
+ static get events() {
117
+ return [{
118
+ "method": "itemSelect",
119
+ "name": "itemSelect",
120
+ "bubbles": true,
121
+ "cancelable": true,
122
+ "composed": true,
123
+ "docs": {
124
+ "tags": [],
125
+ "text": ""
126
+ },
157
127
  "complexType": {
158
- "original": "KritzelMenuItem",
159
- "resolved": "KritzelMenuItem<any>",
128
+ "original": "IKritzelMenuItemSelectEvent",
129
+ "resolved": "IKritzelMenuItemSelectEvent",
160
130
  "references": {
161
- "KritzelMenuItem": {
131
+ "IKritzelMenuItemSelectEvent": {
162
132
  "location": "import",
163
133
  "path": "../../../interfaces/menu-item.interface",
164
- "id": "src/interfaces/menu-item.interface.ts::KritzelMenuItem"
134
+ "id": "src/interfaces/menu-item.interface.ts::IKritzelMenuItemSelectEvent"
165
135
  }
166
136
  }
167
- },
168
- "required": false,
169
- "optional": false,
137
+ }
138
+ }, {
139
+ "method": "itemSave",
140
+ "name": "itemSave",
141
+ "bubbles": true,
142
+ "cancelable": true,
143
+ "composed": true,
170
144
  "docs": {
171
145
  "tags": [],
172
146
  "text": ""
173
147
  },
174
- "getter": false,
175
- "setter": false,
176
- "defaultValue": "null"
177
- },
178
- "activeItemIndex": {
179
- "type": "number",
180
- "attribute": "active-item-index",
181
- "mutable": false,
182
148
  "complexType": {
183
- "original": "number | null",
184
- "resolved": "number",
185
- "references": {}
186
- },
187
- "required": false,
188
- "optional": false,
149
+ "original": "IKritzelMenuItem",
150
+ "resolved": "IKritzelMenuItem<any>",
151
+ "references": {
152
+ "IKritzelMenuItem": {
153
+ "location": "import",
154
+ "path": "../../../interfaces/menu-item.interface",
155
+ "id": "src/interfaces/menu-item.interface.ts::IKritzelMenuItem"
156
+ }
157
+ }
158
+ }
159
+ }, {
160
+ "method": "itemCancel",
161
+ "name": "itemCancel",
162
+ "bubbles": true,
163
+ "cancelable": true,
164
+ "composed": true,
189
165
  "docs": {
190
166
  "tags": [],
191
167
  "text": ""
192
168
  },
193
- "getter": false,
194
- "setter": false,
195
- "reflect": false,
196
- "defaultValue": "null"
197
- },
198
- "editingIndex": {
199
- "type": "number",
200
- "attribute": "editing-index",
201
- "mutable": false,
202
169
  "complexType": {
203
- "original": "number | null",
204
- "resolved": "number",
205
- "references": {}
170
+ "original": "IKritzelMenuItem",
171
+ "resolved": "IKritzelMenuItem<any>",
172
+ "references": {
173
+ "IKritzelMenuItem": {
174
+ "location": "import",
175
+ "path": "../../../interfaces/menu-item.interface",
176
+ "id": "src/interfaces/menu-item.interface.ts::IKritzelMenuItem"
177
+ }
178
+ }
179
+ }
180
+ }, {
181
+ "method": "itemToggleChildMenu",
182
+ "name": "itemToggleChildMenu",
183
+ "bubbles": true,
184
+ "cancelable": true,
185
+ "composed": true,
186
+ "docs": {
187
+ "tags": [],
188
+ "text": ""
206
189
  },
207
- "required": false,
208
- "optional": false,
190
+ "complexType": {
191
+ "original": "IKritzelMenuItemToggleChildMenuEvent",
192
+ "resolved": "IKritzelMenuItemToggleChildMenuEvent",
193
+ "references": {
194
+ "IKritzelMenuItemToggleChildMenuEvent": {
195
+ "location": "import",
196
+ "path": "../../../interfaces/menu-item.interface",
197
+ "id": "src/interfaces/menu-item.interface.ts::IKritzelMenuItemToggleChildMenuEvent"
198
+ }
199
+ }
200
+ }
201
+ }, {
202
+ "method": "itemCloseChildMenu",
203
+ "name": "itemCloseChildMenu",
204
+ "bubbles": true,
205
+ "cancelable": true,
206
+ "composed": true,
209
207
  "docs": {
210
208
  "tags": [],
211
209
  "text": ""
212
210
  },
213
- "getter": false,
214
- "setter": false,
215
- "reflect": false,
216
- "defaultValue": "null"
217
- }
218
- };
219
- }
220
- static get states() {
221
- return {
222
- "openChildMenuIndex": {}
223
- };
224
- }
225
- static get events() {
226
- return [{
211
+ "complexType": {
212
+ "original": "IKritzelMenuItem",
213
+ "resolved": "IKritzelMenuItem<any>",
214
+ "references": {
215
+ "IKritzelMenuItem": {
216
+ "location": "import",
217
+ "path": "../../../interfaces/menu-item.interface",
218
+ "id": "src/interfaces/menu-item.interface.ts::IKritzelMenuItem"
219
+ }
220
+ }
221
+ }
222
+ }, {
227
223
  "method": "close",
228
224
  "name": "close",
229
225
  "bubbles": true,
@@ -240,33 +236,27 @@ export class KritzelMenu {
240
236
  }
241
237
  }];
242
238
  }
243
- static get elementRef() { return "host"; }
244
- static get watchers() {
245
- return [{
246
- "propName": "editingIndex",
247
- "methodName": "onEditingIndexChange"
248
- }];
249
- }
250
- static get listeners() {
251
- return [{
252
- "name": "click",
253
- "method": "handleWindowClick",
254
- "target": "window",
255
- "capture": false,
256
- "passive": false
257
- }, {
258
- "name": "keydown",
259
- "method": "handleEscape",
260
- "target": "window",
261
- "capture": false,
262
- "passive": false
263
- }, {
264
- "name": "keydown",
265
- "method": "handleEnter",
266
- "target": "window",
267
- "capture": false,
268
- "passive": false
269
- }];
239
+ static get methods() {
240
+ return {
241
+ "setFocus": {
242
+ "complexType": {
243
+ "signature": "() => Promise<void>",
244
+ "parameters": [],
245
+ "references": {
246
+ "Promise": {
247
+ "location": "global",
248
+ "id": "global::Promise"
249
+ }
250
+ },
251
+ "return": "Promise<void>"
252
+ },
253
+ "docs": {
254
+ "text": "",
255
+ "tags": []
256
+ }
257
+ }
258
+ };
270
259
  }
260
+ static get elementRef() { return "host"; }
271
261
  }
272
262
  //# sourceMappingURL=kritzel-menu.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"kritzel-menu.js","sourceRoot":"","sources":["../../../../src/components/shared/kritzel-menu/kritzel-menu.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, h, Prop, Host, State, Listen, Element, Watch, Event, EventEmitter } from '@stencil/core';\r\nimport { KritzelMenuItem } from '../../../interfaces/menu-item.interface';\r\n\r\n\r\n@Component({\r\n tag: 'kritzel-menu',\r\n styleUrl: 'kritzel-menu.css',\r\n shadow: true,\r\n})\r\nexport class KritzelMenu {\r\n @Element()\r\n host: HTMLElement;\r\n\r\n @Prop()\r\n items: KritzelMenuItem[] = [];\r\n\r\n @Prop()\r\n parentIndex: number | null = null;\r\n\r\n @Prop()\r\n parent: KritzelMenuItem = null;\r\n\r\n @Prop()\r\n activeItemIndex: number | null = null;\r\n\r\n @Prop()\r\n editingIndex: number | null = null;\r\n\r\n @Event()\r\n close: EventEmitter<void>;\r\n\r\n @State()\r\n openChildMenuIndex: number | null = null;\r\n\r\n private editInput?: HTMLInputElement;\r\n\r\n private childMenuAnchor?: HTMLElement = null;\r\n\r\n private cancelButton?: HTMLElement = null;\r\n\r\n private saveButton?: HTMLElement = null;\r\n\r\n @Watch('editingIndex')\r\n onEditingIndexChange(newValue: number | null) {\r\n if (newValue === null) {\r\n this.openChildMenuIndex = null;\r\n this.editInput = undefined;\r\n return;\r\n }\r\n }\r\n\r\n @Listen('click', { target: 'window' })\r\n handleWindowClick(event: MouseEvent) {\r\n if (this.openChildMenuIndex === null) {\r\n return;\r\n }\r\n\r\n const target = event.target as HTMLElement;\r\n if (!this.host.contains(target)) {\r\n this.openChildMenuIndex = null;\r\n }\r\n }\r\n\r\n @Listen('keydown', { target: 'window' })\r\n handleEscape(event: KeyboardEvent) {\r\n if (event.key === 'Escape') {\r\n if (this.openChildMenuIndex !== null) {\r\n return;\r\n }\r\n\r\n if (this.editingIndex !== null) {\r\n this.cancelButton?.click();\r\n return;\r\n }\r\n\r\n this.close.emit();\r\n }\r\n }\r\n\r\n @Listen('keydown', { target: 'window' })\r\n handleEnter(event: KeyboardEvent) {\r\n if (event.key === 'Enter') {\r\n if (this.editingIndex !== null) {\r\n this.saveButton?.click();\r\n return;\r\n }\r\n }\r\n }\r\n\r\n componentDidLoad() {\r\n requestAnimationFrame(() => {\r\n this.host.focus();\r\n });\r\n }\r\n\r\n isViewMode(index: number): boolean {\r\n return this.editingIndex !== index;\r\n }\r\n\r\n handleSelect(item: KritzelMenuItem) {\r\n if (item.disabled || this.editingIndex !== null || this.openChildMenuIndex !== null) {\r\n return;\r\n }\r\n item.select?.(item);\r\n }\r\n\r\n render() {\r\n return (\r\n <Host tabIndex={0}>\r\n {this.items.map((item, index) => (\r\n <button\r\n tabIndex={0}\r\n class={{\r\n 'menu-item': true,\r\n 'disabled': item.disabled,\r\n 'inactive': this.openChildMenuIndex !== null && this.openChildMenuIndex !== index,\r\n 'child-open': this.openChildMenuIndex === index,\r\n 'edit-mode': this.editingIndex === index,\r\n 'active': this.activeItemIndex === index,\r\n }}\r\n onClick={() => this.handleSelect(item)}\r\n >\r\n {this.isViewMode(index) === true && (\r\n <div class=\"view-container\">\r\n <span class=\"menu-item-label\">{item.label}</span>\r\n\r\n <div>\r\n {item.children && item.children.length > 0 && (\r\n <button\r\n class=\"menu-item-button\"\r\n tabIndex={0}\r\n onClick={event => {\r\n if (this.editingIndex !== null) return;\r\n event.stopPropagation();\r\n this.childMenuAnchor = this.openChildMenuIndex === index ? null : (event.currentTarget as HTMLElement);\r\n this.openChildMenuIndex = this.openChildMenuIndex === index ? null : index;\r\n }}\r\n >\r\n <kritzel-icon name=\"ellipsis-vertical\" size={16}></kritzel-icon>\r\n </button>\r\n )}\r\n\r\n {this.openChildMenuIndex === index && (\r\n <kritzel-portal\r\n anchor={this.childMenuAnchor}\r\n offsetY={4}\r\n onClose={() => this.openChildMenuIndex = null}\r\n >\r\n <kritzel-menu\r\n style={{ minWidth: '100px' }}\r\n items={item.children}\r\n parentIndex={index}\r\n parent={item}\r\n onClose={() => {\r\n this.openChildMenuIndex = null;\r\n this.childMenuAnchor?.focus();\r\n }}\r\n ></kritzel-menu>\r\n </kritzel-portal>\r\n )}\r\n </div>\r\n </div>\r\n )}\r\n\r\n {this.isViewMode(index) === false && (\r\n <div class=\"edit-container\">\r\n <input\r\n tabIndex={0}\r\n ref={el => {\r\n this.editInput = el as HTMLInputElement;\r\n requestAnimationFrame(() => {\r\n this.editInput?.focus();\r\n this.editInput?.select();\r\n });\r\n }}\r\n type=\"text\"\r\n name={'menu-item-' + index}\r\n value={item.label}\r\n onInput={e => (item.label = (e.target as HTMLInputElement).value)}\r\n />\r\n\r\n <div style={{ display: 'flex', gap: '8px' }}>\r\n <button ref={el => (this.cancelButton = el)} class=\"menu-item-button\" tabIndex={0} onClick={() => item.cancel?.(item)}>\r\n <kritzel-icon name=\"x\" size={16}></kritzel-icon>\r\n </button>\r\n\r\n <button ref={el => (this.saveButton = el)} class=\"menu-item-button\" tabIndex={0} onClick={() => item.save?.(item)}>\r\n <kritzel-icon name=\"check\" size={16}></kritzel-icon>\r\n </button>\r\n </div>\r\n </div>\r\n )}\r\n </button>\r\n ))}\r\n </Host>\r\n );\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"kritzel-menu.js","sourceRoot":"","sources":["../../../../src/components/shared/kritzel-menu/kritzel-menu.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Host, Prop, h, State, Event, EventEmitter, Element, Method } from '@stencil/core';\r\nimport { IKritzelMenuItem, IKritzelMenuItemSelectEvent, IKritzelMenuItemToggleChildMenuEvent } from '../../../interfaces/menu-item.interface';\r\n\r\n@Component({\r\n tag: 'kritzel-menu',\r\n styleUrl: 'kritzel-menu.css',\r\n shadow: true\r\n})\r\nexport class KritzelMenu {\r\n @Element() host: HTMLElement;\r\n\r\n @Prop() items: IKritzelMenuItem[];\r\n @Prop() parent: IKritzelMenuItem = null;\r\n\r\n @Event() itemSelect: EventEmitter<IKritzelMenuItemSelectEvent>;\r\n @Event() itemSave: EventEmitter<IKritzelMenuItem>;\r\n @Event() itemCancel: EventEmitter<IKritzelMenuItem>;\r\n @Event() itemToggleChildMenu: EventEmitter<IKritzelMenuItemToggleChildMenuEvent>;\r\n @Event() itemCloseChildMenu: EventEmitter<IKritzelMenuItem>;\r\n @Event() close: EventEmitter<void>;\r\n\r\n @State() selectedIndex: number | null = null;\r\n\r\n @Method()\r\n async setFocus() {\r\n const firstItem = this.host.querySelector('kritzel-menu-item');\r\n if (firstItem) {\r\n firstItem.focus();\r\n }\r\n }\r\n\r\n get openChildMenuItem() {\r\n return this.items.find(item => item.isChildMenuOpen);\r\n }\r\n\r\n get editingMenuItem() {\r\n return this.items.find(item => item.isEditing);\r\n }\r\n\r\n private onOverlayClick = (event: MouseEvent) => {\r\n event.stopPropagation();\r\n this.itemCloseChildMenu.emit(this.openChildMenuItem);\r\n };\r\n\r\n private handleItemSelect = (event: CustomEvent<{ item: IKritzelMenuItem; parent: IKritzelMenuItem }>) => {\r\n event.stopPropagation();\r\n this.itemSelect.emit(event.detail);\r\n }\r\n\r\n private handleSave = (event: CustomEvent<IKritzelMenuItem>) => {\r\n event.stopPropagation();\r\n this.itemSave.emit(event.detail);\r\n }\r\n\r\n private handleCancel = (event: CustomEvent<IKritzelMenuItem>) => {\r\n event.stopPropagation();\r\n this.itemCancel.emit(event.detail);\r\n }\r\n\r\n private handleToggleChildMenu = (event: CustomEvent<{ item: IKritzelMenuItem; childMenuAnchor: HTMLElement }>) => {\r\n event.stopPropagation();\r\n this.itemToggleChildMenu.emit(event.detail);\r\n }\r\n\r\n private handleCloseChildMenu = (event: CustomEvent<IKritzelMenuItem>) => {\r\n event.stopPropagation();\r\n this.itemCloseChildMenu.emit(event.detail);\r\n }\r\n\r\n render() {\r\n return (\r\n <Host onClick={e => e.stopPropagation()}>\r\n {this.openChildMenuItem && <div class=\"has-open-child-overlay\" onClick={this.onOverlayClick}></div>}\r\n {this.items.map((item) => (\r\n <kritzel-menu-item\r\n key={item.id}\r\n item={item}\r\n parent={this.parent}\r\n style={{ pointerEvents: this.editingMenuItem && !item.isEditing ? 'none' : 'auto' }}\r\n onItemSelect={this.handleItemSelect}\r\n onItemSave={this.handleSave}\r\n onItemCancel={this.handleCancel}\r\n onItemToggleChildMenu={this.handleToggleChildMenu}\r\n onItemCloseChildMenu={this.handleCloseChildMenu}\r\n ></kritzel-menu-item>\r\n ))}\r\n </Host>\r\n );\r\n }\r\n}\r\n"]}