Skip to content

Commit 68802d5

Browse files
Sync Community package from ThreeUI (#14)
* Sync Community package from 6b65f2dbec22ac58c56474f028aec5590e62d3c9 * Preserve SkeuomorphicToggle package API --------- Co-authored-by: threeui-community-bot <github-actions[bot]@users.noreply.github.com> Co-authored-by: MengTo <shadownessguy@gmail.com>
1 parent 3265804 commit 68802d5

45 files changed

Lines changed: 8214 additions & 208 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@designcodeio/threeui",
3-
"version": "1.1.0",
3+
"version": "1.2.0",
44
"description": "Open-source React components and interactive templates from ThreeUI Community.",
55
"license": "MIT",
66
"type": "module",

public/community-sync-report.json

Lines changed: 116 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
{
22
"schemaVersion": 1,
3-
"generatedAt": "2026-08-25T10:26:00.704Z",
4-
"sourceCommit": "bab60dad20e2290cf8e35753bf4fec14c017567e",
3+
"generatedAt": "2026-08-31T16:05:46.996Z",
4+
"sourceCommit": "6b65f2dbec22ac58c56474f028aec5590e62d3c9",
55
"communityParents": 43,
66
"communityRoutes": 104,
7-
"communityVariants": 147,
8-
"excludedProParents": 86,
7+
"communityVariants": 163,
8+
"excludedProParents": 108,
99
"excludedBetaParents": 23,
10-
"layoutStylesSha256": "5400401f66eb773d05a7b22a6e2fd16651b732a5bd366eee1ab8b479e0327f0d",
11-
"rendererStylesSha256": "6d975e7d3332aa85d7bc1a55cdff592d63b0403f0988dfefa905dbe4c341d328",
10+
"layoutStylesSha256": "cee8ebe47ad857149f52f12bb12324a83856fc403ea1431f238aec4ecc385760",
11+
"rendererStylesSha256": "dc36aeb914df4c554164304292d75738a770e454b1e2710bac1ce4169d5fee2a",
1212
"components": [
1313
{
1414
"id": "kage-landing-page",
@@ -136,7 +136,12 @@
136136
},
137137
{
138138
"id": "crt",
139-
"variantIds": [],
139+
"variantIds": [
140+
"terminal",
141+
"cinematic",
142+
"blue-screen",
143+
"nintendo"
144+
],
140145
"controlKeys": [
141146
"speed",
142147
"typeSpeed",
@@ -146,7 +151,41 @@
146151
"brightness",
147152
"opacity"
148153
],
149-
"variantControlKeys": {}
154+
"variantControlKeys": {
155+
"terminal": [
156+
"speed",
157+
"typeSpeed",
158+
"motion",
159+
"hue",
160+
"saturation",
161+
"brightness",
162+
"opacity"
163+
],
164+
"cinematic": [
165+
"speed",
166+
"motion",
167+
"hue",
168+
"saturation",
169+
"brightness",
170+
"opacity"
171+
],
172+
"blue-screen": [
173+
"speed",
174+
"motion",
175+
"hue",
176+
"saturation",
177+
"brightness",
178+
"opacity"
179+
],
180+
"nintendo": [
181+
"speed",
182+
"motion",
183+
"hue",
184+
"saturation",
185+
"brightness",
186+
"opacity"
187+
]
188+
}
150189
},
151190
{
152191
"id": "energy-orb",
@@ -769,13 +808,23 @@
769808
},
770809
{
771810
"id": "woven-cloth",
772-
"variantIds": [],
811+
"variantIds": [
812+
"woven-cloth",
813+
"iridescent",
814+
"atelier",
815+
"washi"
816+
],
773817
"controlKeys": [
774818
"hue",
775819
"saturation",
776820
"brightness"
777821
],
778-
"variantControlKeys": {}
822+
"variantControlKeys": {
823+
"woven-cloth": [],
824+
"iridescent": [],
825+
"atelier": [],
826+
"washi": []
827+
}
779828
},
780829
{
781830
"id": "performance-gauges",
@@ -863,7 +912,12 @@
863912
},
864913
{
865914
"id": "animated-top-dock",
866-
"variantIds": [],
915+
"variantIds": [
916+
"sable",
917+
"modern",
918+
"retro",
919+
"glass"
920+
],
867921
"controlKeys": [
868922
"proximity",
869923
"spring",
@@ -872,7 +926,44 @@
872926
"heightGrowth",
873927
"drop"
874928
],
875-
"variantControlKeys": {}
929+
"variantControlKeys": {
930+
"sable": [
931+
"proximity",
932+
"spring",
933+
"damping",
934+
"widthGrowth",
935+
"heightGrowth",
936+
"drop"
937+
],
938+
"modern": [
939+
"proximity",
940+
"spring",
941+
"damping",
942+
"widthGrowth",
943+
"heightGrowth",
944+
"drop"
945+
],
946+
"retro": [
947+
"pixelSize",
948+
"levels",
949+
"noise",
950+
"scanlines",
951+
"speed",
952+
"proximity",
953+
"widthGrowth"
954+
],
955+
"glass": [
956+
"particles",
957+
"thickness",
958+
"dispersion",
959+
"specular",
960+
"rim",
961+
"drift",
962+
"proximity",
963+
"heightGrowth",
964+
"drop"
965+
]
966+
}
876967
},
877968
{
878969
"id": "sketchbook",
@@ -966,16 +1057,27 @@
9661057
},
9671058
{
9681059
"id": "skeuomorphic-toggle",
969-
"variantIds": [],
1060+
"variantIds": [
1061+
"skeuomorphic-toggle",
1062+
"modern",
1063+
"glass",
1064+
"shader"
1065+
],
9701066
"controlKeys": [
9711067
"mode",
1068+
"speed",
9721069
"size",
9731070
"opacity",
9741071
"hue",
9751072
"saturation",
9761073
"brightness"
9771074
],
978-
"variantControlKeys": {}
1075+
"variantControlKeys": {
1076+
"skeuomorphic-toggle": [],
1077+
"modern": [],
1078+
"glass": [],
1079+
"shader": []
1080+
}
9791081
},
9801082
{
9811083
"id": "matrix-field",

public/source-code.json

Lines changed: 190 additions & 28 deletions
Large diffs are not rendered by default.

scripts/generate-library-entry.mjs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,18 @@ const exports = [
1515
...[...catalog.matchAll(eagerPattern)].map((match) => ({ path: match[2].replace("../", "./"), name: match[1] })),
1616
];
1717

18+
const compatibilityExports = [
19+
{ name: "SkeuomorphicToggle", path: "./shaders/neuform-isolated/NeuformBatchEffects" },
20+
];
21+
22+
for (const compatibilityExport of compatibilityExports) {
23+
const current = exports.find((item) => item.name === compatibilityExport.name);
24+
if (current && current.path !== compatibilityExport.path) {
25+
throw new Error(`Compatibility export ${compatibilityExport.name} moved from ${compatibilityExport.path} to ${current.path}.`);
26+
}
27+
if (!current) exports.push(compatibilityExport);
28+
}
29+
1830
if (!exports.length) throw new Error("No Community renderer exports were found in src/data/shaders.tsx");
1931

2032
const names = new Set();

scripts/library-package.test.mjs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ const packageJson = JSON.parse(await readFile(resolve(root, "package.json"), "ut
99
const cliPackageJson = JSON.parse(await readFile(resolve(root, "packages/cli/package.json"), "utf8"));
1010
const catalog = await readFile(resolve(root, "src/data/shaders.tsx"), "utf8");
1111
const generator = await readFile(resolve(root, "scripts/generate-library-entry.mjs"), "utf8");
12+
const libraryEntry = await readFile(resolve(root, "src/index.ts"), "utf8");
13+
const legacyToggleEntry = await readFile(resolve(root, "src/package-components/SkeuomorphicToggle.ts"), "utf8");
1214

1315
test("the npm package is public and exports ESM, types, CSS, and assets", () => {
1416
assert.equal(packageJson.name, "@designcodeio/threeui");
@@ -33,3 +35,11 @@ test("the generated library surface is derived only from the Community catalog i
3335
assert.doesNotMatch(catalog, /\bProRenderer\b|access:\s*["']pro["']/i);
3436
assert.match(catalog, /CommunityRenderer1/);
3537
});
38+
39+
test("the expanded toggle collection preserves the published toggle imports", () => {
40+
assert.match(generator, /compatibilityExports/);
41+
assert.match(generator, /name: "SkeuomorphicToggle"/);
42+
assert.match(libraryEntry, /export \{ SkeuomorphicToggle \} from "\.\/package-components\/SkeuomorphicToggle"/);
43+
assert.match(libraryEntry, /export \{ SkeuomorphicToggleCollection \} from "\.\/package-components\/SkeuomorphicToggleCollection"/);
44+
assert.match(legacyToggleEntry, /export \{ SkeuomorphicToggle \} from "\.\.\/shaders\/neuform-isolated\/NeuformBatchEffects"/);
45+
});

scripts/package-install-smoke.mjs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,11 @@ try {
4141
);
4242
execFileSync(
4343
process.execPath,
44-
["--input-type=module", "--eval", "const root = await import('@designcodeio/threeui'); const subpath = await import('@designcodeio/threeui/components/CloudField'); if (Object.keys(root).length < 1 || typeof subpath.CloudField !== 'function') process.exit(1);"],
44+
[
45+
"--input-type=module",
46+
"--eval",
47+
"const root = await import('@designcodeio/threeui'); const cloud = await import('@designcodeio/threeui/components/CloudField'); const legacyToggle = await import('@designcodeio/threeui/components/SkeuomorphicToggle'); const toggleCollection = await import('@designcodeio/threeui/components/SkeuomorphicToggleCollection'); if (typeof root.SkeuomorphicToggle !== 'function' || typeof root.SkeuomorphicToggleCollection !== 'function' || typeof cloud.CloudField !== 'function' || typeof legacyToggle.SkeuomorphicToggle !== 'function' || typeof toggleCollection.SkeuomorphicToggleCollection !== 'function') process.exit(1);",
48+
],
4549
{ cwd: consumerDirectory, stdio: "inherit", env: environment },
4650
);
4751
console.log(`Anonymous install smoke test passed for ${packResult[0].filename}.`);

src/browseTaxonomy.js

Lines changed: 40 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -50,11 +50,6 @@ const CATEGORY_CONTENT = Object.freeze({
5050
heading: "Web motion design components",
5151
description: "Browse motion design components for interactive websites, including cinematic transitions, responsive animation, and production-ready source.",
5252
}),
53-
Sections: Object.freeze({
54-
title: "Interactive Website Sections",
55-
heading: "Interactive website sections",
56-
description: "Browse reusable website sections with interactive layouts, polished motion, responsive behavior, and copy-ready implementation source.",
57-
}),
5853
});
5954

6055
const CATEGORY_FAQS = Object.freeze({
@@ -150,6 +145,42 @@ const CATEGORY_FAQS = Object.freeze({
150145
]),
151146
});
152147

148+
// Keep tag URLs useful as browse filters without automatically asking search
149+
// engines to index every internal catalog descriptor. This list is deliberately
150+
// limited to distinct technologies and visual techniques with substantive
151+
// collections; category synonyms belong to their dedicated category routes.
152+
export const INDEXABLE_BROWSE_TAGS = Object.freeze([
153+
"3d",
154+
"canvas",
155+
"canvas2d",
156+
"crt",
157+
"flow field",
158+
"fluid",
159+
"glsl",
160+
"gsap",
161+
"halftone",
162+
"hover",
163+
"isometric",
164+
"noise",
165+
"parallax",
166+
"particles",
167+
"physics",
168+
"point cloud",
169+
"postprocessing",
170+
"procedural",
171+
"refraction",
172+
"scroll",
173+
"scrolltrigger",
174+
"shader",
175+
"shadermaterial",
176+
"tailwind",
177+
"typography",
178+
"webgl",
179+
"webgl2",
180+
]);
181+
182+
const INDEXABLE_BROWSE_TAG_SET = new Set(INDEXABLE_BROWSE_TAGS);
183+
153184
const TOKEN_LABELS = Object.freeze({
154185
"2d": "2D",
155186
"3d": "3D",
@@ -193,6 +224,10 @@ export function browseTagLabel(tag) {
193224
.join(" ");
194225
}
195226

227+
export function isIndexableBrowseTag(tag) {
228+
return typeof tag === "string" && INDEXABLE_BROWSE_TAG_SET.has(tag.trim().toLowerCase());
229+
}
230+
196231
export function browseTagContent(tag, resultCount = 0) {
197232
const label = browseTagLabel(tag);
198233
const countText = resultCount > 0 ? `${resultCount} ` : "";

0 commit comments

Comments
 (0)