@geometra/core 0.2.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/README.md +42 -0
  2. package/dist/a11y.d.ts +19 -0
  3. package/dist/a11y.d.ts.map +1 -0
  4. package/dist/a11y.js +78 -0
  5. package/dist/a11y.js.map +1 -0
  6. package/dist/animation.d.ts +29 -0
  7. package/dist/animation.d.ts.map +1 -0
  8. package/dist/animation.js +102 -0
  9. package/dist/animation.js.map +1 -0
  10. package/dist/app.d.ts +17 -2
  11. package/dist/app.d.ts.map +1 -1
  12. package/dist/app.js +41 -9
  13. package/dist/app.js.map +1 -1
  14. package/dist/elements.d.ts +10 -1
  15. package/dist/elements.d.ts.map +1 -1
  16. package/dist/elements.js +18 -1
  17. package/dist/elements.js.map +1 -1
  18. package/dist/focus.d.ts +19 -0
  19. package/dist/focus.d.ts.map +1 -0
  20. package/dist/focus.js +61 -0
  21. package/dist/focus.js.map +1 -0
  22. package/dist/fonts.d.ts +14 -0
  23. package/dist/fonts.d.ts.map +1 -0
  24. package/dist/fonts.js +67 -0
  25. package/dist/fonts.js.map +1 -0
  26. package/dist/hit-test.d.ts +13 -2
  27. package/dist/hit-test.d.ts.map +1 -1
  28. package/dist/hit-test.js +74 -7
  29. package/dist/hit-test.js.map +1 -1
  30. package/dist/index.d.ts +16 -3
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +15 -2
  33. package/dist/index.js.map +1 -1
  34. package/dist/keyboard.d.ts +10 -0
  35. package/dist/keyboard.d.ts.map +1 -0
  36. package/dist/keyboard.js +49 -0
  37. package/dist/keyboard.js.map +1 -0
  38. package/dist/selection.d.ts.map +1 -1
  39. package/dist/selection.js +3 -1
  40. package/dist/selection.js.map +1 -1
  41. package/dist/seo.d.ts.map +1 -1
  42. package/dist/seo.js +5 -0
  43. package/dist/seo.js.map +1 -1
  44. package/dist/text-input-history.d.ts +15 -0
  45. package/dist/text-input-history.d.ts.map +1 -0
  46. package/dist/text-input-history.js +62 -0
  47. package/dist/text-input-history.js.map +1 -0
  48. package/dist/text-input.d.ts +42 -0
  49. package/dist/text-input.d.ts.map +1 -0
  50. package/dist/text-input.js +249 -0
  51. package/dist/text-input.js.map +1 -0
  52. package/dist/tree.d.ts.map +1 -1
  53. package/dist/tree.js +9 -3
  54. package/dist/tree.js.map +1 -1
  55. package/dist/types.d.ts +65 -2
  56. package/dist/types.d.ts.map +1 -1
  57. package/package.json +1 -1
@@ -0,0 +1,249 @@
1
+ function clamp(n, min, max) {
2
+ return Math.min(max, Math.max(min, n));
3
+ }
4
+ function normalizeSelection(selection) {
5
+ const { anchorNode, anchorOffset, focusNode, focusOffset, } = selection;
6
+ if (anchorNode < focusNode ||
7
+ (anchorNode === focusNode && anchorOffset <= focusOffset)) {
8
+ return selection;
9
+ }
10
+ return {
11
+ anchorNode: focusNode,
12
+ anchorOffset: focusOffset,
13
+ focusNode: anchorNode,
14
+ focusOffset: anchorOffset,
15
+ };
16
+ }
17
+ function clampSelection(nodes, selection) {
18
+ if (nodes.length === 0) {
19
+ return { anchorNode: 0, anchorOffset: 0, focusNode: 0, focusOffset: 0 };
20
+ }
21
+ const maxNode = nodes.length - 1;
22
+ const aNode = clamp(selection.anchorNode, 0, maxNode);
23
+ const fNode = clamp(selection.focusNode, 0, maxNode);
24
+ const aOffset = clamp(selection.anchorOffset, 0, nodes[aNode].length);
25
+ const fOffset = clamp(selection.focusOffset, 0, nodes[fNode].length);
26
+ return { anchorNode: aNode, anchorOffset: aOffset, focusNode: fNode, focusOffset: fOffset };
27
+ }
28
+ /** True when selection is a collapsed caret. */
29
+ export function isCollapsedSelection(selection) {
30
+ return (selection.anchorNode === selection.focusNode &&
31
+ selection.anchorOffset === selection.focusOffset);
32
+ }
33
+ /** Extract selected text from editable nodes. */
34
+ export function getInputSelectionText(nodes, selection) {
35
+ if (nodes.length === 0)
36
+ return '';
37
+ const s = normalizeSelection(clampSelection(nodes, selection));
38
+ const parts = [];
39
+ for (let i = s.anchorNode; i <= s.focusNode; i++) {
40
+ const text = nodes[i];
41
+ if (i === s.anchorNode && i === s.focusNode) {
42
+ parts.push(text.slice(s.anchorOffset, s.focusOffset));
43
+ }
44
+ else if (i === s.anchorNode) {
45
+ parts.push(text.slice(s.anchorOffset));
46
+ }
47
+ else if (i === s.focusNode) {
48
+ parts.push(text.slice(0, s.focusOffset));
49
+ }
50
+ else {
51
+ parts.push(text);
52
+ }
53
+ }
54
+ return parts.join('\n');
55
+ }
56
+ /**
57
+ * Replace current selection with inserted text.
58
+ * For multi-line insertion, newlines create additional nodes.
59
+ */
60
+ export function replaceInputSelection(nodes, selection, insertedText) {
61
+ const safeNodes = nodes.length > 0 ? [...nodes] : [''];
62
+ const s = normalizeSelection(clampSelection(safeNodes, selection));
63
+ const startText = safeNodes[s.anchorNode];
64
+ const endText = safeNodes[s.focusNode];
65
+ const before = startText.slice(0, s.anchorOffset);
66
+ const after = endText.slice(s.focusOffset);
67
+ const insertedParts = insertedText.split('\n');
68
+ const replacement = insertedParts.length === 1
69
+ ? [`${before}${insertedParts[0]}${after}`]
70
+ : [
71
+ `${before}${insertedParts[0]}`,
72
+ ...insertedParts.slice(1, insertedParts.length - 1),
73
+ `${insertedParts[insertedParts.length - 1]}${after}`,
74
+ ];
75
+ safeNodes.splice(s.anchorNode, s.focusNode - s.anchorNode + 1, ...replacement);
76
+ const caretNode = s.anchorNode + replacement.length - 1;
77
+ const caretOffset = replacement[replacement.length - 1].length - after.length;
78
+ return {
79
+ nodes: safeNodes,
80
+ selection: {
81
+ anchorNode: caretNode,
82
+ anchorOffset: caretOffset,
83
+ focusNode: caretNode,
84
+ focusOffset: caretOffset,
85
+ },
86
+ };
87
+ }
88
+ /** Insert text at current selection/caret. */
89
+ export function insertInputText(state, text) {
90
+ return replaceInputSelection(state.nodes, state.selection, text);
91
+ }
92
+ /** Backspace behavior across node boundaries and active selections. */
93
+ export function backspaceInput(state) {
94
+ const nodes = state.nodes.length > 0 ? state.nodes : [''];
95
+ const selection = clampSelection(nodes, state.selection);
96
+ if (!isCollapsedSelection(selection)) {
97
+ return replaceInputSelection(nodes, selection, '');
98
+ }
99
+ if (selection.anchorOffset > 0) {
100
+ return replaceInputSelection(nodes, {
101
+ anchorNode: selection.anchorNode,
102
+ anchorOffset: selection.anchorOffset - 1,
103
+ focusNode: selection.focusNode,
104
+ focusOffset: selection.focusOffset,
105
+ }, '');
106
+ }
107
+ if (selection.anchorNode === 0)
108
+ return { nodes: [...nodes], selection };
109
+ const prevNode = selection.anchorNode - 1;
110
+ const merged = [...nodes];
111
+ const prevText = merged[prevNode];
112
+ const currText = merged[selection.anchorNode];
113
+ merged.splice(prevNode, 2, `${prevText}${currText}`);
114
+ const caretOffset = prevText.length;
115
+ return {
116
+ nodes: merged,
117
+ selection: {
118
+ anchorNode: prevNode,
119
+ anchorOffset: caretOffset,
120
+ focusNode: prevNode,
121
+ focusOffset: caretOffset,
122
+ },
123
+ };
124
+ }
125
+ /** Delete-forward behavior across node boundaries and active selections. */
126
+ export function deleteInput(state) {
127
+ const nodes = state.nodes.length > 0 ? state.nodes : [''];
128
+ const selection = clampSelection(nodes, state.selection);
129
+ if (!isCollapsedSelection(selection)) {
130
+ return replaceInputSelection(nodes, selection, '');
131
+ }
132
+ const node = nodes[selection.anchorNode];
133
+ if (selection.anchorOffset < node.length) {
134
+ return replaceInputSelection(nodes, {
135
+ anchorNode: selection.anchorNode,
136
+ anchorOffset: selection.anchorOffset,
137
+ focusNode: selection.focusNode,
138
+ focusOffset: selection.focusOffset + 1,
139
+ }, '');
140
+ }
141
+ if (selection.anchorNode >= nodes.length - 1)
142
+ return { nodes: [...nodes], selection };
143
+ const merged = [...nodes];
144
+ const currText = merged[selection.anchorNode];
145
+ const nextText = merged[selection.anchorNode + 1];
146
+ merged.splice(selection.anchorNode, 2, `${currText}${nextText}`);
147
+ return {
148
+ nodes: merged,
149
+ selection: {
150
+ anchorNode: selection.anchorNode,
151
+ anchorOffset: node.length,
152
+ focusNode: selection.anchorNode,
153
+ focusOffset: node.length,
154
+ },
155
+ };
156
+ }
157
+ /** Move caret by one character; optionally extend existing selection. */
158
+ export function moveInputCaret(state, direction, extendSelection = false) {
159
+ const nodes = state.nodes.length > 0 ? state.nodes : [''];
160
+ const selection = clampSelection(nodes, state.selection);
161
+ const collapsed = isCollapsedSelection(selection);
162
+ let nodeIndex = extendSelection ? selection.focusNode : selection.anchorNode;
163
+ let offset = extendSelection ? selection.focusOffset : selection.anchorOffset;
164
+ if (!collapsed && !extendSelection) {
165
+ const s = normalizeSelection(selection);
166
+ if (direction === 'left') {
167
+ nodeIndex = s.anchorNode;
168
+ offset = s.anchorOffset;
169
+ }
170
+ else {
171
+ nodeIndex = s.focusNode;
172
+ offset = s.focusOffset;
173
+ }
174
+ }
175
+ else if (direction === 'left') {
176
+ if (offset > 0) {
177
+ offset--;
178
+ }
179
+ else if (nodeIndex > 0) {
180
+ nodeIndex--;
181
+ offset = nodes[nodeIndex].length;
182
+ }
183
+ }
184
+ else {
185
+ const text = nodes[nodeIndex];
186
+ if (offset < text.length) {
187
+ offset++;
188
+ }
189
+ else if (nodeIndex < nodes.length - 1) {
190
+ nodeIndex++;
191
+ offset = 0;
192
+ }
193
+ }
194
+ const nextSelection = extendSelection
195
+ ? {
196
+ anchorNode: selection.anchorNode,
197
+ anchorOffset: selection.anchorOffset,
198
+ focusNode: nodeIndex,
199
+ focusOffset: offset,
200
+ }
201
+ : {
202
+ anchorNode: nodeIndex,
203
+ anchorOffset: offset,
204
+ focusNode: nodeIndex,
205
+ focusOffset: offset,
206
+ };
207
+ return { nodes: [...nodes], selection: nextSelection };
208
+ }
209
+ /**
210
+ * Compute caret geometry from measured text lines for a collapsed selection.
211
+ * Returns null when selection is expanded or text metrics are unavailable.
212
+ */
213
+ export function getInputCaretGeometry(textNodes, selection) {
214
+ if (!isCollapsedSelection(selection))
215
+ return null;
216
+ const node = textNodes[selection.focusNode];
217
+ if (!node || node.lines.length === 0)
218
+ return null;
219
+ const maxOffset = node.element.props.text.length;
220
+ const targetOffset = clamp(selection.focusOffset, 0, maxOffset);
221
+ let traversed = 0;
222
+ for (const line of node.lines) {
223
+ const lineEnd = traversed + line.text.length;
224
+ const isLastLine = line === node.lines[node.lines.length - 1];
225
+ if (targetOffset <= lineEnd || isLastLine) {
226
+ const local = Math.max(0, Math.min(targetOffset - traversed, line.text.length));
227
+ let x = line.x;
228
+ if (local > 0 && line.charOffsets.length > 0) {
229
+ if (local < line.charOffsets.length) {
230
+ x += line.charOffsets[local] ?? 0;
231
+ }
232
+ else {
233
+ const lastIndex = line.charOffsets.length - 1;
234
+ x += (line.charOffsets[lastIndex] ?? 0) + (line.charWidths[lastIndex] ?? 0);
235
+ }
236
+ }
237
+ return {
238
+ x,
239
+ y: line.y,
240
+ height: node.element.props.lineHeight,
241
+ nodeIndex: node.index,
242
+ offset: targetOffset,
243
+ };
244
+ }
245
+ traversed = lineEnd;
246
+ }
247
+ return null;
248
+ }
249
+ //# sourceMappingURL=text-input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-input.js","sourceRoot":"","sources":["../src/text-input.ts"],"names":[],"mappings":"AAuBA,SAAS,KAAK,CAAC,CAAS,EAAE,GAAW,EAAE,GAAW;IAChD,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAA;AACxC,CAAC;AAED,SAAS,kBAAkB,CAAC,SAAyB;IACnD,MAAM,EACJ,UAAU,EACV,YAAY,EACZ,SAAS,EACT,WAAW,GACZ,GAAG,SAAS,CAAA;IACb,IACE,UAAU,GAAG,SAAS;QACtB,CAAC,UAAU,KAAK,SAAS,IAAI,YAAY,IAAI,WAAW,CAAC,EACzD,CAAC;QACD,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,OAAO;QACL,UAAU,EAAE,SAAS;QACrB,YAAY,EAAE,WAAW;QACzB,SAAS,EAAE,UAAU;QACrB,WAAW,EAAE,YAAY;KAC1B,CAAA;AACH,CAAC;AAED,SAAS,cAAc,CAAC,KAAe,EAAE,SAAyB;IAChE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAA;IACzE,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAA;IAChC,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC,EAAE,OAAO,CAAC,CAAA;IACrD,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,EAAE,OAAO,CAAC,CAAA;IACpD,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC,EAAE,KAAK,CAAC,KAAK,CAAE,CAAC,MAAM,CAAC,CAAA;IACtE,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,EAAE,KAAK,CAAC,KAAK,CAAE,CAAC,MAAM,CAAC,CAAA;IACrE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,CAAA;AAC7F,CAAC;AAED,gDAAgD;AAChD,MAAM,UAAU,oBAAoB,CAAC,SAAyB;IAC5D,OAAO,CACL,SAAS,CAAC,UAAU,KAAK,SAAS,CAAC,SAAS;QAC5C,SAAS,CAAC,YAAY,KAAK,SAAS,CAAC,WAAW,CACjD,CAAA;AACH,CAAC;AAED,iDAAiD;AACjD,MAAM,UAAU,qBAAqB,CAAC,KAAe,EAAE,SAAyB;IAC9E,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAA;IACjC,MAAM,CAAC,GAAG,kBAAkB,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAA;IAC9D,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;QACjD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAA;QACtB,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,CAAC;YAC5C,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAA;QACvD,CAAC;aAAM,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,CAAC;YAC9B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAA;QACxC,CAAC;aAAM,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,CAAC;YAC7B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAA;QAC1C,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAClB,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CACnC,KAAe,EACf,SAAyB,EACzB,YAAoB;IAEpB,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;IACtD,MAAM,CAAC,GAAG,kBAAkB,CAAC,cAAc,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAA;IAClE,MAAM,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,UAAU,CAAE,CAAA;IAC1C,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAE,CAAA;IAEvC,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,CAAA;IACjD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,CAAA;IAC1C,MAAM,aAAa,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAE9C,MAAM,WAAW,GACf,aAAa,CAAC,MAAM,KAAK,CAAC;QACxB,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,aAAa,CAAC,CAAC,CAAE,GAAG,KAAK,EAAE,CAAC;QAC3C,CAAC,CAAC;YACE,GAAG,MAAM,GAAG,aAAa,CAAC,CAAC,CAAE,EAAE;YAC/B,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;YACnD,GAAG,aAAa,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAE,GAAG,KAAK,EAAE;SACtD,CAAA;IAEP,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,UAAU,GAAG,CAAC,EAAE,GAAG,WAAW,CAAC,CAAA;IAE9E,MAAM,SAAS,GAAG,CAAC,CAAC,UAAU,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAA;IACvD,MAAM,WAAW,GAAG,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAA;IAC9E,OAAO;QACL,KAAK,EAAE,SAAS;QAChB,SAAS,EAAE;YACT,UAAU,EAAE,SAAS;YACrB,YAAY,EAAE,WAAW;YACzB,SAAS,EAAE,SAAS;YACpB,WAAW,EAAE,WAAW;SACzB;KACF,CAAA;AACH,CAAC;AAED,8CAA8C;AAC9C,MAAM,UAAU,eAAe,CAC7B,KAAqB,EACrB,IAAY;IAEZ,OAAO,qBAAqB,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;AAClE,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,cAAc,CAAC,KAAqB;IAClD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;IACzD,MAAM,SAAS,GAAG,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,CAAA;IACxD,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,EAAE,CAAC;QACrC,OAAO,qBAAqB,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,CAAC,CAAA;IACpD,CAAC;IAED,IAAI,SAAS,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC;QAC/B,OAAO,qBAAqB,CAC1B,KAAK,EACL;YACE,UAAU,EAAE,SAAS,CAAC,UAAU;YAChC,YAAY,EAAE,SAAS,CAAC,YAAY,GAAG,CAAC;YACxC,SAAS,EAAE,SAAS,CAAC,SAAS;YAC9B,WAAW,EAAE,SAAS,CAAC,WAAW;SACnC,EACD,EAAE,CACH,CAAA;IACH,CAAC;IAED,IAAI,SAAS,CAAC,UAAU,KAAK,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,SAAS,EAAE,CAAA;IAEvE,MAAM,QAAQ,GAAG,SAAS,CAAC,UAAU,GAAG,CAAC,CAAA;IACzC,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,CAAA;IACzB,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAE,CAAA;IAClC,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,UAAU,CAAE,CAAA;IAC9C,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,GAAG,QAAQ,GAAG,QAAQ,EAAE,CAAC,CAAA;IACpD,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAA;IACnC,OAAO;QACL,KAAK,EAAE,MAAM;QACb,SAAS,EAAE;YACT,UAAU,EAAE,QAAQ;YACpB,YAAY,EAAE,WAAW;YACzB,SAAS,EAAE,QAAQ;YACnB,WAAW,EAAE,WAAW;SACzB;KACF,CAAA;AACH,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,WAAW,CAAC,KAAqB;IAC/C,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;IACzD,MAAM,SAAS,GAAG,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,CAAA;IACxD,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,EAAE,CAAC;QACrC,OAAO,qBAAqB,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,CAAC,CAAA;IACpD,CAAC;IAED,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,UAAU,CAAE,CAAA;IACzC,IAAI,SAAS,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACzC,OAAO,qBAAqB,CAC1B,KAAK,EACL;YACE,UAAU,EAAE,SAAS,CAAC,UAAU;YAChC,YAAY,EAAE,SAAS,CAAC,YAAY;YACpC,SAAS,EAAE,SAAS,CAAC,SAAS;YAC9B,WAAW,EAAE,SAAS,CAAC,WAAW,GAAG,CAAC;SACvC,EACD,EAAE,CACH,CAAA;IACH,CAAC;IAED,IAAI,SAAS,CAAC,UAAU,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,SAAS,EAAE,CAAA;IAErF,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,CAAA;IACzB,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,UAAU,CAAE,CAAA;IAC9C,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,UAAU,GAAG,CAAC,CAAE,CAAA;IAClD,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC,EAAE,GAAG,QAAQ,GAAG,QAAQ,EAAE,CAAC,CAAA;IAChE,OAAO;QACL,KAAK,EAAE,MAAM;QACb,SAAS,EAAE;YACT,UAAU,EAAE,SAAS,CAAC,UAAU;YAChC,YAAY,EAAE,IAAI,CAAC,MAAM;YACzB,SAAS,EAAE,SAAS,CAAC,UAAU;YAC/B,WAAW,EAAE,IAAI,CAAC,MAAM;SACzB;KACF,CAAA;AACH,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,cAAc,CAC5B,KAAqB,EACrB,SAA2B,EAC3B,eAAe,GAAG,KAAK;IAEvB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;IACzD,MAAM,SAAS,GAAG,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,CAAA;IACxD,MAAM,SAAS,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAA;IAEjD,IAAI,SAAS,GAAG,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,UAAU,CAAA;IAC5E,IAAI,MAAM,GAAG,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,YAAY,CAAA;IAE7E,IAAI,CAAC,SAAS,IAAI,CAAC,eAAe,EAAE,CAAC;QACnC,MAAM,CAAC,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAA;QACvC,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;YACzB,SAAS,GAAG,CAAC,CAAC,UAAU,CAAA;YACxB,MAAM,GAAG,CAAC,CAAC,YAAY,CAAA;QACzB,CAAC;aAAM,CAAC;YACN,SAAS,GAAG,CAAC,CAAC,SAAS,CAAA;YACvB,MAAM,GAAG,CAAC,CAAC,WAAW,CAAA;QACxB,CAAC;IACH,CAAC;SAAM,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;QAChC,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;YACf,MAAM,EAAE,CAAA;QACV,CAAC;aAAM,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;YACzB,SAAS,EAAE,CAAA;YACX,MAAM,GAAG,KAAK,CAAC,SAAS,CAAE,CAAC,MAAM,CAAA;QACnC,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAE,CAAA;QAC9B,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YACzB,MAAM,EAAE,CAAA;QACV,CAAC;aAAM,IAAI,SAAS,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxC,SAAS,EAAE,CAAA;YACX,MAAM,GAAG,CAAC,CAAA;QACZ,CAAC;IACH,CAAC;IAED,MAAM,aAAa,GAAG,eAAe;QACnC,CAAC,CAAC;YACE,UAAU,EAAE,SAAS,CAAC,UAAU;YAChC,YAAY,EAAE,SAAS,CAAC,YAAY;YACpC,SAAS,EAAE,SAAS;YACpB,WAAW,EAAE,MAAM;SACpB;QACH,CAAC,CAAC;YACE,UAAU,EAAE,SAAS;YACrB,YAAY,EAAE,MAAM;YACpB,SAAS,EAAE,SAAS;YACpB,WAAW,EAAE,MAAM;SACpB,CAAA;IAEL,OAAO,EAAE,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,CAAA;AACxD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CACnC,SAAyB,EACzB,SAAyB;IAEzB,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAA;IACjD,MAAM,IAAI,GAAG,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA;IAC3C,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IAEjD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAA;IAChD,MAAM,YAAY,GAAG,KAAK,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,EAAE,SAAS,CAAC,CAAA;IAC/D,IAAI,SAAS,GAAG,CAAC,CAAA;IAEjB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAA;QAC5C,MAAM,UAAU,GAAG,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;QAC7D,IAAI,YAAY,IAAI,OAAO,IAAI,UAAU,EAAE,CAAC;YAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;YAC/E,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAA;YACd,IAAI,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7C,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;oBACpC,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;gBACnC,CAAC;qBAAM,CAAC;oBACN,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAA;oBAC7C,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAA;gBAC7E,CAAC;YACH,CAAC;YACD,OAAO;gBACL,CAAC;gBACD,CAAC,EAAE,IAAI,CAAC,CAAC;gBACT,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU;gBACrC,SAAS,EAAE,IAAI,CAAC,KAAK;gBACrB,MAAM,EAAE,YAAY;aACrB,CAAA;QACH,CAAC;QACD,SAAS,GAAG,OAAO,CAAA;IACrB,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"tree.d.ts","sourceRoot":"","sources":["../src/tree.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACzC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAE3C,sFAAsF;AACtF,wBAAgB,YAAY,CAAC,OAAO,EAAE,SAAS,GAAG,UAAU,CAW3D"}
1
+ {"version":3,"file":"tree.d.ts","sourceRoot":"","sources":["../src/tree.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACzC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAe3C,sFAAsF;AACtF,wBAAgB,YAAY,CAAC,OAAO,EAAE,SAAS,GAAG,UAAU,CAW3D"}
package/dist/tree.js CHANGED
@@ -1,10 +1,16 @@
1
+ /** Style/visual props that must be stripped before passing to Yoga layout. */
2
+ function stripStyleProps(props) {
3
+ const { backgroundColor: _bg, color: _c, borderColor: _bc, borderRadius: _br, borderWidth: _bw, opacity: _o, cursor: _cur, zIndex: _z, overflow: _ov, scrollX: _sx, scrollY: _sy, boxShadow: _bs, gradient: _g, selectable: _sel,
4
+ // Image-only props
5
+ src: _src, alt: _alt, objectFit: _of, ...layoutProps } = props;
6
+ return layoutProps;
7
+ }
1
8
  /** Convert a UIElement tree into a textura LayoutNode tree for layout computation. */
2
9
  export function toLayoutTree(element) {
3
- if (element.kind === 'text') {
4
- const { backgroundColor: _bg, color: _c, borderColor: _bc, borderRadius: _br, opacity: _o, selectable: _s, ...layoutProps } = element.props;
10
+ const layoutProps = stripStyleProps(element.props);
11
+ if (element.kind === 'text' || element.kind === 'image') {
5
12
  return layoutProps;
6
13
  }
7
- const { backgroundColor: _bg, color: _c, borderColor: _bc, borderRadius: _br, opacity: _o, ...layoutProps } = element.props;
8
14
  return {
9
15
  ...layoutProps,
10
16
  children: element.children.map(toLayoutTree),
package/dist/tree.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"tree.js","sourceRoot":"","sources":["../src/tree.ts"],"names":[],"mappings":"AAGA,sFAAsF;AACtF,MAAM,UAAU,YAAY,CAAC,OAAkB;IAC7C,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC5B,MAAM,EAAE,eAAe,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,GAAG,WAAW,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAC3I,OAAO,WAAW,CAAA;IACpB,CAAC;IAED,MAAM,EAAE,eAAe,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,WAAW,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;IAC3H,OAAO;QACL,GAAG,WAAW;QACd,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC;KAC7C,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"tree.js","sourceRoot":"","sources":["../src/tree.ts"],"names":[],"mappings":"AAGA,8EAA8E;AAC9E,SAAS,eAAe,CAAC,KAA8B;IACrD,MAAM,EACJ,eAAe,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,EACtF,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAChF,SAAS,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI;IAC9C,mBAAmB;IACnB,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EACpC,GAAG,WAAW,EACf,GAAG,KAAK,CAAA;IACT,OAAO,WAAW,CAAA;AACpB,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,YAAY,CAAC,OAAkB;IAC7C,MAAM,WAAW,GAAG,eAAe,CAAC,OAAO,CAAC,KAAgC,CAAC,CAAA;IAE7E,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QACxD,OAAO,WAAyB,CAAA;IAClC,CAAC;IAED,OAAO;QACL,GAAG,WAAW;QACd,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC;KAC/B,CAAA;AACjB,CAAC"}
package/dist/types.d.ts CHANGED
@@ -5,7 +5,35 @@ export interface StyleProps {
5
5
  color?: string;
6
6
  borderColor?: string;
7
7
  borderRadius?: number;
8
+ borderWidth?: number;
8
9
  opacity?: number;
10
+ /** Cursor to show when hovering this element. */
11
+ cursor?: 'default' | 'pointer' | 'grab' | 'grabbing' | 'text' | 'not-allowed' | 'crosshair' | 'move';
12
+ /** Z-index for paint ordering among siblings. Higher values paint on top. */
13
+ zIndex?: number;
14
+ /** Overflow behavior for children. */
15
+ overflow?: 'visible' | 'hidden' | 'scroll';
16
+ /** Horizontal scroll offset (used with overflow: 'scroll'). */
17
+ scrollX?: number;
18
+ /** Vertical scroll offset (used with overflow: 'scroll'). */
19
+ scrollY?: number;
20
+ /** Box shadow. */
21
+ boxShadow?: {
22
+ offsetX: number;
23
+ offsetY: number;
24
+ blur: number;
25
+ color: string;
26
+ };
27
+ /** Linear gradient background (overrides backgroundColor when set). */
28
+ gradient?: {
29
+ type: 'linear';
30
+ /** Angle in degrees. Default: 180 (top to bottom). */
31
+ angle?: number;
32
+ stops: Array<{
33
+ offset: number;
34
+ color: string;
35
+ }>;
36
+ };
9
37
  }
10
38
  /** Semantic properties for SEO and accessibility. */
11
39
  export interface SemanticProps {
@@ -26,7 +54,7 @@ export interface TextElement {
26
54
  font: string;
27
55
  lineHeight: number;
28
56
  whiteSpace?: 'normal' | 'pre-wrap';
29
- /** Enable text selection on this element. */
57
+ /** Text is selectable by default. Set to false to disable. */
30
58
  selectable?: boolean;
31
59
  };
32
60
  key?: string;
@@ -44,14 +72,34 @@ export interface BoxElement {
44
72
  /** Semantic hints for SEO/a11y. */
45
73
  semantic?: SemanticProps;
46
74
  }
75
+ /** An image element in the component tree. */
76
+ export interface ImageElement {
77
+ kind: 'image';
78
+ props: FlexProps & StyleProps & {
79
+ src: string;
80
+ alt?: string;
81
+ objectFit?: 'fill' | 'contain' | 'cover';
82
+ };
83
+ key?: string;
84
+ semantic?: SemanticProps;
85
+ }
47
86
  /** Union of all element types. */
48
- export type UIElement = TextElement | BoxElement;
87
+ export type UIElement = TextElement | BoxElement | ImageElement;
49
88
  /** Supported event handlers on box elements. */
50
89
  export interface EventHandlers {
51
90
  onClick?: (e: HitEvent) => void;
52
91
  onPointerDown?: (e: HitEvent) => void;
53
92
  onPointerUp?: (e: HitEvent) => void;
54
93
  onPointerMove?: (e: HitEvent) => void;
94
+ onWheel?: (e: HitEvent & {
95
+ deltaX: number;
96
+ deltaY: number;
97
+ }) => void;
98
+ onKeyDown?: (e: KeyboardHitEvent) => void;
99
+ onKeyUp?: (e: KeyboardHitEvent) => void;
100
+ onCompositionStart?: (e: CompositionHitEvent) => void;
101
+ onCompositionUpdate?: (e: CompositionHitEvent) => void;
102
+ onCompositionEnd?: (e: CompositionHitEvent) => void;
55
103
  }
56
104
  /** Event delivered to handlers after hit-testing. */
57
105
  export interface HitEvent {
@@ -59,6 +107,21 @@ export interface HitEvent {
59
107
  y: number;
60
108
  target: ComputedLayout;
61
109
  }
110
+ /** Keyboard event delivered to the focused element. */
111
+ export interface KeyboardHitEvent {
112
+ key: string;
113
+ code: string;
114
+ shiftKey: boolean;
115
+ ctrlKey: boolean;
116
+ metaKey: boolean;
117
+ altKey: boolean;
118
+ target: ComputedLayout;
119
+ }
120
+ /** IME/composition event delivered to the focused element. */
121
+ export interface CompositionHitEvent {
122
+ data: string;
123
+ target: ComputedLayout;
124
+ }
62
125
  /** A component function receives props and returns a UIElement tree. */
63
126
  export type Component<P = Record<string, never>> = (props: P) => UIElement;
64
127
  /** Interface that all render backends implement. */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAExD,0DAA0D;AAC1D,MAAM,WAAW,UAAU;IACzB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,qDAAqD;AACrD,MAAM,WAAW,aAAa;IAC5B,kFAAkF;IAClF,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,4EAA4E;IAC5E,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,kDAAkD;IAClD,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,qCAAqC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,yCAAyC;AACzC,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,SAAS,GAAG,UAAU,GAAG;QAC9B,IAAI,EAAE,MAAM,CAAA;QACZ,IAAI,EAAE,MAAM,CAAA;QACZ,UAAU,EAAE,MAAM,CAAA;QAClB,UAAU,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAA;QAClC,6CAA6C;QAC7C,UAAU,CAAC,EAAE,OAAO,CAAA;KACrB,CAAA;IACD,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,mCAAmC;IACnC,QAAQ,CAAC,EAAE,aAAa,CAAA;CACzB;AAED,oDAAoD;AACpD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,KAAK,CAAA;IACX,KAAK,EAAE,SAAS,GAAG,UAAU,CAAA;IAC7B,QAAQ,EAAE,SAAS,EAAE,CAAA;IACrB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,aAAa,CAAA;IACxB,mCAAmC;IACnC,QAAQ,CAAC,EAAE,aAAa,CAAA;CACzB;AAED,kCAAkC;AAClC,MAAM,MAAM,SAAS,GAAG,WAAW,GAAG,UAAU,CAAA;AAEhD,gDAAgD;AAChD,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,KAAK,IAAI,CAAA;IAC/B,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,KAAK,IAAI,CAAA;IACrC,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,KAAK,IAAI,CAAA;IACnC,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,KAAK,IAAI,CAAA;CACtC;AAED,qDAAqD;AACrD,MAAM,WAAW,QAAQ;IACvB,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,MAAM,EAAE,cAAc,CAAA;CACvB;AAED,wEAAwE;AACxE,MAAM,MAAM,SAAS,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,SAAS,CAAA;AAE1E,oDAAoD;AACpD,MAAM,WAAW,QAAQ;IACvB,sCAAsC;IACtC,MAAM,CAAC,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI,CAAA;IACrD,mCAAmC;IACnC,OAAO,IAAI,IAAI,CAAA;CAChB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@geometra/core",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "description": "DOM-free UI framework core: components, signals, reconciler",
5
5
  "license": "MIT",
6
6
  "type": "module",