@hypen-space/web 0.2.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.
- package/dist/chunk-2s02mkzs.js +32 -0
- package/dist/chunk-2s02mkzs.js.map +9 -0
- package/dist/src/canvas/accessibility.js +152 -0
- package/dist/src/canvas/accessibility.js.map +10 -0
- package/dist/src/canvas/events.js +198 -0
- package/dist/src/canvas/events.js.map +10 -0
- package/dist/src/canvas/index.js +28 -0
- package/dist/src/canvas/index.js.map +9 -0
- package/dist/src/canvas/input.js +132 -0
- package/dist/src/canvas/input.js.map +10 -0
- package/dist/src/canvas/layout.js +309 -0
- package/dist/src/canvas/layout.js.map +10 -0
- package/dist/src/canvas/paint.js +878 -0
- package/dist/src/canvas/paint.js.map +10 -0
- package/dist/src/canvas/renderer.js +276 -0
- package/dist/src/canvas/renderer.js.map +10 -0
- package/dist/src/canvas/text.js +118 -0
- package/dist/src/canvas/text.js.map +10 -0
- package/dist/src/canvas/types.js +2 -0
- package/dist/src/canvas/types.js.map +9 -0
- package/dist/src/canvas/utils.js +139 -0
- package/dist/src/canvas/utils.js.map +10 -0
- package/dist/src/dom/applicators/advanced-layout.js +111 -0
- package/dist/src/dom/applicators/advanced-layout.js.map +10 -0
- package/dist/src/dom/applicators/background.js +54 -0
- package/dist/src/dom/applicators/background.js.map +10 -0
- package/dist/src/dom/applicators/border.js +33 -0
- package/dist/src/dom/applicators/border.js.map +10 -0
- package/dist/src/dom/applicators/color.js +36 -0
- package/dist/src/dom/applicators/color.js.map +10 -0
- package/dist/src/dom/applicators/display.js +57 -0
- package/dist/src/dom/applicators/display.js.map +10 -0
- package/dist/src/dom/applicators/effects.js +89 -0
- package/dist/src/dom/applicators/effects.js.map +10 -0
- package/dist/src/dom/applicators/events.js +518 -0
- package/dist/src/dom/applicators/events.js.map +10 -0
- package/dist/src/dom/applicators/font.js +39 -0
- package/dist/src/dom/applicators/font.js.map +10 -0
- package/dist/src/dom/applicators/index.js +296 -0
- package/dist/src/dom/applicators/index.js.map +10 -0
- package/dist/src/dom/applicators/layout.js +86 -0
- package/dist/src/dom/applicators/layout.js.map +10 -0
- package/dist/src/dom/applicators/margin.js +32 -0
- package/dist/src/dom/applicators/margin.js.map +10 -0
- package/dist/src/dom/applicators/padding.js +35 -0
- package/dist/src/dom/applicators/padding.js.map +10 -0
- package/dist/src/dom/applicators/size.js +42 -0
- package/dist/src/dom/applicators/size.js.map +10 -0
- package/dist/src/dom/applicators/transform.js +92 -0
- package/dist/src/dom/applicators/transform.js.map +10 -0
- package/dist/src/dom/applicators/transition.js +66 -0
- package/dist/src/dom/applicators/transition.js.map +10 -0
- package/dist/src/dom/applicators/typography.js +87 -0
- package/dist/src/dom/applicators/typography.js.map +10 -0
- package/dist/src/dom/canvas/index.js +50 -0
- package/dist/src/dom/canvas/index.js.map +10 -0
- package/dist/src/dom/components/audio.js +48 -0
- package/dist/src/dom/components/audio.js.map +10 -0
- package/dist/src/dom/components/avatar.js +58 -0
- package/dist/src/dom/components/avatar.js.map +10 -0
- package/dist/src/dom/components/badge.js +55 -0
- package/dist/src/dom/components/badge.js.map +10 -0
- package/dist/src/dom/components/button.js +29 -0
- package/dist/src/dom/components/button.js.map +10 -0
- package/dist/src/dom/components/card.js +33 -0
- package/dist/src/dom/components/card.js.map +10 -0
- package/dist/src/dom/components/center.js +32 -0
- package/dist/src/dom/components/center.js.map +10 -0
- package/dist/src/dom/components/checkbox.js +54 -0
- package/dist/src/dom/components/checkbox.js.map +10 -0
- package/dist/src/dom/components/column.js +31 -0
- package/dist/src/dom/components/column.js.map +10 -0
- package/dist/src/dom/components/container.js +29 -0
- package/dist/src/dom/components/container.js.map +10 -0
- package/dist/src/dom/components/divider.js +45 -0
- package/dist/src/dom/components/divider.js.map +10 -0
- package/dist/src/dom/components/grid.js +44 -0
- package/dist/src/dom/components/grid.js.map +10 -0
- package/dist/src/dom/components/heading.js +47 -0
- package/dist/src/dom/components/heading.js.map +10 -0
- package/dist/src/dom/components/image.js +39 -0
- package/dist/src/dom/components/image.js.map +10 -0
- package/dist/src/dom/components/index.js +217 -0
- package/dist/src/dom/components/index.js.map +10 -0
- package/dist/src/dom/components/input.js +41 -0
- package/dist/src/dom/components/input.js.map +10 -0
- package/dist/src/dom/components/link.js +42 -0
- package/dist/src/dom/components/link.js.map +10 -0
- package/dist/src/dom/components/list.js +42 -0
- package/dist/src/dom/components/list.js.map +10 -0
- package/dist/src/dom/components/paragraph.js +35 -0
- package/dist/src/dom/components/paragraph.js.map +10 -0
- package/dist/src/dom/components/progressbar.js +57 -0
- package/dist/src/dom/components/progressbar.js.map +10 -0
- package/dist/src/dom/components/route.js +44 -0
- package/dist/src/dom/components/route.js.map +10 -0
- package/dist/src/dom/components/router.js +33 -0
- package/dist/src/dom/components/router.js.map +10 -0
- package/dist/src/dom/components/row.js +31 -0
- package/dist/src/dom/components/row.js.map +10 -0
- package/dist/src/dom/components/select.js +57 -0
- package/dist/src/dom/components/select.js.map +10 -0
- package/dist/src/dom/components/slider.js +48 -0
- package/dist/src/dom/components/slider.js.map +10 -0
- package/dist/src/dom/components/spacer.js +30 -0
- package/dist/src/dom/components/spacer.js.map +10 -0
- package/dist/src/dom/components/spinner.js +65 -0
- package/dist/src/dom/components/spinner.js.map +10 -0
- package/dist/src/dom/components/stack.js +45 -0
- package/dist/src/dom/components/stack.js.map +10 -0
- package/dist/src/dom/components/switch.js +83 -0
- package/dist/src/dom/components/switch.js.map +10 -0
- package/dist/src/dom/components/text.js +37 -0
- package/dist/src/dom/components/text.js.map +10 -0
- package/dist/src/dom/components/textarea.js +51 -0
- package/dist/src/dom/components/textarea.js.map +10 -0
- package/dist/src/dom/components/video.js +51 -0
- package/dist/src/dom/components/video.js.map +10 -0
- package/dist/src/dom/debug.js +170 -0
- package/dist/src/dom/debug.js.map +10 -0
- package/dist/src/dom/events.js +112 -0
- package/dist/src/dom/events.js.map +10 -0
- package/dist/src/dom/index.js +73 -0
- package/dist/src/dom/index.js.map +9 -0
- package/dist/src/dom/renderer.js +277 -0
- package/dist/src/dom/renderer.js.map +10 -0
- package/dist/src/index.js +89 -0
- package/dist/src/index.js.map +9 -0
- package/package.json +84 -0
- package/src/canvas/QUICKSTART.md +421 -0
- package/src/canvas/README.md +376 -0
- package/src/canvas/accessibility.ts +218 -0
- package/src/canvas/events.ts +307 -0
- package/src/canvas/index.ts +35 -0
- package/src/canvas/input.ts +210 -0
- package/src/canvas/layout.ts +401 -0
- package/src/canvas/paint.ts +1321 -0
- package/src/canvas/renderer.ts +422 -0
- package/src/canvas/text.ts +182 -0
- package/src/canvas/types.ts +137 -0
- package/src/canvas/utils.ts +218 -0
- package/src/dom/README.md +265 -0
- package/src/dom/applicators/advanced-layout.ts +128 -0
- package/src/dom/applicators/background.ts +50 -0
- package/src/dom/applicators/border.ts +19 -0
- package/src/dom/applicators/color.ts +23 -0
- package/src/dom/applicators/display.ts +54 -0
- package/src/dom/applicators/effects.ts +97 -0
- package/src/dom/applicators/events.ts +689 -0
- package/src/dom/applicators/font.ts +27 -0
- package/src/dom/applicators/index.ts +354 -0
- package/src/dom/applicators/layout.ts +92 -0
- package/src/dom/applicators/margin.ts +18 -0
- package/src/dom/applicators/padding.ts +18 -0
- package/src/dom/applicators/size.ts +31 -0
- package/src/dom/applicators/transform.ts +93 -0
- package/src/dom/applicators/transition.ts +65 -0
- package/src/dom/applicators/typography.ts +91 -0
- package/src/dom/canvas/index.ts +60 -0
- package/src/dom/components/audio.ts +45 -0
- package/src/dom/components/avatar.ts +49 -0
- package/src/dom/components/badge.ts +45 -0
- package/src/dom/components/button.ts +13 -0
- package/src/dom/components/card.ts +19 -0
- package/src/dom/components/center.ts +16 -0
- package/src/dom/components/checkbox.ts +54 -0
- package/src/dom/components/column.ts +15 -0
- package/src/dom/components/container.ts +13 -0
- package/src/dom/components/divider.ts +37 -0
- package/src/dom/components/grid.ts +40 -0
- package/src/dom/components/heading.ts +41 -0
- package/src/dom/components/image.ts +27 -0
- package/src/dom/components/index.ts +115 -0
- package/src/dom/components/input.ts +29 -0
- package/src/dom/components/link.ts +35 -0
- package/src/dom/components/list.ts +30 -0
- package/src/dom/components/paragraph.ts +23 -0
- package/src/dom/components/progressbar.ts +51 -0
- package/src/dom/components/route.ts +37 -0
- package/src/dom/components/router.ts +22 -0
- package/src/dom/components/row.ts +15 -0
- package/src/dom/components/select.ts +56 -0
- package/src/dom/components/slider.ts +45 -0
- package/src/dom/components/spacer.ts +16 -0
- package/src/dom/components/spinner.ts +60 -0
- package/src/dom/components/stack.ts +34 -0
- package/src/dom/components/switch.ts +86 -0
- package/src/dom/components/text.ts +24 -0
- package/src/dom/components/textarea.ts +50 -0
- package/src/dom/components/video.ts +50 -0
- package/src/dom/debug.ts +247 -0
- package/src/dom/events.ts +168 -0
- package/src/dom/index.ts +11 -0
- package/src/dom/renderer.ts +327 -0
- package/src/index.ts +56 -0
|
@@ -0,0 +1,518 @@
|
|
|
1
|
+
import {
|
|
2
|
+
__esm,
|
|
3
|
+
__export
|
|
4
|
+
} from "../../../chunk-2s02mkzs.js";
|
|
5
|
+
|
|
6
|
+
// src/dom/applicators/events.ts
|
|
7
|
+
var exports_events = {};
|
|
8
|
+
__export(exports_events, {
|
|
9
|
+
eventHandlers: () => eventHandlers
|
|
10
|
+
});
|
|
11
|
+
function toPlainObject(value) {
|
|
12
|
+
if (value instanceof Map) {
|
|
13
|
+
const obj = {};
|
|
14
|
+
for (const [key, val] of value.entries()) {
|
|
15
|
+
obj[key] = toPlainObject(val);
|
|
16
|
+
}
|
|
17
|
+
return obj;
|
|
18
|
+
}
|
|
19
|
+
if (Array.isArray(value)) {
|
|
20
|
+
return value.map((item) => toPlainObject(item));
|
|
21
|
+
}
|
|
22
|
+
if (value && typeof value === "object") {
|
|
23
|
+
const obj = {};
|
|
24
|
+
for (const [key, val] of Object.entries(value)) {
|
|
25
|
+
obj[key] = toPlainObject(val);
|
|
26
|
+
}
|
|
27
|
+
return obj;
|
|
28
|
+
}
|
|
29
|
+
return value;
|
|
30
|
+
}
|
|
31
|
+
function extractActionDetails(value) {
|
|
32
|
+
if (typeof value === "string") {
|
|
33
|
+
if (!value.startsWith("@")) {
|
|
34
|
+
return { actionName: null, payload: {} };
|
|
35
|
+
}
|
|
36
|
+
let actionName = value.substring(1);
|
|
37
|
+
if (actionName.startsWith("actions.")) {
|
|
38
|
+
actionName = actionName.substring(8);
|
|
39
|
+
}
|
|
40
|
+
return { actionName, payload: {} };
|
|
41
|
+
}
|
|
42
|
+
if (value && typeof value === "object") {
|
|
43
|
+
const plain = toPlainObject(value);
|
|
44
|
+
const payload = {};
|
|
45
|
+
let actionName = null;
|
|
46
|
+
if (plain && typeof plain === "object") {
|
|
47
|
+
const actionValue = plain["0"];
|
|
48
|
+
if (typeof actionValue === "string" && actionValue.startsWith("@")) {
|
|
49
|
+
actionName = actionValue.substring(1);
|
|
50
|
+
if (actionName.startsWith("actions.")) {
|
|
51
|
+
actionName = actionName.substring(8);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
for (const [key, val] of Object.entries(plain)) {
|
|
55
|
+
if (key !== "0") {
|
|
56
|
+
payload[key] = val;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return { actionName, payload };
|
|
61
|
+
}
|
|
62
|
+
return { actionName: null, payload: {} };
|
|
63
|
+
}
|
|
64
|
+
function extractEventData(event, element) {
|
|
65
|
+
const data = {
|
|
66
|
+
type: event.type,
|
|
67
|
+
timestamp: Date.now()
|
|
68
|
+
};
|
|
69
|
+
if (event instanceof MouseEvent) {
|
|
70
|
+
data.clientX = event.clientX;
|
|
71
|
+
data.clientY = event.clientY;
|
|
72
|
+
data.button = event.button;
|
|
73
|
+
}
|
|
74
|
+
if (event instanceof KeyboardEvent) {
|
|
75
|
+
data.key = event.key;
|
|
76
|
+
data.code = event.code;
|
|
77
|
+
data.ctrlKey = event.ctrlKey;
|
|
78
|
+
data.shiftKey = event.shiftKey;
|
|
79
|
+
data.altKey = event.altKey;
|
|
80
|
+
data.metaKey = event.metaKey;
|
|
81
|
+
}
|
|
82
|
+
if (element instanceof HTMLInputElement || element instanceof HTMLTextAreaElement) {
|
|
83
|
+
data.value = element.value;
|
|
84
|
+
}
|
|
85
|
+
if (element instanceof HTMLSelectElement) {
|
|
86
|
+
data.value = element.value;
|
|
87
|
+
data.selectedIndex = element.selectedIndex;
|
|
88
|
+
}
|
|
89
|
+
if (event.type === "submit" && element instanceof HTMLFormElement) {
|
|
90
|
+
data.formData = new FormData(element);
|
|
91
|
+
}
|
|
92
|
+
return data;
|
|
93
|
+
}
|
|
94
|
+
var eventHandlers;
|
|
95
|
+
var init_events = __esm(() => {
|
|
96
|
+
eventHandlers = {
|
|
97
|
+
onClick: (element, value) => {
|
|
98
|
+
console.log(`[EventApplicator] onClick called with value:`, value);
|
|
99
|
+
const { actionName, payload: customPayload } = extractActionDetails(value);
|
|
100
|
+
if (!actionName) {
|
|
101
|
+
console.warn(`[EventApplicator] onClick value must be an action reference, got:`, value);
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
const existingListener = element.__hypenClickListener;
|
|
105
|
+
if (existingListener) {
|
|
106
|
+
element.removeEventListener("click", existingListener);
|
|
107
|
+
}
|
|
108
|
+
const listener = (event) => {
|
|
109
|
+
console.log(`\uD83D\uDD25 [EventApplicator] onClick fired, dispatching action: ${actionName}`);
|
|
110
|
+
const payload = Object.keys(customPayload).length > 0 ? { ...customPayload } : extractEventData(event, element);
|
|
111
|
+
console.log(`[EventApplicator] onClick payload:`, payload);
|
|
112
|
+
const engine = element.__hypenEngine;
|
|
113
|
+
if (engine) {
|
|
114
|
+
engine.dispatchAction(actionName, payload);
|
|
115
|
+
} else {
|
|
116
|
+
console.warn(`[EventApplicator] No engine attached to element for onClick`);
|
|
117
|
+
}
|
|
118
|
+
};
|
|
119
|
+
element.__hypenClickListener = listener;
|
|
120
|
+
element.addEventListener("click", listener);
|
|
121
|
+
console.log(`[EventApplicator] onClick handler attached for action: ${actionName}`);
|
|
122
|
+
},
|
|
123
|
+
onPress: (element, value) => {
|
|
124
|
+
eventHandlers.onClick(element, value);
|
|
125
|
+
},
|
|
126
|
+
onChange: (element, value) => {
|
|
127
|
+
const { actionName } = extractActionDetails(value);
|
|
128
|
+
if (!actionName) {
|
|
129
|
+
console.warn(`[EventApplicator] onChange value must be an action reference starting with @, got:`, value);
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
const existingListener = element.__hypenChangeListener;
|
|
133
|
+
if (existingListener) {
|
|
134
|
+
element.removeEventListener("change", existingListener);
|
|
135
|
+
}
|
|
136
|
+
const listener = (event) => {
|
|
137
|
+
console.log(`\uD83D\uDD25 [EventApplicator] onChange fired, dispatching action: ${actionName}`);
|
|
138
|
+
const payload = extractEventData(event, element);
|
|
139
|
+
const engine = element.__hypenEngine;
|
|
140
|
+
if (engine) {
|
|
141
|
+
engine.dispatchAction(actionName, payload);
|
|
142
|
+
} else {
|
|
143
|
+
console.warn(`[EventApplicator] No engine attached to element for onChange`);
|
|
144
|
+
}
|
|
145
|
+
};
|
|
146
|
+
element.__hypenChangeListener = listener;
|
|
147
|
+
element.addEventListener("change", listener);
|
|
148
|
+
console.log(`[EventApplicator] onChange handler attached for action: ${actionName}`);
|
|
149
|
+
},
|
|
150
|
+
onSubmit: (element, value) => {
|
|
151
|
+
const { actionName } = extractActionDetails(value);
|
|
152
|
+
if (!actionName) {
|
|
153
|
+
console.warn(`[EventApplicator] onSubmit value must be an action reference starting with @, got:`, value);
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
const existingListener = element.__hypenSubmitListener;
|
|
157
|
+
if (existingListener) {
|
|
158
|
+
element.removeEventListener("submit", existingListener);
|
|
159
|
+
}
|
|
160
|
+
const listener = (event) => {
|
|
161
|
+
console.log(`\uD83D\uDD25 [EventApplicator] onSubmit fired, dispatching action: ${actionName}`);
|
|
162
|
+
event.preventDefault();
|
|
163
|
+
const payload = extractEventData(event, element);
|
|
164
|
+
const engine = element.__hypenEngine;
|
|
165
|
+
if (engine) {
|
|
166
|
+
engine.dispatchAction(actionName, payload);
|
|
167
|
+
} else {
|
|
168
|
+
console.warn(`[EventApplicator] No engine attached to element for onSubmit`);
|
|
169
|
+
}
|
|
170
|
+
};
|
|
171
|
+
element.__hypenSubmitListener = listener;
|
|
172
|
+
element.addEventListener("submit", listener);
|
|
173
|
+
console.log(`[EventApplicator] onSubmit handler attached for action: ${actionName}`);
|
|
174
|
+
},
|
|
175
|
+
onInput: (element, value) => {
|
|
176
|
+
console.log(`[EventApplicator] onInput called with value:`, value);
|
|
177
|
+
const { actionName } = extractActionDetails(value);
|
|
178
|
+
if (!actionName) {
|
|
179
|
+
console.warn(`[EventApplicator] onInput value must be an action reference starting with @, got:`, value);
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
const existingListener = element.__hypenInputListener;
|
|
183
|
+
if (existingListener) {
|
|
184
|
+
element.removeEventListener("input", existingListener);
|
|
185
|
+
}
|
|
186
|
+
const listener = (event) => {
|
|
187
|
+
console.log(`\uD83D\uDD25 [EventApplicator] onInput fired, dispatching action: ${actionName}`);
|
|
188
|
+
const target = event.target;
|
|
189
|
+
const payload = {
|
|
190
|
+
type: event.type,
|
|
191
|
+
timestamp: Date.now(),
|
|
192
|
+
value: target.value,
|
|
193
|
+
input: target.value
|
|
194
|
+
};
|
|
195
|
+
console.log(`[EventApplicator] onInput payload:`, payload);
|
|
196
|
+
const engine = element.__hypenEngine;
|
|
197
|
+
if (engine) {
|
|
198
|
+
engine.dispatchAction(actionName, payload);
|
|
199
|
+
} else {
|
|
200
|
+
console.warn(`[EventApplicator] No engine attached to element for onInput`);
|
|
201
|
+
}
|
|
202
|
+
};
|
|
203
|
+
element.__hypenInputListener = listener;
|
|
204
|
+
element.addEventListener("input", listener);
|
|
205
|
+
console.log(`[EventApplicator] onInput handler attached for action: ${actionName}`);
|
|
206
|
+
},
|
|
207
|
+
onKey: (element, value) => {
|
|
208
|
+
console.log(`[EventApplicator] onKey called with value:`, value);
|
|
209
|
+
const { actionName } = extractActionDetails(value);
|
|
210
|
+
if (actionName) {
|
|
211
|
+
const existingListener = element.__hypenKeyListener;
|
|
212
|
+
if (existingListener) {
|
|
213
|
+
element.removeEventListener("keydown", existingListener);
|
|
214
|
+
}
|
|
215
|
+
const listener = (event) => {
|
|
216
|
+
if (event.key === "Enter") {
|
|
217
|
+
console.log(`\uD83D\uDD25 [EventApplicator] onKey fired (Enter), dispatching action: ${actionName}`);
|
|
218
|
+
event.preventDefault();
|
|
219
|
+
const target = event.target;
|
|
220
|
+
const payload = {
|
|
221
|
+
type: event.type,
|
|
222
|
+
timestamp: Date.now(),
|
|
223
|
+
key: event.key,
|
|
224
|
+
code: event.code,
|
|
225
|
+
value: target.value,
|
|
226
|
+
input: target.value,
|
|
227
|
+
ctrlKey: event.ctrlKey,
|
|
228
|
+
shiftKey: event.shiftKey,
|
|
229
|
+
altKey: event.altKey,
|
|
230
|
+
metaKey: event.metaKey
|
|
231
|
+
};
|
|
232
|
+
const engine = element.__hypenEngine;
|
|
233
|
+
if (engine) {
|
|
234
|
+
engine.dispatchAction(actionName, payload);
|
|
235
|
+
} else {
|
|
236
|
+
console.warn(`[EventApplicator] No engine attached to element for onKey`);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
};
|
|
240
|
+
element.__hypenKeyListener = listener;
|
|
241
|
+
element.addEventListener("keydown", listener);
|
|
242
|
+
console.log(`[EventApplicator] onKey handler attached for action: ${actionName} (triggers on Enter)`);
|
|
243
|
+
} else {
|
|
244
|
+
console.warn(`[EventApplicator] onKey value must be an action reference starting with @, got: ${value}`);
|
|
245
|
+
}
|
|
246
|
+
},
|
|
247
|
+
"onKey.key": (element, keyValue) => {
|
|
248
|
+
console.log(`[EventApplicator] onKey.key called with value:`, keyValue);
|
|
249
|
+
element.__hypenKeyTarget = keyValue;
|
|
250
|
+
},
|
|
251
|
+
"onKey.action": (element, value) => {
|
|
252
|
+
console.log(`[EventApplicator] onKey.action called with value:`, value);
|
|
253
|
+
const { actionName } = extractActionDetails(value);
|
|
254
|
+
if (actionName) {
|
|
255
|
+
const targetKey = element.__hypenKeyTarget || "Enter";
|
|
256
|
+
const existingListener = element.__hypenKeyListener;
|
|
257
|
+
if (existingListener) {
|
|
258
|
+
element.removeEventListener("keydown", existingListener);
|
|
259
|
+
}
|
|
260
|
+
const listener = (event) => {
|
|
261
|
+
const keyToMatch = targetKey.toLowerCase() === "return" ? "Enter" : targetKey;
|
|
262
|
+
if (event.key === keyToMatch) {
|
|
263
|
+
console.log(`\uD83D\uDD25 [EventApplicator] onKey fired (${keyToMatch}), dispatching action: ${actionName}`);
|
|
264
|
+
event.preventDefault();
|
|
265
|
+
const target = event.target;
|
|
266
|
+
const payload = {
|
|
267
|
+
type: event.type,
|
|
268
|
+
timestamp: Date.now(),
|
|
269
|
+
key: event.key,
|
|
270
|
+
code: event.code,
|
|
271
|
+
value: target.value,
|
|
272
|
+
input: target.value,
|
|
273
|
+
ctrlKey: event.ctrlKey,
|
|
274
|
+
shiftKey: event.shiftKey,
|
|
275
|
+
altKey: event.altKey,
|
|
276
|
+
metaKey: event.metaKey
|
|
277
|
+
};
|
|
278
|
+
const engine = element.__hypenEngine;
|
|
279
|
+
if (engine) {
|
|
280
|
+
engine.dispatchAction(actionName, payload);
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
};
|
|
284
|
+
element.__hypenKeyListener = listener;
|
|
285
|
+
element.addEventListener("keydown", listener);
|
|
286
|
+
console.log(`[EventApplicator] onKey handler attached for action: ${actionName} on key: ${targetKey}`);
|
|
287
|
+
}
|
|
288
|
+
},
|
|
289
|
+
onScroll: (element, value) => {
|
|
290
|
+
console.log(`[EventApplicator] onScroll called with value:`, value);
|
|
291
|
+
const { actionName } = extractActionDetails(value);
|
|
292
|
+
if (actionName) {
|
|
293
|
+
const existingListener = element.__hypenScrollListener;
|
|
294
|
+
if (existingListener) {
|
|
295
|
+
element.removeEventListener("scroll", existingListener);
|
|
296
|
+
}
|
|
297
|
+
let throttleTimer = null;
|
|
298
|
+
const listener = (event) => {
|
|
299
|
+
if (throttleTimer)
|
|
300
|
+
return;
|
|
301
|
+
throttleTimer = setTimeout(() => {
|
|
302
|
+
throttleTimer = null;
|
|
303
|
+
}, 100);
|
|
304
|
+
const target = event.target;
|
|
305
|
+
const scrollTop = target.scrollTop;
|
|
306
|
+
const scrollHeight = target.scrollHeight;
|
|
307
|
+
const clientHeight = target.clientHeight;
|
|
308
|
+
const scrollPercentage = scrollTop / (scrollHeight - clientHeight) * 100;
|
|
309
|
+
const nearBottom = scrollHeight - scrollTop - clientHeight < 100 || scrollPercentage > 90;
|
|
310
|
+
console.log(`\uD83D\uDD25 [EventApplicator] onScroll fired, scrollTop: ${scrollTop}, nearBottom: ${nearBottom}`);
|
|
311
|
+
const payload = {
|
|
312
|
+
type: "scroll",
|
|
313
|
+
timestamp: Date.now(),
|
|
314
|
+
scrollTop,
|
|
315
|
+
scrollLeft: target.scrollLeft,
|
|
316
|
+
scrollHeight,
|
|
317
|
+
scrollWidth: target.scrollWidth,
|
|
318
|
+
clientHeight,
|
|
319
|
+
clientWidth: target.clientWidth,
|
|
320
|
+
scrollPercentage: Math.round(scrollPercentage),
|
|
321
|
+
nearBottom,
|
|
322
|
+
atBottom: scrollHeight - scrollTop === clientHeight,
|
|
323
|
+
atTop: scrollTop === 0
|
|
324
|
+
};
|
|
325
|
+
const engine = element.__hypenEngine;
|
|
326
|
+
if (engine) {
|
|
327
|
+
engine.dispatchAction(actionName, payload);
|
|
328
|
+
} else {
|
|
329
|
+
console.warn(`[EventApplicator] No engine attached to element for onScroll`);
|
|
330
|
+
}
|
|
331
|
+
};
|
|
332
|
+
element.__hypenScrollListener = listener;
|
|
333
|
+
element.addEventListener("scroll", listener, { passive: true });
|
|
334
|
+
console.log(`[EventApplicator] onScroll handler attached for action: ${actionName}`);
|
|
335
|
+
} else {
|
|
336
|
+
console.warn(`[EventApplicator] onScroll value must be an action reference starting with @, got: ${value}`);
|
|
337
|
+
}
|
|
338
|
+
},
|
|
339
|
+
onLongClick: (element, value) => {
|
|
340
|
+
console.log(`[EventApplicator] onLongClick called with value:`, value);
|
|
341
|
+
const { actionName, payload: customPayload } = extractActionDetails(value);
|
|
342
|
+
if (!actionName) {
|
|
343
|
+
console.warn(`[EventApplicator] onLongClick value must be an action reference, got:`, value);
|
|
344
|
+
return;
|
|
345
|
+
}
|
|
346
|
+
const existingDownListener = element.__hypenLongClickDownListener;
|
|
347
|
+
const existingUpListener = element.__hypenLongClickUpListener;
|
|
348
|
+
if (existingDownListener) {
|
|
349
|
+
element.removeEventListener("pointerdown", existingDownListener);
|
|
350
|
+
}
|
|
351
|
+
if (existingUpListener) {
|
|
352
|
+
element.removeEventListener("pointerup", existingUpListener);
|
|
353
|
+
element.removeEventListener("pointerleave", existingUpListener);
|
|
354
|
+
}
|
|
355
|
+
let longClickTimer = null;
|
|
356
|
+
const LONG_CLICK_THRESHOLD = 500;
|
|
357
|
+
const downListener = (event) => {
|
|
358
|
+
longClickTimer = setTimeout(() => {
|
|
359
|
+
console.log(`\uD83D\uDD25 [EventApplicator] onLongClick fired, dispatching action: ${actionName}`);
|
|
360
|
+
const payload = Object.keys(customPayload).length > 0 ? { ...customPayload } : {
|
|
361
|
+
type: "longclick",
|
|
362
|
+
timestamp: Date.now(),
|
|
363
|
+
clientX: event.clientX,
|
|
364
|
+
clientY: event.clientY
|
|
365
|
+
};
|
|
366
|
+
const engine = element.__hypenEngine;
|
|
367
|
+
if (engine) {
|
|
368
|
+
engine.dispatchAction(actionName, payload);
|
|
369
|
+
} else {
|
|
370
|
+
console.warn(`[EventApplicator] No engine attached to element for onLongClick`);
|
|
371
|
+
}
|
|
372
|
+
longClickTimer = null;
|
|
373
|
+
}, LONG_CLICK_THRESHOLD);
|
|
374
|
+
};
|
|
375
|
+
const upListener = () => {
|
|
376
|
+
if (longClickTimer) {
|
|
377
|
+
clearTimeout(longClickTimer);
|
|
378
|
+
longClickTimer = null;
|
|
379
|
+
}
|
|
380
|
+
};
|
|
381
|
+
element.__hypenLongClickDownListener = downListener;
|
|
382
|
+
element.__hypenLongClickUpListener = upListener;
|
|
383
|
+
element.addEventListener("pointerdown", downListener);
|
|
384
|
+
element.addEventListener("pointerup", upListener);
|
|
385
|
+
element.addEventListener("pointerleave", upListener);
|
|
386
|
+
console.log(`[EventApplicator] onLongClick handler attached for action: ${actionName}`);
|
|
387
|
+
},
|
|
388
|
+
onFocus: (element, value) => {
|
|
389
|
+
console.log(`[EventApplicator] onFocus called with value:`, value);
|
|
390
|
+
const { actionName, payload: customPayload } = extractActionDetails(value);
|
|
391
|
+
if (!actionName) {
|
|
392
|
+
console.warn(`[EventApplicator] onFocus value must be an action reference, got:`, value);
|
|
393
|
+
return;
|
|
394
|
+
}
|
|
395
|
+
const existingListener = element.__hypenFocusListener;
|
|
396
|
+
if (existingListener) {
|
|
397
|
+
element.removeEventListener("focus", existingListener);
|
|
398
|
+
}
|
|
399
|
+
const listener = (event) => {
|
|
400
|
+
console.log(`\uD83D\uDD25 [EventApplicator] onFocus fired, dispatching action: ${actionName}`);
|
|
401
|
+
const target = event.target;
|
|
402
|
+
const payload = Object.keys(customPayload).length > 0 ? { ...customPayload } : {
|
|
403
|
+
type: "focus",
|
|
404
|
+
timestamp: Date.now(),
|
|
405
|
+
value: target.value ?? undefined
|
|
406
|
+
};
|
|
407
|
+
const engine = element.__hypenEngine;
|
|
408
|
+
if (engine) {
|
|
409
|
+
engine.dispatchAction(actionName, payload);
|
|
410
|
+
} else {
|
|
411
|
+
console.warn(`[EventApplicator] No engine attached to element for onFocus`);
|
|
412
|
+
}
|
|
413
|
+
};
|
|
414
|
+
element.__hypenFocusListener = listener;
|
|
415
|
+
element.addEventListener("focus", listener);
|
|
416
|
+
console.log(`[EventApplicator] onFocus handler attached for action: ${actionName}`);
|
|
417
|
+
},
|
|
418
|
+
onBlur: (element, value) => {
|
|
419
|
+
console.log(`[EventApplicator] onBlur called with value:`, value);
|
|
420
|
+
const { actionName, payload: customPayload } = extractActionDetails(value);
|
|
421
|
+
if (!actionName) {
|
|
422
|
+
console.warn(`[EventApplicator] onBlur value must be an action reference, got:`, value);
|
|
423
|
+
return;
|
|
424
|
+
}
|
|
425
|
+
const existingListener = element.__hypenBlurListener;
|
|
426
|
+
if (existingListener) {
|
|
427
|
+
element.removeEventListener("blur", existingListener);
|
|
428
|
+
}
|
|
429
|
+
const listener = (event) => {
|
|
430
|
+
console.log(`\uD83D\uDD25 [EventApplicator] onBlur fired, dispatching action: ${actionName}`);
|
|
431
|
+
const target = event.target;
|
|
432
|
+
const payload = Object.keys(customPayload).length > 0 ? { ...customPayload } : {
|
|
433
|
+
type: "blur",
|
|
434
|
+
timestamp: Date.now(),
|
|
435
|
+
value: target.value ?? undefined
|
|
436
|
+
};
|
|
437
|
+
const engine = element.__hypenEngine;
|
|
438
|
+
if (engine) {
|
|
439
|
+
engine.dispatchAction(actionName, payload);
|
|
440
|
+
} else {
|
|
441
|
+
console.warn(`[EventApplicator] No engine attached to element for onBlur`);
|
|
442
|
+
}
|
|
443
|
+
};
|
|
444
|
+
element.__hypenBlurListener = listener;
|
|
445
|
+
element.addEventListener("blur", listener);
|
|
446
|
+
console.log(`[EventApplicator] onBlur handler attached for action: ${actionName}`);
|
|
447
|
+
},
|
|
448
|
+
onMouseEnter: (element, value) => {
|
|
449
|
+
console.log(`[EventApplicator] onMouseEnter called with value:`, value);
|
|
450
|
+
const { actionName, payload: customPayload } = extractActionDetails(value);
|
|
451
|
+
if (!actionName) {
|
|
452
|
+
console.warn(`[EventApplicator] onMouseEnter value must be an action reference, got:`, value);
|
|
453
|
+
return;
|
|
454
|
+
}
|
|
455
|
+
const existingListener = element.__hypenMouseEnterListener;
|
|
456
|
+
if (existingListener) {
|
|
457
|
+
element.removeEventListener("mouseenter", existingListener);
|
|
458
|
+
}
|
|
459
|
+
const listener = (event) => {
|
|
460
|
+
console.log(`\uD83D\uDD25 [EventApplicator] onMouseEnter fired, dispatching action: ${actionName}`);
|
|
461
|
+
const payload = Object.keys(customPayload).length > 0 ? { ...customPayload } : {
|
|
462
|
+
type: "mouseenter",
|
|
463
|
+
timestamp: Date.now(),
|
|
464
|
+
clientX: event.clientX,
|
|
465
|
+
clientY: event.clientY
|
|
466
|
+
};
|
|
467
|
+
const engine = element.__hypenEngine;
|
|
468
|
+
if (engine) {
|
|
469
|
+
engine.dispatchAction(actionName, payload);
|
|
470
|
+
} else {
|
|
471
|
+
console.warn(`[EventApplicator] No engine attached to element for onMouseEnter`);
|
|
472
|
+
}
|
|
473
|
+
};
|
|
474
|
+
element.__hypenMouseEnterListener = listener;
|
|
475
|
+
element.addEventListener("mouseenter", listener);
|
|
476
|
+
console.log(`[EventApplicator] onMouseEnter handler attached for action: ${actionName}`);
|
|
477
|
+
},
|
|
478
|
+
onMouseLeave: (element, value) => {
|
|
479
|
+
console.log(`[EventApplicator] onMouseLeave called with value:`, value);
|
|
480
|
+
const { actionName, payload: customPayload } = extractActionDetails(value);
|
|
481
|
+
if (!actionName) {
|
|
482
|
+
console.warn(`[EventApplicator] onMouseLeave value must be an action reference, got:`, value);
|
|
483
|
+
return;
|
|
484
|
+
}
|
|
485
|
+
const existingListener = element.__hypenMouseLeaveListener;
|
|
486
|
+
if (existingListener) {
|
|
487
|
+
element.removeEventListener("mouseleave", existingListener);
|
|
488
|
+
}
|
|
489
|
+
const listener = (event) => {
|
|
490
|
+
console.log(`\uD83D\uDD25 [EventApplicator] onMouseLeave fired, dispatching action: ${actionName}`);
|
|
491
|
+
const payload = Object.keys(customPayload).length > 0 ? { ...customPayload } : {
|
|
492
|
+
type: "mouseleave",
|
|
493
|
+
timestamp: Date.now(),
|
|
494
|
+
clientX: event.clientX,
|
|
495
|
+
clientY: event.clientY
|
|
496
|
+
};
|
|
497
|
+
const engine = element.__hypenEngine;
|
|
498
|
+
if (engine) {
|
|
499
|
+
engine.dispatchAction(actionName, payload);
|
|
500
|
+
} else {
|
|
501
|
+
console.warn(`[EventApplicator] No engine attached to element for onMouseLeave`);
|
|
502
|
+
}
|
|
503
|
+
};
|
|
504
|
+
element.__hypenMouseLeaveListener = listener;
|
|
505
|
+
element.addEventListener("mouseleave", listener);
|
|
506
|
+
console.log(`[EventApplicator] onMouseLeave handler attached for action: ${actionName}`);
|
|
507
|
+
}
|
|
508
|
+
};
|
|
509
|
+
});
|
|
510
|
+
init_events();
|
|
511
|
+
|
|
512
|
+
export {
|
|
513
|
+
eventHandlers
|
|
514
|
+
};
|
|
515
|
+
|
|
516
|
+
export { exports_events, init_events };
|
|
517
|
+
|
|
518
|
+
//# debugId=F529EAF36E9924CD64756E2164756E21
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/dom/applicators/events.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"/**\n * Event Applicators\n * \n * Handles event applicators like onClick, onPress, etc.\n */\n\nimport type { ApplicatorHandler } from \"./index.js\";\n\nfunction toPlainObject(value: any): any {\n if (value instanceof Map) {\n const obj: Record<string, any> = {};\n for (const [key, val] of value.entries()) {\n obj[key] = toPlainObject(val);\n }\n return obj;\n }\n\n if (Array.isArray(value)) {\n return value.map((item) => toPlainObject(item));\n }\n\n if (value && typeof value === \"object\") {\n const obj: Record<string, any> = {};\n for (const [key, val] of Object.entries(value)) {\n obj[key] = toPlainObject(val);\n }\n return obj;\n }\n\n return value;\n}\n\nfunction extractActionDetails(value: any): { actionName: string | null; payload: Record<string, any> } {\n if (typeof value === \"string\") {\n if (!value.startsWith(\"@\")) {\n return { actionName: null, payload: {} };\n }\n\n let actionName = value.substring(1);\n if (actionName.startsWith(\"actions.\")) {\n actionName = actionName.substring(8);\n }\n return { actionName, payload: {} };\n }\n\n if (value && typeof value === \"object\") {\n const plain = toPlainObject(value);\n const payload: Record<string, any> = {};\n let actionName: string | null = null;\n\n if (plain && typeof plain === \"object\") {\n const actionValue = plain[\"0\"];\n if (typeof actionValue === \"string\" && actionValue.startsWith(\"@\")) {\n actionName = actionValue.substring(1);\n if (actionName.startsWith(\"actions.\")) {\n actionName = actionName.substring(8);\n }\n }\n\n for (const [key, val] of Object.entries(plain)) {\n if (key !== \"0\") {\n payload[key] = val;\n }\n }\n }\n\n return { actionName, payload };\n }\n\n return { actionName: null, payload: {} };\n}\n\nexport const eventHandlers: Record<string, ApplicatorHandler> = {\n onClick: (element, value) => {\n console.log(`[EventApplicator] onClick called with value:`, value);\n\n const { actionName, payload: customPayload } = extractActionDetails(value);\n\n if (!actionName) {\n console.warn(`[EventApplicator] onClick value must be an action reference, got:`, value);\n return;\n }\n\n // Remove existing click listener if any\n const existingListener = (element as any).__hypenClickListener;\n if (existingListener) {\n element.removeEventListener(\"click\", existingListener);\n }\n\n // Create new click listener\n const listener = (event: Event) => {\n console.log(`🔥 [EventApplicator] onClick fired, dispatching action: ${actionName}`);\n\n // Use custom payload if provided, otherwise extract event data\n const payload = Object.keys(customPayload).length > 0\n ? { ...customPayload }\n : extractEventData(event, element);\n\n console.log(`[EventApplicator] onClick payload:`, payload);\n\n // Dispatch action to engine\n const engine = (element as any).__hypenEngine;\n if (engine) {\n engine.dispatchAction(actionName, payload);\n } else {\n console.warn(`[EventApplicator] No engine attached to element for onClick`);\n }\n };\n\n // Store listener reference and attach to DOM\n (element as any).__hypenClickListener = listener;\n element.addEventListener(\"click\", listener);\n\n console.log(`[EventApplicator] onClick handler attached for action: ${actionName}`);\n },\n\n onPress: (element, value) => {\n // For now, treat onPress same as onClick\n // In the future, this could handle touch events differently\n eventHandlers.onClick(element, value);\n },\n\n onChange: (element, value) => {\n const { actionName } = extractActionDetails(value);\n\n if (!actionName) {\n console.warn(`[EventApplicator] onChange value must be an action reference starting with @, got:`, value);\n return;\n }\n\n const existingListener = (element as any).__hypenChangeListener;\n if (existingListener) {\n element.removeEventListener(\"change\", existingListener);\n }\n\n const listener = (event: Event) => {\n console.log(`🔥 [EventApplicator] onChange fired, dispatching action: ${actionName}`);\n\n const payload = extractEventData(event, element);\n\n const engine = (element as any).__hypenEngine;\n if (engine) {\n engine.dispatchAction(actionName, payload);\n } else {\n console.warn(`[EventApplicator] No engine attached to element for onChange`);\n }\n };\n\n (element as any).__hypenChangeListener = listener;\n element.addEventListener(\"change\", listener);\n\n console.log(`[EventApplicator] onChange handler attached for action: ${actionName}`);\n },\n\n onSubmit: (element, value) => {\n const { actionName } = extractActionDetails(value);\n\n if (!actionName) {\n console.warn(`[EventApplicator] onSubmit value must be an action reference starting with @, got:`, value);\n return;\n }\n\n const existingListener = (element as any).__hypenSubmitListener;\n if (existingListener) {\n element.removeEventListener(\"submit\", existingListener);\n }\n\n const listener = (event: Event) => {\n console.log(`🔥 [EventApplicator] onSubmit fired, dispatching action: ${actionName}`);\n\n event.preventDefault();\n\n const payload = extractEventData(event, element);\n\n const engine = (element as any).__hypenEngine;\n if (engine) {\n engine.dispatchAction(actionName, payload);\n } else {\n console.warn(`[EventApplicator] No engine attached to element for onSubmit`);\n }\n };\n\n (element as any).__hypenSubmitListener = listener;\n element.addEventListener(\"submit\", listener);\n\n console.log(`[EventApplicator] onSubmit handler attached for action: ${actionName}`);\n },\n\n onInput: (element, value) => {\n console.log(`[EventApplicator] onInput called with value:`, value);\n \n const { actionName } = extractActionDetails(value);\n\n if (!actionName) {\n console.warn(`[EventApplicator] onInput value must be an action reference starting with @, got:`, value);\n return;\n }\n\n const existingListener = (element as any).__hypenInputListener;\n if (existingListener) {\n element.removeEventListener(\"input\", existingListener);\n }\n\n const listener = (event: Event) => {\n console.log(`🔥 [EventApplicator] onInput fired, dispatching action: ${actionName}`);\n\n const target = event.target as HTMLInputElement | HTMLTextAreaElement;\n const payload = {\n type: event.type,\n timestamp: Date.now(),\n value: target.value,\n input: target.value,\n };\n\n console.log(`[EventApplicator] onInput payload:`, payload);\n\n const engine = (element as any).__hypenEngine;\n if (engine) {\n engine.dispatchAction(actionName, payload);\n } else {\n console.warn(`[EventApplicator] No engine attached to element for onInput`);\n }\n };\n\n (element as any).__hypenInputListener = listener;\n element.addEventListener(\"input\", listener);\n\n console.log(`[EventApplicator] onInput handler attached for action: ${actionName}`);\n },\n\n onKey: (element, value) => {\n console.log(`[EventApplicator] onKey called with value:`, value);\n \n // onKey can receive either:\n // 1. Just an action: \"@action.submit\"\n // 2. Key-specific format from props like onKey.key = \"return\", onKey.action = \"@action.submit\"\n \n // For now, we'll handle the simple case where onKey receives the action directly\n // and triggers on Enter key by default\n const { actionName } = extractActionDetails(value);\n\n if (actionName) {\n \n const existingListener = (element as any).__hypenKeyListener;\n if (existingListener) {\n element.removeEventListener(\"keydown\", existingListener);\n }\n \n const listener = (event: KeyboardEvent) => {\n // Default to Enter key\n if (event.key === \"Enter\") {\n console.log(`🔥 [EventApplicator] onKey fired (Enter), dispatching action: ${actionName}`);\n \n event.preventDefault();\n \n const target = event.target as HTMLInputElement | HTMLTextAreaElement;\n const payload = {\n type: event.type,\n timestamp: Date.now(),\n key: event.key,\n code: event.code,\n value: target.value,\n input: target.value,\n ctrlKey: event.ctrlKey,\n shiftKey: event.shiftKey,\n altKey: event.altKey,\n metaKey: event.metaKey,\n };\n \n const engine = (element as any).__hypenEngine;\n if (engine) {\n engine.dispatchAction(actionName, payload);\n } else {\n console.warn(`[EventApplicator] No engine attached to element for onKey`);\n }\n }\n };\n \n (element as any).__hypenKeyListener = listener;\n element.addEventListener(\"keydown\", listener);\n \n console.log(`[EventApplicator] onKey handler attached for action: ${actionName} (triggers on Enter)`);\n } else {\n console.warn(`[EventApplicator] onKey value must be an action reference starting with @, got: ${value}`);\n }\n },\n\n // Handle key-specific applicator: onKey.key for specifying which key\n \"onKey.key\": (element, keyValue) => {\n console.log(`[EventApplicator] onKey.key called with value:`, keyValue);\n // Store the key to check in the listener\n (element as any).__hypenKeyTarget = keyValue;\n },\n\n // Handle action for specific key: onKey.action\n \"onKey.action\": (element, value) => {\n console.log(`[EventApplicator] onKey.action called with value:`, value);\n \n const { actionName } = extractActionDetails(value);\n\n if (actionName) {\n \n const targetKey = (element as any).__hypenKeyTarget || \"Enter\";\n \n const existingListener = (element as any).__hypenKeyListener;\n if (existingListener) {\n element.removeEventListener(\"keydown\", existingListener);\n }\n \n const listener = (event: KeyboardEvent) => {\n const keyToMatch = targetKey.toLowerCase() === \"return\" ? \"Enter\" : targetKey;\n \n if (event.key === keyToMatch) {\n console.log(`🔥 [EventApplicator] onKey fired (${keyToMatch}), dispatching action: ${actionName}`);\n \n event.preventDefault();\n \n const target = event.target as HTMLInputElement | HTMLTextAreaElement;\n const payload = {\n type: event.type,\n timestamp: Date.now(),\n key: event.key,\n code: event.code,\n value: target.value,\n input: target.value,\n ctrlKey: event.ctrlKey,\n shiftKey: event.shiftKey,\n altKey: event.altKey,\n metaKey: event.metaKey,\n };\n \n const engine = (element as any).__hypenEngine;\n if (engine) {\n engine.dispatchAction(actionName, payload);\n }\n }\n };\n \n (element as any).__hypenKeyListener = listener;\n element.addEventListener(\"keydown\", listener);\n \n console.log(`[EventApplicator] onKey handler attached for action: ${actionName} on key: ${targetKey}`);\n }\n },\n\n onScroll: (element, value) => {\n console.log(`[EventApplicator] onScroll called with value:`, value);\n\n const { actionName } = extractActionDetails(value);\n\n if (actionName) {\n\n // Remove existing scroll listener if any\n const existingListener = (element as any).__hypenScrollListener;\n if (existingListener) {\n element.removeEventListener(\"scroll\", existingListener);\n }\n\n // Create new scroll listener with throttling to avoid too many events\n let throttleTimer: number | null = null;\n const listener = (event: Event) => {\n if (throttleTimer) return;\n\n throttleTimer = setTimeout(() => {\n throttleTimer = null;\n }, 100) as unknown as number; // Throttle to max 10 events/second\n\n const target = event.target as HTMLElement;\n const scrollTop = target.scrollTop;\n const scrollHeight = target.scrollHeight;\n const clientHeight = target.clientHeight;\n const scrollPercentage = (scrollTop / (scrollHeight - clientHeight)) * 100;\n\n // Calculate if near bottom (within 100px or 90% scrolled)\n const nearBottom = scrollHeight - scrollTop - clientHeight < 100 || scrollPercentage > 90;\n\n console.log(`🔥 [EventApplicator] onScroll fired, scrollTop: ${scrollTop}, nearBottom: ${nearBottom}`);\n\n const payload = {\n type: \"scroll\",\n timestamp: Date.now(),\n scrollTop,\n scrollLeft: target.scrollLeft,\n scrollHeight,\n scrollWidth: target.scrollWidth,\n clientHeight,\n clientWidth: target.clientWidth,\n scrollPercentage: Math.round(scrollPercentage),\n nearBottom,\n atBottom: scrollHeight - scrollTop === clientHeight,\n atTop: scrollTop === 0,\n };\n\n const engine = (element as any).__hypenEngine;\n if (engine) {\n engine.dispatchAction(actionName, payload);\n } else {\n console.warn(`[EventApplicator] No engine attached to element for onScroll`);\n }\n };\n\n (element as any).__hypenScrollListener = listener;\n element.addEventListener(\"scroll\", listener, { passive: true });\n\n console.log(`[EventApplicator] onScroll handler attached for action: ${actionName}`);\n } else {\n console.warn(`[EventApplicator] onScroll value must be an action reference starting with @, got: ${value}`);\n }\n },\n\n onLongClick: (element, value) => {\n console.log(`[EventApplicator] onLongClick called with value:`, value);\n\n const { actionName, payload: customPayload } = extractActionDetails(value);\n\n if (!actionName) {\n console.warn(`[EventApplicator] onLongClick value must be an action reference, got:`, value);\n return;\n }\n\n // Remove existing long click listeners if any\n const existingDownListener = (element as any).__hypenLongClickDownListener;\n const existingUpListener = (element as any).__hypenLongClickUpListener;\n if (existingDownListener) {\n element.removeEventListener(\"pointerdown\", existingDownListener);\n }\n if (existingUpListener) {\n element.removeEventListener(\"pointerup\", existingUpListener);\n element.removeEventListener(\"pointerleave\", existingUpListener);\n }\n\n // Long click implementation using pointer events with 500ms threshold\n let longClickTimer: ReturnType<typeof setTimeout> | null = null;\n const LONG_CLICK_THRESHOLD = 500; // 500ms\n\n const downListener = (event: PointerEvent) => {\n longClickTimer = setTimeout(() => {\n console.log(`🔥 [EventApplicator] onLongClick fired, dispatching action: ${actionName}`);\n\n const payload = Object.keys(customPayload).length > 0\n ? { ...customPayload }\n : {\n type: \"longclick\",\n timestamp: Date.now(),\n clientX: event.clientX,\n clientY: event.clientY,\n };\n\n const engine = (element as any).__hypenEngine;\n if (engine) {\n engine.dispatchAction(actionName, payload);\n } else {\n console.warn(`[EventApplicator] No engine attached to element for onLongClick`);\n }\n\n longClickTimer = null;\n }, LONG_CLICK_THRESHOLD);\n };\n\n const upListener = () => {\n if (longClickTimer) {\n clearTimeout(longClickTimer);\n longClickTimer = null;\n }\n };\n\n (element as any).__hypenLongClickDownListener = downListener;\n (element as any).__hypenLongClickUpListener = upListener;\n element.addEventListener(\"pointerdown\", downListener);\n element.addEventListener(\"pointerup\", upListener);\n element.addEventListener(\"pointerleave\", upListener);\n\n console.log(`[EventApplicator] onLongClick handler attached for action: ${actionName}`);\n },\n\n onFocus: (element, value) => {\n console.log(`[EventApplicator] onFocus called with value:`, value);\n\n const { actionName, payload: customPayload } = extractActionDetails(value);\n\n if (!actionName) {\n console.warn(`[EventApplicator] onFocus value must be an action reference, got:`, value);\n return;\n }\n\n // Remove existing focus listener if any\n const existingListener = (element as any).__hypenFocusListener;\n if (existingListener) {\n element.removeEventListener(\"focus\", existingListener);\n }\n\n const listener = (event: FocusEvent) => {\n console.log(`🔥 [EventApplicator] onFocus fired, dispatching action: ${actionName}`);\n\n const target = event.target as HTMLElement;\n const payload = Object.keys(customPayload).length > 0\n ? { ...customPayload }\n : {\n type: \"focus\",\n timestamp: Date.now(),\n value: (target as HTMLInputElement).value ?? undefined,\n };\n\n const engine = (element as any).__hypenEngine;\n if (engine) {\n engine.dispatchAction(actionName, payload);\n } else {\n console.warn(`[EventApplicator] No engine attached to element for onFocus`);\n }\n };\n\n (element as any).__hypenFocusListener = listener;\n element.addEventListener(\"focus\", listener);\n\n console.log(`[EventApplicator] onFocus handler attached for action: ${actionName}`);\n },\n\n onBlur: (element, value) => {\n console.log(`[EventApplicator] onBlur called with value:`, value);\n\n const { actionName, payload: customPayload } = extractActionDetails(value);\n\n if (!actionName) {\n console.warn(`[EventApplicator] onBlur value must be an action reference, got:`, value);\n return;\n }\n\n // Remove existing blur listener if any\n const existingListener = (element as any).__hypenBlurListener;\n if (existingListener) {\n element.removeEventListener(\"blur\", existingListener);\n }\n\n const listener = (event: FocusEvent) => {\n console.log(`🔥 [EventApplicator] onBlur fired, dispatching action: ${actionName}`);\n\n const target = event.target as HTMLElement;\n const payload = Object.keys(customPayload).length > 0\n ? { ...customPayload }\n : {\n type: \"blur\",\n timestamp: Date.now(),\n value: (target as HTMLInputElement).value ?? undefined,\n };\n\n const engine = (element as any).__hypenEngine;\n if (engine) {\n engine.dispatchAction(actionName, payload);\n } else {\n console.warn(`[EventApplicator] No engine attached to element for onBlur`);\n }\n };\n\n (element as any).__hypenBlurListener = listener;\n element.addEventListener(\"blur\", listener);\n\n console.log(`[EventApplicator] onBlur handler attached for action: ${actionName}`);\n },\n\n onMouseEnter: (element, value) => {\n console.log(`[EventApplicator] onMouseEnter called with value:`, value);\n\n const { actionName, payload: customPayload } = extractActionDetails(value);\n\n if (!actionName) {\n console.warn(`[EventApplicator] onMouseEnter value must be an action reference, got:`, value);\n return;\n }\n\n // Remove existing listener if any\n const existingListener = (element as any).__hypenMouseEnterListener;\n if (existingListener) {\n element.removeEventListener(\"mouseenter\", existingListener);\n }\n\n const listener = (event: MouseEvent) => {\n console.log(`🔥 [EventApplicator] onMouseEnter fired, dispatching action: ${actionName}`);\n\n const payload = Object.keys(customPayload).length > 0\n ? { ...customPayload }\n : {\n type: \"mouseenter\",\n timestamp: Date.now(),\n clientX: event.clientX,\n clientY: event.clientY,\n };\n\n const engine = (element as any).__hypenEngine;\n if (engine) {\n engine.dispatchAction(actionName, payload);\n } else {\n console.warn(`[EventApplicator] No engine attached to element for onMouseEnter`);\n }\n };\n\n (element as any).__hypenMouseEnterListener = listener;\n element.addEventListener(\"mouseenter\", listener);\n\n console.log(`[EventApplicator] onMouseEnter handler attached for action: ${actionName}`);\n },\n\n onMouseLeave: (element, value) => {\n console.log(`[EventApplicator] onMouseLeave called with value:`, value);\n\n const { actionName, payload: customPayload } = extractActionDetails(value);\n\n if (!actionName) {\n console.warn(`[EventApplicator] onMouseLeave value must be an action reference, got:`, value);\n return;\n }\n\n // Remove existing listener if any\n const existingListener = (element as any).__hypenMouseLeaveListener;\n if (existingListener) {\n element.removeEventListener(\"mouseleave\", existingListener);\n }\n\n const listener = (event: MouseEvent) => {\n console.log(`🔥 [EventApplicator] onMouseLeave fired, dispatching action: ${actionName}`);\n\n const payload = Object.keys(customPayload).length > 0\n ? { ...customPayload }\n : {\n type: \"mouseleave\",\n timestamp: Date.now(),\n clientX: event.clientX,\n clientY: event.clientY,\n };\n\n const engine = (element as any).__hypenEngine;\n if (engine) {\n engine.dispatchAction(actionName, payload);\n } else {\n console.warn(`[EventApplicator] No engine attached to element for onMouseLeave`);\n }\n };\n\n (element as any).__hypenMouseLeaveListener = listener;\n element.addEventListener(\"mouseleave\", listener);\n\n console.log(`[EventApplicator] onMouseLeave handler attached for action: ${actionName}`);\n },\n\n};\n\n/**\n * Extract relevant data from an event\n */\nfunction extractEventData(event: Event, element: HTMLElement): any {\n const data: any = {\n type: event.type,\n timestamp: Date.now(),\n };\n\n // Mouse events\n if (event instanceof MouseEvent) {\n data.clientX = event.clientX;\n data.clientY = event.clientY;\n data.button = event.button;\n }\n\n // Keyboard events\n if (event instanceof KeyboardEvent) {\n data.key = event.key;\n data.code = event.code;\n data.ctrlKey = event.ctrlKey;\n data.shiftKey = event.shiftKey;\n data.altKey = event.altKey;\n data.metaKey = event.metaKey;\n }\n\n // Input events (for form elements)\n if (element instanceof HTMLInputElement || element instanceof HTMLTextAreaElement) {\n data.value = element.value;\n }\n\n // Select events\n if (element instanceof HTMLSelectElement) {\n data.value = element.value;\n data.selectedIndex = element.selectedIndex;\n }\n\n // Form events\n if (event.type === \"submit\" && element instanceof HTMLFormElement) {\n data.formData = new FormData(element);\n }\n\n return data;\n}\n"
|
|
6
|
+
],
|
|
7
|
+
"mappings": "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",
|
|
8
|
+
"debugId": "F529EAF36E9924CD64756E2164756E21",
|
|
9
|
+
"names": []
|
|
10
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import {
|
|
2
|
+
__esm,
|
|
3
|
+
__export
|
|
4
|
+
} from "../../../chunk-2s02mkzs.js";
|
|
5
|
+
|
|
6
|
+
// src/dom/applicators/font.ts
|
|
7
|
+
var exports_font = {};
|
|
8
|
+
__export(exports_font, {
|
|
9
|
+
fontHandlers: () => fontHandlers
|
|
10
|
+
});
|
|
11
|
+
var fontHandlers;
|
|
12
|
+
var init_font = __esm(() => {
|
|
13
|
+
fontHandlers = {
|
|
14
|
+
fontSize: (el, value) => {
|
|
15
|
+
el.style.fontSize = typeof value === "number" ? `${value}px` : String(value);
|
|
16
|
+
},
|
|
17
|
+
fontWeight: (el, value) => {
|
|
18
|
+
el.style.fontWeight = String(value);
|
|
19
|
+
},
|
|
20
|
+
fontFamily: (el, value) => {
|
|
21
|
+
el.style.fontFamily = String(value);
|
|
22
|
+
},
|
|
23
|
+
textAlign: (el, value) => {
|
|
24
|
+
el.style.textAlign = String(value);
|
|
25
|
+
},
|
|
26
|
+
lineHeight: (el, value) => {
|
|
27
|
+
el.style.lineHeight = String(value);
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
});
|
|
31
|
+
init_font();
|
|
32
|
+
|
|
33
|
+
export {
|
|
34
|
+
fontHandlers
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
export { exports_font, init_font };
|
|
38
|
+
|
|
39
|
+
//# debugId=ACEF34E7A7FAF5FF64756E2164756E21
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/dom/applicators/font.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"/**\n * Font Applicators\n */\n\nimport type { ApplicatorHandler } from \"./index.js\";\n\nexport const fontHandlers: Record<string, ApplicatorHandler> = {\n fontSize: (el, value) => {\n el.style.fontSize = typeof value === \"number\" ? `${value}px` : String(value);\n },\n\n fontWeight: (el, value) => {\n el.style.fontWeight = String(value);\n },\n\n fontFamily: (el, value) => {\n el.style.fontFamily = String(value);\n },\n\n textAlign: (el, value) => {\n el.style.textAlign = String(value);\n },\n\n lineHeight: (el, value) => {\n el.style.lineHeight = String(value);\n },\n};\n"
|
|
6
|
+
],
|
|
7
|
+
"mappings": ";;;;;;;;;;IAMa;AAAA;AAAA,iBAAkD;AAAA,IAC7D,UAAU,CAAC,IAAI,UAAU;AAAA,MACvB,GAAG,MAAM,WAAW,OAAO,UAAU,WAAW,GAAG,YAAY,OAAO,KAAK;AAAA;AAAA,IAG7E,YAAY,CAAC,IAAI,UAAU;AAAA,MACzB,GAAG,MAAM,aAAa,OAAO,KAAK;AAAA;AAAA,IAGpC,YAAY,CAAC,IAAI,UAAU;AAAA,MACzB,GAAG,MAAM,aAAa,OAAO,KAAK;AAAA;AAAA,IAGpC,WAAW,CAAC,IAAI,UAAU;AAAA,MACxB,GAAG,MAAM,YAAY,OAAO,KAAK;AAAA;AAAA,IAGnC,YAAY,CAAC,IAAI,UAAU;AAAA,MACzB,GAAG,MAAM,aAAa,OAAO,KAAK;AAAA;AAAA,EAEtC;AAAA;",
|
|
8
|
+
"debugId": "ACEF34E7A7FAF5FF64756E2164756E21",
|
|
9
|
+
"names": []
|
|
10
|
+
}
|