@hypen-space/web 0.3.8 → 0.3.10
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/{src/canvas → canvas}/index.js +10 -6
- package/dist/{src/canvas → canvas}/index.js.map +4 -4
- package/dist/{src/canvas → canvas}/layout.js +4 -2
- package/dist/{src/canvas → canvas}/layout.js.map +3 -3
- package/dist/{src/canvas → canvas}/paint.js +4 -2
- package/dist/{src/canvas → canvas}/paint.js.map +3 -3
- package/dist/{src/canvas → canvas}/renderer.js +10 -6
- package/dist/{src/canvas → canvas}/renderer.js.map +4 -4
- package/dist/{src/canvas → canvas}/text.js +4 -2
- package/dist/{src/canvas → canvas}/text.js.map +3 -3
- package/dist/dom/applicators/advanced-layout.js +245 -0
- package/dist/dom/applicators/advanced-layout.js.map +11 -0
- package/dist/{src/dom/applicators/margin.js → dom/applicators/background.js} +33 -21
- package/dist/{src/dom → dom}/applicators/background.js.map +3 -3
- package/dist/dom/applicators/border.js +97 -0
- package/dist/{src/dom → dom}/applicators/border.js.map +3 -3
- package/dist/dom/applicators/color.js +49 -0
- package/dist/{src/dom → dom}/applicators/color.js.map +3 -3
- package/dist/{src/dom/applicators/padding.js → dom/applicators/display.js} +36 -21
- package/dist/{src/dom → dom}/applicators/display.js.map +3 -3
- package/dist/dom/applicators/effects.js +138 -0
- package/dist/{src/dom → dom}/applicators/effects.js.map +3 -3
- package/dist/{src/dom → dom}/applicators/events.js +41 -48
- package/dist/dom/applicators/events.js.map +11 -0
- package/dist/{src/dom → dom}/applicators/font.js +76 -86
- package/dist/{src/dom → dom}/applicators/font.js.map +3 -3
- package/dist/dom/applicators/index.js +1728 -0
- package/dist/dom/applicators/index.js.map +26 -0
- package/dist/dom/applicators/layout.js +141 -0
- package/dist/dom/applicators/layout.js.map +10 -0
- package/dist/dom/applicators/margin.js +104 -0
- package/dist/dom/applicators/margin.js.map +10 -0
- package/dist/dom/applicators/padding.js +104 -0
- package/dist/dom/applicators/padding.js.map +10 -0
- package/dist/{src/dom → dom}/applicators/size.js +76 -76
- package/dist/dom/applicators/size.js.map +10 -0
- package/dist/dom/applicators/transform.js +105 -0
- package/dist/{src/dom → dom}/applicators/transform.js.map +3 -3
- package/dist/dom/applicators/transition.js +79 -0
- package/dist/{src/dom → dom}/applicators/transition.js.map +3 -3
- package/dist/dom/applicators/types.js +2 -0
- package/dist/dom/applicators/types.js.map +9 -0
- package/dist/dom/applicators/typography.js +100 -0
- package/dist/{src/dom → dom}/applicators/typography.js.map +3 -3
- package/dist/{src/dom → dom}/components/avatar.js +4 -3
- package/dist/dom/components/avatar.js.map +10 -0
- package/dist/{src/dom → dom}/components/button.js +11 -1
- package/dist/dom/components/button.js.map +10 -0
- package/dist/{src/dom → dom}/components/center.js +4 -1
- package/dist/dom/components/center.js.map +10 -0
- package/dist/dom/components/column.js.map +10 -0
- package/dist/{src/dom → dom}/components/container.js +1 -4
- package/dist/{src/dom → dom}/components/container.js.map +3 -3
- package/dist/{src/dom → dom}/components/grid.js +18 -2
- package/dist/dom/components/grid.js.map +10 -0
- package/dist/{src/dom → dom}/components/hypenapp.js +15 -13
- package/dist/dom/components/hypenapp.js.map +10 -0
- package/dist/{src/dom → dom}/components/index.js +64 -24
- package/dist/dom/components/index.js.map +41 -0
- package/dist/{src/dom → dom}/components/route.js +5 -3
- package/dist/dom/components/route.js.map +10 -0
- package/dist/{src/dom → dom}/components/row.js +5 -4
- package/dist/dom/components/row.js.map +10 -0
- package/dist/{src/dom → dom}/components/stack.js +5 -1
- package/dist/dom/components/stack.js.map +10 -0
- package/dist/{src/dom → dom}/components/text.js +5 -1
- package/dist/dom/components/text.js.map +10 -0
- package/dist/{src/dom → dom}/debug.js +5 -3
- package/dist/dom/debug.js.map +10 -0
- package/dist/{src/dom → dom}/element-data.js +6 -11
- package/dist/dom/element-data.js.map +10 -0
- package/dist/{src/dom → dom}/events.js +15 -12
- package/dist/dom/events.js.map +10 -0
- package/dist/{src/dom → dom}/index.js +1103 -1044
- package/dist/dom/index.js.map +62 -0
- package/dist/{src/dom → dom}/renderer.js +1089 -1033
- package/dist/dom/renderer.js.map +61 -0
- package/dist/{src/hypen.js → hypen.js} +1122 -1097
- package/dist/hypen.js.map +62 -0
- package/dist/{src/index.js → index.js} +1143 -1111
- package/dist/index.js.map +72 -0
- package/package.json +22 -22
- package/src/canvas/renderer.ts +7 -4
- package/src/canvas/text.ts +4 -1
- package/src/dom/applicators/background.ts +1 -1
- package/src/dom/applicators/border.ts +1 -1
- package/src/dom/applicators/color.ts +1 -1
- package/src/dom/applicators/display.ts +1 -1
- package/src/dom/applicators/effects.ts +1 -1
- package/src/dom/applicators/events.ts +8 -14
- package/src/dom/applicators/font.ts +1 -1
- package/src/dom/applicators/index.ts +49 -17
- package/src/dom/applicators/layout.ts +31 -8
- package/src/dom/applicators/margin.ts +56 -6
- package/src/dom/applicators/padding.ts +56 -6
- package/src/dom/applicators/size.ts +19 -4
- package/src/dom/applicators/transform.ts +1 -1
- package/src/dom/applicators/transition.ts +1 -1
- package/src/dom/applicators/types.ts +7 -0
- package/src/dom/applicators/typography.ts +1 -1
- package/src/dom/components/avatar.ts +4 -3
- package/src/dom/components/button.ts +17 -0
- package/src/dom/components/center.ts +9 -0
- package/src/dom/components/column.ts +4 -2
- package/src/dom/components/container.ts +2 -3
- package/src/dom/components/grid.ts +22 -0
- package/src/dom/components/hypenapp.ts +14 -11
- package/src/dom/components/route.ts +4 -1
- package/src/dom/components/row.ts +8 -7
- package/src/dom/components/stack.ts +4 -0
- package/src/dom/components/text.ts +7 -0
- package/src/dom/debug.ts +6 -2
- package/src/dom/element-data.ts +1 -1
- package/src/dom/events.ts +16 -12
- package/src/dom/renderer.ts +12 -9
- package/src/hypen.ts +32 -73
- package/dist/src/dom/applicators/advanced-layout.js +0 -250
- package/dist/src/dom/applicators/advanced-layout.js.map +0 -11
- package/dist/src/dom/applicators/background.js +0 -76
- package/dist/src/dom/applicators/border.js +0 -106
- package/dist/src/dom/applicators/color.js +0 -58
- package/dist/src/dom/applicators/display.js +0 -79
- package/dist/src/dom/applicators/effects.js +0 -147
- package/dist/src/dom/applicators/events.js.map +0 -11
- package/dist/src/dom/applicators/index.js +0 -1715
- package/dist/src/dom/applicators/index.js.map +0 -26
- package/dist/src/dom/applicators/layout.js +0 -138
- package/dist/src/dom/applicators/layout.js.map +0 -10
- package/dist/src/dom/applicators/margin.js.map +0 -10
- package/dist/src/dom/applicators/padding.js.map +0 -10
- package/dist/src/dom/applicators/size.js.map +0 -10
- package/dist/src/dom/applicators/transform.js +0 -114
- package/dist/src/dom/applicators/transition.js +0 -88
- package/dist/src/dom/applicators/typography.js +0 -109
- package/dist/src/dom/components/avatar.js.map +0 -10
- package/dist/src/dom/components/button.js.map +0 -10
- package/dist/src/dom/components/center.js.map +0 -10
- package/dist/src/dom/components/column.js.map +0 -10
- package/dist/src/dom/components/grid.js.map +0 -10
- package/dist/src/dom/components/hypenapp.js.map +0 -10
- package/dist/src/dom/components/index.js.map +0 -41
- package/dist/src/dom/components/route.js.map +0 -10
- package/dist/src/dom/components/row.js.map +0 -10
- package/dist/src/dom/components/stack.js.map +0 -10
- package/dist/src/dom/components/text.js.map +0 -10
- package/dist/src/dom/debug.js.map +0 -10
- package/dist/src/dom/element-data.js.map +0 -10
- package/dist/src/dom/events.js.map +0 -10
- package/dist/src/dom/index.js.map +0 -62
- package/dist/src/dom/renderer.js.map +0 -61
- package/dist/src/hypen.js.map +0 -62
- package/dist/src/index.js.map +0 -72
- /package/dist/{src/canvas → canvas}/accessibility.js +0 -0
- /package/dist/{src/canvas → canvas}/accessibility.js.map +0 -0
- /package/dist/{src/canvas → canvas}/events.js +0 -0
- /package/dist/{src/canvas → canvas}/events.js.map +0 -0
- /package/dist/{src/canvas → canvas}/input.js +0 -0
- /package/dist/{src/canvas → canvas}/input.js.map +0 -0
- /package/dist/{src/canvas → canvas}/types.js +0 -0
- /package/dist/{src/canvas → canvas}/types.js.map +0 -0
- /package/dist/{src/canvas → canvas}/utils.js +0 -0
- /package/dist/{src/canvas → canvas}/utils.js.map +0 -0
- /package/dist/{src/dom → dom}/canvas/index.js +0 -0
- /package/dist/{src/dom → dom}/canvas/index.js.map +0 -0
- /package/dist/{src/dom → dom}/components/audio.js +0 -0
- /package/dist/{src/dom → dom}/components/audio.js.map +0 -0
- /package/dist/{src/dom → dom}/components/badge.js +0 -0
- /package/dist/{src/dom → dom}/components/badge.js.map +0 -0
- /package/dist/{src/dom → dom}/components/card.js +0 -0
- /package/dist/{src/dom → dom}/components/card.js.map +0 -0
- /package/dist/{src/dom → dom}/components/checkbox.js +0 -0
- /package/dist/{src/dom → dom}/components/checkbox.js.map +0 -0
- /package/dist/{src/dom → dom}/components/column.js +0 -0
- /package/dist/{src/dom → dom}/components/divider.js +0 -0
- /package/dist/{src/dom → dom}/components/divider.js.map +0 -0
- /package/dist/{src/dom → dom}/components/heading.js +0 -0
- /package/dist/{src/dom → dom}/components/heading.js.map +0 -0
- /package/dist/{src/dom → dom}/components/image.js +0 -0
- /package/dist/{src/dom → dom}/components/image.js.map +0 -0
- /package/dist/{src/dom → dom}/components/input.js +0 -0
- /package/dist/{src/dom → dom}/components/input.js.map +0 -0
- /package/dist/{src/dom → dom}/components/link.js +0 -0
- /package/dist/{src/dom → dom}/components/link.js.map +0 -0
- /package/dist/{src/dom → dom}/components/list.js +0 -0
- /package/dist/{src/dom → dom}/components/list.js.map +0 -0
- /package/dist/{src/dom → dom}/components/paragraph.js +0 -0
- /package/dist/{src/dom → dom}/components/paragraph.js.map +0 -0
- /package/dist/{src/dom → dom}/components/progressbar.js +0 -0
- /package/dist/{src/dom → dom}/components/progressbar.js.map +0 -0
- /package/dist/{src/dom → dom}/components/router.js +0 -0
- /package/dist/{src/dom → dom}/components/router.js.map +0 -0
- /package/dist/{src/dom → dom}/components/select.js +0 -0
- /package/dist/{src/dom → dom}/components/select.js.map +0 -0
- /package/dist/{src/dom → dom}/components/slider.js +0 -0
- /package/dist/{src/dom → dom}/components/slider.js.map +0 -0
- /package/dist/{src/dom → dom}/components/spacer.js +0 -0
- /package/dist/{src/dom → dom}/components/spacer.js.map +0 -0
- /package/dist/{src/dom → dom}/components/spinner.js +0 -0
- /package/dist/{src/dom → dom}/components/spinner.js.map +0 -0
- /package/dist/{src/dom → dom}/components/switch.js +0 -0
- /package/dist/{src/dom → dom}/components/switch.js.map +0 -0
- /package/dist/{src/dom → dom}/components/textarea.js +0 -0
- /package/dist/{src/dom → dom}/components/textarea.js.map +0 -0
- /package/dist/{src/dom → dom}/components/video.js +0 -0
- /package/dist/{src/dom → dom}/components/video.js.map +0 -0
|
@@ -27,29 +27,44 @@ var __export = (target, all) => {
|
|
|
27
27
|
};
|
|
28
28
|
var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
29
29
|
|
|
30
|
-
// src/dom/applicators/
|
|
31
|
-
var
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
el.style.
|
|
30
|
+
// src/dom/applicators/display.ts
|
|
31
|
+
var displayHandlers = {
|
|
32
|
+
display: (el, value) => {
|
|
33
|
+
el.style.display = String(value);
|
|
34
|
+
},
|
|
35
|
+
visibility: (el, value) => {
|
|
36
|
+
el.style.visibility = String(value);
|
|
37
|
+
},
|
|
38
|
+
overflowX: (el, value) => {
|
|
39
|
+
el.style.overflowX = String(value);
|
|
40
|
+
},
|
|
41
|
+
overflowY: (el, value) => {
|
|
42
|
+
el.style.overflowY = String(value);
|
|
43
|
+
},
|
|
44
|
+
pointerEvents: (el, value) => {
|
|
45
|
+
el.style.pointerEvents = String(value);
|
|
46
|
+
},
|
|
47
|
+
userSelect: (el, value) => {
|
|
48
|
+
el.style.userSelect = String(value);
|
|
49
|
+
},
|
|
50
|
+
resize: (el, value) => {
|
|
51
|
+
el.style.resize = String(value);
|
|
52
|
+
},
|
|
53
|
+
boxSizing: (el, value) => {
|
|
54
|
+
el.style.boxSizing = String(value);
|
|
55
|
+
},
|
|
56
|
+
aspectRatio: (el, value) => {
|
|
57
|
+
el.style.aspectRatio = String(value);
|
|
58
|
+
},
|
|
59
|
+
objectFit: (el, value) => {
|
|
60
|
+
el.style.objectFit = String(value);
|
|
61
|
+
},
|
|
62
|
+
objectPosition: (el, value) => {
|
|
63
|
+
el.style.objectPosition = String(value);
|
|
49
64
|
}
|
|
50
65
|
};
|
|
51
66
|
export {
|
|
52
|
-
|
|
67
|
+
displayHandlers
|
|
53
68
|
};
|
|
54
69
|
|
|
55
|
-
//# debugId=
|
|
70
|
+
//# debugId=F7DE022B4150774D64756E2164756E21
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/dom/applicators/display.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"/**\n * Display and Visibility Applicators\n */\n\nimport type { ApplicatorHandler } from \"./
|
|
5
|
+
"/**\n * Display and Visibility Applicators\n */\n\nimport type { ApplicatorHandler } from \"./types.js\";\n\nexport const displayHandlers: Record<string, ApplicatorHandler> = {\n display: (el, value) => {\n el.style.display = String(value);\n },\n\n visibility: (el, value) => {\n el.style.visibility = String(value);\n },\n\n overflowX: (el, value) => {\n el.style.overflowX = String(value);\n },\n\n overflowY: (el, value) => {\n el.style.overflowY = String(value);\n },\n\n pointerEvents: (el, value) => {\n el.style.pointerEvents = String(value);\n },\n\n userSelect: (el, value) => {\n el.style.userSelect = String(value);\n },\n\n resize: (el, value) => {\n el.style.resize = String(value);\n },\n\n boxSizing: (el, value) => {\n el.style.boxSizing = String(value);\n },\n\n // Sizing helpers\n aspectRatio: (el, value) => {\n el.style.aspectRatio = String(value);\n },\n\n objectFit: (el, value) => {\n el.style.objectFit = String(value);\n },\n\n objectPosition: (el, value) => {\n el.style.objectPosition = String(value);\n },\n};\n\n\n"
|
|
6
6
|
],
|
|
7
|
-
"mappings": "
|
|
8
|
-
"debugId": "
|
|
7
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMO,IAAM,kBAAqD;AAAA,EAChE,SAAS,CAAC,IAAI,UAAU;AAAA,IACtB,GAAG,MAAM,UAAU,OAAO,KAAK;AAAA;AAAA,EAGjC,YAAY,CAAC,IAAI,UAAU;AAAA,IACzB,GAAG,MAAM,aAAa,OAAO,KAAK;AAAA;AAAA,EAGpC,WAAW,CAAC,IAAI,UAAU;AAAA,IACxB,GAAG,MAAM,YAAY,OAAO,KAAK;AAAA;AAAA,EAGnC,WAAW,CAAC,IAAI,UAAU;AAAA,IACxB,GAAG,MAAM,YAAY,OAAO,KAAK;AAAA;AAAA,EAGnC,eAAe,CAAC,IAAI,UAAU;AAAA,IAC5B,GAAG,MAAM,gBAAgB,OAAO,KAAK;AAAA;AAAA,EAGvC,YAAY,CAAC,IAAI,UAAU;AAAA,IACzB,GAAG,MAAM,aAAa,OAAO,KAAK;AAAA;AAAA,EAGpC,QAAQ,CAAC,IAAI,UAAU;AAAA,IACrB,GAAG,MAAM,SAAS,OAAO,KAAK;AAAA;AAAA,EAGhC,WAAW,CAAC,IAAI,UAAU;AAAA,IACxB,GAAG,MAAM,YAAY,OAAO,KAAK;AAAA;AAAA,EAInC,aAAa,CAAC,IAAI,UAAU;AAAA,IAC1B,GAAG,MAAM,cAAc,OAAO,KAAK;AAAA;AAAA,EAGrC,WAAW,CAAC,IAAI,UAAU;AAAA,IACxB,GAAG,MAAM,YAAY,OAAO,KAAK;AAAA;AAAA,EAGnC,gBAAgB,CAAC,IAAI,UAAU;AAAA,IAC7B,GAAG,MAAM,iBAAiB,OAAO,KAAK;AAAA;AAE1C;",
|
|
8
|
+
"debugId": "F7DE022B4150774D64756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __moduleCache = /* @__PURE__ */ new WeakMap;
|
|
6
|
+
var __toCommonJS = (from) => {
|
|
7
|
+
var entry = __moduleCache.get(from), desc;
|
|
8
|
+
if (entry)
|
|
9
|
+
return entry;
|
|
10
|
+
entry = __defProp({}, "__esModule", { value: true });
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function")
|
|
12
|
+
__getOwnPropNames(from).map((key) => !__hasOwnProp.call(entry, key) && __defProp(entry, key, {
|
|
13
|
+
get: () => from[key],
|
|
14
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
15
|
+
}));
|
|
16
|
+
__moduleCache.set(from, entry);
|
|
17
|
+
return entry;
|
|
18
|
+
};
|
|
19
|
+
var __export = (target, all) => {
|
|
20
|
+
for (var name in all)
|
|
21
|
+
__defProp(target, name, {
|
|
22
|
+
get: all[name],
|
|
23
|
+
enumerable: true,
|
|
24
|
+
configurable: true,
|
|
25
|
+
set: (newValue) => all[name] = () => newValue
|
|
26
|
+
});
|
|
27
|
+
};
|
|
28
|
+
var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
29
|
+
|
|
30
|
+
// src/dom/applicators/effects.ts
|
|
31
|
+
var effectsHandlers = {
|
|
32
|
+
boxShadow: (el, value) => {
|
|
33
|
+
if (typeof value === "string") {
|
|
34
|
+
el.style.boxShadow = value;
|
|
35
|
+
} else if (typeof value === "object" && value !== null) {
|
|
36
|
+
const obj = value;
|
|
37
|
+
const x = typeof obj.x === "number" ? `${obj.x}px` : obj.x ?? obj.offsetX ?? "0px";
|
|
38
|
+
const y = typeof obj.y === "number" ? `${obj.y}px` : obj.y ?? obj.offsetY ?? "0px";
|
|
39
|
+
const blur = typeof obj.blur === "number" ? `${obj.blur}px` : obj.blur ?? obj.radius ?? "0px";
|
|
40
|
+
const spread = typeof obj.spread === "number" ? `${obj.spread}px` : obj.spread ?? "0px";
|
|
41
|
+
const color = obj.color ?? "rgba(0,0,0,0.2)";
|
|
42
|
+
const inset = obj.inset ? "inset " : "";
|
|
43
|
+
el.style.boxShadow = `${inset}${x} ${y} ${blur} ${spread} ${color}`;
|
|
44
|
+
} else if (typeof value === "number") {
|
|
45
|
+
el.style.boxShadow = `0 ${value}px ${value * 2}px rgba(0,0,0,0.2)`;
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
shadow: (el, value) => {
|
|
49
|
+
if (typeof value === "object" && value !== null) {
|
|
50
|
+
const obj = value;
|
|
51
|
+
const x = typeof obj.x === "number" ? `${obj.x}px` : obj.x ?? obj.offsetX ?? "0px";
|
|
52
|
+
const y = typeof obj.y === "number" ? `${obj.y}px` : obj.y ?? obj.offsetY ?? "0px";
|
|
53
|
+
const blur = typeof obj.blur === "number" ? `${obj.blur}px` : obj.blur ?? obj.radius ?? "4px";
|
|
54
|
+
const color = obj.color ?? "rgba(0,0,0,0.2)";
|
|
55
|
+
el.style.boxShadow = `${x} ${y} ${blur} ${color}`;
|
|
56
|
+
} else if (typeof value === "number") {
|
|
57
|
+
el.style.boxShadow = `0 ${value}px ${value * 2}px rgba(0,0,0,0.2)`;
|
|
58
|
+
} else {
|
|
59
|
+
el.style.boxShadow = String(value);
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
elevation: (el, value) => {
|
|
63
|
+
const level = typeof value === "number" ? value : parseInt(String(value), 10);
|
|
64
|
+
if (!isNaN(level) && level >= 0) {
|
|
65
|
+
const y = level * 0.5;
|
|
66
|
+
const blur = level * 1.5;
|
|
67
|
+
const opacity = Math.min(0.1 + level * 0.02, 0.4);
|
|
68
|
+
el.style.boxShadow = `0 ${y}px ${blur}px rgba(0,0,0,${opacity})`;
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
textShadow: (el, value) => {
|
|
72
|
+
el.style.textShadow = String(value);
|
|
73
|
+
},
|
|
74
|
+
filter: (el, value) => {
|
|
75
|
+
el.style.filter = String(value);
|
|
76
|
+
},
|
|
77
|
+
backdropFilter: (el, value) => {
|
|
78
|
+
el.style.backdropFilter = String(value);
|
|
79
|
+
},
|
|
80
|
+
blur: (el, value) => {
|
|
81
|
+
const val = typeof value === "number" ? `${value}px` : String(value);
|
|
82
|
+
const current = el.style.filter || "";
|
|
83
|
+
el.style.filter = current ? `${current} blur(${val})` : `blur(${val})`;
|
|
84
|
+
},
|
|
85
|
+
brightness: (el, value) => {
|
|
86
|
+
const current = el.style.filter || "";
|
|
87
|
+
el.style.filter = current ? `${current} brightness(${value})` : `brightness(${value})`;
|
|
88
|
+
},
|
|
89
|
+
contrast: (el, value) => {
|
|
90
|
+
const current = el.style.filter || "";
|
|
91
|
+
el.style.filter = current ? `${current} contrast(${value})` : `contrast(${value})`;
|
|
92
|
+
},
|
|
93
|
+
grayscale: (el, value) => {
|
|
94
|
+
const current = el.style.filter || "";
|
|
95
|
+
el.style.filter = current ? `${current} grayscale(${value})` : `grayscale(${value})`;
|
|
96
|
+
},
|
|
97
|
+
hueRotate: (el, value) => {
|
|
98
|
+
const val = String(value);
|
|
99
|
+
const current = el.style.filter || "";
|
|
100
|
+
el.style.filter = current ? `${current} hue-rotate(${val})` : `hue-rotate(${val})`;
|
|
101
|
+
},
|
|
102
|
+
invert: (el, value) => {
|
|
103
|
+
const current = el.style.filter || "";
|
|
104
|
+
el.style.filter = current ? `${current} invert(${value})` : `invert(${value})`;
|
|
105
|
+
},
|
|
106
|
+
saturate: (el, value) => {
|
|
107
|
+
const current = el.style.filter || "";
|
|
108
|
+
el.style.filter = current ? `${current} saturate(${value})` : `saturate(${value})`;
|
|
109
|
+
},
|
|
110
|
+
sepia: (el, value) => {
|
|
111
|
+
const current = el.style.filter || "";
|
|
112
|
+
el.style.filter = current ? `${current} sepia(${value})` : `sepia(${value})`;
|
|
113
|
+
},
|
|
114
|
+
dropShadow: (el, value) => {
|
|
115
|
+
const current = el.style.filter || "";
|
|
116
|
+
el.style.filter = current ? `${current} drop-shadow(${value})` : `drop-shadow(${value})`;
|
|
117
|
+
},
|
|
118
|
+
mixBlendMode: (el, value) => {
|
|
119
|
+
el.style.mixBlendMode = String(value);
|
|
120
|
+
},
|
|
121
|
+
backgroundBlendMode: (el, value) => {
|
|
122
|
+
el.style.backgroundBlendMode = String(value);
|
|
123
|
+
},
|
|
124
|
+
clipPath: (el, value) => {
|
|
125
|
+
el.style.clipPath = String(value);
|
|
126
|
+
},
|
|
127
|
+
mask: (el, value) => {
|
|
128
|
+
el.style.mask = String(value);
|
|
129
|
+
},
|
|
130
|
+
maskImage: (el, value) => {
|
|
131
|
+
el.style.maskImage = String(value);
|
|
132
|
+
}
|
|
133
|
+
};
|
|
134
|
+
export {
|
|
135
|
+
effectsHandlers
|
|
136
|
+
};
|
|
137
|
+
|
|
138
|
+
//# debugId=D221E05EF052CF1B64756E2164756E21
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/dom/applicators/effects.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"/**\n * Visual Effects Applicators (Shadows, Filters, Blend Modes)\n */\n\nimport type { ApplicatorHandler } from \"./
|
|
5
|
+
"/**\n * Visual Effects Applicators (Shadows, Filters, Blend Modes)\n */\n\nimport type { ApplicatorHandler } from \"./types.js\";\n\nexport const effectsHandlers: Record<string, ApplicatorHandler> = {\n // Shadow effects\n boxShadow: (el, value) => {\n if (typeof value === \"string\") {\n el.style.boxShadow = value;\n } else if (typeof value === \"object\" && value !== null) {\n // Object format: { x, y, blur, spread, color, inset }\n const obj = value as Record<string, any>;\n const x = typeof obj.x === \"number\" ? `${obj.x}px` : (obj.x ?? obj.offsetX ?? \"0px\");\n const y = typeof obj.y === \"number\" ? `${obj.y}px` : (obj.y ?? obj.offsetY ?? \"0px\");\n const blur = typeof obj.blur === \"number\" ? `${obj.blur}px` : (obj.blur ?? obj.radius ?? \"0px\");\n const spread = typeof obj.spread === \"number\" ? `${obj.spread}px` : (obj.spread ?? \"0px\");\n const color = obj.color ?? \"rgba(0,0,0,0.2)\";\n const inset = obj.inset ? \"inset \" : \"\";\n el.style.boxShadow = `${inset}${x} ${y} ${blur} ${spread} ${color}`;\n } else if (typeof value === \"number\") {\n // Just blur/elevation as number\n el.style.boxShadow = `0 ${value}px ${value * 2}px rgba(0,0,0,0.2)`;\n }\n },\n\n // Compound shadow with explicit offset support\n shadow: (el, value) => {\n if (typeof value === \"object\" && value !== null) {\n const obj = value as Record<string, any>;\n const x = typeof obj.x === \"number\" ? `${obj.x}px` : (obj.x ?? obj.offsetX ?? \"0px\");\n const y = typeof obj.y === \"number\" ? `${obj.y}px` : (obj.y ?? obj.offsetY ?? \"0px\");\n const blur = typeof obj.blur === \"number\" ? `${obj.blur}px` : (obj.blur ?? obj.radius ?? \"4px\");\n const color = obj.color ?? \"rgba(0,0,0,0.2)\";\n el.style.boxShadow = `${x} ${y} ${blur} ${color}`;\n } else if (typeof value === \"number\") {\n // Elevation-style: shadow grows with value\n el.style.boxShadow = `0 ${value}px ${value * 2}px rgba(0,0,0,0.2)`;\n } else {\n el.style.boxShadow = String(value);\n }\n },\n\n // Elevation (Material Design style)\n elevation: (el, value) => {\n const level = typeof value === \"number\" ? value : parseInt(String(value), 10);\n if (!isNaN(level) && level >= 0) {\n // Map elevation to box-shadow similar to Material Design\n const y = level * 0.5;\n const blur = level * 1.5;\n const opacity = Math.min(0.1 + level * 0.02, 0.4);\n el.style.boxShadow = `0 ${y}px ${blur}px rgba(0,0,0,${opacity})`;\n }\n },\n\n textShadow: (el, value) => {\n el.style.textShadow = String(value);\n },\n\n // Filter effects\n filter: (el, value) => {\n el.style.filter = String(value);\n },\n\n backdropFilter: (el, value) => {\n el.style.backdropFilter = String(value);\n },\n\n // Individual filter functions\n blur: (el, value) => {\n const val = typeof value === \"number\" ? `${value}px` : String(value);\n const current = el.style.filter || \"\";\n el.style.filter = current ? `${current} blur(${val})` : `blur(${val})`;\n },\n\n brightness: (el, value) => {\n const current = el.style.filter || \"\";\n el.style.filter = current ? `${current} brightness(${value})` : `brightness(${value})`;\n },\n\n contrast: (el, value) => {\n const current = el.style.filter || \"\";\n el.style.filter = current ? `${current} contrast(${value})` : `contrast(${value})`;\n },\n\n grayscale: (el, value) => {\n const current = el.style.filter || \"\";\n el.style.filter = current ? `${current} grayscale(${value})` : `grayscale(${value})`;\n },\n\n hueRotate: (el, value) => {\n const val = String(value);\n const current = el.style.filter || \"\";\n el.style.filter = current ? `${current} hue-rotate(${val})` : `hue-rotate(${val})`;\n },\n\n invert: (el, value) => {\n const current = el.style.filter || \"\";\n el.style.filter = current ? `${current} invert(${value})` : `invert(${value})`;\n },\n\n saturate: (el, value) => {\n const current = el.style.filter || \"\";\n el.style.filter = current ? `${current} saturate(${value})` : `saturate(${value})`;\n },\n\n sepia: (el, value) => {\n const current = el.style.filter || \"\";\n el.style.filter = current ? `${current} sepia(${value})` : `sepia(${value})`;\n },\n\n dropShadow: (el, value) => {\n const current = el.style.filter || \"\";\n el.style.filter = current ? `${current} drop-shadow(${value})` : `drop-shadow(${value})`;\n },\n\n // Blend modes\n mixBlendMode: (el, value) => {\n el.style.mixBlendMode = String(value);\n },\n\n backgroundBlendMode: (el, value) => {\n el.style.backgroundBlendMode = String(value);\n },\n\n // Clip and mask\n clipPath: (el, value) => {\n el.style.clipPath = String(value);\n },\n\n mask: (el, value) => {\n el.style.mask = String(value);\n },\n\n maskImage: (el, value) => {\n el.style.maskImage = String(value);\n },\n};\n\n\n"
|
|
6
6
|
],
|
|
7
|
-
"mappings": "
|
|
8
|
-
"debugId": "
|
|
7
|
+
"mappings": "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",
|
|
8
|
+
"debugId": "D221E05EF052CF1B64756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
|
@@ -28,7 +28,8 @@ var __export = (target, all) => {
|
|
|
28
28
|
var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
29
29
|
|
|
30
30
|
// src/dom/element-data.ts
|
|
31
|
-
import { getElementDisposables } from "@hypen-space/core";
|
|
31
|
+
import { getElementDisposables } from "@hypen-space/core/disposable";
|
|
32
|
+
var elementDataMap = new WeakMap;
|
|
32
33
|
function getHypenData(element) {
|
|
33
34
|
let data = elementDataMap.get(element);
|
|
34
35
|
if (!data) {
|
|
@@ -98,6 +99,9 @@ function disposeHypenElement(element) {
|
|
|
98
99
|
} catch {}
|
|
99
100
|
clearHypenData(element);
|
|
100
101
|
}
|
|
102
|
+
var HYPEN_ENGINE_SYMBOL = Symbol.for("hypen.engine");
|
|
103
|
+
var REGISTERED_EVENTS_SYMBOL = Symbol.for("hypen.registeredEvents");
|
|
104
|
+
var KEY_TARGET_SYMBOL = Symbol.for("hypen.keyTarget");
|
|
101
105
|
function getLegacyEngine(element) {
|
|
102
106
|
const engine = getEngine(element);
|
|
103
107
|
if (engine)
|
|
@@ -108,24 +112,15 @@ function setLegacyEngine(element, engine) {
|
|
|
108
112
|
setEngine(element, engine);
|
|
109
113
|
element.__hypenEngine = engine;
|
|
110
114
|
}
|
|
111
|
-
var elementDataMap, HYPEN_ENGINE_SYMBOL, REGISTERED_EVENTS_SYMBOL, KEY_TARGET_SYMBOL;
|
|
112
|
-
var init_element_data = __esm(() => {
|
|
113
|
-
elementDataMap = new WeakMap;
|
|
114
|
-
HYPEN_ENGINE_SYMBOL = Symbol.for("hypen.engine");
|
|
115
|
-
REGISTERED_EVENTS_SYMBOL = Symbol.for("hypen.registeredEvents");
|
|
116
|
-
KEY_TARGET_SYMBOL = Symbol.for("hypen.keyTarget");
|
|
117
|
-
});
|
|
118
115
|
|
|
119
116
|
// src/dom/applicators/events.ts
|
|
120
|
-
var exports_events = {};
|
|
121
|
-
__export(exports_events, {
|
|
122
|
-
eventHandlers: () => eventHandlers
|
|
123
|
-
});
|
|
124
117
|
import {
|
|
125
118
|
getElementDisposables as getElementDisposables2,
|
|
126
119
|
disposableListener,
|
|
127
120
|
disposableTimeout
|
|
128
|
-
} from "@hypen-space/core";
|
|
121
|
+
} from "@hypen-space/core/disposable";
|
|
122
|
+
import { frameworkLoggers } from "@hypen-space/core";
|
|
123
|
+
var log = frameworkLoggers.events;
|
|
129
124
|
function toPlainObject(value) {
|
|
130
125
|
if (value instanceof Map) {
|
|
131
126
|
const obj = {};
|
|
@@ -219,7 +214,7 @@ function createEventHandler(eventType, options = {}) {
|
|
|
219
214
|
return (element, value) => {
|
|
220
215
|
const { actionName, payload: customPayload } = extractActionDetails(value);
|
|
221
216
|
if (!actionName) {
|
|
222
|
-
|
|
217
|
+
log.warn(`${eventType} requires an action reference starting with @, got:`, value);
|
|
223
218
|
return;
|
|
224
219
|
}
|
|
225
220
|
const disposables = getElementDisposables2(element);
|
|
@@ -262,7 +257,7 @@ function createKeyHandler(defaultKey = "Enter") {
|
|
|
262
257
|
return (element, value) => {
|
|
263
258
|
const { actionName, payload: customPayload } = extractActionDetails(value);
|
|
264
259
|
if (!actionName) {
|
|
265
|
-
|
|
260
|
+
log.warn(`onKey requires an action reference starting with @, got:`, value);
|
|
266
261
|
return;
|
|
267
262
|
}
|
|
268
263
|
const disposables = getElementDisposables2(element);
|
|
@@ -307,7 +302,7 @@ function createLongClickHandler(thresholdMs = 500) {
|
|
|
307
302
|
return (element, value) => {
|
|
308
303
|
const { actionName, payload: customPayload } = extractActionDetails(value);
|
|
309
304
|
if (!actionName) {
|
|
310
|
-
|
|
305
|
+
log.warn(`onLongClick requires an action reference starting with @, got:`, value);
|
|
311
306
|
return;
|
|
312
307
|
}
|
|
313
308
|
const disposables = getElementDisposables2(element);
|
|
@@ -356,7 +351,8 @@ var inputPayload = (event, element) => {
|
|
|
356
351
|
value: target.value,
|
|
357
352
|
input: target.value
|
|
358
353
|
};
|
|
359
|
-
}
|
|
354
|
+
};
|
|
355
|
+
var scrollPayload = (_event, element) => {
|
|
360
356
|
const scrollTop = element.scrollTop;
|
|
361
357
|
const scrollHeight = element.scrollHeight;
|
|
362
358
|
const clientHeight = element.clientHeight;
|
|
@@ -376,11 +372,13 @@ var inputPayload = (event, element) => {
|
|
|
376
372
|
atBottom: scrollHeight - scrollTop === clientHeight,
|
|
377
373
|
atTop: scrollTop === 0
|
|
378
374
|
};
|
|
379
|
-
}
|
|
375
|
+
};
|
|
376
|
+
var focusPayload = (event, element) => ({
|
|
380
377
|
type: event.type,
|
|
381
378
|
timestamp: Date.now(),
|
|
382
379
|
value: element.value ?? undefined
|
|
383
|
-
})
|
|
380
|
+
});
|
|
381
|
+
var mousePayload = (event, _element) => {
|
|
384
382
|
const mouseEvent = event;
|
|
385
383
|
return {
|
|
386
384
|
type: event.type,
|
|
@@ -388,36 +386,31 @@ var inputPayload = (event, element) => {
|
|
|
388
386
|
clientX: mouseEvent.clientX,
|
|
389
387
|
clientY: mouseEvent.clientY
|
|
390
388
|
};
|
|
391
|
-
}
|
|
392
|
-
var
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
onMouseLeave: createEventHandler("mouseleave", { extractPayload: mousePayload })
|
|
415
|
-
};
|
|
416
|
-
});
|
|
417
|
-
init_events();
|
|
418
|
-
|
|
389
|
+
};
|
|
390
|
+
var eventHandlers = {
|
|
391
|
+
onClick: createEventHandler("click"),
|
|
392
|
+
onPress: createEventHandler("click"),
|
|
393
|
+
onChange: createEventHandler("change"),
|
|
394
|
+
onSubmit: createEventHandler("submit", { preventDefault: true }),
|
|
395
|
+
onInput: createEventHandler("input", { extractPayload: inputPayload }),
|
|
396
|
+
onKey: createKeyHandler("Enter"),
|
|
397
|
+
"onKey.key": (element, value) => {
|
|
398
|
+
setKeyTarget(element, String(value));
|
|
399
|
+
},
|
|
400
|
+
"onKey.action": createKeyHandler("Enter"),
|
|
401
|
+
onScroll: createEventHandler("scroll", {
|
|
402
|
+
throttleMs: 100,
|
|
403
|
+
passive: true,
|
|
404
|
+
extractPayload: scrollPayload
|
|
405
|
+
}),
|
|
406
|
+
onLongClick: createLongClickHandler(500),
|
|
407
|
+
onFocus: createEventHandler("focus", { extractPayload: focusPayload }),
|
|
408
|
+
onBlur: createEventHandler("blur", { extractPayload: focusPayload }),
|
|
409
|
+
onMouseEnter: createEventHandler("mouseenter", { extractPayload: mousePayload }),
|
|
410
|
+
onMouseLeave: createEventHandler("mouseleave", { extractPayload: mousePayload })
|
|
411
|
+
};
|
|
419
412
|
export {
|
|
420
413
|
eventHandlers
|
|
421
414
|
};
|
|
422
415
|
|
|
423
|
-
//# debugId=
|
|
416
|
+
//# debugId=F0888255282088F164756E2164756E21
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/dom/element-data.ts", "../src/dom/applicators/events.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"/**\n * Type-Safe Element Data\n *\n * Provides strongly-typed access to Hypen-specific data attached to DOM elements.\n * Eliminates `as any` casts throughout the codebase.\n */\n\nimport { type DisposableStack, getElementDisposables } from \"@hypen-space/core/disposable\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Engine interface for dispatching actions\n */\nexport interface IEngine {\n dispatchAction(name: string, payload?: unknown): void;\n}\n\n/**\n * All Hypen-specific data attached to an element\n */\nexport interface HypenElementData {\n /** Engine reference for action dispatch */\n engine?: IEngine;\n /** Target key for keyboard events (e.g., \"Enter\", \"Escape\") */\n keyTarget?: string;\n /** Set of registered event type:action pairs */\n registeredEvents?: Set<string>;\n /** Custom element metadata */\n meta?: Record<string, unknown>;\n}\n\n// ============================================================================\n// Private Storage\n// ============================================================================\n\n/**\n * WeakMap to store Hypen data without polluting the element\n */\nconst elementDataMap = new WeakMap<HTMLElement, HypenElementData>();\n\n// ============================================================================\n// Core API\n// ============================================================================\n\n/**\n * Get Hypen data for an element, creating if needed\n */\nexport function getHypenData(element: HTMLElement): HypenElementData {\n let data = elementDataMap.get(element);\n if (!data) {\n data = {};\n elementDataMap.set(element, data);\n }\n return data;\n}\n\n/**\n * Check if element has Hypen data\n */\nexport function hasHypenData(element: HTMLElement): boolean {\n return elementDataMap.has(element);\n}\n\n/**\n * Clear Hypen data from an element\n */\nexport function clearHypenData(element: HTMLElement): void {\n elementDataMap.delete(element);\n}\n\n// ============================================================================\n// Engine Access\n// ============================================================================\n\n/**\n * Get the engine attached to an element\n */\nexport function getEngine(element: HTMLElement): IEngine | undefined {\n return getHypenData(element).engine;\n}\n\n/**\n * Set the engine on an element\n */\nexport function setEngine(element: HTMLElement, engine: IEngine): void {\n getHypenData(element).engine = engine;\n}\n\n/**\n * Find engine by walking up the DOM tree\n */\nexport function findEngine(element: HTMLElement): IEngine | undefined {\n let current: HTMLElement | null = element;\n while (current) {\n const engine = getEngine(current);\n if (engine) return engine;\n current = current.parentElement;\n }\n return undefined;\n}\n\n// ============================================================================\n// Event Registration Tracking\n// ============================================================================\n\n/**\n * Get registered events set for an element\n */\nexport function getRegisteredEvents(element: HTMLElement): Set<string> {\n const data = getHypenData(element);\n if (!data.registeredEvents) {\n data.registeredEvents = new Set();\n }\n return data.registeredEvents;\n}\n\n/**\n * Check if an event handler is registered\n */\nexport function isEventRegistered(element: HTMLElement, eventKey: string): boolean {\n return getRegisteredEvents(element).has(eventKey);\n}\n\n/**\n * Mark an event handler as registered\n */\nexport function registerEvent(element: HTMLElement, eventKey: string): void {\n getRegisteredEvents(element).add(eventKey);\n}\n\n/**\n * Unregister an event handler\n */\nexport function unregisterEvent(element: HTMLElement, eventKey: string): void {\n getRegisteredEvents(element).delete(eventKey);\n}\n\n// ============================================================================\n// Keyboard Event Key Target\n// ============================================================================\n\n/**\n * Get the target key for keyboard events\n */\nexport function getKeyTarget(element: HTMLElement): string | undefined {\n return getHypenData(element).keyTarget;\n}\n\n/**\n * Set the target key for keyboard events\n */\nexport function setKeyTarget(element: HTMLElement, key: string): void {\n getHypenData(element).keyTarget = key;\n}\n\n// ============================================================================\n// Metadata\n// ============================================================================\n\n/**\n * Get custom metadata value\n */\nexport function getMeta<T>(element: HTMLElement, key: string): T | undefined {\n return getHypenData(element).meta?.[key] as T | undefined;\n}\n\n/**\n * Set custom metadata value\n */\nexport function setMeta<T>(element: HTMLElement, key: string, value: T): void {\n const data = getHypenData(element);\n if (!data.meta) {\n data.meta = {};\n }\n data.meta[key] = value;\n}\n\n// ============================================================================\n// Cleanup\n// ============================================================================\n\n/**\n * Dispose all resources attached to an element and clear data\n * Call this when removing an element from the DOM\n */\nexport function disposeHypenElement(element: HTMLElement): void {\n // Dispose any registered disposables\n try {\n const disposables = getElementDisposables(element);\n disposables.dispose();\n } catch {\n // Ignore if no disposables\n }\n\n // Clear Hypen data\n clearHypenData(element);\n}\n\n// ============================================================================\n// Legacy Compatibility Layer\n// ============================================================================\n\n/**\n * Symbol-based legacy accessor (for backwards compatibility)\n * Use the typed functions above instead when possible\n */\nconst HYPEN_ENGINE_SYMBOL = Symbol.for(\"hypen.engine\");\nconst REGISTERED_EVENTS_SYMBOL = Symbol.for(\"hypen.registeredEvents\");\nconst KEY_TARGET_SYMBOL = Symbol.for(\"hypen.keyTarget\");\n\n/**\n * Legacy accessor for engine (backwards compatible with existing code)\n */\nexport function getLegacyEngine(element: HTMLElement): IEngine | undefined {\n // Try new storage first\n const engine = getEngine(element);\n if (engine) return engine;\n\n // Fall back to legacy storage\n return (element as any)[HYPEN_ENGINE_SYMBOL] ??\n (element as any).__hypenEngine;\n}\n\n/**\n * Legacy setter for engine (backwards compatible)\n */\nexport function setLegacyEngine(element: HTMLElement, engine: IEngine): void {\n // Set in both locations for compatibility\n setEngine(element, engine);\n (element as any).__hypenEngine = engine;\n}\n",
|
|
6
|
+
"/**\n * Event Applicators\n *\n * Handles event applicators like onClick, onPress, etc.\n * Uses a factory pattern to reduce boilerplate and ensure consistency.\n */\n\nimport type { ApplicatorHandler } from \"./types.js\";\nimport {\n getElementDisposables,\n disposableListener,\n disposableTimeout,\n type Disposable,\n} from \"@hypen-space/core/disposable\";\nimport { frameworkLoggers } from \"@hypen-space/core\";\nimport {\n type IEngine,\n getEngine,\n getRegisteredEvents,\n registerEvent,\n unregisterEvent,\n getKeyTarget,\n setKeyTarget,\n} from \"../element-data.js\";\n\nconst log = frameworkLoggers.events;\n\n// ============================================================================\n// Types\n// ============================================================================\n\ninterface EventHandlerOptions {\n /** Custom payload extractor for this event type */\n extractPayload?: (event: Event, element: HTMLElement) => Record<string, unknown>;\n /** Throttle events to max one per N milliseconds */\n throttleMs?: number;\n /** Prevent default behavior */\n preventDefault?: boolean;\n /** Use passive listener (for scroll, touch) */\n passive?: boolean;\n /** Key to listen for (keyboard events) */\n key?: string;\n}\n\n\n// ============================================================================\n// Utility Functions\n// ============================================================================\n\n/**\n * Convert Map or nested objects to plain objects\n */\nfunction toPlainObject(value: unknown): unknown {\n if (value instanceof Map) {\n const obj: Record<string, unknown> = {};\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, unknown> = {};\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\n/**\n * Extract action name and custom payload from an applicator value\n */\nfunction extractActionDetails(value: unknown): {\n actionName: string | null;\n payload: Record<string, unknown>;\n} {\n // String format: \"@actions.doSomething\" or \"@doSomething\"\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 // Object format: { \"0\": \"@actions.doSomething\", \"customKey\": \"value\" }\n if (value && typeof value === \"object\") {\n const plain = toPlainObject(value) as Record<string, unknown>;\n const payload: Record<string, unknown> = {};\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 // If the key is numeric (like \"1\", \"2\") and the value is an object,\n // merge the object's keys into the payload directly.\n // This handles: .onClick(\"@actions.foo\", { id: \"123\" })\n // where the second positional arg becomes \"1\": { id: \"123\" }\n if (/^\\d+$/.test(key) && val && typeof val === \"object\" && !Array.isArray(val)) {\n for (const [innerKey, innerVal] of Object.entries(val)) {\n payload[innerKey] = innerVal;\n }\n } else {\n payload[key] = val;\n }\n }\n }\n }\n\n return { actionName, payload };\n }\n\n return { actionName: null, payload: {} };\n}\n\n/**\n * Extract relevant data from a DOM event\n */\nfunction extractEventData(event: Event, element: HTMLElement): Record<string, unknown> {\n const data: Record<string, unknown> = {\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 element values\n if (element instanceof HTMLInputElement || element instanceof HTMLTextAreaElement) {\n data.value = element.value;\n }\n\n // Select element values\n if (element instanceof HTMLSelectElement) {\n data.value = element.value;\n data.selectedIndex = element.selectedIndex;\n }\n\n // Form data\n if (event.type === \"submit\" && element instanceof HTMLFormElement) {\n data.formData = new FormData(element);\n }\n\n return data;\n}\n\n\n/**\n * Capitalize first letter of a string\n */\nfunction capitalize(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\n// ============================================================================\n// Event Handler Factory\n// ============================================================================\n\n\n/**\n * Create an event handler applicator with common boilerplate\n */\nfunction createEventHandler(\n eventType: string,\n options: EventHandlerOptions = {}\n): ApplicatorHandler {\n return (element: HTMLElement, value: unknown) => {\n const { actionName, payload: customPayload } = extractActionDetails(value);\n\n if (!actionName) {\n log.warn(`${eventType} requires an action reference starting with @, got:`, value);\n return;\n }\n\n const disposables = getElementDisposables(element);\n\n // Track that we've registered this event type\n // The disposable stack handles cleanup automatically\n const eventKey = `${eventType}:${actionName}`;\n if (getRegisteredEvents(element).has(eventKey)) {\n // Already registered - skip to avoid duplicates\n // This can happen during re-renders\n return;\n }\n registerEvent(element, eventKey);\n\n // Create throttle state if needed\n let throttleTimer: Disposable | null = null;\n\n // Create the event listener\n const listener = (event: Event) => {\n // Handle throttling\n if (options.throttleMs && throttleTimer) {\n return;\n }\n\n if (options.throttleMs) {\n throttleTimer = disposableTimeout(() => {\n throttleTimer = null;\n }, options.throttleMs);\n }\n\n // Handle preventDefault\n if (options.preventDefault) {\n event.preventDefault();\n }\n\n // Build payload\n const payload =\n Object.keys(customPayload).length > 0\n ? { ...customPayload }\n : options.extractPayload\n ? options.extractPayload(event, element)\n : extractEventData(event, element);\n\n // Dispatch to engine\n const engine = getEngine(element);\n if (engine) {\n engine.dispatchAction(actionName, payload);\n }\n };\n\n // Register the listener using disposable pattern\n disposables.add(\n disposableListener(element, eventType, listener, {\n passive: options.passive,\n })\n );\n\n // Clean up registered events tracking on dispose\n disposables.addCallback(() => {\n unregisterEvent(element, eventKey);\n if (throttleTimer) {\n throttleTimer.dispose();\n }\n });\n };\n}\n\n/**\n * Create a keyboard event handler that filters by key\n */\nfunction createKeyHandler(defaultKey: string = \"Enter\"): ApplicatorHandler {\n return (element: HTMLElement, value: unknown) => {\n const { actionName, payload: customPayload } = extractActionDetails(value);\n\n if (!actionName) {\n log.warn(`onKey requires an action reference starting with @, got:`, value);\n return;\n }\n\n const disposables = getElementDisposables(element);\n\n const eventKey = `keydown:${actionName}:${defaultKey}`;\n if (getRegisteredEvents(element).has(eventKey)) {\n return;\n }\n registerEvent(element, eventKey);\n\n // Get target key from element data or use default\n const targetKey = getKeyTarget(element) || defaultKey;\n const keyToMatch = targetKey.toLowerCase() === \"return\" ? \"Enter\" : targetKey;\n\n const listener = (event: Event) => {\n const keyEvent = event as KeyboardEvent;\n if (keyEvent.key !== keyToMatch) {\n return;\n }\n\n event.preventDefault();\n\n const target = event.target as HTMLInputElement | HTMLTextAreaElement;\n const payload =\n Object.keys(customPayload).length > 0\n ? { ...customPayload }\n : {\n type: event.type,\n timestamp: Date.now(),\n key: keyEvent.key,\n code: keyEvent.code,\n value: target.value,\n input: target.value,\n ctrlKey: keyEvent.ctrlKey,\n shiftKey: keyEvent.shiftKey,\n altKey: keyEvent.altKey,\n metaKey: keyEvent.metaKey,\n };\n\n const engine = getEngine(element);\n if (engine) {\n engine.dispatchAction(actionName, payload);\n }\n };\n\n disposables.add(disposableListener(element, \"keydown\", listener));\n disposables.addCallback(() => {\n unregisterEvent(element, eventKey);\n });\n };\n}\n\n/**\n * Create a long-click/long-press handler\n */\nfunction createLongClickHandler(thresholdMs: number = 500): ApplicatorHandler {\n return (element: HTMLElement, value: unknown) => {\n const { actionName, payload: customPayload } = extractActionDetails(value);\n\n if (!actionName) {\n log.warn(`onLongClick requires an action reference starting with @, got:`, value);\n return;\n }\n\n const disposables = getElementDisposables(element);\n\n const eventKey = `longclick:${actionName}`;\n if (getRegisteredEvents(element).has(eventKey)) {\n return;\n }\n registerEvent(element, eventKey);\n\n let longClickTimer: Disposable | null = null;\n\n const downListener = (event: Event) => {\n const pointerEvent = event as PointerEvent;\n\n longClickTimer = disposableTimeout(() => {\n const payload =\n Object.keys(customPayload).length > 0\n ? { ...customPayload }\n : {\n type: \"longclick\",\n timestamp: Date.now(),\n clientX: pointerEvent.clientX,\n clientY: pointerEvent.clientY,\n };\n\n const engine = getEngine(element);\n if (engine) {\n engine.dispatchAction(actionName, payload);\n }\n\n longClickTimer = null;\n }, thresholdMs);\n };\n\n const cancelListener = () => {\n if (longClickTimer) {\n longClickTimer.dispose();\n longClickTimer = null;\n }\n };\n\n disposables.add(disposableListener(element, \"pointerdown\", downListener));\n disposables.add(disposableListener(element, \"pointerup\", cancelListener));\n disposables.add(disposableListener(element, \"pointerleave\", cancelListener));\n disposables.addCallback(() => {\n unregisterEvent(element, eventKey);\n cancelListener();\n });\n };\n}\n\n// ============================================================================\n// Payload Extractors\n// ============================================================================\n\nconst inputPayload = (event: Event, element: HTMLElement): Record<string, unknown> => {\n const target = element as HTMLInputElement | HTMLTextAreaElement;\n return {\n type: event.type,\n timestamp: Date.now(),\n value: target.value,\n input: target.value,\n };\n};\n\nconst scrollPayload = (_event: Event, element: HTMLElement): Record<string, unknown> => {\n const scrollTop = element.scrollTop;\n const scrollHeight = element.scrollHeight;\n const clientHeight = element.clientHeight;\n const scrollPercentage =\n scrollHeight - clientHeight > 0\n ? (scrollTop / (scrollHeight - clientHeight)) * 100\n : 0;\n\n const nearBottom =\n scrollHeight - scrollTop - clientHeight < 100 || scrollPercentage > 90;\n\n return {\n type: \"scroll\",\n timestamp: Date.now(),\n scrollTop,\n scrollLeft: element.scrollLeft,\n scrollHeight,\n scrollWidth: element.scrollWidth,\n clientHeight,\n clientWidth: element.clientWidth,\n scrollPercentage: Math.round(scrollPercentage),\n nearBottom,\n atBottom: scrollHeight - scrollTop === clientHeight,\n atTop: scrollTop === 0,\n };\n};\n\nconst focusPayload = (event: Event, element: HTMLElement): Record<string, unknown> => ({\n type: event.type,\n timestamp: Date.now(),\n value: (element as HTMLInputElement).value ?? undefined,\n});\n\nconst mousePayload = (event: Event, _element: HTMLElement): Record<string, unknown> => {\n const mouseEvent = event as MouseEvent;\n return {\n type: event.type,\n timestamp: Date.now(),\n clientX: mouseEvent.clientX,\n clientY: mouseEvent.clientY,\n };\n};\n\n// ============================================================================\n// Event Handlers Export\n// ============================================================================\n\nexport const eventHandlers: Record<string, ApplicatorHandler> = {\n // Basic click/press\n onClick: createEventHandler(\"click\"),\n onPress: createEventHandler(\"click\"), // Alias for mobile-style naming\n\n // Form events\n onChange: createEventHandler(\"change\"),\n onSubmit: createEventHandler(\"submit\", { preventDefault: true }),\n onInput: createEventHandler(\"input\", { extractPayload: inputPayload }),\n\n // Keyboard events\n onKey: createKeyHandler(\"Enter\"),\n \"onKey.key\": (element: HTMLElement, value: unknown) => {\n // Store the target key for the action handler to use\n setKeyTarget(element, String(value));\n },\n \"onKey.action\": createKeyHandler(\"Enter\"),\n\n // Scroll (throttled)\n onScroll: createEventHandler(\"scroll\", {\n throttleMs: 100,\n passive: true,\n extractPayload: scrollPayload,\n }),\n\n // Long click/press\n onLongClick: createLongClickHandler(500),\n\n // Focus events\n onFocus: createEventHandler(\"focus\", { extractPayload: focusPayload }),\n onBlur: createEventHandler(\"blur\", { extractPayload: focusPayload }),\n\n // Mouse hover events\n onMouseEnter: createEventHandler(\"mouseenter\", { extractPayload: mousePayload }),\n onMouseLeave: createEventHandler(\"mouseleave\", { extractPayload: mousePayload }),\n};\n"
|
|
7
|
+
],
|
|
8
|
+
"mappings": "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",
|
|
9
|
+
"debugId": "F0888255282088F164756E2164756E21",
|
|
10
|
+
"names": []
|
|
11
|
+
}
|