@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.
- package/LICENSE +21 -0
- package/README.md +139 -2
- package/dist/ansi/ornament.d.ts +3 -0
- package/dist/ansi/ornament.js +8 -0
- package/dist/ansi-panes.css +929 -0
- package/dist/art-deco.css +850 -0
- package/dist/atelier/ornament.d.ts +4 -0
- package/dist/atelier/ornament.js +9 -0
- package/dist/atomic/ornament.d.ts +3 -0
- package/dist/atomic/ornament.js +8 -0
- package/dist/atomic-lounge.css +946 -0
- package/dist/authoring.d.ts +142 -0
- package/dist/authoring.js +83 -0
- package/dist/azulejo/ornament.d.ts +3 -0
- package/dist/azulejo/ornament.js +8 -0
- package/dist/azulejo-tile.css +962 -0
- package/dist/blueprint/ornament.d.ts +3 -0
- package/dist/blueprint/ornament.js +8 -0
- package/dist/blueprint.css +897 -0
- package/dist/brutalist/ornament.d.ts +3 -0
- package/dist/brutalist/ornament.js +8 -0
- package/dist/brutalist-concrete.css +936 -0
- package/dist/bytes.json +162 -0
- package/dist/candy-clay.css +778 -0
- package/dist/catalog.d.ts +1346 -0
- package/dist/catalog.js +1379 -0
- package/dist/character.d.ts +103 -0
- package/dist/character.js +477 -0
- package/dist/chrome.d.ts +114 -0
- package/dist/chrome.js +247 -0
- package/dist/clay/ornament.d.ts +3 -0
- package/dist/clay/ornament.js +8 -0
- package/dist/compile-css.d.ts +3 -0
- package/dist/compile-css.js +133 -0
- package/dist/deco/ornament.d.ts +3 -0
- package/dist/deco/ornament.js +8 -0
- package/dist/diwali/ornament.d.ts +3 -0
- package/dist/diwali/ornament.js +8 -0
- package/dist/diwali-lights.css +894 -0
- package/dist/documents.d.ts +104 -0
- package/dist/documents.js +1411 -0
- package/dist/forest/ornament.d.ts +3 -0
- package/dist/forest/ornament.js +12 -0
- package/dist/foundations.d.ts +105 -0
- package/dist/foundations.js +140 -0
- package/dist/frame-corners.d.ts +5 -0
- package/dist/frame-corners.js +5 -0
- package/dist/frame-styles.d.ts +36 -0
- package/dist/frame-styles.js +146 -0
- package/dist/freeze.d.ts +2 -0
- package/dist/freeze.js +9 -0
- package/dist/freighter/ornament.d.ts +3 -0
- package/dist/freighter/ornament.js +8 -0
- package/dist/freighter.css +942 -0
- package/dist/glass/ornament.d.ts +3 -0
- package/dist/glass/ornament.js +8 -0
- package/dist/glass-ui.css +923 -0
- package/dist/hardware/ornament.d.ts +4 -0
- package/dist/hardware/ornament.js +10 -0
- package/dist/holi/ornament.d.ts +3 -0
- package/dist/holi/ornament.js +8 -0
- package/dist/holi-colours.css +887 -0
- package/dist/hud/ornament.d.ts +3 -0
- package/dist/hud/ornament.js +8 -0
- package/dist/light/ornament.d.ts +3 -0
- package/dist/light/ornament.js +10 -0
- package/dist/living-forest.css +917 -0
- package/dist/lunar/ornament.d.ts +3 -0
- package/dist/lunar/ornament.js +8 -0
- package/dist/lunar-new-year.css +811 -0
- package/dist/manifests.d.ts +2485 -0
- package/dist/manifests.js +264 -0
- package/dist/material-light.css +880 -0
- package/dist/neon/ornament.d.ts +3 -0
- package/dist/neon/ornament.js +8 -0
- package/dist/neon-night-market.css +944 -0
- package/dist/ocean/ornament.d.ts +3 -0
- package/dist/ocean/ornament.js +8 -0
- package/dist/ocean-depths.css +825 -0
- package/dist/orbital-hud.css +973 -0
- package/dist/organic-css.d.ts +3 -0
- package/dist/organic-css.js +23 -0
- package/dist/organic-geometry.d.ts +20 -0
- package/dist/organic-geometry.js +74 -0
- package/dist/organic-ornament.d.ts +9 -0
- package/dist/organic-ornament.js +28 -0
- package/dist/organic-paint-launch.d.ts +43 -0
- package/dist/organic-paint-launch.js +1156 -0
- package/dist/organic-paint-world.d.ts +24 -0
- package/dist/organic-paint-world.js +676 -0
- package/dist/organic-paint.d.ts +50 -0
- package/dist/organic-paint.js +695 -0
- package/dist/organic-runtime.d.ts +4 -0
- package/dist/organic-runtime.js +231 -0
- package/dist/organic-settings.d.ts +680 -0
- package/dist/organic-settings.js +433 -0
- package/dist/ornament-parts.d.ts +20 -0
- package/dist/ornament-parts.js +15 -0
- package/dist/papel-picado.css +904 -0
- package/dist/phosphor/ornament.d.ts +3 -0
- package/dist/phosphor/ornament.js +8 -0
- package/dist/phosphor-terminal.css +1011 -0
- package/dist/picado/ornament.d.ts +3 -0
- package/dist/picado/ornament.js +8 -0
- package/dist/prism/ornament.d.ts +4 -0
- package/dist/prism/ornament.js +9 -0
- package/dist/prism-glass.css +970 -0
- package/dist/recipes.d.ts +938 -0
- package/dist/recipes.js +939 -0
- package/dist/resolve.d.ts +40 -0
- package/dist/resolve.js +24 -0
- package/dist/retro/ornament.d.ts +5 -0
- package/dist/retro/ornament.js +10 -0
- package/dist/retro-os.css +867 -0
- package/dist/riso/ornament.d.ts +3 -0
- package/dist/riso/ornament.js +8 -0
- package/dist/riso-zine.css +786 -0
- package/dist/sail/ornament.d.ts +3 -0
- package/dist/sail/ornament.js +8 -0
- package/dist/scrapbook.css +685 -0
- package/dist/signal/ornament.d.ts +4 -0
- package/dist/signal/ornament.js +11 -0
- package/dist/skins/ansi-panes.d.ts +68 -0
- package/dist/skins/ansi-panes.js +68 -0
- package/dist/skins/art-deco.d.ts +68 -0
- package/dist/skins/art-deco.js +68 -0
- package/dist/skins/atomic-lounge.d.ts +68 -0
- package/dist/skins/atomic-lounge.js +68 -0
- package/dist/skins/azulejo-tile.d.ts +68 -0
- package/dist/skins/azulejo-tile.js +68 -0
- package/dist/skins/blueprint.d.ts +68 -0
- package/dist/skins/blueprint.js +68 -0
- package/dist/skins/brutalist-concrete.d.ts +68 -0
- package/dist/skins/brutalist-concrete.js +68 -0
- package/dist/skins/candy-clay.d.ts +57 -0
- package/dist/skins/candy-clay.js +57 -0
- package/dist/skins/diwali-lights.d.ts +68 -0
- package/dist/skins/diwali-lights.js +68 -0
- package/dist/skins/freighter.d.ts +68 -0
- package/dist/skins/freighter.js +68 -0
- package/dist/skins/glass-ui.d.ts +68 -0
- package/dist/skins/glass-ui.js +68 -0
- package/dist/skins/holi-colours.d.ts +68 -0
- package/dist/skins/holi-colours.js +68 -0
- package/dist/skins/living-forest.d.ts +68 -0
- package/dist/skins/living-forest.js +68 -0
- package/dist/skins/lunar-new-year.d.ts +68 -0
- package/dist/skins/lunar-new-year.js +68 -0
- package/dist/skins/material-light.d.ts +57 -0
- package/dist/skins/material-light.js +57 -0
- package/dist/skins/neon-night-market.d.ts +68 -0
- package/dist/skins/neon-night-market.js +68 -0
- package/dist/skins/ocean-depths.d.ts +57 -0
- package/dist/skins/ocean-depths.js +57 -0
- package/dist/skins/orbital-hud.d.ts +68 -0
- package/dist/skins/orbital-hud.js +68 -0
- package/dist/skins/papel-picado.d.ts +68 -0
- package/dist/skins/papel-picado.js +68 -0
- package/dist/skins/phosphor-terminal.d.ts +68 -0
- package/dist/skins/phosphor-terminal.js +68 -0
- package/dist/skins/prism-glass.d.ts +57 -0
- package/dist/skins/prism-glass.js +57 -0
- package/dist/skins/retro-os.d.ts +57 -0
- package/dist/skins/retro-os.js +57 -0
- package/dist/skins/riso-zine.d.ts +68 -0
- package/dist/skins/riso-zine.js +68 -0
- package/dist/skins/scrapbook.d.ts +57 -0
- package/dist/skins/scrapbook.js +57 -0
- package/dist/skins/solar-sail.d.ts +68 -0
- package/dist/skins/solar-sail.js +68 -0
- package/dist/skins/studio-hardware.d.ts +57 -0
- package/dist/skins/studio-hardware.js +57 -0
- package/dist/skins/sumi-ink.d.ts +68 -0
- package/dist/skins/sumi-ink.js +68 -0
- package/dist/skins/swiss-poster.d.ts +68 -0
- package/dist/skins/swiss-poster.js +68 -0
- package/dist/skins/tactile-atelier.d.ts +57 -0
- package/dist/skins/tactile-atelier.js +57 -0
- package/dist/skins/tokyo-transit.d.ts +68 -0
- package/dist/skins/tokyo-transit.js +68 -0
- package/dist/skins/winamp-signal.d.ts +57 -0
- package/dist/skins/winamp-signal.js +57 -0
- package/dist/skins/y2k-titanium.d.ts +57 -0
- package/dist/skins/y2k-titanium.js +57 -0
- package/dist/skins/yule-knit.d.ts +68 -0
- package/dist/skins/yule-knit.js +68 -0
- package/dist/solar-sail.css +901 -0
- package/dist/starters-launch.d.ts +361 -0
- package/dist/starters-launch.js +808 -0
- package/dist/studio-hardware.css +867 -0
- package/dist/sumi/ornament.d.ts +3 -0
- package/dist/sumi/ornament.js +8 -0
- package/dist/sumi-ink.css +733 -0
- package/dist/swiss/ornament.d.ts +3 -0
- package/dist/swiss/ornament.js +8 -0
- package/dist/swiss-poster.css +727 -0
- package/dist/tactile-atelier.css +922 -0
- package/dist/theme-document.schema.json +790 -0
- package/dist/theme-schema.d.ts +453 -0
- package/dist/theme-schema.js +416 -0
- package/dist/titanium/ornament.d.ts +3 -0
- package/dist/titanium/ornament.js +11 -0
- package/dist/tokyo-transit.css +756 -0
- package/dist/transit/ornament.d.ts +3 -0
- package/dist/transit/ornament.js +8 -0
- package/dist/winamp-signal.css +1048 -0
- package/dist/y2k-titanium.css +979 -0
- package/dist/yule/ornament.d.ts +3 -0
- package/dist/yule/ornament.js +8 -0
- package/dist/yule-knit.css +850 -0
- package/package.json +351 -3
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { paintForest } from "../organic-paint.js";
|
|
4
|
+
import { OrganicOrnament } from "../organic-ornament.js";
|
|
5
|
+
export function ForestOrnament(props) {
|
|
6
|
+
if (props.part === "switch-thumb" &&
|
|
7
|
+
props.ornament !== "quiet" &&
|
|
8
|
+
props.effects !== "reduced")
|
|
9
|
+
return (_jsx("span", { "aria-hidden": "true", className: "dixy-skin-ornament dixy-forest-ornament dixy-forest-ornament-switch-thumb", children: _jsxs("svg", { className: "dixy-forest-control-leaf", viewBox: "0 0 20 24", children: [_jsx("path", { d: "M3 22C-3 5 12 0 18 1C21 13 12 24 3 22Z", fill: "currentColor" }), _jsx("path", { d: "M3 22L15 5", fill: "none", stroke: "#cfdfa0", strokeWidth: ".8" })] }) }));
|
|
10
|
+
return (_jsx(OrganicOrnament, { ...props, kind: "forest", skin: "forest", painter: paintForest }));
|
|
11
|
+
}
|
|
12
|
+
export default ForestOrnament;
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import type { ThemeFoundations } from "./theme-schema.ts";
|
|
2
|
+
export declare const themeFonts: {
|
|
3
|
+
readonly inter: {
|
|
4
|
+
readonly label: "Inter";
|
|
5
|
+
readonly value: "\"Inter Variable\", Inter, ui-sans-serif, system-ui, sans-serif";
|
|
6
|
+
};
|
|
7
|
+
readonly grotesk: {
|
|
8
|
+
readonly label: "Space Grotesk";
|
|
9
|
+
readonly value: "\"Space Grotesk Variable\", \"Inter Variable\", ui-sans-serif, system-ui, sans-serif";
|
|
10
|
+
};
|
|
11
|
+
readonly system: {
|
|
12
|
+
readonly label: "System sans";
|
|
13
|
+
readonly value: "ui-sans-serif, system-ui, sans-serif";
|
|
14
|
+
};
|
|
15
|
+
readonly serif: {
|
|
16
|
+
readonly label: "System serif";
|
|
17
|
+
readonly value: "ui-serif, Georgia, Cambria, serif";
|
|
18
|
+
};
|
|
19
|
+
readonly mono: {
|
|
20
|
+
readonly label: "System mono";
|
|
21
|
+
readonly value: "ui-monospace, SFMono-Regular, Consolas, monospace";
|
|
22
|
+
};
|
|
23
|
+
readonly fraunces: {
|
|
24
|
+
readonly label: "Fraunces";
|
|
25
|
+
readonly value: "\"Fraunces Variable\", \"Fraunces\", ui-serif, Georgia, serif";
|
|
26
|
+
};
|
|
27
|
+
readonly deco: {
|
|
28
|
+
readonly label: "Poiret One";
|
|
29
|
+
readonly value: "\"Poiret One\", \"Josefin Sans\", \"Futura\", ui-sans-serif, sans-serif";
|
|
30
|
+
};
|
|
31
|
+
readonly pixel: {
|
|
32
|
+
readonly label: "Silkscreen";
|
|
33
|
+
readonly value: "\"Silkscreen\", \"VT323\", ui-monospace, monospace";
|
|
34
|
+
};
|
|
35
|
+
readonly techno: {
|
|
36
|
+
readonly label: "Orbitron";
|
|
37
|
+
readonly value: "\"Orbitron Variable\", \"Orbitron\", \"Eurostile\", \"Bank Gothic\", ui-sans-serif, sans-serif";
|
|
38
|
+
};
|
|
39
|
+
readonly rounded: {
|
|
40
|
+
readonly label: "Fredoka";
|
|
41
|
+
readonly value: "\"Fredoka Variable\", \"Fredoka\", ui-rounded, \"SF Pro Rounded\", \"Nunito\", sans-serif";
|
|
42
|
+
};
|
|
43
|
+
readonly lcd: {
|
|
44
|
+
readonly label: "Share Tech Mono";
|
|
45
|
+
readonly value: "\"Share Tech Mono\", \"VT323\", ui-monospace, monospace";
|
|
46
|
+
};
|
|
47
|
+
readonly plex: {
|
|
48
|
+
readonly label: "IBM Plex Mono";
|
|
49
|
+
readonly value: "\"IBM Plex Mono\", ui-monospace, SFMono-Regular, monospace";
|
|
50
|
+
};
|
|
51
|
+
readonly archivo: {
|
|
52
|
+
readonly label: "Archivo Black";
|
|
53
|
+
readonly value: "\"Archivo Black\", \"Arial Black\", ui-sans-serif, sans-serif";
|
|
54
|
+
};
|
|
55
|
+
readonly neon: {
|
|
56
|
+
readonly label: "Tilt Neon";
|
|
57
|
+
readonly value: "\"Tilt Neon\", \"Fredoka Variable\", ui-rounded, sans-serif";
|
|
58
|
+
};
|
|
59
|
+
readonly mincho: {
|
|
60
|
+
readonly label: "Shippori Mincho";
|
|
61
|
+
readonly value: "\"Shippori Mincho\", \"Hiragino Mincho ProN\", \"Yu Mincho\", ui-serif, serif";
|
|
62
|
+
};
|
|
63
|
+
readonly gothic: {
|
|
64
|
+
readonly label: "Zen Kaku Gothic New";
|
|
65
|
+
readonly value: "\"Zen Kaku Gothic New\", \"Hiragino Sans\", \"Yu Gothic\", ui-sans-serif, system-ui, sans-serif";
|
|
66
|
+
};
|
|
67
|
+
readonly playfair: {
|
|
68
|
+
readonly label: "Playfair Display";
|
|
69
|
+
readonly value: "\"Playfair Display Variable\", \"Playfair Display\", ui-serif, Georgia, serif";
|
|
70
|
+
};
|
|
71
|
+
readonly caveat: {
|
|
72
|
+
readonly label: "Caveat";
|
|
73
|
+
readonly value: "\"Caveat Variable\", \"Caveat\", \"Comic Sans MS\", cursive";
|
|
74
|
+
};
|
|
75
|
+
readonly bricolage: {
|
|
76
|
+
readonly label: "Bricolage Grotesque";
|
|
77
|
+
readonly value: "\"Bricolage Grotesque Variable\", \"Bricolage Grotesque\", ui-sans-serif, sans-serif";
|
|
78
|
+
};
|
|
79
|
+
readonly terminal: {
|
|
80
|
+
readonly label: "VT323";
|
|
81
|
+
readonly value: "\"VT323\", \"Share Tech Mono\", ui-monospace, monospace";
|
|
82
|
+
};
|
|
83
|
+
readonly jetbrains: {
|
|
84
|
+
readonly label: "JetBrains Mono";
|
|
85
|
+
readonly value: "\"JetBrains Mono\", ui-monospace, SFMono-Regular, Menlo, monospace";
|
|
86
|
+
};
|
|
87
|
+
readonly manrope: {
|
|
88
|
+
readonly label: "Manrope";
|
|
89
|
+
readonly value: "\"Manrope Variable\", \"Manrope\", ui-sans-serif, system-ui, sans-serif";
|
|
90
|
+
};
|
|
91
|
+
readonly figtree: {
|
|
92
|
+
readonly label: "Figtree";
|
|
93
|
+
readonly value: "\"Figtree Variable\", \"Figtree\", ui-sans-serif, system-ui, sans-serif";
|
|
94
|
+
};
|
|
95
|
+
readonly cormorant: {
|
|
96
|
+
readonly label: "Cormorant Garamond";
|
|
97
|
+
readonly value: "\"Cormorant Garamond Variable\", \"Cormorant Garamond\", \"Garamond\", ui-serif, Georgia, serif";
|
|
98
|
+
};
|
|
99
|
+
};
|
|
100
|
+
/** Optional @fontsource packages that load each named web font. System stacks need none. */
|
|
101
|
+
export declare const themeFontPackages: Partial<Record<keyof typeof themeFonts, string>>;
|
|
102
|
+
/** Shared by the compiled consumer settings and playground exports; no React or router import. */
|
|
103
|
+
export declare function themeFoundationStyle(settings: Pick<ThemeFoundations, "bodyFont" | "headingFont" | "border" | "depth">): Readonly<Record<string, string> & {
|
|
104
|
+
fontFamily: string;
|
|
105
|
+
}>;
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { fontFamilies, typography } from "@dixy-ui/tokens";
|
|
2
|
+
export const themeFonts = {
|
|
3
|
+
inter: { label: "Inter", value: fontFamilies.sans },
|
|
4
|
+
grotesk: { label: "Space Grotesk", value: fontFamilies.display },
|
|
5
|
+
system: {
|
|
6
|
+
label: "System sans",
|
|
7
|
+
value: "ui-sans-serif, system-ui, sans-serif",
|
|
8
|
+
},
|
|
9
|
+
serif: { label: "System serif", value: "ui-serif, Georgia, Cambria, serif" },
|
|
10
|
+
mono: {
|
|
11
|
+
label: "System mono",
|
|
12
|
+
value: "ui-monospace, SFMono-Regular, Consolas, monospace",
|
|
13
|
+
},
|
|
14
|
+
fraunces: {
|
|
15
|
+
label: "Fraunces",
|
|
16
|
+
value: '"Fraunces Variable", "Fraunces", ui-serif, Georgia, serif',
|
|
17
|
+
},
|
|
18
|
+
deco: {
|
|
19
|
+
label: "Poiret One",
|
|
20
|
+
value: '"Poiret One", "Josefin Sans", "Futura", ui-sans-serif, sans-serif',
|
|
21
|
+
},
|
|
22
|
+
pixel: {
|
|
23
|
+
label: "Silkscreen",
|
|
24
|
+
value: '"Silkscreen", "VT323", ui-monospace, monospace',
|
|
25
|
+
},
|
|
26
|
+
techno: {
|
|
27
|
+
label: "Orbitron",
|
|
28
|
+
value: '"Orbitron Variable", "Orbitron", "Eurostile", "Bank Gothic", ui-sans-serif, sans-serif',
|
|
29
|
+
},
|
|
30
|
+
rounded: {
|
|
31
|
+
label: "Fredoka",
|
|
32
|
+
value: '"Fredoka Variable", "Fredoka", ui-rounded, "SF Pro Rounded", "Nunito", sans-serif',
|
|
33
|
+
},
|
|
34
|
+
lcd: {
|
|
35
|
+
label: "Share Tech Mono",
|
|
36
|
+
value: '"Share Tech Mono", "VT323", ui-monospace, monospace',
|
|
37
|
+
},
|
|
38
|
+
// Google Fonts via Fontsource; each stack falls back to a close system face.
|
|
39
|
+
plex: {
|
|
40
|
+
label: "IBM Plex Mono",
|
|
41
|
+
value: '"IBM Plex Mono", ui-monospace, SFMono-Regular, monospace',
|
|
42
|
+
},
|
|
43
|
+
archivo: {
|
|
44
|
+
label: "Archivo Black",
|
|
45
|
+
value: '"Archivo Black", "Arial Black", ui-sans-serif, sans-serif',
|
|
46
|
+
},
|
|
47
|
+
neon: {
|
|
48
|
+
label: "Tilt Neon",
|
|
49
|
+
value: '"Tilt Neon", "Fredoka Variable", ui-rounded, sans-serif',
|
|
50
|
+
},
|
|
51
|
+
mincho: {
|
|
52
|
+
label: "Shippori Mincho",
|
|
53
|
+
value: '"Shippori Mincho", "Hiragino Mincho ProN", "Yu Mincho", ui-serif, serif',
|
|
54
|
+
},
|
|
55
|
+
gothic: {
|
|
56
|
+
label: "Zen Kaku Gothic New",
|
|
57
|
+
value: '"Zen Kaku Gothic New", "Hiragino Sans", "Yu Gothic", ui-sans-serif, system-ui, sans-serif',
|
|
58
|
+
},
|
|
59
|
+
playfair: {
|
|
60
|
+
label: "Playfair Display",
|
|
61
|
+
value: '"Playfair Display Variable", "Playfair Display", ui-serif, Georgia, serif',
|
|
62
|
+
},
|
|
63
|
+
caveat: {
|
|
64
|
+
label: "Caveat",
|
|
65
|
+
value: '"Caveat Variable", "Caveat", "Comic Sans MS", cursive',
|
|
66
|
+
},
|
|
67
|
+
bricolage: {
|
|
68
|
+
label: "Bricolage Grotesque",
|
|
69
|
+
value: '"Bricolage Grotesque Variable", "Bricolage Grotesque", ui-sans-serif, sans-serif',
|
|
70
|
+
},
|
|
71
|
+
terminal: {
|
|
72
|
+
label: "VT323",
|
|
73
|
+
value: '"VT323", "Share Tech Mono", ui-monospace, monospace',
|
|
74
|
+
},
|
|
75
|
+
jetbrains: {
|
|
76
|
+
label: "JetBrains Mono",
|
|
77
|
+
value: '"JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace',
|
|
78
|
+
},
|
|
79
|
+
manrope: {
|
|
80
|
+
label: "Manrope",
|
|
81
|
+
value: '"Manrope Variable", "Manrope", ui-sans-serif, system-ui, sans-serif',
|
|
82
|
+
},
|
|
83
|
+
figtree: {
|
|
84
|
+
label: "Figtree",
|
|
85
|
+
value: '"Figtree Variable", "Figtree", ui-sans-serif, system-ui, sans-serif',
|
|
86
|
+
},
|
|
87
|
+
cormorant: {
|
|
88
|
+
label: "Cormorant Garamond",
|
|
89
|
+
value: '"Cormorant Garamond Variable", "Cormorant Garamond", "Garamond", ui-serif, Georgia, serif',
|
|
90
|
+
},
|
|
91
|
+
};
|
|
92
|
+
/** Optional @fontsource packages that load each named web font. System stacks need none. */
|
|
93
|
+
export const themeFontPackages = {
|
|
94
|
+
inter: "@fontsource-variable/inter",
|
|
95
|
+
grotesk: "@fontsource-variable/space-grotesk",
|
|
96
|
+
fraunces: "@fontsource-variable/fraunces",
|
|
97
|
+
deco: "@fontsource/poiret-one",
|
|
98
|
+
pixel: "@fontsource/silkscreen",
|
|
99
|
+
techno: "@fontsource-variable/orbitron",
|
|
100
|
+
rounded: "@fontsource-variable/fredoka",
|
|
101
|
+
lcd: "@fontsource/share-tech-mono",
|
|
102
|
+
plex: "@fontsource/ibm-plex-mono",
|
|
103
|
+
archivo: "@fontsource/archivo-black",
|
|
104
|
+
neon: "@fontsource/tilt-neon",
|
|
105
|
+
mincho: "@fontsource/shippori-mincho",
|
|
106
|
+
gothic: "@fontsource/zen-kaku-gothic-new",
|
|
107
|
+
playfair: "@fontsource-variable/playfair-display",
|
|
108
|
+
caveat: "@fontsource-variable/caveat",
|
|
109
|
+
bricolage: "@fontsource-variable/bricolage-grotesque",
|
|
110
|
+
terminal: "@fontsource/vt323",
|
|
111
|
+
jetbrains: "@fontsource/jetbrains-mono",
|
|
112
|
+
manrope: "@fontsource-variable/manrope",
|
|
113
|
+
figtree: "@fontsource-variable/figtree",
|
|
114
|
+
cormorant: "@fontsource-variable/cormorant-garamond",
|
|
115
|
+
};
|
|
116
|
+
/** Shared by the compiled consumer settings and playground exports; no React or router import. */
|
|
117
|
+
export function themeFoundationStyle(settings) {
|
|
118
|
+
const style = {
|
|
119
|
+
fontFamily: themeFonts[settings.bodyFont].value,
|
|
120
|
+
"--dixy-font-sans": themeFonts[settings.bodyFont].value,
|
|
121
|
+
"--dixy-font-display": themeFonts[settings.headingFont].value,
|
|
122
|
+
"--dixy-skin-cushion-elevation": settings.depth === "none"
|
|
123
|
+
? "0 0 0 transparent"
|
|
124
|
+
: "var(--dixy-skin-cushion-cast)",
|
|
125
|
+
"--dixy-card-shadow": `var(--dixy-shadow-${settings.depth})`,
|
|
126
|
+
"--dixy-skin-depth-shadow": settings.depth === "none"
|
|
127
|
+
? "0 0 0 transparent"
|
|
128
|
+
: settings.depth === "floating"
|
|
129
|
+
? "var(--dixy-skin-authored-shadow, 0 0 0 transparent), var(--dixy-shadow-floating)"
|
|
130
|
+
: "var(--dixy-skin-authored-shadow, var(--dixy-shadow-raised))",
|
|
131
|
+
"--dixy-stroke-width": `${settings.border}px`,
|
|
132
|
+
};
|
|
133
|
+
for (const part of ["card", "button", "input", "dialog"])
|
|
134
|
+
style[`--dixy-${part}-border-width`] = `${settings.border}px`;
|
|
135
|
+
for (const role of Object.keys(typography))
|
|
136
|
+
if (role.startsWith("heading.") || role.startsWith("title."))
|
|
137
|
+
style[`--dixy-font-${role.replaceAll(".", "-")}-family`] =
|
|
138
|
+
themeFonts[settings.headingFont].value;
|
|
139
|
+
return Object.freeze(style);
|
|
140
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
/** Decorative paint only: corners never own content, focus or hit targets. */
|
|
3
|
+
export function FrameCorners({ children }) {
|
|
4
|
+
return (_jsx(_Fragment, { children: ["tl", "tr", "bl", "br"].map((corner) => (_jsx("svg", { className: `dixy-frame-corner dixy-frame-corner-${corner}`, viewBox: "0 0 80 80", fill: "none", children: children }, corner))) }));
|
|
5
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { ResolvedThemeRecipe } from "./resolve.ts";
|
|
2
|
+
export declare const framePrefixes: {
|
|
3
|
+
readonly forest: "forest";
|
|
4
|
+
readonly pixel: "retro";
|
|
5
|
+
readonly rails: "signal";
|
|
6
|
+
readonly ceramic: "hardware";
|
|
7
|
+
readonly glass: "prism";
|
|
8
|
+
readonly stitch: "atelier";
|
|
9
|
+
readonly coral: "ocean";
|
|
10
|
+
readonly cushion: "clay";
|
|
11
|
+
readonly deco: "deco";
|
|
12
|
+
readonly chamfer: "titanium";
|
|
13
|
+
readonly halo: "light";
|
|
14
|
+
readonly drafting: "blueprint";
|
|
15
|
+
readonly riso: "riso";
|
|
16
|
+
readonly neon: "neon";
|
|
17
|
+
readonly sumi: "sumi";
|
|
18
|
+
readonly transit: "transit";
|
|
19
|
+
readonly crt: "phosphor";
|
|
20
|
+
readonly panes: "ansi";
|
|
21
|
+
readonly swiss: "swiss";
|
|
22
|
+
readonly azulejo: "azulejo";
|
|
23
|
+
readonly formwork: "brutalist";
|
|
24
|
+
readonly atomic: "atomic";
|
|
25
|
+
readonly hud: "hud";
|
|
26
|
+
readonly hazard: "freighter";
|
|
27
|
+
readonly orbit: "sail";
|
|
28
|
+
readonly rangoli: "diwali";
|
|
29
|
+
readonly papercut: "lunar";
|
|
30
|
+
readonly picado: "picado";
|
|
31
|
+
readonly gulal: "holi";
|
|
32
|
+
readonly knit: "yule";
|
|
33
|
+
readonly liquid: "glass";
|
|
34
|
+
};
|
|
35
|
+
/** Frame code owns trim/geometry only. It never paints an input or action surface. */
|
|
36
|
+
export declare function frameStyles(m: ResolvedThemeRecipe, theme: string): string;
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { isOrganicFrame } from "./organic-settings.js";
|
|
2
|
+
export const framePrefixes = {
|
|
3
|
+
forest: "forest",
|
|
4
|
+
pixel: "retro",
|
|
5
|
+
rails: "signal",
|
|
6
|
+
ceramic: "hardware",
|
|
7
|
+
glass: "prism",
|
|
8
|
+
stitch: "atelier",
|
|
9
|
+
coral: "ocean",
|
|
10
|
+
cushion: "clay",
|
|
11
|
+
deco: "deco",
|
|
12
|
+
chamfer: "titanium",
|
|
13
|
+
halo: "light",
|
|
14
|
+
drafting: "blueprint",
|
|
15
|
+
riso: "riso",
|
|
16
|
+
neon: "neon",
|
|
17
|
+
sumi: "sumi",
|
|
18
|
+
transit: "transit",
|
|
19
|
+
crt: "phosphor",
|
|
20
|
+
panes: "ansi",
|
|
21
|
+
swiss: "swiss",
|
|
22
|
+
azulejo: "azulejo",
|
|
23
|
+
formwork: "brutalist",
|
|
24
|
+
atomic: "atomic",
|
|
25
|
+
hud: "hud",
|
|
26
|
+
hazard: "freighter",
|
|
27
|
+
orbit: "sail",
|
|
28
|
+
rangoli: "diwali",
|
|
29
|
+
papercut: "lunar",
|
|
30
|
+
picado: "picado",
|
|
31
|
+
gulal: "holi",
|
|
32
|
+
knit: "yule",
|
|
33
|
+
liquid: "glass",
|
|
34
|
+
};
|
|
35
|
+
/** Frame code owns trim/geometry only. It never paints an input or action surface. */
|
|
36
|
+
export function frameStyles(m, theme) {
|
|
37
|
+
if (m.frame === "none")
|
|
38
|
+
return "";
|
|
39
|
+
const prefix = framePrefixes[m.frame];
|
|
40
|
+
const art = `${theme} .dixy-${prefix}-ornament`;
|
|
41
|
+
const safe = {
|
|
42
|
+
x: Math.max(8, m.parameters.paddingInline - 8),
|
|
43
|
+
top: Math.max(8, m.parameters.paddingTop - 8),
|
|
44
|
+
bottom: Math.max(8, m.parameters.paddingBottom - 8),
|
|
45
|
+
};
|
|
46
|
+
const common = `
|
|
47
|
+
${art} { position:absolute; inset:0; display:block; pointer-events:none; user-select:none; border-radius:inherit; z-index:1; color:var(--dixy-skin-edge); }
|
|
48
|
+
${art}:is(.dixy-skin-ornament-card,.dixy-skin-ornament-dialog) {
|
|
49
|
+
clip-path:polygon(evenodd,0 0,100% 0,100% 100%,0 100%,0 0,var(--dixy-skin-frame-safe-inline,${safe.x}px) var(--dixy-skin-frame-safe-top,${safe.top}px),var(--dixy-skin-frame-safe-inline,${safe.x}px) calc(100% - var(--dixy-skin-frame-safe-bottom,${safe.bottom}px)),calc(100% - var(--dixy-skin-frame-safe-inline,${safe.x}px)) calc(100% - var(--dixy-skin-frame-safe-bottom,${safe.bottom}px)),calc(100% - var(--dixy-skin-frame-safe-inline,${safe.x}px)) var(--dixy-skin-frame-safe-top,${safe.top}px),var(--dixy-skin-frame-safe-inline,${safe.x}px) var(--dixy-skin-frame-safe-top,${safe.top}px));
|
|
50
|
+
}
|
|
51
|
+
${art}.dixy-skin-ornament-theme { z-index:-1; overflow:hidden; }
|
|
52
|
+
${art} .dixy-skin-definitions { position:absolute; overflow:hidden; }
|
|
53
|
+
${art} .dixy-skin-control-art { width:100%; height:100%; }
|
|
54
|
+
${art}.dixy-skin-ornament-switch-thumb { display:grid; place-items:center; inset:2px; }
|
|
55
|
+
${theme} .dixy-switch-thumb:not([data-checked]) > .dixy-${prefix}-ornament { display:none; }
|
|
56
|
+
${art} .dixy-skin-fastener { position:absolute; width:11px; height:11px; }
|
|
57
|
+
${art} .dixy-skin-fastener-tl { top:5px; left:5px; }
|
|
58
|
+
${art} .dixy-skin-fastener-tr { top:5px; right:5px; }
|
|
59
|
+
${art} .dixy-skin-fastener-bl { bottom:5px; left:5px; }
|
|
60
|
+
${art} .dixy-skin-fastener-br { bottom:5px; right:5px; }
|
|
61
|
+
${art}[data-animated] .dixy-skin-motion { animation:dixy-${prefix}-detail 4s ease-in-out infinite alternate; }
|
|
62
|
+
${art}[data-motion="reduced"] .dixy-skin-motion { animation:none; }
|
|
63
|
+
${art} .dixy-frame-corner { position:absolute; width:min(64px,50%); height:min(64px,50%); overflow:visible; }
|
|
64
|
+
${art} .dixy-frame-corner-tl { left:0; top:0; }
|
|
65
|
+
${art} .dixy-frame-corner-tr { right:0; top:0; transform:scaleX(-1); }
|
|
66
|
+
${art} .dixy-frame-corner-bl { left:0; bottom:0; transform:scaleY(-1); }
|
|
67
|
+
${art} .dixy-frame-corner-br { right:0; bottom:0; transform:scale(-1); }
|
|
68
|
+
@media(prefers-reduced-motion:reduce) { ${art}[data-animated] .dixy-skin-motion { animation:none; } }
|
|
69
|
+
@media(prefers-reduced-transparency:reduce),(prefers-contrast:more),(forced-colors:active) { ${art} { display:none; } }
|
|
70
|
+
`;
|
|
71
|
+
const details = {};
|
|
72
|
+
details.pixel = ` .dixy-retro-inlay { position:absolute; inset:0; border:1px solid #ffffff55; border-bottom-color:#10151e44; border-right-color:#10151e44; }
|
|
73
|
+
@keyframes dixy-retro-detail { from { opacity:.25; } to { opacity:1; } }`;
|
|
74
|
+
details.rails = ` .dixy-signal-rail { position:absolute; top:2px; left:2px; right:2px; height:19px; background:repeating-linear-gradient(0deg,#ffffff16 0 1px,#050a08aa 1px 3px); border:1px solid #030705; box-shadow:inset 0 1px 0 #ffffff22,0 1px 0 #ffffff22; }
|
|
75
|
+
.dixy-signal-meter { position:absolute; bottom:7px; right:21px; width:70px; height:10px; color:var(--dixy-color-background-action-primary); opacity:.8; }
|
|
76
|
+
.dixy-signal-bar { transform-origin:center 13px; animation-delay:var(--dixy-detail-delay)!important; }
|
|
77
|
+
@keyframes dixy-signal-detail { from { transform:scaleY(.4); opacity:.55; } to { transform:scaleY(1); opacity:1; } }`;
|
|
78
|
+
details.ceramic = ` .dixy-hardware-seam { position:absolute; inset:2px; border:1px solid #ffffff55; border-radius:inherit; box-shadow:inset 0 -1px 0 #00000018; }
|
|
79
|
+
.dixy-hardware-registration { position:absolute; bottom:9px; right:21px; width:70px; height:9px; color:var(--dixy-color-text-muted); opacity:.5; }
|
|
80
|
+
@keyframes dixy-hardware-detail { from { opacity:.2; } to { opacity:1; } }`;
|
|
81
|
+
details.glass = ` .dixy-prism-atmosphere { width:100%; height:100%; opacity:.9; }
|
|
82
|
+
.dixy-prism-caustic { position:absolute; top:-1px; left:12%; width:42%; height:1px; background:linear-gradient(90deg,transparent,#edf6ff,transparent); box-shadow:0 0 6px 1px #92c9ff77; }
|
|
83
|
+
.dixy-prism-facet { position:absolute; bottom:0; right:0; width:32px; height:32px; border-bottom-right-radius:inherit; opacity:.25; }
|
|
84
|
+
@keyframes dixy-prism-detail { from { transform:translateX(-2%); opacity:.65; } to { transform:translateX(2%); opacity:1; } }`;
|
|
85
|
+
details.stitch = ` .dixy-atelier-linen { display:block; }
|
|
86
|
+
.dixy-atelier-paper { position:absolute; inset:0; border-radius:inherit; overflow:hidden; mix-blend-mode:multiply; }
|
|
87
|
+
.dixy-atelier-wood { position:absolute; }
|
|
88
|
+
.dixy-atelier-wood-top,.dixy-atelier-wood-bottom { left:calc(1px - var(--dixy-skin-frame-width)); width:calc(100% + 2 * var(--dixy-skin-frame-width) - 2px); height:var(--dixy-skin-frame-width); }
|
|
89
|
+
.dixy-atelier-wood-top { top:calc(1px - var(--dixy-skin-frame-width)); border-radius:10px 10px 0 0; }
|
|
90
|
+
.dixy-atelier-wood-bottom { bottom:calc(1px - var(--dixy-skin-frame-width)); border-radius:0 0 10px 10px; }
|
|
91
|
+
.dixy-atelier-wood-left,.dixy-atelier-wood-right { top:-1px; width:var(--dixy-skin-frame-width); height:calc(100% + 2px); }
|
|
92
|
+
.dixy-atelier-wood-left { left:calc(1px - var(--dixy-skin-frame-width)); }
|
|
93
|
+
.dixy-atelier-wood-right { right:calc(1px - var(--dixy-skin-frame-width)); }
|
|
94
|
+
.dixy-atelier-stitch { position:absolute; inset:5px; border:1px dashed #9b785166; border-radius:8px; box-shadow:0 1px 0 #fff8e044; }
|
|
95
|
+
.dixy-atelier-gilt { position:absolute; top:-7px; left:12%; width:32%; height:1px; background:linear-gradient(90deg,transparent,#f8d9a766,transparent); }
|
|
96
|
+
@keyframes dixy-atelier-detail { from { opacity:.3; } to { opacity:1; } }`;
|
|
97
|
+
details.forest = `
|
|
98
|
+
.dixy-forest-ornament-switch-thumb { display:grid; place-items:center; inset:0; }
|
|
99
|
+
.dixy-forest-control-leaf { width:14px; height:17px; }
|
|
100
|
+
.dixy-switch-thumb:not([data-checked]) .dixy-forest-ornament-switch-thumb,[data-dixy-material-override] .dixy-forest-ornament-switch-thumb { display:none; }
|
|
101
|
+
`;
|
|
102
|
+
details.coral = `@keyframes dixy-ocean-detail { from { opacity:.45; } to { opacity:1; } }`;
|
|
103
|
+
details.cushion = `@keyframes dixy-clay-detail { from { transform:translateY(0); } to { transform:translateY(-2px); } }`;
|
|
104
|
+
details.deco = `@keyframes dixy-deco-detail { from { opacity:.5; } to { opacity:1; } }`;
|
|
105
|
+
details.chamfer = `@keyframes dixy-titanium-detail { from { opacity:.4; } to { opacity:1; } }`;
|
|
106
|
+
details.halo = `@keyframes dixy-light-detail { from { opacity:.35; } to { opacity:.8; } }`;
|
|
107
|
+
details.drafting = `@keyframes dixy-blueprint-detail { from { opacity:.5; } to { opacity:1; } }`;
|
|
108
|
+
details.riso = `@keyframes dixy-riso-detail { from { opacity:.5; } to { opacity:1; } }`;
|
|
109
|
+
details.neon = `@keyframes dixy-neon-detail { from { opacity:.5; } to { opacity:1; } }`;
|
|
110
|
+
details.sumi = `@keyframes dixy-sumi-detail { from { opacity:.5; } to { opacity:1; } }`;
|
|
111
|
+
details.transit = `@keyframes dixy-transit-detail { from { opacity:.5; } to { opacity:1; } }`;
|
|
112
|
+
// 2026-12 launch frames paint on canvas; their detail keyframe is a soft pulse.
|
|
113
|
+
details.crt = `@keyframes dixy-phosphor-detail { from { opacity:.5; } to { opacity:1; } }`;
|
|
114
|
+
details.panes = `@keyframes dixy-ansi-detail { from { opacity:.5; } to { opacity:1; } }`;
|
|
115
|
+
details.swiss = `@keyframes dixy-swiss-detail { from { opacity:.5; } to { opacity:1; } }`;
|
|
116
|
+
details.azulejo = `@keyframes dixy-azulejo-detail { from { opacity:.5; } to { opacity:1; } }`;
|
|
117
|
+
details.formwork = `@keyframes dixy-brutalist-detail { from { opacity:.5; } to { opacity:1; } }`;
|
|
118
|
+
details.atomic = `@keyframes dixy-atomic-detail { from { opacity:.5; } to { opacity:1; } }`;
|
|
119
|
+
details.hud = `@keyframes dixy-hud-detail { from { opacity:.5; } to { opacity:1; } }`;
|
|
120
|
+
details.hazard = `@keyframes dixy-freighter-detail { from { opacity:.5; } to { opacity:1; } }`;
|
|
121
|
+
details.orbit = `@keyframes dixy-sail-detail { from { opacity:.5; } to { opacity:1; } }`;
|
|
122
|
+
details.rangoli = `@keyframes dixy-diwali-detail { from { opacity:.5; } to { opacity:1; } }`;
|
|
123
|
+
details.papercut = `@keyframes dixy-lunar-detail { from { opacity:.5; } to { opacity:1; } }`;
|
|
124
|
+
details.picado = `@keyframes dixy-picado-detail { from { opacity:.5; } to { opacity:1; } }`;
|
|
125
|
+
details.gulal = `@keyframes dixy-holi-detail { from { opacity:.5; } to { opacity:1; } }`;
|
|
126
|
+
details.knit = `@keyframes dixy-yule-detail { from { opacity:.5; } to { opacity:1; } }`;
|
|
127
|
+
details.liquid = `@keyframes dixy-glass-detail { from { opacity:.5; } to { opacity:1; } }`;
|
|
128
|
+
// Scope every legacy ornament selector as well, so two custom frames can coexist.
|
|
129
|
+
const scoped = details[m.frame].replace(/(^|[}\n])([ \t]*)(\.dixy-[^{]+)\{/g, (_match, before, space, selector) => before +
|
|
130
|
+
space +
|
|
131
|
+
selector
|
|
132
|
+
.split(",")
|
|
133
|
+
.map((part) => `${theme} ${part.trim()}`)
|
|
134
|
+
.join(",") +
|
|
135
|
+
" {");
|
|
136
|
+
const texture = m.material === "botanical-paper" || m.material === "atelier-paper"
|
|
137
|
+
? ""
|
|
138
|
+
: `${theme} :is(.dixy-forest-paper,.dixy-atelier-paper,.dixy-atelier-linen) { display:none; }`;
|
|
139
|
+
const organic = isOrganicFrame(m.frame)
|
|
140
|
+
? `
|
|
141
|
+
${art}.dixy-organic-ornament { clip-path:none; overflow:visible; border-radius:inherit; }
|
|
142
|
+
${art} .dixy-organic-canvas { display:block; position:absolute; left:-32px; top:-32px; width:calc(100% + 64px); height:calc(100% + 64px); pointer-events:none; }
|
|
143
|
+
`
|
|
144
|
+
: "";
|
|
145
|
+
return common + scoped + texture + organic;
|
|
146
|
+
}
|
package/dist/freeze.d.ts
ADDED
package/dist/freeze.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** Used only for trusted schema/registry constants and compiler data, never executable input. */
|
|
2
|
+
export function freezeData(value) {
|
|
3
|
+
if (value && typeof value === "object" && !Object.isFrozen(value)) {
|
|
4
|
+
for (const child of Object.values(value))
|
|
5
|
+
freezeData(child);
|
|
6
|
+
Object.freeze(value);
|
|
7
|
+
}
|
|
8
|
+
return value;
|
|
9
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { paintHazard } from "../organic-paint-launch.js";
|
|
4
|
+
import { OrganicOrnament } from "../organic-ornament.js";
|
|
5
|
+
export function FreighterOrnament(props) {
|
|
6
|
+
return (_jsx(OrganicOrnament, { ...props, kind: "hazard", skin: "freighter", painter: paintHazard }));
|
|
7
|
+
}
|
|
8
|
+
export default FreighterOrnament;
|