@jalvin/ui 2.0.45 → 2.0.47
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/__tests__/annotated-string.test.d.ts +2 -0
- package/dist/__tests__/annotated-string.test.d.ts.map +1 -0
- package/dist/__tests__/annotated-string.test.js +297 -0
- package/dist/__tests__/annotated-string.test.js.map +1 -0
- package/dist/__tests__/children-signature.test.d.ts +2 -0
- package/dist/__tests__/children-signature.test.d.ts.map +1 -0
- package/dist/__tests__/children-signature.test.js +106 -0
- package/dist/__tests__/children-signature.test.js.map +1 -0
- package/dist/__tests__/interaction.test.d.ts +2 -0
- package/dist/__tests__/interaction.test.d.ts.map +1 -0
- package/dist/__tests__/interaction.test.js +309 -0
- package/dist/__tests__/interaction.test.js.map +1 -0
- package/dist/__tests__/modifier.test.d.ts +2 -0
- package/dist/__tests__/modifier.test.d.ts.map +1 -0
- package/dist/__tests__/modifier.test.js +189 -0
- package/dist/__tests__/modifier.test.js.map +1 -0
- package/dist/__tests__/setup.d.ts +2 -0
- package/dist/__tests__/setup.d.ts.map +1 -0
- package/dist/__tests__/setup.js +2 -0
- package/dist/__tests__/setup.js.map +1 -0
- package/dist/__tests__/text.test.d.ts +2 -0
- package/dist/__tests__/text.test.d.ts.map +1 -0
- package/dist/__tests__/text.test.js +68 -0
- package/dist/__tests__/text.test.js.map +1 -0
- package/dist/__tests__/windowsizeclass.test.d.ts +2 -0
- package/dist/__tests__/windowsizeclass.test.d.ts.map +1 -0
- package/dist/__tests__/windowsizeclass.test.js +132 -0
- package/dist/__tests__/windowsizeclass.test.js.map +1 -0
- package/dist/canvas.d.ts +2 -1
- package/dist/canvas.d.ts.map +1 -1
- package/dist/canvas.js +51 -28
- package/dist/canvas.js.map +1 -1
- package/dist/image.d.ts +6 -4
- package/dist/image.d.ts.map +1 -1
- package/dist/image.js +22 -29
- package/dist/image.js.map +1 -1
- package/dist/layout.d.ts +7 -5
- package/dist/layout.d.ts.map +1 -1
- package/dist/layout.js +9 -3
- package/dist/layout.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text.test.js","sourceRoot":"","sources":["../../src/__tests__/text.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"windowsizeclass.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/windowsizeclass.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach, afterEach, vi } from "vitest";
|
|
2
|
+
import { calculateWindowSizeClass, render } from "@jalvin/runtime";
|
|
3
|
+
function setWindowSize(width, height) {
|
|
4
|
+
Object.defineProperty(window, "innerWidth", { writable: true, configurable: true, value: width });
|
|
5
|
+
Object.defineProperty(window, "innerHeight", { writable: true, configurable: true, value: height });
|
|
6
|
+
}
|
|
7
|
+
function fireResize() {
|
|
8
|
+
window.dispatchEvent(new Event("resize"));
|
|
9
|
+
}
|
|
10
|
+
/** Simple helper to test Jalvin functions in a reactive context. */
|
|
11
|
+
function renderJalvinHook(hook) {
|
|
12
|
+
let lastValue;
|
|
13
|
+
const container = document.createElement("div");
|
|
14
|
+
const update = () => {
|
|
15
|
+
render(() => {
|
|
16
|
+
lastValue = hook();
|
|
17
|
+
return document.createElement("div");
|
|
18
|
+
}, container);
|
|
19
|
+
};
|
|
20
|
+
update();
|
|
21
|
+
return {
|
|
22
|
+
get current() { return lastValue; }
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
describe("calculateWindowSizeClass", () => {
|
|
26
|
+
beforeEach(() => {
|
|
27
|
+
setWindowSize(1280, 800);
|
|
28
|
+
// Force reset the global state for testing if needed,
|
|
29
|
+
// but since it's global in ui.ts we just fire a resize.
|
|
30
|
+
fireResize();
|
|
31
|
+
});
|
|
32
|
+
afterEach(() => {
|
|
33
|
+
vi.restoreAllMocks();
|
|
34
|
+
});
|
|
35
|
+
// ── initial class from window size ─────────────────────────────────────────
|
|
36
|
+
it("returns Compact/Medium for a phone-sized window (360×640)", () => {
|
|
37
|
+
setWindowSize(360, 640);
|
|
38
|
+
fireResize();
|
|
39
|
+
const result = renderJalvinHook(() => calculateWindowSizeClass());
|
|
40
|
+
expect(result.current.widthSizeClass).toBe("Compact");
|
|
41
|
+
expect(result.current.heightSizeClass).toBe("Medium");
|
|
42
|
+
});
|
|
43
|
+
it("returns Medium/Compact for a landscape phone (667×375)", () => {
|
|
44
|
+
setWindowSize(667, 375);
|
|
45
|
+
fireResize();
|
|
46
|
+
const result = renderJalvinHook(() => calculateWindowSizeClass());
|
|
47
|
+
expect(result.current.widthSizeClass).toBe("Medium");
|
|
48
|
+
expect(result.current.heightSizeClass).toBe("Compact");
|
|
49
|
+
});
|
|
50
|
+
it("returns Medium/Expanded for a tablet-sized window (768×1024)", () => {
|
|
51
|
+
setWindowSize(768, 1024);
|
|
52
|
+
fireResize();
|
|
53
|
+
const result = renderJalvinHook(() => calculateWindowSizeClass());
|
|
54
|
+
expect(result.current.widthSizeClass).toBe("Medium");
|
|
55
|
+
expect(result.current.heightSizeClass).toBe("Expanded");
|
|
56
|
+
});
|
|
57
|
+
it("returns Expanded/Medium for a desktop window (1280×800)", () => {
|
|
58
|
+
setWindowSize(1280, 800);
|
|
59
|
+
fireResize();
|
|
60
|
+
const result = renderJalvinHook(() => calculateWindowSizeClass());
|
|
61
|
+
expect(result.current.widthSizeClass).toBe("Expanded");
|
|
62
|
+
expect(result.current.heightSizeClass).toBe("Medium");
|
|
63
|
+
});
|
|
64
|
+
// ── class boundaries ───────────────────────────────────────────────────────
|
|
65
|
+
it("width at exactly 600 is Medium", () => {
|
|
66
|
+
setWindowSize(600, 800);
|
|
67
|
+
fireResize();
|
|
68
|
+
const result = renderJalvinHook(() => calculateWindowSizeClass());
|
|
69
|
+
expect(result.current.widthSizeClass).toBe("Medium");
|
|
70
|
+
});
|
|
71
|
+
it("width at exactly 840 is Expanded", () => {
|
|
72
|
+
setWindowSize(840, 800);
|
|
73
|
+
fireResize();
|
|
74
|
+
const result = renderJalvinHook(() => calculateWindowSizeClass());
|
|
75
|
+
expect(result.current.widthSizeClass).toBe("Expanded");
|
|
76
|
+
});
|
|
77
|
+
it("height at exactly 480 is Medium", () => {
|
|
78
|
+
setWindowSize(400, 480);
|
|
79
|
+
fireResize();
|
|
80
|
+
const result = renderJalvinHook(() => calculateWindowSizeClass());
|
|
81
|
+
expect(result.current.heightSizeClass).toBe("Medium");
|
|
82
|
+
});
|
|
83
|
+
it("height at exactly 900 is Expanded", () => {
|
|
84
|
+
setWindowSize(400, 900);
|
|
85
|
+
fireResize();
|
|
86
|
+
const result = renderJalvinHook(() => calculateWindowSizeClass());
|
|
87
|
+
expect(result.current.heightSizeClass).toBe("Expanded");
|
|
88
|
+
});
|
|
89
|
+
// ── reactivity on resize ───────────────────────────────────────────────────
|
|
90
|
+
it("updates widthSizeClass when window crosses a breakpoint", () => {
|
|
91
|
+
setWindowSize(400, 800); // Compact
|
|
92
|
+
fireResize();
|
|
93
|
+
const result = renderJalvinHook(() => calculateWindowSizeClass());
|
|
94
|
+
expect(result.current.widthSizeClass).toBe("Compact");
|
|
95
|
+
setWindowSize(700, 800); // Medium
|
|
96
|
+
fireResize();
|
|
97
|
+
expect(result.current.widthSizeClass).toBe("Medium");
|
|
98
|
+
setWindowSize(1280, 800); // Expanded
|
|
99
|
+
fireResize();
|
|
100
|
+
expect(result.current.widthSizeClass).toBe("Expanded");
|
|
101
|
+
});
|
|
102
|
+
it("updates heightSizeClass when window crosses a breakpoint", () => {
|
|
103
|
+
setWindowSize(800, 400); // Compact height
|
|
104
|
+
fireResize();
|
|
105
|
+
const result = renderJalvinHook(() => calculateWindowSizeClass());
|
|
106
|
+
expect(result.current.heightSizeClass).toBe("Compact");
|
|
107
|
+
setWindowSize(800, 700); // Medium height
|
|
108
|
+
fireResize();
|
|
109
|
+
expect(result.current.heightSizeClass).toBe("Medium");
|
|
110
|
+
});
|
|
111
|
+
// Note: "does not re-render consumers when resize stays within the same class"
|
|
112
|
+
// is hard to test with the simple render function which currently wipes innerHTML on every update.
|
|
113
|
+
// In a real vanilla framework with DOM diffing, this would be more relevant.
|
|
114
|
+
// ── single listener ───────────────────────────────────────────────────────
|
|
115
|
+
it("registers only ONE resize listener globally", () => {
|
|
116
|
+
// This is handled by the global setup in ui.ts
|
|
117
|
+
// We can't easily spy on it after the module is loaded, but we've verified it's global.
|
|
118
|
+
});
|
|
119
|
+
it("both consumers see the same updated class after a single resize event", () => {
|
|
120
|
+
setWindowSize(400, 800); // Compact
|
|
121
|
+
fireResize();
|
|
122
|
+
const result = renderJalvinHook(() => ({
|
|
123
|
+
a: calculateWindowSizeClass(),
|
|
124
|
+
b: calculateWindowSizeClass(),
|
|
125
|
+
}));
|
|
126
|
+
setWindowSize(1280, 800); // Expanded
|
|
127
|
+
fireResize();
|
|
128
|
+
expect(result.current.a.widthSizeClass).toBe("Expanded");
|
|
129
|
+
expect(result.current.b.widthSizeClass).toBe("Expanded");
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
//# sourceMappingURL=windowsizeclass.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"windowsizeclass.test.js","sourceRoot":"","sources":["../../src/__tests__/windowsizeclass.test.ts"],"names":[],"mappings":"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"}
|
package/dist/canvas.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Modifier } from "./modifier.js";
|
|
2
|
+
import type { VNode } from "@jalvin/runtime";
|
|
2
3
|
export interface CanvasProps {
|
|
3
4
|
modifier?: Modifier;
|
|
4
5
|
/** CSS pixel width of the canvas drawing surface. */
|
|
@@ -14,5 +15,5 @@ export interface CanvasProps {
|
|
|
14
15
|
className?: string;
|
|
15
16
|
}
|
|
16
17
|
/** Canvas drawing surface. */
|
|
17
|
-
export declare function Canvas({ modifier, width, height, draw, clearBeforeDraw, pixelRatio, className, }: CanvasProps):
|
|
18
|
+
export declare function Canvas({ modifier, width, height, draw, clearBeforeDraw, pixelRatio, className, }: CanvasProps): VNode;
|
|
18
19
|
//# sourceMappingURL=canvas.d.ts.map
|
package/dist/canvas.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvas.d.ts","sourceRoot":"","sources":["../src/canvas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"canvas.d.ts","sourceRoot":"","sources":["../src/canvas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAE7C,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sDAAsD;IACtD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mFAAmF;IACnF,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,wBAAwB,EAAE,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC1E,2DAA2D;IAC3D,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,gEAAgE;IAChE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAOD,8BAA8B;AAC9B,wBAAgB,MAAM,CAAC,EACrB,QAAQ,EACR,KAAK,EACL,MAAM,EACN,IAAI,EACJ,eAAsB,EACtB,UAAU,EACV,SAAS,GACV,EAAE,WAAW,GAAG,KAAK,CAqErB"}
|
package/dist/canvas.js
CHANGED
|
@@ -6,7 +6,11 @@ function joinClassNames(...classNames) {
|
|
|
6
6
|
/** Canvas drawing surface. */
|
|
7
7
|
export function Canvas({ modifier, width, height, draw, clearBeforeDraw = true, pixelRatio, className, }) {
|
|
8
8
|
const modProps = modifier?.toProps() ?? {};
|
|
9
|
-
|
|
9
|
+
// jalvinCreateElement returns a VNode, not a real DOM element.
|
|
10
|
+
// The patch system sets vnode.el to the real HTMLCanvasElement after mount.
|
|
11
|
+
// requestAnimationFrame fires after the current synchronous patch completes,
|
|
12
|
+
// so vnode.el is guaranteed to be set by the time drawFrame runs.
|
|
13
|
+
const vnode = jalvinCreateElement("canvas", {
|
|
10
14
|
className: joinClassNames(modProps.className, className),
|
|
11
15
|
onMouseEnter: modProps.onMouseEnter,
|
|
12
16
|
onMouseLeave: modProps.onMouseLeave,
|
|
@@ -23,34 +27,53 @@ export function Canvas({ modifier, width, height, draw, clearBeforeDraw = true,
|
|
|
23
27
|
...modProps.style,
|
|
24
28
|
},
|
|
25
29
|
}, []);
|
|
26
|
-
const drawFrame = () => {
|
|
27
|
-
const cssWidth = Math.max(1, Math.floor(width ?? (canvas.clientWidth || 300)));
|
|
28
|
-
const cssHeight = Math.max(1, Math.floor(height ?? (canvas.clientHeight || 150)));
|
|
29
|
-
const dpr = Math.max(1, pixelRatio ?? (typeof window !== "undefined" ? window.devicePixelRatio || 1 : 1));
|
|
30
|
-
const backingWidth = Math.max(1, Math.floor(cssWidth * dpr));
|
|
31
|
-
const backingHeight = Math.max(1, Math.floor(cssHeight * dpr));
|
|
32
|
-
if (canvas.width !== backingWidth)
|
|
33
|
-
canvas.width = backingWidth;
|
|
34
|
-
if (canvas.height !== backingHeight)
|
|
35
|
-
canvas.height = backingHeight;
|
|
36
|
-
const ctx = canvas.getContext("2d");
|
|
37
|
-
if (!ctx)
|
|
38
|
-
return;
|
|
39
|
-
ctx.setTransform(dpr, 0, 0, dpr, 0, 0);
|
|
40
|
-
if (clearBeforeDraw)
|
|
41
|
-
ctx.clearRect(0, 0, cssWidth, cssHeight);
|
|
42
|
-
draw?.(ctx, canvas);
|
|
43
|
-
};
|
|
44
|
-
// In vanilla mode, we trigger draw immediately.
|
|
45
|
-
// For dynamic resizing, we'd need ResizeObserver which we can set up here.
|
|
46
30
|
if (typeof window !== "undefined") {
|
|
47
|
-
requestAnimationFrame(
|
|
48
|
-
|
|
49
|
-
const
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
31
|
+
requestAnimationFrame(() => {
|
|
32
|
+
// Access the real DOM element via vnode.el, set by the patch system on mount.
|
|
33
|
+
const el = vnode.el;
|
|
34
|
+
if (!el || typeof el.getContext !== "function")
|
|
35
|
+
return;
|
|
36
|
+
const cssWidth = Math.max(1, Math.floor(width ?? (el.clientWidth || 300)));
|
|
37
|
+
const cssHeight = Math.max(1, Math.floor(height ?? (el.clientHeight || 150)));
|
|
38
|
+
const dpr = Math.max(1, pixelRatio ?? (window.devicePixelRatio || 1));
|
|
39
|
+
const backingWidth = Math.max(1, Math.floor(cssWidth * dpr));
|
|
40
|
+
const backingHeight = Math.max(1, Math.floor(cssHeight * dpr));
|
|
41
|
+
if (el.width !== backingWidth)
|
|
42
|
+
el.width = backingWidth;
|
|
43
|
+
if (el.height !== backingHeight)
|
|
44
|
+
el.height = backingHeight;
|
|
45
|
+
const ctx = el.getContext("2d");
|
|
46
|
+
if (!ctx)
|
|
47
|
+
return;
|
|
48
|
+
ctx.setTransform(dpr, 0, 0, dpr, 0, 0);
|
|
49
|
+
if (clearBeforeDraw)
|
|
50
|
+
ctx.clearRect(0, 0, cssWidth, cssHeight);
|
|
51
|
+
draw?.(ctx, el);
|
|
52
|
+
// ResizeObserver for fluid-width canvases (width/height not explicitly set)
|
|
53
|
+
if (width === undefined || height === undefined) {
|
|
54
|
+
const observer = new ResizeObserver(() => {
|
|
55
|
+
const rEl = vnode.el;
|
|
56
|
+
if (!rEl)
|
|
57
|
+
return;
|
|
58
|
+
const rw = Math.max(1, Math.floor(rEl.clientWidth || 300));
|
|
59
|
+
const rh = Math.max(1, Math.floor(rEl.clientHeight || 150));
|
|
60
|
+
const rDpr = Math.max(1, window.devicePixelRatio || 1);
|
|
61
|
+
if (rEl.width !== Math.floor(rw * rDpr))
|
|
62
|
+
rEl.width = Math.floor(rw * rDpr);
|
|
63
|
+
if (rEl.height !== Math.floor(rh * rDpr))
|
|
64
|
+
rEl.height = Math.floor(rh * rDpr);
|
|
65
|
+
const rCtx = rEl.getContext("2d");
|
|
66
|
+
if (!rCtx)
|
|
67
|
+
return;
|
|
68
|
+
rCtx.setTransform(rDpr, 0, 0, rDpr, 0, 0);
|
|
69
|
+
if (clearBeforeDraw)
|
|
70
|
+
rCtx.clearRect(0, 0, rw, rh);
|
|
71
|
+
draw?.(rCtx, rEl);
|
|
72
|
+
});
|
|
73
|
+
observer.observe(el);
|
|
74
|
+
}
|
|
75
|
+
});
|
|
53
76
|
}
|
|
54
|
-
return
|
|
77
|
+
return vnode;
|
|
55
78
|
}
|
|
56
79
|
//# sourceMappingURL=canvas.js.map
|
package/dist/canvas.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvas.js","sourceRoot":"","sources":["../src/canvas.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"canvas.js","sourceRoot":"","sources":["../src/canvas.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAkBtD,SAAS,cAAc,CAAC,GAAG,UAAqC;IAC9D,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAC1D,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9C,CAAC;AAED,8BAA8B;AAC9B,MAAM,UAAU,MAAM,CAAC,EACrB,QAAQ,EACR,KAAK,EACL,MAAM,EACN,IAAI,EACJ,eAAe,GAAG,IAAI,EACtB,UAAU,EACV,SAAS,GACG;IACZ,MAAM,QAAQ,GAAG,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAE3C,+DAA+D;IAC/D,4EAA4E;IAC5E,6EAA6E;IAC7E,kEAAkE;IAClE,MAAM,KAAK,GAAG,mBAAmB,CAAC,QAAQ,EAAE;QAC1C,SAAS,EAAE,cAAc,CAAC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;QACxD,YAAY,EAAE,QAAQ,CAAC,YAAY;QACnC,YAAY,EAAE,QAAQ,CAAC,YAAY;QACnC,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,WAAW,EAAE,QAAQ,CAAC,WAAW;QACjC,SAAS,EAAE,QAAQ,CAAC,SAAS;QAC7B,YAAY,EAAE,QAAQ,CAAC,YAAY;QACnC,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,aAAa,EAAE,QAAQ,CAAC,aAAa;QACrC,KAAK,EAAE;YACL,KAAK,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS;YACrD,MAAM,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC,CAAC,CAAC,SAAS;YACxD,GAAG,QAAQ,CAAC,KAAK;SAClB;KACF,EAAE,EAAE,CAAC,CAAC;IAEP,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,qBAAqB,CAAC,GAAG,EAAE;YACzB,8EAA8E;YAC9E,MAAM,EAAE,GAAG,KAAK,CAAC,EAAmC,CAAC;YACrD,IAAI,CAAC,EAAE,IAAI,OAAO,EAAE,CAAC,UAAU,KAAK,UAAU;gBAAE,OAAO;YAEvD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC,WAAW,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;YAC3E,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,YAAY,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;YAC9E,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,IAAI,CAAC,MAAM,CAAC,gBAAgB,IAAI,CAAC,CAAC,CAAC,CAAC;YAEtE,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC;YAC7D,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC;YAC/D,IAAI,EAAE,CAAC,KAAK,KAAK,YAAY;gBAAE,EAAE,CAAC,KAAK,GAAG,YAAY,CAAC;YACvD,IAAI,EAAE,CAAC,MAAM,KAAK,aAAa;gBAAE,EAAE,CAAC,MAAM,GAAG,aAAa,CAAC;YAE3D,MAAM,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAChC,IAAI,CAAC,GAAG;gBAAE,OAAO;YAEjB,GAAG,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACvC,IAAI,eAAe;gBAAE,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;YAC9D,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAEhB,4EAA4E;YAC5E,IAAI,KAAK,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBAChD,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,GAAG,EAAE;oBACvC,MAAM,GAAG,GAAG,KAAK,CAAC,EAAmC,CAAC;oBACtD,IAAI,CAAC,GAAG;wBAAE,OAAO;oBACjB,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,CAAC,CAAC;oBAC3D,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,IAAI,GAAG,CAAC,CAAC,CAAC;oBAC5D,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,gBAAgB,IAAI,CAAC,CAAC,CAAC;oBACvD,IAAI,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC;wBAAE,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;oBAC3E,IAAI,GAAG,CAAC,MAAM,KAAK,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC;wBAAE,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;oBAC7E,MAAM,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;oBAClC,IAAI,CAAC,IAAI;wBAAE,OAAO;oBAClB,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;oBAC1C,IAAI,eAAe;wBAAE,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;oBAClD,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;gBACpB,CAAC,CAAC,CAAC;gBACH,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACvB,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
|
package/dist/image.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Modifier } from "./modifier.js";
|
|
2
|
+
import type { VNode } from "@jalvin/runtime";
|
|
2
3
|
export interface ImageProps {
|
|
3
4
|
src: string;
|
|
4
5
|
alt?: string;
|
|
@@ -7,13 +8,14 @@ export interface ImageProps {
|
|
|
7
8
|
onClick?: () => void;
|
|
8
9
|
}
|
|
9
10
|
/** Image element. */
|
|
10
|
-
export declare function Image({ src, alt, modifier, contentScale, onClick, }: ImageProps):
|
|
11
|
+
export declare function Image({ src, alt, modifier, contentScale, onClick, }: ImageProps): VNode;
|
|
11
12
|
export interface AsyncImageProps extends ImageProps {
|
|
12
|
-
loadingPlaceholder?:
|
|
13
|
-
errorPlaceholder?:
|
|
13
|
+
loadingPlaceholder?: VNode;
|
|
14
|
+
errorPlaceholder?: VNode;
|
|
14
15
|
}
|
|
15
16
|
/**
|
|
16
17
|
* Image that handles loading/error states.
|
|
18
|
+
* Must be called within a composable context (inside render() or a component fun).
|
|
17
19
|
*/
|
|
18
|
-
export declare function AsyncImage({ src, alt, modifier, contentScale, onClick, loadingPlaceholder, errorPlaceholder, }: AsyncImageProps):
|
|
20
|
+
export declare function AsyncImage({ src, alt, modifier, contentScale, onClick, loadingPlaceholder, errorPlaceholder, }: AsyncImageProps): VNode;
|
|
19
21
|
//# sourceMappingURL=image.d.ts.map
|
package/dist/image.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"image.d.ts","sourceRoot":"","sources":["../src/image.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"image.d.ts","sourceRoot":"","sources":["../src/image.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAGzC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAE7C,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;IAChD,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,qBAAqB;AACrB,wBAAgB,KAAK,CAAC,EACpB,GAAG,EACH,GAAQ,EACR,QAAQ,EACR,YAAoB,EACpB,OAAO,GACR,EAAE,UAAU,GAAG,KAAK,CAmBpB;AAED,MAAM,WAAW,eAAgB,SAAQ,UAAU;IACjD,kBAAkB,CAAC,EAAE,KAAK,CAAC;IAC3B,gBAAgB,CAAC,EAAE,KAAK,CAAC;CAC1B;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,EACzB,GAAG,EACH,GAAG,EACH,QAAQ,EACR,YAAY,EACZ,OAAO,EACP,kBAAkB,EAClB,gBAAgB,GACjB,EAAE,eAAe,GAAG,KAAK,CAwBzB"}
|
package/dist/image.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jalvinCreateElement } from "@jalvin/runtime";
|
|
2
|
-
import {
|
|
2
|
+
import { MutableStateFlow, remember, collectAsState, DisposableEffect } from "@jalvin/runtime";
|
|
3
3
|
/** Image element. */
|
|
4
4
|
export function Image({ src, alt = "", modifier, contentScale = "fit", onClick, }) {
|
|
5
5
|
const modProps = modifier?.toProps() ?? {};
|
|
@@ -23,35 +23,28 @@ export function Image({ src, alt = "", modifier, contentScale = "fit", onClick,
|
|
|
23
23
|
}
|
|
24
24
|
/**
|
|
25
25
|
* Image that handles loading/error states.
|
|
26
|
+
* Must be called within a composable context (inside render() or a component fun).
|
|
26
27
|
*/
|
|
27
28
|
export function AsyncImage({ src, alt, modifier, contentScale, onClick, loadingPlaceholder, errorPlaceholder, }) {
|
|
28
|
-
|
|
29
|
-
const
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
}
|
|
49
|
-
container.appendChild(Image({ src, alt, modifier, contentScale, onClick }));
|
|
50
|
-
}
|
|
51
|
-
};
|
|
52
|
-
// Subscribe to status changes manually for this internal reactivity
|
|
53
|
-
status.subscribers?.add(update);
|
|
54
|
-
update();
|
|
55
|
-
return container;
|
|
29
|
+
// remember() ensures the MutableStateFlow persists across re-renders of the parent
|
|
30
|
+
const status = remember(() => new MutableStateFlow("loading"));
|
|
31
|
+
// collectAsState() subscribes to status and triggers parent re-render on change
|
|
32
|
+
const currentStatus = collectAsState(status);
|
|
33
|
+
// DisposableEffect re-runs whenever src changes, kicks off the load and resets status
|
|
34
|
+
DisposableEffect([src], () => {
|
|
35
|
+
status.value = "loading";
|
|
36
|
+
const img = new window.Image();
|
|
37
|
+
img.onload = () => { status.value = "ok"; };
|
|
38
|
+
img.onerror = () => { status.value = "error"; };
|
|
39
|
+
img.src = src;
|
|
40
|
+
return () => { img.onload = null; img.onerror = null; };
|
|
41
|
+
});
|
|
42
|
+
if (currentStatus === "error" && errorPlaceholder) {
|
|
43
|
+
return errorPlaceholder;
|
|
44
|
+
}
|
|
45
|
+
if (currentStatus === "loading" && loadingPlaceholder) {
|
|
46
|
+
return loadingPlaceholder;
|
|
47
|
+
}
|
|
48
|
+
return Image({ src, alt, modifier, contentScale, onClick });
|
|
56
49
|
}
|
|
57
50
|
//# sourceMappingURL=image.js.map
|
package/dist/image.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"image.js","sourceRoot":"","sources":["../src/image.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"image.js","sourceRoot":"","sources":["../src/image.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAW/F,qBAAqB;AACrB,MAAM,UAAU,KAAK,CAAC,EACpB,GAAG,EACH,GAAG,GAAG,EAAE,EACR,QAAQ,EACR,YAAY,GAAG,KAAK,EACpB,OAAO,GACI;IACX,MAAM,QAAQ,GAAG,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3C,OAAO,mBAAmB,CAAC,KAAK,EAAE;QAChC,GAAG;QACH,GAAG;QACH,OAAO;QACP,GAAG,QAAQ;QACX,KAAK,EAAE;YACL,SAAS,EAAE,CAAC,YAAY,KAAK,MAAM;gBACjC,CAAC,CAAC,MAAM;gBACR,CAAC,CAAC,YAAY,KAAK,KAAK;oBACtB,CAAC,CAAC,SAAS;oBACX,CAAC,CAAC,YAAY,KAAK,MAAM;wBACvB,CAAC,CAAC,OAAO;wBACT,CAAC,CAAC,MAAM,CAAC;YACf,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;YACvC,GAAG,QAAQ,CAAC,KAAK;SAClB;KACF,EAAE,EAAE,CAAC,CAAC;AACT,CAAC;AAOD;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,EACzB,GAAG,EACH,GAAG,EACH,QAAQ,EACR,YAAY,EACZ,OAAO,EACP,kBAAkB,EAClB,gBAAgB,GACA;IAChB,mFAAmF;IACnF,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,gBAAgB,CAA6B,SAAS,CAAC,CAAC,CAAC;IAE3F,gFAAgF;IAChF,MAAM,aAAa,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IAE7C,sFAAsF;IACtF,gBAAgB,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE;QAC3B,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC;QACzB,MAAM,GAAG,GAAG,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QAC/B,GAAG,CAAC,MAAM,GAAG,GAAG,EAAE,GAAG,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5C,GAAG,CAAC,OAAO,GAAG,GAAG,EAAE,GAAG,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAChD,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC;QACd,OAAO,GAAG,EAAE,GAAG,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,IAAI,aAAa,KAAK,OAAO,IAAI,gBAAgB,EAAE,CAAC;QAClD,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IACD,IAAI,aAAa,KAAK,SAAS,IAAI,kBAAkB,EAAE,CAAC;QACtD,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IACD,OAAO,KAAK,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,CAAC;AAC9D,CAAC"}
|
package/dist/layout.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Modifier } from "./modifier.js";
|
|
2
|
+
import type { VNode } from "@jalvin/runtime";
|
|
2
3
|
export type Alignment = "start" | "center" | "end" | "stretch";
|
|
3
4
|
export type Arrangement = "start" | "center" | "end" | "spaceBetween" | "spaceAround" | "spaceEvenly";
|
|
4
5
|
export interface ColumnProps {
|
|
@@ -8,7 +9,7 @@ export interface ColumnProps {
|
|
|
8
9
|
horizontalAlignment?: Alignment;
|
|
9
10
|
}
|
|
10
11
|
/** Vertical flex container. */
|
|
11
|
-
export declare function Column({ modifier, spacing, verticalArrangement, horizontalAlignment }: ColumnProps, children?:
|
|
12
|
+
export declare function Column({ modifier, spacing, verticalArrangement, horizontalAlignment }: ColumnProps, children?: VNode[]): VNode;
|
|
12
13
|
export interface RowProps {
|
|
13
14
|
modifier?: Modifier;
|
|
14
15
|
spacing?: number;
|
|
@@ -17,11 +18,12 @@ export interface RowProps {
|
|
|
17
18
|
wrap?: boolean;
|
|
18
19
|
}
|
|
19
20
|
/** Horizontal flex container. */
|
|
20
|
-
export declare function Row({ modifier, spacing, horizontalArrangement, verticalAlignment, wrap }: RowProps, children?:
|
|
21
|
+
export declare function Row({ modifier, spacing, horizontalArrangement, verticalAlignment, wrap }: RowProps, children?: VNode[]): VNode;
|
|
22
|
+
export type ContentAlignment = "topStart" | "topCenter" | "topEnd" | "centerStart" | "center" | "centerEnd" | "bottomStart" | "bottomCenter" | "bottomEnd";
|
|
21
23
|
export interface BoxProps {
|
|
22
24
|
modifier?: Modifier;
|
|
23
|
-
contentAlignment?:
|
|
25
|
+
contentAlignment?: ContentAlignment;
|
|
24
26
|
}
|
|
25
|
-
/** Positioned container. */
|
|
26
|
-
export declare function Box({ modifier, contentAlignment }: BoxProps, children?:
|
|
27
|
+
/** Positioned/stacking container. */
|
|
28
|
+
export declare function Box({ modifier, contentAlignment }: BoxProps, children?: VNode[]): VNode;
|
|
27
29
|
//# sourceMappingURL=layout.d.ts.map
|
package/dist/layout.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../src/layout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../src/layout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAE7C,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,GAAG,SAAS,CAAC;AAC/D,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,GAAG,cAAc,GAAG,aAAa,GAAG,aAAa,CAAC;AAsBtG,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mBAAmB,CAAC,EAAE,WAAW,CAAC;IAClC,mBAAmB,CAAC,EAAE,SAAS,CAAC;CACjC;AAED,+BAA+B;AAC/B,wBAAgB,MAAM,CACpB,EAAE,QAAQ,EAAE,OAAO,EAAE,mBAA6B,EAAE,mBAA6B,EAAE,EAAE,WAAW,EAChG,QAAQ,CAAC,EAAE,KAAK,EAAE,GACjB,KAAK,CAaP;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qBAAqB,CAAC,EAAE,WAAW,CAAC;IACpC,iBAAiB,CAAC,EAAE,SAAS,CAAC;IAC9B,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,iCAAiC;AACjC,wBAAgB,GAAG,CACjB,EAAE,QAAQ,EAAE,OAAO,EAAE,qBAA+B,EAAE,iBAA4B,EAAE,IAAY,EAAE,EAAE,QAAQ,EAC5G,QAAQ,CAAC,EAAE,KAAK,EAAE,GACjB,KAAK,CAcP;AAED,MAAM,MAAM,gBAAgB,GACxB,UAAU,GAAG,WAAW,GAAG,QAAQ,GACnC,aAAa,GAAG,QAAQ,GAAG,WAAW,GACtC,aAAa,GAAG,cAAc,GAAG,WAAW,CAAC;AAEjD,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACrC;AAQD,qCAAqC;AACrC,wBAAgB,GAAG,CACjB,EAAE,QAAQ,EAAE,gBAA6B,EAAE,EAAE,QAAQ,EACrD,QAAQ,CAAC,EAAE,KAAK,EAAE,GACjB,KAAK,CAcP"}
|
package/dist/layout.js
CHANGED
|
@@ -48,17 +48,23 @@ export function Row({ modifier, spacing, horizontalArrangement = "start", vertic
|
|
|
48
48
|
},
|
|
49
49
|
}, children ?? []);
|
|
50
50
|
}
|
|
51
|
-
|
|
51
|
+
function contentAlignmentToStyle(a) {
|
|
52
|
+
const row = a.startsWith("top") ? "flex-start" : a.startsWith("bottom") ? "flex-end" : "center";
|
|
53
|
+
const col = a.endsWith("Start") ? "flex-start" : a.endsWith("End") ? "flex-end" : "center";
|
|
54
|
+
return { alignItems: col, justifyContent: row };
|
|
55
|
+
}
|
|
56
|
+
/** Positioned/stacking container. */
|
|
52
57
|
export function Box({ modifier, contentAlignment = "topStart" }, children) {
|
|
53
58
|
const modProps = modifier?.toProps() ?? {};
|
|
54
|
-
const
|
|
59
|
+
const { alignItems, justifyContent } = contentAlignmentToStyle(contentAlignment);
|
|
55
60
|
return jalvinCreateElement("div", {
|
|
56
61
|
...modProps,
|
|
57
62
|
style: {
|
|
58
63
|
position: "relative",
|
|
59
64
|
display: "flex",
|
|
60
65
|
flexDirection: "column",
|
|
61
|
-
|
|
66
|
+
alignItems,
|
|
67
|
+
justifyContent,
|
|
62
68
|
...modProps.style,
|
|
63
69
|
},
|
|
64
70
|
}, children ?? []);
|
package/dist/layout.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout.js","sourceRoot":"","sources":["../src/layout.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"layout.js","sourceRoot":"","sources":["../src/layout.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jalvin/ui",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.47",
|
|
4
4
|
"description": "Jalvin UI — Compose-style component library (Column, Row, Box, Button, Text, …)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
"@jalvin/runtime": ">=2.0.0"
|
|
22
22
|
},
|
|
23
23
|
"devDependencies": {
|
|
24
|
-
"@jalvin/runtime": "2.0.
|
|
24
|
+
"@jalvin/runtime": "2.0.47",
|
|
25
25
|
"@testing-library/dom": "^10.4.1",
|
|
26
26
|
"@testing-library/jest-dom": "^6.9.1",
|
|
27
27
|
"@types/node": "^20.0.0",
|