@praxisjs/css 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (164) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/LICENSE +21 -0
  3. package/dist/__tests__/css-builder.test.d.ts +2 -0
  4. package/dist/__tests__/css-builder.test.d.ts.map +1 -0
  5. package/dist/__tests__/css-builder.test.js +198 -0
  6. package/dist/__tests__/css-builder.test.js.map +1 -0
  7. package/dist/__tests__/cx.test.d.ts +2 -0
  8. package/dist/__tests__/cx.test.d.ts.map +1 -0
  9. package/dist/__tests__/cx.test.js +47 -0
  10. package/dist/__tests__/cx.test.js.map +1 -0
  11. package/dist/__tests__/decorators.test.d.ts +2 -0
  12. package/dist/__tests__/decorators.test.d.ts.map +1 -0
  13. package/dist/__tests__/decorators.test.js +268 -0
  14. package/dist/__tests__/decorators.test.js.map +1 -0
  15. package/dist/__tests__/extract.test.d.ts +2 -0
  16. package/dist/__tests__/extract.test.d.ts.map +1 -0
  17. package/dist/__tests__/extract.test.js +420 -0
  18. package/dist/__tests__/extract.test.js.map +1 -0
  19. package/dist/__tests__/global.test.d.ts +2 -0
  20. package/dist/__tests__/global.test.d.ts.map +1 -0
  21. package/dist/__tests__/global.test.js +117 -0
  22. package/dist/__tests__/global.test.js.map +1 -0
  23. package/dist/__tests__/keyframes.test.d.ts +2 -0
  24. package/dist/__tests__/keyframes.test.d.ts.map +1 -0
  25. package/dist/__tests__/keyframes.test.js +90 -0
  26. package/dist/__tests__/keyframes.test.js.map +1 -0
  27. package/dist/__tests__/preflight.test.d.ts +2 -0
  28. package/dist/__tests__/preflight.test.d.ts.map +1 -0
  29. package/dist/__tests__/preflight.test.js +55 -0
  30. package/dist/__tests__/preflight.test.js.map +1 -0
  31. package/dist/__tests__/registry.test.d.ts +2 -0
  32. package/dist/__tests__/registry.test.d.ts.map +1 -0
  33. package/dist/__tests__/registry.test.js +132 -0
  34. package/dist/__tests__/registry.test.js.map +1 -0
  35. package/dist/__tests__/style.test.d.ts +2 -0
  36. package/dist/__tests__/style.test.d.ts.map +1 -0
  37. package/dist/__tests__/style.test.js +257 -0
  38. package/dist/__tests__/style.test.js.map +1 -0
  39. package/dist/__tests__/styled.test.d.ts +2 -0
  40. package/dist/__tests__/styled.test.d.ts.map +1 -0
  41. package/dist/__tests__/styled.test.js +951 -0
  42. package/dist/__tests__/styled.test.js.map +1 -0
  43. package/dist/__tests__/theme-instance.test.d.ts +2 -0
  44. package/dist/__tests__/theme-instance.test.d.ts.map +1 -0
  45. package/dist/__tests__/theme-instance.test.js +317 -0
  46. package/dist/__tests__/theme-instance.test.js.map +1 -0
  47. package/dist/__tests__/theme-uninit.test.d.ts +2 -0
  48. package/dist/__tests__/theme-uninit.test.d.ts.map +1 -0
  49. package/dist/__tests__/theme-uninit.test.js +10 -0
  50. package/dist/__tests__/theme-uninit.test.js.map +1 -0
  51. package/dist/__tests__/token-sheet.test.d.ts +2 -0
  52. package/dist/__tests__/token-sheet.test.d.ts.map +1 -0
  53. package/dist/__tests__/token-sheet.test.js +74 -0
  54. package/dist/__tests__/token-sheet.test.js.map +1 -0
  55. package/dist/base/stylesheet.d.ts +30 -0
  56. package/dist/base/stylesheet.d.ts.map +1 -0
  57. package/dist/base/stylesheet.js +29 -0
  58. package/dist/base/stylesheet.js.map +1 -0
  59. package/dist/builder/css-builder.d.ts +98 -0
  60. package/dist/builder/css-builder.d.ts.map +1 -0
  61. package/dist/builder/css-builder.js +79 -0
  62. package/dist/builder/css-builder.js.map +1 -0
  63. package/dist/builder/keyframes.d.ts +23 -0
  64. package/dist/builder/keyframes.d.ts.map +1 -0
  65. package/dist/builder/keyframes.js +54 -0
  66. package/dist/builder/keyframes.js.map +1 -0
  67. package/dist/cx.d.ts +3 -0
  68. package/dist/cx.d.ts.map +1 -0
  69. package/dist/cx.js +23 -0
  70. package/dist/cx.js.map +1 -0
  71. package/dist/decorators/param.d.ts +23 -0
  72. package/dist/decorators/param.d.ts.map +1 -0
  73. package/dist/decorators/param.js +39 -0
  74. package/dist/decorators/param.js.map +1 -0
  75. package/dist/decorators/style.d.ts +15 -0
  76. package/dist/decorators/style.d.ts.map +1 -0
  77. package/dist/decorators/style.js +53 -0
  78. package/dist/decorators/style.js.map +1 -0
  79. package/dist/decorators/styled.d.ts +37 -0
  80. package/dist/decorators/styled.d.ts.map +1 -0
  81. package/dist/decorators/styled.js +138 -0
  82. package/dist/decorators/styled.js.map +1 -0
  83. package/dist/extract.d.ts +14 -0
  84. package/dist/extract.d.ts.map +1 -0
  85. package/dist/extract.js +124 -0
  86. package/dist/extract.js.map +1 -0
  87. package/dist/global.d.ts +27 -0
  88. package/dist/global.d.ts.map +1 -0
  89. package/dist/global.js +49 -0
  90. package/dist/global.js.map +1 -0
  91. package/dist/index.d.ts +11 -0
  92. package/dist/index.d.ts.map +1 -0
  93. package/dist/index.js +10 -0
  94. package/dist/index.js.map +1 -0
  95. package/dist/internal/collector.d.ts +15 -0
  96. package/dist/internal/collector.d.ts.map +1 -0
  97. package/dist/internal/collector.js +33 -0
  98. package/dist/internal/collector.js.map +1 -0
  99. package/dist/internal/hash.d.ts +5 -0
  100. package/dist/internal/hash.d.ts.map +1 -0
  101. package/dist/internal/hash.js +11 -0
  102. package/dist/internal/hash.js.map +1 -0
  103. package/dist/internal/registry.d.ts +3 -0
  104. package/dist/internal/registry.d.ts.map +1 -0
  105. package/dist/internal/registry.js +41 -0
  106. package/dist/internal/registry.js.map +1 -0
  107. package/dist/preflight.d.ts +18 -0
  108. package/dist/preflight.d.ts.map +1 -0
  109. package/dist/preflight.js +191 -0
  110. package/dist/preflight.js.map +1 -0
  111. package/dist/server.d.ts +8 -0
  112. package/dist/server.d.ts.map +1 -0
  113. package/dist/server.js +8 -0
  114. package/dist/server.js.map +1 -0
  115. package/dist/tokens/decorators.d.ts +41 -0
  116. package/dist/tokens/decorators.d.ts.map +1 -0
  117. package/dist/tokens/decorators.js +73 -0
  118. package/dist/tokens/decorators.js.map +1 -0
  119. package/dist/tokens/index.d.ts +4 -0
  120. package/dist/tokens/index.d.ts.map +1 -0
  121. package/dist/tokens/index.js +4 -0
  122. package/dist/tokens/index.js.map +1 -0
  123. package/dist/tokens/theme-instance.d.ts +33 -0
  124. package/dist/tokens/theme-instance.d.ts.map +1 -0
  125. package/dist/tokens/theme-instance.js +130 -0
  126. package/dist/tokens/theme-instance.js.map +1 -0
  127. package/dist/tokens/token-sheet.d.ts +46 -0
  128. package/dist/tokens/token-sheet.d.ts.map +1 -0
  129. package/dist/tokens/token-sheet.js +55 -0
  130. package/dist/tokens/token-sheet.js.map +1 -0
  131. package/package.json +33 -0
  132. package/src/__tests__/css-builder.test.ts +230 -0
  133. package/src/__tests__/cx.test.ts +63 -0
  134. package/src/__tests__/decorators.test.ts +127 -0
  135. package/src/__tests__/extract.test.ts +418 -0
  136. package/src/__tests__/global.test.ts +140 -0
  137. package/src/__tests__/keyframes.test.ts +103 -0
  138. package/src/__tests__/preflight.test.ts +63 -0
  139. package/src/__tests__/registry.test.ts +151 -0
  140. package/src/__tests__/style.test.ts +153 -0
  141. package/src/__tests__/styled.test.ts +427 -0
  142. package/src/__tests__/theme-instance.test.ts +374 -0
  143. package/src/__tests__/theme-uninit.test.ts +12 -0
  144. package/src/__tests__/token-sheet.test.ts +87 -0
  145. package/src/base/stylesheet.ts +35 -0
  146. package/src/builder/css-builder.ts +204 -0
  147. package/src/builder/keyframes.ts +66 -0
  148. package/src/cx.ts +26 -0
  149. package/src/decorators/param.ts +40 -0
  150. package/src/decorators/style.ts +55 -0
  151. package/src/decorators/styled.ts +167 -0
  152. package/src/extract.ts +133 -0
  153. package/src/global.ts +60 -0
  154. package/src/index.ts +10 -0
  155. package/src/internal/collector.ts +38 -0
  156. package/src/internal/hash.ts +10 -0
  157. package/src/internal/registry.ts +51 -0
  158. package/src/preflight.ts +192 -0
  159. package/src/server.ts +12 -0
  160. package/src/tokens/decorators.ts +108 -0
  161. package/src/tokens/index.ts +3 -0
  162. package/src/tokens/theme-instance.ts +149 -0
  163. package/src/tokens/token-sheet.ts +86 -0
  164. package/tsconfig.json +8 -0
@@ -0,0 +1,90 @@
1
+ // @vitest-environment jsdom
2
+ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
3
+ import { keyframes } from "../builder/keyframes";
4
+ import { createCollector, setCollector } from "../internal/collector";
5
+ beforeEach(() => {
6
+ document.head.querySelectorAll("style[data-praxis-keyframes]").forEach((el) => el.remove());
7
+ setCollector(null);
8
+ });
9
+ afterEach(() => {
10
+ document.head.querySelectorAll("style[data-praxis-keyframes]").forEach((el) => el.remove());
11
+ setCollector(null);
12
+ });
13
+ describe("keyframes()", () => {
14
+ it("injects a @keyframes style element into document.head", () => {
15
+ keyframes("pulse", { from: { opacity: 1 }, to: { opacity: 0.4 } });
16
+ const el = document.head.querySelector("style[data-praxis-keyframes]");
17
+ expect(el).not.toBeNull();
18
+ expect(el?.textContent).toContain("@keyframes prx-pulse-");
19
+ expect(el?.textContent).toContain("from");
20
+ expect(el?.textContent).toContain("opacity: 1;");
21
+ expect(el?.textContent).toContain("opacity: 0.4;");
22
+ });
23
+ it("returns a scoped animation name prefixed with prx-<name>-", () => {
24
+ const name = keyframes("spin", { from: { transform: "rotate(0deg)" }, to: { transform: "rotate(360deg)" } });
25
+ expect(name).toMatch(/^prx-spin-/);
26
+ });
27
+ it("injects only once for identical keyframes (content-hashed)", () => {
28
+ const stops = { from: { opacity: 1 }, to: { opacity: 0 } };
29
+ keyframes("fade", stops);
30
+ keyframes("fade", stops);
31
+ expect(document.head.querySelectorAll("style[data-praxis-keyframes]").length).toBe(1);
32
+ });
33
+ it("returns the same scoped name for identical frames", () => {
34
+ const stops = { from: { opacity: 0 }, to: { opacity: 1 } };
35
+ const a = keyframes("fadeIn", stops);
36
+ const b = keyframes("fadeIn", stops);
37
+ expect(a).toBe(b);
38
+ });
39
+ it("returns different names for different frames even with same animation name", () => {
40
+ const a = keyframes("anim", { from: { opacity: 0 }, to: { opacity: 1 } });
41
+ const b = keyframes("anim", { from: { opacity: 1 }, to: { opacity: 0 } });
42
+ expect(a).not.toBe(b);
43
+ });
44
+ it("converts camelCase frame properties to kebab-case in the output", () => {
45
+ keyframes("slide", { from: { translateX: "0" }, to: { translateX: "100px" } });
46
+ const el = document.head.querySelector("style[data-praxis-keyframes]");
47
+ expect(el?.textContent).toContain("translate-x:");
48
+ });
49
+ it("supports percentage stops", () => {
50
+ keyframes("bounce", { "0%": { transform: "scale(1)" }, "50%": { transform: "scale(1.1)" }, "100%": { transform: "scale(1)" } });
51
+ const el = document.head.querySelector("style[data-praxis-keyframes]");
52
+ expect(el?.textContent).toContain("0%");
53
+ expect(el?.textContent).toContain("50%");
54
+ expect(el?.textContent).toContain("100%");
55
+ });
56
+ });
57
+ describe("keyframes — collector mode", () => {
58
+ it("routes to collector when one is active (no DOM injection)", () => {
59
+ const col = createCollector();
60
+ setCollector(col);
61
+ const name = keyframes("float", { from: { opacity: 0 }, to: { opacity: 1 } });
62
+ expect(document.head.querySelector("style[data-praxis-keyframes]")).toBeNull();
63
+ expect(col.getCSS()).toContain(`@keyframes ${name}`);
64
+ expect(col.getCSS()).toContain("opacity: 0;");
65
+ });
66
+ it("deduplicates identical keyframes in the collector", () => {
67
+ const col = createCollector();
68
+ setCollector(col);
69
+ const stops = { from: { opacity: 0 }, to: { opacity: 1 } };
70
+ keyframes("same", stops);
71
+ keyframes("same", stops);
72
+ expect(col.getCSS().split("@keyframes").length - 1).toBe(1);
73
+ });
74
+ });
75
+ // ─── STATIC_MODE ──────────────────────────────────────────────────────────────
76
+ describe("keyframes() — static mode (__PRAXIS_CSS_STATIC__)", () => {
77
+ afterEach(() => {
78
+ vi.unstubAllGlobals();
79
+ vi.resetModules();
80
+ });
81
+ it("returns the scoped name without DOM injection when __PRAXIS_CSS_STATIC__ is true", async () => {
82
+ vi.stubGlobal("__PRAXIS_CSS_STATIC__", true);
83
+ vi.resetModules();
84
+ const { keyframes: staticKF } = await import("../builder/keyframes");
85
+ const name = staticKF("pulse", { from: { opacity: 1 }, to: { opacity: 0 } });
86
+ expect(name).toMatch(/^prx-pulse-/);
87
+ expect(document.head.querySelector("style[data-praxis-keyframes]")).toBeNull();
88
+ });
89
+ });
90
+ //# sourceMappingURL=keyframes.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyframes.test.js","sourceRoot":"","sources":["../../src/__tests__/keyframes.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=preflight.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preflight.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/preflight.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,55 @@
1
+ // @vitest-environment jsdom
2
+ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
3
+ // The preflight CSS is a fixed string, so globalStyle's module-level injected Set
4
+ // remembers it across tests. Reset modules in beforeEach to get a fresh Set each time.
5
+ function cleanup() {
6
+ document.head.querySelectorAll("style[data-praxis-global]").forEach((el) => el.remove());
7
+ }
8
+ beforeEach(() => {
9
+ vi.resetModules();
10
+ cleanup();
11
+ });
12
+ afterEach(() => {
13
+ cleanup();
14
+ vi.resetModules();
15
+ });
16
+ describe("preflight()", () => {
17
+ it("injects a style element into document.head", async () => {
18
+ const { preflight } = await import("../preflight.js");
19
+ preflight();
20
+ expect(document.head.querySelector("style[data-praxis-global]")).not.toBeNull();
21
+ });
22
+ it("contains core reset rules", async () => {
23
+ const { preflight } = await import("../preflight.js");
24
+ preflight();
25
+ const css = document.head.querySelector("style[data-praxis-global]")?.textContent ?? "";
26
+ expect(css).toContain("box-sizing: border-box");
27
+ expect(css).toContain("margin: 0");
28
+ expect(css).toContain("padding: 0");
29
+ });
30
+ it("uses standard font stacks without --theme() references", async () => {
31
+ const { preflight } = await import("../preflight.js");
32
+ preflight();
33
+ const css = document.head.querySelector("style[data-praxis-global]")?.textContent ?? "";
34
+ expect(css).toContain("ui-sans-serif");
35
+ expect(css).toContain("ui-monospace");
36
+ expect(css).not.toContain("--theme(");
37
+ });
38
+ it("is idempotent — calling twice injects only once", async () => {
39
+ const { preflight } = await import("../preflight.js");
40
+ preflight();
41
+ preflight();
42
+ expect(document.head.querySelectorAll("style[data-praxis-global]").length).toBe(1);
43
+ });
44
+ it("routes through the collector when one is active", async () => {
45
+ const { setCollector, createCollector } = await import("../internal/collector.js");
46
+ const { preflight } = await import("../preflight.js");
47
+ const col = createCollector();
48
+ setCollector(col);
49
+ preflight();
50
+ setCollector(null);
51
+ expect(document.head.querySelector("style[data-praxis-global]")).toBeNull();
52
+ expect(col.getCSS()).toContain("box-sizing: border-box");
53
+ });
54
+ });
55
+ //# sourceMappingURL=preflight.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preflight.test.js","sourceRoot":"","sources":["../../src/__tests__/preflight.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=registry.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/registry.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,132 @@
1
+ // @vitest-environment jsdom
2
+ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
3
+ import { injectStyle, releaseStyle } from "../internal/registry";
4
+ import { createCollector, setCollector } from "../internal/collector";
5
+ beforeEach(() => {
6
+ document
7
+ .head
8
+ .querySelectorAll("style[data-praxis-hash]")
9
+ .forEach((el) => el.remove());
10
+ setCollector(null);
11
+ });
12
+ afterEach(() => {
13
+ document
14
+ .head
15
+ .querySelectorAll("style[data-praxis-hash]")
16
+ .forEach((el) => el.remove());
17
+ setCollector(null);
18
+ });
19
+ describe("injectStyle / releaseStyle", () => {
20
+ it("injects a style element with the given key and css", () => {
21
+ injectStyle("abc", ".a { color: red; }");
22
+ const el = document.head.querySelector("style[data-praxis-hash='abc']");
23
+ expect(el).not.toBeNull();
24
+ expect(el?.textContent).toBe(".a { color: red; }");
25
+ });
26
+ it("reference-counts — increments count on duplicate key", () => {
27
+ injectStyle("k1", ".x { display: flex; }");
28
+ injectStyle("k1", ".x { display: flex; }");
29
+ expect(document.head.querySelectorAll("style[data-praxis-hash='k1']").length).toBe(1);
30
+ });
31
+ it("removes the element when count reaches zero", () => {
32
+ injectStyle("k2", ".y { opacity: 1; }");
33
+ injectStyle("k2", ".y { opacity: 1; }");
34
+ releaseStyle("k2");
35
+ expect(document.head.querySelector("style[data-praxis-hash='k2']")).not.toBeNull();
36
+ releaseStyle("k2");
37
+ expect(document.head.querySelector("style[data-praxis-hash='k2']")).toBeNull();
38
+ });
39
+ it("releaseStyle on non-existent key is a no-op", () => {
40
+ expect(() => releaseStyle("does-not-exist")).not.toThrow();
41
+ });
42
+ it("re-injects when element was removed externally (DOM divergence guard)", () => {
43
+ injectStyle("k3", ".z { color: blue; }");
44
+ document.head.querySelector("style[data-praxis-hash='k3']")?.remove();
45
+ injectStyle("k3", ".z { color: blue; }");
46
+ expect(document.head.querySelector("style[data-praxis-hash='k3']")).not.toBeNull();
47
+ releaseStyle("k3");
48
+ });
49
+ });
50
+ describe("collector mode", () => {
51
+ it("routes injectStyle to the collector when one is active", () => {
52
+ const col = createCollector();
53
+ setCollector(col);
54
+ injectStyle("hash1", ".cls { color: red; }");
55
+ expect(document.head.querySelector("style[data-praxis-hash]")).toBeNull();
56
+ expect(col.getCSS()).toBe(".cls { color: red; }");
57
+ });
58
+ it("deduplicates identical keys in the collector", () => {
59
+ const col = createCollector();
60
+ setCollector(col);
61
+ injectStyle("dup", ".a { }");
62
+ injectStyle("dup", ".a { }");
63
+ expect(col.getCSS().split("\n").filter(Boolean).length).toBe(1);
64
+ });
65
+ it("collector accumulates multiple distinct injections", () => {
66
+ const col = createCollector();
67
+ setCollector(col);
68
+ injectStyle("a", ".a { color: red; }");
69
+ injectStyle("b", ".b { color: blue; }");
70
+ const css = col.getCSS();
71
+ expect(css).toContain(".a { color: red; }");
72
+ expect(css).toContain(".b { color: blue; }");
73
+ });
74
+ it("releaseStyle is a no-op when a collector is active", () => {
75
+ const col = createCollector();
76
+ setCollector(col);
77
+ injectStyle("x", ".x { }");
78
+ expect(() => releaseStyle("x")).not.toThrow();
79
+ expect(col.getCSS()).toContain(".x { }");
80
+ });
81
+ it("clear() resets the collector", () => {
82
+ const col = createCollector();
83
+ setCollector(col);
84
+ injectStyle("c", ".c { }");
85
+ col.clear();
86
+ expect(col.getCSS()).toBe("");
87
+ });
88
+ it("DOM injection resumes after setCollector(null)", () => {
89
+ const col = createCollector();
90
+ setCollector(col);
91
+ injectStyle("pre", ".pre { }");
92
+ setCollector(null);
93
+ injectStyle("post", ".post { }");
94
+ expect(document.head.querySelector("style[data-praxis-hash='pre']")).toBeNull();
95
+ expect(document.head.querySelector("style[data-praxis-hash='post']")).not.toBeNull();
96
+ releaseStyle("post");
97
+ });
98
+ });
99
+ // ─── STATIC_MODE ──────────────────────────────────────────────────────────────
100
+ describe("injectStyle / releaseStyle — static mode (__PRAXIS_CSS_STATIC__)", () => {
101
+ afterEach(() => {
102
+ vi.unstubAllGlobals();
103
+ vi.resetModules();
104
+ });
105
+ it("injectStyle is a no-op when __PRAXIS_CSS_STATIC__ is true", async () => {
106
+ vi.stubGlobal("__PRAXIS_CSS_STATIC__", true);
107
+ vi.resetModules();
108
+ const { injectStyle: staticInject } = await import("../internal/registry");
109
+ staticInject("sm1", ".a { color: red; }");
110
+ expect(document.head.querySelector("style[data-praxis-hash='sm1']")).toBeNull();
111
+ });
112
+ it("releaseStyle is a no-op when __PRAXIS_CSS_STATIC__ is true", async () => {
113
+ vi.stubGlobal("__PRAXIS_CSS_STATIC__", true);
114
+ vi.resetModules();
115
+ const { releaseStyle: staticRelease } = await import("../internal/registry");
116
+ expect(() => staticRelease("sm2")).not.toThrow();
117
+ });
118
+ });
119
+ // ─── SSR (document === undefined) ────────────────────────────────────────────
120
+ describe("injectStyle — SSR (document undefined)", () => {
121
+ afterEach(() => {
122
+ vi.unstubAllGlobals();
123
+ vi.resetModules();
124
+ });
125
+ it("does not throw when document is undefined", async () => {
126
+ vi.stubGlobal("document", undefined);
127
+ vi.resetModules();
128
+ const { injectStyle: ssrInject } = await import("../internal/registry");
129
+ expect(() => ssrInject("ssr1", ".a { }")).not.toThrow();
130
+ });
131
+ });
132
+ //# sourceMappingURL=registry.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.test.js","sourceRoot":"","sources":["../../src/__tests__/registry.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=style.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/style.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,257 @@
1
+ var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
2
+ function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
3
+ var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
4
+ var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
5
+ var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
6
+ var _, done = false;
7
+ for (var i = decorators.length - 1; i >= 0; i--) {
8
+ var context = {};
9
+ for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
10
+ for (var p in contextIn.access) context.access[p] = contextIn.access[p];
11
+ context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
12
+ var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
13
+ if (kind === "accessor") {
14
+ if (result === void 0) continue;
15
+ if (result === null || typeof result !== "object") throw new TypeError("Object expected");
16
+ if (_ = accept(result.get)) descriptor.get = _;
17
+ if (_ = accept(result.set)) descriptor.set = _;
18
+ if (_ = accept(result.init)) initializers.unshift(_);
19
+ }
20
+ else if (_ = accept(result)) {
21
+ if (kind === "field") initializers.unshift(_);
22
+ else descriptor[key] = _;
23
+ }
24
+ }
25
+ if (target) Object.defineProperty(target, contextIn.name, descriptor);
26
+ done = true;
27
+ };
28
+ var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
29
+ var useValue = arguments.length > 2;
30
+ for (var i = 0; i < initializers.length; i++) {
31
+ value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
32
+ }
33
+ return useValue ? value : void 0;
34
+ };
35
+ // @vitest-environment jsdom
36
+ import { afterEach, beforeEach, describe, expect, it } from "vitest";
37
+ import { Style } from "../decorators/style";
38
+ let container;
39
+ beforeEach(() => {
40
+ container = document.createElement("div");
41
+ document.body.appendChild(container);
42
+ });
43
+ afterEach(() => {
44
+ container.remove();
45
+ });
46
+ /** Attaches an anchor comment to the element, simulating what the runtime does. */
47
+ function makeAnchor(parent) {
48
+ const anchor = document.createComment("[/Comp]");
49
+ parent.appendChild(anchor);
50
+ return anchor;
51
+ }
52
+ describe("@Style field decorator", () => {
53
+ it("sets a CSS custom property on the container element after onMount", () => {
54
+ const anchor = makeAnchor(container);
55
+ let Comp = (() => {
56
+ let _accent_decorators;
57
+ let _accent_initializers = [];
58
+ let _accent_extraInitializers = [];
59
+ return class Comp {
60
+ static {
61
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
62
+ _accent_decorators = [Style("--accent")];
63
+ __esDecorate(null, null, _accent_decorators, { kind: "field", name: "accent", static: false, private: false, access: { has: obj => "accent" in obj, get: obj => obj.accent, set: (obj, value) => { obj.accent = value; } }, metadata: _metadata }, _accent_initializers, _accent_extraInitializers);
64
+ if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
65
+ }
66
+ constructor() {
67
+ this._anchor = anchor;
68
+ this.accent = __runInitializers(this, _accent_initializers, "#3b82f6");
69
+ __runInitializers(this, _accent_extraInitializers);
70
+ }
71
+ };
72
+ })();
73
+ const inst = new Comp();
74
+ inst.onMount?.();
75
+ expect(container.style.getPropertyValue("--accent")).toBe("#3b82f6");
76
+ });
77
+ it("updates CSS custom property reactively when field value changes", () => {
78
+ const anchor = makeAnchor(container);
79
+ let Comp = (() => {
80
+ let _color_decorators;
81
+ let _color_initializers = [];
82
+ let _color_extraInitializers = [];
83
+ return class Comp {
84
+ static {
85
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
86
+ _color_decorators = [Style("--color")];
87
+ __esDecorate(null, null, _color_decorators, { kind: "field", name: "color", static: false, private: false, access: { has: obj => "color" in obj, get: obj => obj.color, set: (obj, value) => { obj.color = value; } }, metadata: _metadata }, _color_initializers, _color_extraInitializers);
88
+ if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
89
+ }
90
+ constructor() {
91
+ this._anchor = anchor;
92
+ this.color = __runInitializers(this, _color_initializers, "red");
93
+ __runInitializers(this, _color_extraInitializers);
94
+ }
95
+ };
96
+ })();
97
+ const inst = new Comp();
98
+ inst.onMount?.();
99
+ expect(container.style.getPropertyValue("--color")).toBe("red");
100
+ inst.color = "blue";
101
+ expect(container.style.getPropertyValue("--color")).toBe("blue");
102
+ });
103
+ it("removes the CSS custom property on unmount", () => {
104
+ const anchor = makeAnchor(container);
105
+ let Comp = (() => {
106
+ let _accent_decorators;
107
+ let _accent_initializers = [];
108
+ let _accent_extraInitializers = [];
109
+ return class Comp {
110
+ static {
111
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
112
+ _accent_decorators = [Style("--accent")];
113
+ __esDecorate(null, null, _accent_decorators, { kind: "field", name: "accent", static: false, private: false, access: { has: obj => "accent" in obj, get: obj => obj.accent, set: (obj, value) => { obj.accent = value; } }, metadata: _metadata }, _accent_initializers, _accent_extraInitializers);
114
+ if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
115
+ }
116
+ constructor() {
117
+ this._anchor = anchor;
118
+ this.accent = __runInitializers(this, _accent_initializers, "red");
119
+ __runInitializers(this, _accent_extraInitializers);
120
+ }
121
+ };
122
+ })();
123
+ const inst = new Comp();
124
+ inst.onMount?.();
125
+ expect(container.style.getPropertyValue("--accent")).toBe("red");
126
+ inst.onUnmount?.();
127
+ expect(container.style.getPropertyValue("--accent")).toBe("");
128
+ });
129
+ it("does not throw when _anchor has no parentElement", () => {
130
+ const anchor = document.createComment("[/Comp]");
131
+ let Comp = (() => {
132
+ let _color_decorators;
133
+ let _color_initializers = [];
134
+ let _color_extraInitializers = [];
135
+ return class Comp {
136
+ static {
137
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
138
+ _color_decorators = [Style("--color")];
139
+ __esDecorate(null, null, _color_decorators, { kind: "field", name: "color", static: false, private: false, access: { has: obj => "color" in obj, get: obj => obj.color, set: (obj, value) => { obj.color = value; } }, metadata: _metadata }, _color_initializers, _color_extraInitializers);
140
+ if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
141
+ }
142
+ constructor() {
143
+ this._anchor = anchor;
144
+ this.color = __runInitializers(this, _color_initializers, "red");
145
+ __runInitializers(this, _color_extraInitializers);
146
+ }
147
+ };
148
+ })();
149
+ const inst = new Comp();
150
+ expect(() => inst.onMount?.()).not.toThrow();
151
+ expect(() => inst.onUnmount?.()).not.toThrow();
152
+ });
153
+ it("stops the reactive effect after onUnmount — further changes are silent", () => {
154
+ const anchor = makeAnchor(container);
155
+ let Comp = (() => {
156
+ let _val_decorators;
157
+ let _val_initializers = [];
158
+ let _val_extraInitializers = [];
159
+ return class Comp {
160
+ static {
161
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
162
+ _val_decorators = [Style("--val")];
163
+ __esDecorate(null, null, _val_decorators, { kind: "field", name: "val", static: false, private: false, access: { has: obj => "val" in obj, get: obj => obj.val, set: (obj, value) => { obj.val = value; } }, metadata: _metadata }, _val_initializers, _val_extraInitializers);
164
+ if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
165
+ }
166
+ constructor() {
167
+ this._anchor = anchor;
168
+ this.val = __runInitializers(this, _val_initializers, "a");
169
+ __runInitializers(this, _val_extraInitializers);
170
+ }
171
+ };
172
+ })();
173
+ const inst = new Comp();
174
+ inst.onMount?.();
175
+ expect(container.style.getPropertyValue("--val")).toBe("a");
176
+ inst.onUnmount?.();
177
+ inst.val = "b";
178
+ expect(container.style.getPropertyValue("--val")).toBe("");
179
+ });
180
+ it("supports numeric values (converted to string)", () => {
181
+ const anchor = makeAnchor(container);
182
+ let Comp = (() => {
183
+ let _size_decorators;
184
+ let _size_initializers = [];
185
+ let _size_extraInitializers = [];
186
+ return class Comp {
187
+ static {
188
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
189
+ _size_decorators = [Style("--size")];
190
+ __esDecorate(null, null, _size_decorators, { kind: "field", name: "size", static: false, private: false, access: { has: obj => "size" in obj, get: obj => obj.size, set: (obj, value) => { obj.size = value; } }, metadata: _metadata }, _size_initializers, _size_extraInitializers);
191
+ if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
192
+ }
193
+ constructor() {
194
+ this._anchor = anchor;
195
+ this.size = __runInitializers(this, _size_initializers, 16);
196
+ __runInitializers(this, _size_extraInitializers);
197
+ }
198
+ };
199
+ })();
200
+ const inst = new Comp();
201
+ inst.onMount?.();
202
+ expect(container.style.getPropertyValue("--size")).toBe("16");
203
+ });
204
+ it("getter returns the current signal value", () => {
205
+ const anchor = makeAnchor(container);
206
+ let Comp = (() => {
207
+ let _size_decorators;
208
+ let _size_initializers = [];
209
+ let _size_extraInitializers = [];
210
+ return class Comp {
211
+ static {
212
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
213
+ _size_decorators = [Style("--size")];
214
+ __esDecorate(null, null, _size_decorators, { kind: "field", name: "size", static: false, private: false, access: { has: obj => "size" in obj, get: obj => obj.size, set: (obj, value) => { obj.size = value; } }, metadata: _metadata }, _size_initializers, _size_extraInitializers);
215
+ if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
216
+ }
217
+ constructor() {
218
+ this._anchor = anchor;
219
+ this.size = __runInitializers(this, _size_initializers, "16px");
220
+ __runInitializers(this, _size_extraInitializers);
221
+ }
222
+ };
223
+ })();
224
+ const inst = new Comp();
225
+ // getter before mount
226
+ expect(inst.size).toBe("16px");
227
+ inst.onMount?.();
228
+ inst.size = "24px";
229
+ // getter after reactive update
230
+ expect(inst.size).toBe("24px");
231
+ });
232
+ it("supports multi-word custom property names", () => {
233
+ const anchor = makeAnchor(container);
234
+ let Comp = (() => {
235
+ let _radius_decorators;
236
+ let _radius_initializers = [];
237
+ let _radius_extraInitializers = [];
238
+ return class Comp {
239
+ static {
240
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
241
+ _radius_decorators = [Style("--card-border-radius")];
242
+ __esDecorate(null, null, _radius_decorators, { kind: "field", name: "radius", static: false, private: false, access: { has: obj => "radius" in obj, get: obj => obj.radius, set: (obj, value) => { obj.radius = value; } }, metadata: _metadata }, _radius_initializers, _radius_extraInitializers);
243
+ if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
244
+ }
245
+ constructor() {
246
+ this._anchor = anchor;
247
+ this.radius = __runInitializers(this, _radius_initializers, "12px");
248
+ __runInitializers(this, _radius_extraInitializers);
249
+ }
250
+ };
251
+ })();
252
+ const inst = new Comp();
253
+ inst.onMount?.();
254
+ expect(container.style.getPropertyValue("--card-border-radius")).toBe("12px");
255
+ });
256
+ });
257
+ //# sourceMappingURL=style.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style.test.js","sourceRoot":"","sources":["../../src/__tests__/style.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=styled.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styled.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/styled.test.ts"],"names":[],"mappings":""}