@dixy-ui/themes 0.0.0-stage → 0.1.0-beta.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 (211) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +139 -2
  3. package/dist/ansi/ornament.d.ts +3 -0
  4. package/dist/ansi/ornament.js +8 -0
  5. package/dist/ansi-panes.css +929 -0
  6. package/dist/art-deco.css +850 -0
  7. package/dist/atelier/ornament.d.ts +4 -0
  8. package/dist/atelier/ornament.js +9 -0
  9. package/dist/atomic/ornament.d.ts +3 -0
  10. package/dist/atomic/ornament.js +8 -0
  11. package/dist/atomic-lounge.css +946 -0
  12. package/dist/authoring.d.ts +142 -0
  13. package/dist/authoring.js +83 -0
  14. package/dist/azulejo/ornament.d.ts +3 -0
  15. package/dist/azulejo/ornament.js +8 -0
  16. package/dist/azulejo-tile.css +962 -0
  17. package/dist/blueprint/ornament.d.ts +3 -0
  18. package/dist/blueprint/ornament.js +8 -0
  19. package/dist/blueprint.css +897 -0
  20. package/dist/brutalist/ornament.d.ts +3 -0
  21. package/dist/brutalist/ornament.js +8 -0
  22. package/dist/brutalist-concrete.css +936 -0
  23. package/dist/bytes.json +162 -0
  24. package/dist/candy-clay.css +778 -0
  25. package/dist/catalog.d.ts +1346 -0
  26. package/dist/catalog.js +1379 -0
  27. package/dist/character.d.ts +103 -0
  28. package/dist/character.js +477 -0
  29. package/dist/chrome.d.ts +114 -0
  30. package/dist/chrome.js +247 -0
  31. package/dist/clay/ornament.d.ts +3 -0
  32. package/dist/clay/ornament.js +8 -0
  33. package/dist/compile-css.d.ts +3 -0
  34. package/dist/compile-css.js +133 -0
  35. package/dist/deco/ornament.d.ts +3 -0
  36. package/dist/deco/ornament.js +8 -0
  37. package/dist/diwali/ornament.d.ts +3 -0
  38. package/dist/diwali/ornament.js +8 -0
  39. package/dist/diwali-lights.css +894 -0
  40. package/dist/documents.d.ts +104 -0
  41. package/dist/documents.js +1411 -0
  42. package/dist/forest/ornament.d.ts +3 -0
  43. package/dist/forest/ornament.js +12 -0
  44. package/dist/foundations.d.ts +105 -0
  45. package/dist/foundations.js +140 -0
  46. package/dist/frame-corners.d.ts +5 -0
  47. package/dist/frame-corners.js +5 -0
  48. package/dist/frame-styles.d.ts +36 -0
  49. package/dist/frame-styles.js +146 -0
  50. package/dist/freeze.d.ts +2 -0
  51. package/dist/freeze.js +9 -0
  52. package/dist/freighter/ornament.d.ts +3 -0
  53. package/dist/freighter/ornament.js +8 -0
  54. package/dist/freighter.css +942 -0
  55. package/dist/glass/ornament.d.ts +3 -0
  56. package/dist/glass/ornament.js +8 -0
  57. package/dist/glass-ui.css +923 -0
  58. package/dist/hardware/ornament.d.ts +4 -0
  59. package/dist/hardware/ornament.js +10 -0
  60. package/dist/holi/ornament.d.ts +3 -0
  61. package/dist/holi/ornament.js +8 -0
  62. package/dist/holi-colours.css +887 -0
  63. package/dist/hud/ornament.d.ts +3 -0
  64. package/dist/hud/ornament.js +8 -0
  65. package/dist/light/ornament.d.ts +3 -0
  66. package/dist/light/ornament.js +10 -0
  67. package/dist/living-forest.css +917 -0
  68. package/dist/lunar/ornament.d.ts +3 -0
  69. package/dist/lunar/ornament.js +8 -0
  70. package/dist/lunar-new-year.css +811 -0
  71. package/dist/manifests.d.ts +2485 -0
  72. package/dist/manifests.js +264 -0
  73. package/dist/material-light.css +880 -0
  74. package/dist/neon/ornament.d.ts +3 -0
  75. package/dist/neon/ornament.js +8 -0
  76. package/dist/neon-night-market.css +944 -0
  77. package/dist/ocean/ornament.d.ts +3 -0
  78. package/dist/ocean/ornament.js +8 -0
  79. package/dist/ocean-depths.css +825 -0
  80. package/dist/orbital-hud.css +973 -0
  81. package/dist/organic-css.d.ts +3 -0
  82. package/dist/organic-css.js +23 -0
  83. package/dist/organic-geometry.d.ts +20 -0
  84. package/dist/organic-geometry.js +74 -0
  85. package/dist/organic-ornament.d.ts +9 -0
  86. package/dist/organic-ornament.js +28 -0
  87. package/dist/organic-paint-launch.d.ts +43 -0
  88. package/dist/organic-paint-launch.js +1156 -0
  89. package/dist/organic-paint-world.d.ts +24 -0
  90. package/dist/organic-paint-world.js +676 -0
  91. package/dist/organic-paint.d.ts +50 -0
  92. package/dist/organic-paint.js +695 -0
  93. package/dist/organic-runtime.d.ts +4 -0
  94. package/dist/organic-runtime.js +231 -0
  95. package/dist/organic-settings.d.ts +680 -0
  96. package/dist/organic-settings.js +433 -0
  97. package/dist/ornament-parts.d.ts +20 -0
  98. package/dist/ornament-parts.js +15 -0
  99. package/dist/papel-picado.css +904 -0
  100. package/dist/phosphor/ornament.d.ts +3 -0
  101. package/dist/phosphor/ornament.js +8 -0
  102. package/dist/phosphor-terminal.css +1011 -0
  103. package/dist/picado/ornament.d.ts +3 -0
  104. package/dist/picado/ornament.js +8 -0
  105. package/dist/prism/ornament.d.ts +4 -0
  106. package/dist/prism/ornament.js +9 -0
  107. package/dist/prism-glass.css +970 -0
  108. package/dist/recipes.d.ts +938 -0
  109. package/dist/recipes.js +939 -0
  110. package/dist/resolve.d.ts +40 -0
  111. package/dist/resolve.js +24 -0
  112. package/dist/retro/ornament.d.ts +5 -0
  113. package/dist/retro/ornament.js +10 -0
  114. package/dist/retro-os.css +867 -0
  115. package/dist/riso/ornament.d.ts +3 -0
  116. package/dist/riso/ornament.js +8 -0
  117. package/dist/riso-zine.css +786 -0
  118. package/dist/sail/ornament.d.ts +3 -0
  119. package/dist/sail/ornament.js +8 -0
  120. package/dist/scrapbook.css +685 -0
  121. package/dist/signal/ornament.d.ts +4 -0
  122. package/dist/signal/ornament.js +11 -0
  123. package/dist/skins/ansi-panes.d.ts +68 -0
  124. package/dist/skins/ansi-panes.js +68 -0
  125. package/dist/skins/art-deco.d.ts +68 -0
  126. package/dist/skins/art-deco.js +68 -0
  127. package/dist/skins/atomic-lounge.d.ts +68 -0
  128. package/dist/skins/atomic-lounge.js +68 -0
  129. package/dist/skins/azulejo-tile.d.ts +68 -0
  130. package/dist/skins/azulejo-tile.js +68 -0
  131. package/dist/skins/blueprint.d.ts +68 -0
  132. package/dist/skins/blueprint.js +68 -0
  133. package/dist/skins/brutalist-concrete.d.ts +68 -0
  134. package/dist/skins/brutalist-concrete.js +68 -0
  135. package/dist/skins/candy-clay.d.ts +57 -0
  136. package/dist/skins/candy-clay.js +57 -0
  137. package/dist/skins/diwali-lights.d.ts +68 -0
  138. package/dist/skins/diwali-lights.js +68 -0
  139. package/dist/skins/freighter.d.ts +68 -0
  140. package/dist/skins/freighter.js +68 -0
  141. package/dist/skins/glass-ui.d.ts +68 -0
  142. package/dist/skins/glass-ui.js +68 -0
  143. package/dist/skins/holi-colours.d.ts +68 -0
  144. package/dist/skins/holi-colours.js +68 -0
  145. package/dist/skins/living-forest.d.ts +68 -0
  146. package/dist/skins/living-forest.js +68 -0
  147. package/dist/skins/lunar-new-year.d.ts +68 -0
  148. package/dist/skins/lunar-new-year.js +68 -0
  149. package/dist/skins/material-light.d.ts +57 -0
  150. package/dist/skins/material-light.js +57 -0
  151. package/dist/skins/neon-night-market.d.ts +68 -0
  152. package/dist/skins/neon-night-market.js +68 -0
  153. package/dist/skins/ocean-depths.d.ts +57 -0
  154. package/dist/skins/ocean-depths.js +57 -0
  155. package/dist/skins/orbital-hud.d.ts +68 -0
  156. package/dist/skins/orbital-hud.js +68 -0
  157. package/dist/skins/papel-picado.d.ts +68 -0
  158. package/dist/skins/papel-picado.js +68 -0
  159. package/dist/skins/phosphor-terminal.d.ts +68 -0
  160. package/dist/skins/phosphor-terminal.js +68 -0
  161. package/dist/skins/prism-glass.d.ts +57 -0
  162. package/dist/skins/prism-glass.js +57 -0
  163. package/dist/skins/retro-os.d.ts +57 -0
  164. package/dist/skins/retro-os.js +57 -0
  165. package/dist/skins/riso-zine.d.ts +68 -0
  166. package/dist/skins/riso-zine.js +68 -0
  167. package/dist/skins/scrapbook.d.ts +57 -0
  168. package/dist/skins/scrapbook.js +57 -0
  169. package/dist/skins/solar-sail.d.ts +68 -0
  170. package/dist/skins/solar-sail.js +68 -0
  171. package/dist/skins/studio-hardware.d.ts +57 -0
  172. package/dist/skins/studio-hardware.js +57 -0
  173. package/dist/skins/sumi-ink.d.ts +68 -0
  174. package/dist/skins/sumi-ink.js +68 -0
  175. package/dist/skins/swiss-poster.d.ts +68 -0
  176. package/dist/skins/swiss-poster.js +68 -0
  177. package/dist/skins/tactile-atelier.d.ts +57 -0
  178. package/dist/skins/tactile-atelier.js +57 -0
  179. package/dist/skins/tokyo-transit.d.ts +68 -0
  180. package/dist/skins/tokyo-transit.js +68 -0
  181. package/dist/skins/winamp-signal.d.ts +57 -0
  182. package/dist/skins/winamp-signal.js +57 -0
  183. package/dist/skins/y2k-titanium.d.ts +57 -0
  184. package/dist/skins/y2k-titanium.js +57 -0
  185. package/dist/skins/yule-knit.d.ts +68 -0
  186. package/dist/skins/yule-knit.js +68 -0
  187. package/dist/solar-sail.css +901 -0
  188. package/dist/starters-launch.d.ts +361 -0
  189. package/dist/starters-launch.js +808 -0
  190. package/dist/studio-hardware.css +867 -0
  191. package/dist/sumi/ornament.d.ts +3 -0
  192. package/dist/sumi/ornament.js +8 -0
  193. package/dist/sumi-ink.css +733 -0
  194. package/dist/swiss/ornament.d.ts +3 -0
  195. package/dist/swiss/ornament.js +8 -0
  196. package/dist/swiss-poster.css +727 -0
  197. package/dist/tactile-atelier.css +922 -0
  198. package/dist/theme-document.schema.json +790 -0
  199. package/dist/theme-schema.d.ts +453 -0
  200. package/dist/theme-schema.js +416 -0
  201. package/dist/titanium/ornament.d.ts +3 -0
  202. package/dist/titanium/ornament.js +11 -0
  203. package/dist/tokyo-transit.css +756 -0
  204. package/dist/transit/ornament.d.ts +3 -0
  205. package/dist/transit/ornament.js +8 -0
  206. package/dist/winamp-signal.css +1048 -0
  207. package/dist/y2k-titanium.css +979 -0
  208. package/dist/yule/ornament.d.ts +3 -0
  209. package/dist/yule/ornament.js +8 -0
  210. package/dist/yule-knit.css +850 -0
  211. package/package.json +351 -3
@@ -0,0 +1,3 @@
1
+ import type { ThemeDocument } from "./theme-schema.ts";
2
+ /** Portable numeric CSS controls; the optional renderer never executes imported data. */
3
+ export declare function organicOrnamentVariables(frame: string, settings: ThemeDocument["recipes"]["frame"]["ornament"]): Record<string, string>;
@@ -0,0 +1,23 @@
1
+ import { canopyShapes, stemCharacters, organicFrameRecipes, isOrganicFrame, } from "./organic-settings.js";
2
+ /** Portable numeric CSS controls; the optional renderer never executes imported data. */
3
+ export function organicOrnamentVariables(frame, settings) {
4
+ if (!isOrganicFrame(frame))
5
+ return {};
6
+ const recipe = organicFrameRecipes[frame];
7
+ const variables = {};
8
+ for (const key of [
9
+ "density",
10
+ "cornerDensity",
11
+ "canopyDepth",
12
+ "variation",
13
+ "scale",
14
+ "stemWeight",
15
+ "motion",
16
+ "seed",
17
+ ])
18
+ variables[`--dixy-organic-${key}`] = String(settings[key]);
19
+ variables["--dixy-organic-style"] = String(Math.max(0, recipe.styles.indexOf(settings.style)));
20
+ variables["--dixy-organic-canopy"] = String(canopyShapes.indexOf(settings.canopy));
21
+ variables["--dixy-organic-stem"] = String(stemCharacters.indexOf(settings.stem));
22
+ return variables;
23
+ }
@@ -0,0 +1,20 @@
1
+ export interface BorderPoint {
2
+ x: number;
3
+ y: number;
4
+ t: number;
5
+ }
6
+ export interface CornerRadius {
7
+ x: number;
8
+ y: number;
9
+ }
10
+ export interface BorderPath {
11
+ total: number;
12
+ corners: number[];
13
+ r: number;
14
+ at(distance: number): BorderPoint;
15
+ }
16
+ /** One perimeter in CSS pixels, including four independently sized elliptical corners. */
17
+ export declare function roundedBorder(width: number, height: number, input: readonly CornerRadius[]): BorderPath;
18
+ export declare function cssCornerRadius(value: string, width: number, height: number): CornerRadius;
19
+ /** Conservative leaf envelope, preventing amputated tips in the overflow gutter. */
20
+ export declare function boundedLeafLength(x: number, y: number, angle: number, length: number, width: number, height: number, gutter?: number): number;
@@ -0,0 +1,74 @@
1
+ /** One perimeter in CSS pixels, including four independently sized elliptical corners. */
2
+ export function roundedBorder(width, height, input) {
3
+ const w = Math.max(1, width), h = Math.max(1, height);
4
+ const radii = input.map(({ x, y }) => ({
5
+ x: Math.max(0, x),
6
+ y: Math.max(0, y),
7
+ }));
8
+ const fit = Math.min(1, w / Math.max(1, radii[0].x + radii[1].x), w / Math.max(1, radii[3].x + radii[2].x), h / Math.max(1, radii[0].y + radii[3].y), h / Math.max(1, radii[1].y + radii[2].y));
9
+ for (const radius of radii) {
10
+ radius.x *= fit;
11
+ radius.y *= fit;
12
+ }
13
+ const points = [];
14
+ const add = (x, y) => {
15
+ const prior = points.at(-1);
16
+ const distance = prior ? Math.hypot(x - prior.x, y - prior.y) : 0;
17
+ if (prior && distance < 1e-8)
18
+ return;
19
+ points.push({ x, y, d: (prior?.d ?? 0) + distance });
20
+ };
21
+ const corners = [];
22
+ add(radii[0].x, 0);
23
+ const arc = (index, cx, cy, start) => {
24
+ const radius = radii[index];
25
+ for (let step = 0; step <= 16; step++) {
26
+ const angle = start + ((step / 16) * Math.PI) / 2;
27
+ add(cx + Math.cos(angle) * radius.x, cy + Math.sin(angle) * radius.y);
28
+ if (step === 8)
29
+ corners.push(points.at(-1).d);
30
+ }
31
+ };
32
+ add(w - radii[1].x, 0);
33
+ arc(1, w - radii[1].x, radii[1].y, -Math.PI / 2);
34
+ add(w, h - radii[2].y);
35
+ arc(2, w - radii[2].x, h - radii[2].y, 0);
36
+ add(radii[3].x, h);
37
+ arc(3, radii[3].x, h - radii[3].y, Math.PI / 2);
38
+ add(0, radii[0].y);
39
+ arc(0, radii[0].x, radii[0].y, Math.PI);
40
+ add(radii[0].x, 0);
41
+ const total = points.at(-1).d;
42
+ return {
43
+ total,
44
+ corners,
45
+ r: Math.max(...radii.map((radius) => radius.x)),
46
+ at(distance) {
47
+ const d = ((distance % total) + total) % total;
48
+ let low = 1, high = points.length - 1;
49
+ while (low < high) {
50
+ const mid = (low + high) >> 1;
51
+ if (points[mid].d < d)
52
+ low = mid + 1;
53
+ else
54
+ high = mid;
55
+ }
56
+ const end = points[low], start = points[low - 1], mix = (d - start.d) / (end.d - start.d);
57
+ return {
58
+ x: start.x + (end.x - start.x) * mix,
59
+ y: start.y + (end.y - start.y) * mix,
60
+ t: Math.atan2(end.y - start.y, end.x - start.x),
61
+ };
62
+ },
63
+ };
64
+ }
65
+ export function cssCornerRadius(value, width, height) {
66
+ const [x, y = x] = value.trim().split(/\s+/);
67
+ const pixels = (part, size) => (Number.parseFloat(part) || 0) * (part.endsWith("%") ? size / 100 : 1);
68
+ return { x: pixels(x, width), y: pixels(y, height) };
69
+ }
70
+ /** Conservative leaf envelope, preventing amputated tips in the overflow gutter. */
71
+ export function boundedLeafLength(x, y, angle, length, width, height, gutter = 28) {
72
+ const dx = Math.abs(Math.cos(angle)), dy = Math.abs(Math.sin(angle));
73
+ return Math.max(0, Math.min(length, Math.min(x + gutter, width + gutter - x) / (dx + 0.45 * dy), Math.min(y + gutter, height + gutter - y) / (dy + 0.45 * dx)));
74
+ }
@@ -0,0 +1,9 @@
1
+ import type { OrnamentProps } from "./ornament-parts.js";
2
+ import type { OrganicFrame } from "./organic-settings.js";
3
+ import type { OrganicPainter } from "./organic-paint.js";
4
+ /** Optional decoration; never owns a primitive's hit targets, content or semantics. */
5
+ export declare function OrganicOrnament({ kind, skin, painter, ...props }: OrnamentProps & {
6
+ kind: OrganicFrame;
7
+ skin: string;
8
+ painter: OrganicPainter;
9
+ }): import("react").JSX.Element | null;
@@ -0,0 +1,28 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { useEffect, useId, useRef } from "react";
4
+ import { mountOrganicCanvas } from "./organic-runtime.js";
5
+ /** Optional decoration; never owns a primitive's hit targets, content or semantics. */
6
+ export function OrganicOrnament({ kind, skin, painter, ...props }) {
7
+ const canvas = useRef(null), id = useId();
8
+ const instance = [...id].reduce((hash, char) => (hash * 31 + char.charCodeAt(0)) % 997, 0);
9
+ useEffect(() => {
10
+ if (!canvas.current)
11
+ return;
12
+ return mountOrganicCanvas(canvas.current, kind, painter, instance, props.animate, props.motion);
13
+ }, [
14
+ kind,
15
+ painter,
16
+ instance,
17
+ props.animate,
18
+ props.motion,
19
+ props.effects,
20
+ props.ornament,
21
+ ]);
22
+ if (props.part === "theme" ||
23
+ props.part === "switch-thumb" ||
24
+ props.effects === "reduced" ||
25
+ props.ornament === "quiet")
26
+ return null;
27
+ return (_jsx("span", { "aria-hidden": "true", className: `dixy-skin-ornament dixy-${skin}-ornament dixy-skin-ornament-${props.part} dixy-${skin}-ornament-${props.part} dixy-organic-ornament`, "data-animated": (props.animate && props.motion !== "reduced") || undefined, "data-motion": props.motion, "data-ornament": props.ornament, children: _jsx("canvas", { ref: canvas, className: "dixy-organic-canvas", "aria-hidden": "true" }) }));
28
+ }
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Painters for the 2026-12 launch frames: terminal (crt, panes), extras
3
+ * (swiss, azulejo, formwork, atomic), sci-fi (hud, hazard, orbit), festival
4
+ * (rangoli, papercut, picado, gulal, knit) and Glass UI (liquid).
5
+ *
6
+ * Same contract as organic-paint-world.ts: card space spans 0..w × 0..h with a
7
+ * 32px gutter; every painter clips itself away from the content box (`limits`),
8
+ * outlines only follow the card's own rounded rectangle via `trace()`, and
9
+ * motion runs only while `playing`, so reduced motion gets a still frame.
10
+ */
11
+ import { type OrganicPainter } from "./organic-paint.ts";
12
+ export declare const paintPhosphor: OrganicPainter;
13
+ export declare const paintPanes: OrganicPainter;
14
+ export declare const paintSwiss: OrganicPainter;
15
+ export declare const paintAzulejo: OrganicPainter;
16
+ export declare const paintFormwork: OrganicPainter;
17
+ export declare const paintAtomic: OrganicPainter;
18
+ export declare const paintHud: OrganicPainter;
19
+ export declare const paintHazard: OrganicPainter;
20
+ export declare const paintOrbit: OrganicPainter;
21
+ export declare const paintRangoli: OrganicPainter;
22
+ export declare const paintPapercut: OrganicPainter;
23
+ export declare const paintPicado: OrganicPainter;
24
+ export declare const paintGulal: OrganicPainter;
25
+ export declare const paintKnit: OrganicPainter;
26
+ export declare const paintLiquid: OrganicPainter;
27
+ export declare const launchPainters: {
28
+ readonly crt: OrganicPainter;
29
+ readonly panes: OrganicPainter;
30
+ readonly swiss: OrganicPainter;
31
+ readonly azulejo: OrganicPainter;
32
+ readonly formwork: OrganicPainter;
33
+ readonly atomic: OrganicPainter;
34
+ readonly hud: OrganicPainter;
35
+ readonly hazard: OrganicPainter;
36
+ readonly orbit: OrganicPainter;
37
+ readonly rangoli: OrganicPainter;
38
+ readonly papercut: OrganicPainter;
39
+ readonly picado: OrganicPainter;
40
+ readonly gulal: OrganicPainter;
41
+ readonly knit: OrganicPainter;
42
+ readonly liquid: OrganicPainter;
43
+ };