@react-scad/core 0.1.3

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 (93) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +91 -0
  3. package/dist/index.d.ts +6 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +2 -0
  6. package/dist/primitives/circle.d.ts +14 -0
  7. package/dist/primitives/circle.d.ts.map +1 -0
  8. package/dist/primitives/circle.js +12 -0
  9. package/dist/primitives/cube.d.ts +13 -0
  10. package/dist/primitives/cube.d.ts.map +1 -0
  11. package/dist/primitives/cube.js +13 -0
  12. package/dist/primitives/cylinder.d.ts +16 -0
  13. package/dist/primitives/cylinder.d.ts.map +1 -0
  14. package/dist/primitives/cylinder.js +10 -0
  15. package/dist/primitives/difference.d.ts +11 -0
  16. package/dist/primitives/difference.d.ts.map +1 -0
  17. package/dist/primitives/difference.js +9 -0
  18. package/dist/primitives/group.d.ts +11 -0
  19. package/dist/primitives/group.d.ts.map +1 -0
  20. package/dist/primitives/group.js +9 -0
  21. package/dist/primitives/import.d.ts +14 -0
  22. package/dist/primitives/import.d.ts.map +1 -0
  23. package/dist/primitives/import.js +15 -0
  24. package/dist/primitives/index.d.ts +41 -0
  25. package/dist/primitives/index.d.ts.map +1 -0
  26. package/dist/primitives/index.js +20 -0
  27. package/dist/primitives/intersection.d.ts +11 -0
  28. package/dist/primitives/intersection.d.ts.map +1 -0
  29. package/dist/primitives/intersection.js +9 -0
  30. package/dist/primitives/linear-extrude.d.ts +18 -0
  31. package/dist/primitives/linear-extrude.d.ts.map +1 -0
  32. package/dist/primitives/linear-extrude.js +31 -0
  33. package/dist/primitives/polygon.d.ts +14 -0
  34. package/dist/primitives/polygon.d.ts.map +1 -0
  35. package/dist/primitives/polygon.js +14 -0
  36. package/dist/primitives/polyhedron.d.ts +14 -0
  37. package/dist/primitives/polyhedron.d.ts.map +1 -0
  38. package/dist/primitives/polyhedron.js +11 -0
  39. package/dist/primitives/primitive.d.ts +7 -0
  40. package/dist/primitives/primitive.d.ts.map +1 -0
  41. package/dist/primitives/primitive.js +5 -0
  42. package/dist/primitives/raw.d.ts +12 -0
  43. package/dist/primitives/raw.d.ts.map +1 -0
  44. package/dist/primitives/raw.js +12 -0
  45. package/dist/primitives/rotate-extrude.d.ts +14 -0
  46. package/dist/primitives/rotate-extrude.d.ts.map +1 -0
  47. package/dist/primitives/rotate-extrude.js +19 -0
  48. package/dist/primitives/rotate.d.ts +13 -0
  49. package/dist/primitives/rotate.d.ts.map +1 -0
  50. package/dist/primitives/rotate.js +11 -0
  51. package/dist/primitives/scale.d.ts +12 -0
  52. package/dist/primitives/scale.d.ts.map +1 -0
  53. package/dist/primitives/scale.js +10 -0
  54. package/dist/primitives/sphere.d.ts +14 -0
  55. package/dist/primitives/sphere.d.ts.map +1 -0
  56. package/dist/primitives/sphere.js +12 -0
  57. package/dist/primitives/square.d.ts +13 -0
  58. package/dist/primitives/square.d.ts.map +1 -0
  59. package/dist/primitives/square.js +13 -0
  60. package/dist/primitives/surface.d.ts +15 -0
  61. package/dist/primitives/surface.d.ts.map +1 -0
  62. package/dist/primitives/surface.js +17 -0
  63. package/dist/primitives/text.d.ts +20 -0
  64. package/dist/primitives/text.d.ts.map +1 -0
  65. package/dist/primitives/text.js +27 -0
  66. package/dist/primitives/translate.d.ts +12 -0
  67. package/dist/primitives/translate.d.ts.map +1 -0
  68. package/dist/primitives/translate.js +10 -0
  69. package/dist/primitives/union.d.ts +11 -0
  70. package/dist/primitives/union.d.ts.map +1 -0
  71. package/dist/primitives/union.js +9 -0
  72. package/dist/runtime/index.d.ts +62 -0
  73. package/dist/runtime/index.d.ts.map +1 -0
  74. package/dist/runtime/index.js +147 -0
  75. package/dist/runtime/node-ops.d.ts +6 -0
  76. package/dist/runtime/node-ops.d.ts.map +1 -0
  77. package/dist/runtime/node-ops.js +517 -0
  78. package/dist/runtime/reconciler.d.ts +5 -0
  79. package/dist/runtime/reconciler.d.ts.map +1 -0
  80. package/dist/runtime/reconciler.js +10 -0
  81. package/dist/runtime/root.d.ts +13 -0
  82. package/dist/runtime/root.d.ts.map +1 -0
  83. package/dist/runtime/root.js +26 -0
  84. package/dist/serialize/index.d.ts +5 -0
  85. package/dist/serialize/index.d.ts.map +1 -0
  86. package/dist/serialize/index.js +81 -0
  87. package/dist/types.d.ts +149 -0
  88. package/dist/types.d.ts.map +1 -0
  89. package/dist/types.js +1 -0
  90. package/dist/utils.d.ts +7 -0
  91. package/dist/utils.d.ts.map +1 -0
  92. package/dist/utils.js +19 -0
  93. package/package.json +44 -0
@@ -0,0 +1,149 @@
1
+ export type ScadExpr = number | string;
2
+ export type Vec2 = [ScadExpr, ScadExpr] | ScadExpr;
3
+ export type Vec3 = [ScadExpr, ScadExpr, ScadExpr] | ScadExpr;
4
+ export type Fn = number | undefined;
5
+ export interface CubeNode {
6
+ kind: "cube";
7
+ size: Vec3;
8
+ center: boolean;
9
+ children: ScadNode[];
10
+ }
11
+ export interface SphereNode {
12
+ kind: "sphere";
13
+ r?: ScadExpr;
14
+ d?: ScadExpr;
15
+ $fn?: Fn;
16
+ children: ScadNode[];
17
+ }
18
+ export interface CylinderNode {
19
+ kind: "cylinder";
20
+ h: ScadExpr;
21
+ r1: ScadExpr;
22
+ r2: ScadExpr;
23
+ $fn?: Fn;
24
+ children: ScadNode[];
25
+ }
26
+ export interface UnionNode {
27
+ kind: "union";
28
+ children: ScadNode[];
29
+ }
30
+ export interface DifferenceNode {
31
+ kind: "difference";
32
+ children: ScadNode[];
33
+ }
34
+ export interface IntersectionNode {
35
+ kind: "intersection";
36
+ children: ScadNode[];
37
+ }
38
+ export interface TranslateNode {
39
+ kind: "translate";
40
+ v: Vec3;
41
+ children: ScadNode[];
42
+ }
43
+ export interface RotateNode {
44
+ kind: "rotate";
45
+ a: Vec3;
46
+ v?: Vec3;
47
+ children: ScadNode[];
48
+ }
49
+ export interface ScaleNode {
50
+ kind: "scale";
51
+ v: Vec3;
52
+ children: ScadNode[];
53
+ }
54
+ export interface GroupNode {
55
+ kind: "group";
56
+ children: ScadNode[];
57
+ }
58
+ export interface RawNode {
59
+ kind: "raw";
60
+ code: string;
61
+ children: ScadNode[];
62
+ }
63
+ export interface PolyhedronNode {
64
+ kind: "polyhedron";
65
+ points: [number, number, number][];
66
+ faces: number[][];
67
+ convexity?: number;
68
+ children: ScadNode[];
69
+ }
70
+ export interface SquareNode {
71
+ kind: "square";
72
+ size: Vec2;
73
+ center: boolean;
74
+ children: ScadNode[];
75
+ }
76
+ export interface CircleNode {
77
+ kind: "circle";
78
+ r?: ScadExpr;
79
+ d?: ScadExpr;
80
+ $fn?: Fn;
81
+ children: ScadNode[];
82
+ }
83
+ export interface PolygonNode {
84
+ kind: "polygon";
85
+ points: [number, number][];
86
+ paths?: number[][];
87
+ convexity?: number;
88
+ children: ScadNode[];
89
+ }
90
+ export interface LinearExtrudeNode {
91
+ kind: "linear_extrude";
92
+ height: ScadExpr;
93
+ center?: boolean;
94
+ twist?: ScadExpr;
95
+ scale?: Vec2 | ScadExpr;
96
+ convexity?: number;
97
+ slices?: number;
98
+ $fn?: Fn;
99
+ children: ScadNode[];
100
+ }
101
+ export interface RotateExtrudeNode {
102
+ kind: "rotate_extrude";
103
+ angle?: ScadExpr;
104
+ convexity?: number;
105
+ $fn?: Fn;
106
+ children: ScadNode[];
107
+ }
108
+ export interface TextNode {
109
+ kind: "text";
110
+ text: string;
111
+ size?: number;
112
+ font?: string;
113
+ halign?: "left" | "center" | "right";
114
+ valign?: "top" | "center" | "baseline" | "bottom";
115
+ direction?: "ltr" | "rtl" | "ttb" | "btt";
116
+ language?: string;
117
+ script?: string;
118
+ spacing?: number;
119
+ children: ScadNode[];
120
+ }
121
+ export interface SurfaceNode {
122
+ kind: "surface";
123
+ file: string;
124
+ center?: boolean;
125
+ invert?: boolean;
126
+ convexity?: number;
127
+ children: ScadNode[];
128
+ }
129
+ export interface ImportNode {
130
+ kind: "import";
131
+ file: string;
132
+ convexity?: number;
133
+ layer?: string;
134
+ children: ScadNode[];
135
+ }
136
+ export interface UnknownNode {
137
+ kind: "unknown";
138
+ type: string;
139
+ props: Record<string, unknown>;
140
+ children: ScadNode[];
141
+ }
142
+ export type ScadNode = CubeNode | SphereNode | CylinderNode | PolyhedronNode | SquareNode | CircleNode | PolygonNode | UnionNode | DifferenceNode | IntersectionNode | TranslateNode | RotateNode | ScaleNode | LinearExtrudeNode | RotateExtrudeNode | TextNode | SurfaceNode | ImportNode | GroupNode | RawNode | UnknownNode;
143
+ export interface ScadContainer {
144
+ children: ScadNode[];
145
+ }
146
+ export interface SerializeContext {
147
+ serializeNode: (node: ScadNode, indent: string) => string;
148
+ }
149
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,7 @@
1
+ import type { Vec2, Vec3 } from "./types.js";
2
+ export declare function formatVec2(v: Vec2): string;
3
+ export declare function formatVec3(v: Vec3): string;
4
+ export declare function formatPoints2D(points: [number, number][]): string;
5
+ export declare function formatPoints3D(points: [number, number, number][]): string;
6
+ export declare function formatFaces(faces: number[][]): string;
7
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAE7C,wBAAgB,UAAU,CAAC,CAAC,EAAE,IAAI,GAAG,MAAM,CAG1C;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,IAAI,GAAG,MAAM,CAG1C;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,MAAM,CAEjE;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,MAAM,CAEzE;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,GAAG,MAAM,CAErD"}
package/dist/utils.js ADDED
@@ -0,0 +1,19 @@
1
+ export function formatVec2(v) {
2
+ if (typeof v === "number" || typeof v === "string")
3
+ return String(v);
4
+ return `[${String(v[0])}, ${String(v[1])}]`;
5
+ }
6
+ export function formatVec3(v) {
7
+ if (typeof v === "number" || typeof v === "string")
8
+ return String(v);
9
+ return `[${String(v[0])}, ${String(v[1])}, ${String(v[2])}]`;
10
+ }
11
+ export function formatPoints2D(points) {
12
+ return `[${points.map((p) => `[${p[0]}, ${p[1]}]`).join(", ")}]`;
13
+ }
14
+ export function formatPoints3D(points) {
15
+ return `[${points.map((p) => `[${p[0]}, ${p[1]}, ${p[2]}]`).join(", ")}]`;
16
+ }
17
+ export function formatFaces(faces) {
18
+ return `[${faces.map((f) => `[${f.join(", ")}]`).join(", ")}]`;
19
+ }
package/package.json ADDED
@@ -0,0 +1,44 @@
1
+ {
2
+ "name": "@react-scad/core",
3
+ "version": "0.1.3",
4
+ "description": "Render JSX to OpenSCAD models using the React reconciler",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js",
12
+ "require": "./dist/index.js"
13
+ }
14
+ },
15
+ "files": [
16
+ "dist",
17
+ "README.md",
18
+ "LICENSE"
19
+ ],
20
+ "scripts": {
21
+ "build": "tsc",
22
+ "format": "biome format --write .",
23
+ "lint": "biome lint ."
24
+ },
25
+ "dependencies": {
26
+ "react-reconciler": "^0.29.2"
27
+ },
28
+ "peerDependencies": {
29
+ "react": ">=18.0.0"
30
+ },
31
+ "devDependencies": {
32
+ "@biomejs/biome": "^1.9.4",
33
+ "@types/node": "^22.10.0",
34
+ "@types/react": "^18.3.12",
35
+ "@types/react-reconciler": "^0.33.0",
36
+ "react": "^18.3.1",
37
+ "typescript": "^5.6.3"
38
+ },
39
+ "license": "MIT",
40
+ "repository": {
41
+ "type": "git",
42
+ "url": "https://github.com/react-scad/react-scad"
43
+ }
44
+ }