@pascal-app/core 0.6.0 → 0.8.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 (120) hide show
  1. package/dist/events/bus.d.ts +45 -6
  2. package/dist/events/bus.d.ts.map +1 -1
  3. package/dist/events/bus.js +1 -1
  4. package/dist/hooks/scene-registry/scene-registry.d.ts +2 -0
  5. package/dist/hooks/scene-registry/scene-registry.d.ts.map +1 -1
  6. package/dist/hooks/scene-registry/scene-registry.js +2 -0
  7. package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts.map +1 -1
  8. package/dist/hooks/spatial-grid/spatial-grid-manager.js +164 -6
  9. package/dist/index.d.ts +8 -15
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +7 -14
  12. package/dist/lib/door-operation.d.ts +7 -0
  13. package/dist/lib/door-operation.d.ts.map +1 -0
  14. package/dist/lib/door-operation.js +25 -0
  15. package/dist/lib/polygon-geometry.d.ts.map +1 -1
  16. package/dist/lib/slab-polygon.d.ts +3 -0
  17. package/dist/lib/slab-polygon.d.ts.map +1 -0
  18. package/dist/lib/slab-polygon.js +58 -0
  19. package/dist/lib/space-detection.d.ts.map +1 -1
  20. package/dist/lib/space-detection.js +10 -8
  21. package/dist/material-library.d.ts +5 -3
  22. package/dist/material-library.d.ts.map +1 -1
  23. package/dist/material-library.js +28 -32
  24. package/dist/schema/asset-url.d.ts +34 -0
  25. package/dist/schema/asset-url.d.ts.map +1 -0
  26. package/dist/schema/asset-url.js +79 -0
  27. package/dist/schema/asset-url.test.d.ts +2 -0
  28. package/dist/schema/asset-url.test.d.ts.map +1 -0
  29. package/dist/schema/asset-url.test.js +134 -0
  30. package/dist/schema/index.d.ts +7 -5
  31. package/dist/schema/index.d.ts.map +1 -1
  32. package/dist/schema/index.js +5 -3
  33. package/dist/schema/material.d.ts +1 -0
  34. package/dist/schema/material.d.ts.map +1 -1
  35. package/dist/schema/material.js +13 -11
  36. package/dist/schema/nodes/column.d.ts +520 -0
  37. package/dist/schema/nodes/column.d.ts.map +1 -0
  38. package/dist/schema/nodes/column.js +385 -0
  39. package/dist/schema/nodes/door.d.ts +72 -0
  40. package/dist/schema/nodes/door.d.ts.map +1 -1
  41. package/dist/schema/nodes/door.js +39 -2
  42. package/dist/schema/nodes/fence.d.ts +1 -1
  43. package/dist/schema/nodes/fence.js +2 -2
  44. package/dist/schema/nodes/guide.d.ts +17 -0
  45. package/dist/schema/nodes/guide.d.ts.map +1 -1
  46. package/dist/schema/nodes/guide.js +11 -1
  47. package/dist/schema/nodes/item.d.ts +20 -0
  48. package/dist/schema/nodes/item.d.ts.map +1 -1
  49. package/dist/schema/nodes/item.js +30 -1
  50. package/dist/schema/nodes/level.d.ts +1 -1
  51. package/dist/schema/nodes/level.d.ts.map +1 -1
  52. package/dist/schema/nodes/level.js +6 -0
  53. package/dist/schema/nodes/roof-segment.d.ts +2 -2
  54. package/dist/schema/nodes/roof.d.ts +2 -2
  55. package/dist/schema/nodes/roof.d.ts.map +1 -1
  56. package/dist/schema/nodes/roof.js +5 -5
  57. package/dist/schema/nodes/scan.d.ts.map +1 -1
  58. package/dist/schema/nodes/scan.js +2 -1
  59. package/dist/schema/nodes/site.d.ts +7 -0
  60. package/dist/schema/nodes/site.d.ts.map +1 -1
  61. package/dist/schema/nodes/spawn.d.ts +24 -0
  62. package/dist/schema/nodes/spawn.d.ts.map +1 -0
  63. package/dist/schema/nodes/spawn.js +8 -0
  64. package/dist/schema/nodes/stair.d.ts +6 -6
  65. package/dist/schema/nodes/stair.d.ts.map +1 -1
  66. package/dist/schema/nodes/stair.js +9 -7
  67. package/dist/schema/nodes/window.d.ts +55 -0
  68. package/dist/schema/nodes/window.d.ts.map +1 -1
  69. package/dist/schema/nodes/window.js +29 -0
  70. package/dist/schema/types.d.ts +320 -5
  71. package/dist/schema/types.d.ts.map +1 -1
  72. package/dist/schema/types.js +4 -0
  73. package/dist/store/actions/node-actions.d.ts.map +1 -1
  74. package/dist/store/actions/node-actions.js +13 -10
  75. package/dist/store/use-interactive.d.ts +43 -0
  76. package/dist/store/use-interactive.d.ts.map +1 -1
  77. package/dist/store/use-interactive.js +66 -0
  78. package/dist/store/use-scene.d.ts.map +1 -1
  79. package/dist/store/use-scene.js +69 -5
  80. package/dist/systems/stair/stair-opening-sync.d.ts.map +1 -1
  81. package/dist/systems/stair/stair-opening-sync.js +41 -7
  82. package/dist/systems/stair/stair-opening-sync.test.d.ts +2 -0
  83. package/dist/systems/stair/stair-opening-sync.test.d.ts.map +1 -0
  84. package/dist/systems/stair/stair-opening-sync.test.js +63 -0
  85. package/dist/systems/wall/wall-curve.d.ts +1 -1
  86. package/dist/systems/wall/wall-curve.d.ts.map +1 -1
  87. package/dist/systems/wall/wall-curve.js +1 -1
  88. package/dist/systems/wall/wall-mitering.d.ts.map +1 -1
  89. package/dist/systems/wall/wall-mitering.js +2 -6
  90. package/package.json +34 -5
  91. package/dist/materials.d.ts +0 -10
  92. package/dist/materials.d.ts.map +0 -1
  93. package/dist/materials.js +0 -22
  94. package/dist/systems/ceiling/ceiling-system.d.ts +0 -8
  95. package/dist/systems/ceiling/ceiling-system.d.ts.map +0 -1
  96. package/dist/systems/ceiling/ceiling-system.js +0 -92
  97. package/dist/systems/door/door-system.d.ts +0 -2
  98. package/dist/systems/door/door-system.d.ts.map +0 -1
  99. package/dist/systems/door/door-system.js +0 -195
  100. package/dist/systems/fence/fence-system.d.ts +0 -2
  101. package/dist/systems/fence/fence-system.d.ts.map +0 -1
  102. package/dist/systems/fence/fence-system.js +0 -187
  103. package/dist/systems/item/item-system.d.ts +0 -2
  104. package/dist/systems/item/item-system.d.ts.map +0 -1
  105. package/dist/systems/item/item-system.js +0 -48
  106. package/dist/systems/roof/roof-system.d.ts +0 -16
  107. package/dist/systems/roof/roof-system.d.ts.map +0 -1
  108. package/dist/systems/roof/roof-system.js +0 -797
  109. package/dist/systems/slab/slab-system.d.ts +0 -8
  110. package/dist/systems/slab/slab-system.d.ts.map +0 -1
  111. package/dist/systems/slab/slab-system.js +0 -214
  112. package/dist/systems/stair/stair-system.d.ts +0 -2
  113. package/dist/systems/stair/stair-system.d.ts.map +0 -1
  114. package/dist/systems/stair/stair-system.js +0 -776
  115. package/dist/systems/wall/wall-system.d.ts +0 -12
  116. package/dist/systems/wall/wall-system.d.ts.map +0 -1
  117. package/dist/systems/wall/wall-system.js +0 -455
  118. package/dist/systems/window/window-system.d.ts +0 -2
  119. package/dist/systems/window/window-system.d.ts.map +0 -1
  120. package/dist/systems/window/window-system.js +0 -131
@@ -1 +1 @@
1
- {"version":3,"file":"item.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/item.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAMvB,QAAA,MAAM,mBAAmB;;;;iBAIvB,CAAA;AAEF,QAAA,MAAM,mBAAmB;;;;;;;;;;;;;iBASvB,CAAA;AAEF,QAAA,MAAM,wBAAwB;;;;;;;;;;iBAO5B,CAAA;AAEF,QAAA,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;2BAIjB,CAAA;AAIF,QAAA,MAAM,qBAAqB;;;;;;;iBAOzB,CAAA;AAEF,QAAA,MAAM,iBAAiB;;;;;;iBAMrB,CAAA;AAEF,QAAA,MAAM,YAAY;;;;;;;;;;;;;2BAA2E,CAAA;AAI7F,QAAA,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAGrB,CAAA;AAEF,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAC/D,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAC/D,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAA;AACzE,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAA;AACnD,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAA;AACnE,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAC3D,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAA;AACjD,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAE3D,QAAA,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAmBf,CAAA;AAEF,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAA;AACpD,MAAM,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAA;AAE/C,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA6BnB,CAAA;AAEF,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,QAAQ,CAAC,CAAA;AAE/C;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,QAAQ,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAI5E"}
1
+ {"version":3,"file":"item.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/item.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAOvB,QAAA,MAAM,mBAAmB;;;;iBAIvB,CAAA;AAEF,QAAA,MAAM,mBAAmB;;;;;;;;;;;;;iBASvB,CAAA;AAEF,QAAA,MAAM,wBAAwB;;;;;;;;;;iBAO5B,CAAA;AAEF,QAAA,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;2BAIjB,CAAA;AAIF,QAAA,MAAM,qBAAqB;;;;;;;iBAOzB,CAAA;AAEF,QAAA,MAAM,iBAAiB;;;;;;iBAMrB,CAAA;AAEF,QAAA,MAAM,YAAY;;;;;;;;;;;;;2BAA2E,CAAA;AAI7F,QAAA,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAGrB,CAAA;AAEF,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAC/D,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAC/D,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAA;AACzE,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAA;AACnD,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAA;AACnE,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAC3D,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAA;AACjD,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAE3D,QAAA,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAkCf,CAAA;AAEF,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAA;AACpD,MAAM,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAA;AAE/C,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA6BnB,CAAA;AAEF,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,QAAQ,CAAC,CAAA;AAE/C,eAAO,MAAM,mCAAmC,MAAM,CAAA;AAEtD;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAM/D;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,QAAQ,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAI5E"}
@@ -1,5 +1,6 @@
1
1
  import dedent from 'dedent';
2
2
  import { z } from 'zod';
3
+ import { AssetUrl } from '../asset-url';
3
4
  import { BaseNode, nodeType, objectId } from '../base';
4
5
  // --- Control descriptors ---
5
6
  const toggleControlSchema = z.object({
@@ -57,7 +58,22 @@ const assetSchema = z.object({
57
58
  category: z.string(),
58
59
  name: z.string(),
59
60
  thumbnail: z.string(),
60
- src: z.string(),
61
+ // Optional top-down 2D image shown inside the item's footprint on the
62
+ // floor plan. When present, replaces the default diagonal-cross marker.
63
+ floorPlanUrl: z.string().optional(),
64
+ // Where the item came from in the catalog. Used by the editor's items
65
+ // panel to filter Library / Community / Mine. The server populates it
66
+ // from `items.userId`: null → 'library', current user → 'mine',
67
+ // other user → 'community'. Defaults to 'library' when absent (e.g.
68
+ // the seeded built-in catalog).
69
+ source: z.enum(['library', 'community', 'mine']).default('library'),
70
+ // True when the item belongs to the caller and is still in draft status.
71
+ // The catalog only loads my drafts (other users' drafts are never
72
+ // published to the catalog). Used so the Community filter can include
73
+ // *my* published items alongside other users', while leaving drafts
74
+ // visible only under Mine.
75
+ isDraft: z.boolean().optional(),
76
+ src: AssetUrl,
61
77
  dimensions: z.tuple([z.number(), z.number(), z.number()]).default([1, 1, 1]), // [w, h, d]
62
78
  attachTo: z.enum(['wall', 'wall-side', 'ceiling']).optional(),
63
79
  tags: z.array(z.string()).optional(),
@@ -99,6 +115,19 @@ export const ItemNode = BaseNode.extend({
99
115
  - scale: corrective scale for the model
100
116
  - tags: tags associated with the item
101
117
  `);
118
+ export const LOW_PROFILE_ITEM_SURFACE_MAX_HEIGHT = 0.1;
119
+ /**
120
+ * Low, floor-resting items like rugs and parking mats can receive items visually,
121
+ * but should not become item parents or block normal floor placement.
122
+ */
123
+ export function isLowProfileItemSurface(item) {
124
+ if (item.asset.attachTo)
125
+ return false;
126
+ const surfaceHeight = item.asset.surface
127
+ ? item.asset.surface.height * item.scale[1]
128
+ : getScaledDimensions(item)[1];
129
+ return surfaceHeight <= LOW_PROFILE_ITEM_SURFACE_MAX_HEIGHT;
130
+ }
102
131
  /**
103
132
  * Returns the effective world-space dimensions of an item after applying its scale.
104
133
  * Use this everywhere item.asset.dimensions is used for spatial calculations.
@@ -17,7 +17,7 @@ export declare const LevelNode: z.ZodObject<{
17
17
  metadata: z.ZodDefault<z.ZodOptional<z.ZodJSONSchema>>;
18
18
  id: z.ZodDefault<z.ZodTemplateLiteral<`level_${string}`>>;
19
19
  type: z.ZodDefault<z.ZodLiteral<"level">>;
20
- children: z.ZodDefault<z.ZodArray<z.ZodUnion<readonly [z.ZodDefault<z.ZodTemplateLiteral<`wall_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`fence_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`zone_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`slab_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`ceiling_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`roof_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`stair_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`scan_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`guide_${string}`>>]>>>;
20
+ children: z.ZodDefault<z.ZodArray<z.ZodUnion<readonly [z.ZodDefault<z.ZodTemplateLiteral<`wall_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`fence_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`column_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`item_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`zone_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`slab_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`ceiling_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`roof_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`stair_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`scan_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`guide_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`spawn_${string}`>>]>>>;
21
21
  level: z.ZodDefault<z.ZodNumber>;
22
22
  }, z.core.$strip>;
23
23
  export type LevelNode = z.infer<typeof LevelNode>;
@@ -1 +1 @@
1
- {"version":3,"file":"level.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/level.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAYvB,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;iBA0BrB,CAAA;AAED,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAA"}
1
+ {"version":3,"file":"level.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/level.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAevB,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;iBA6BrB,CAAA;AAED,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAA"}
@@ -2,11 +2,14 @@ import dedent from 'dedent';
2
2
  import { z } from 'zod';
3
3
  import { BaseNode, nodeType, objectId } from '../base';
4
4
  import { CeilingNode } from './ceiling';
5
+ import { ColumnNode } from './column';
5
6
  import { FenceNode } from './fence';
6
7
  import { GuideNode } from './guide';
8
+ import { ItemNode } from './item';
7
9
  import { RoofNode } from './roof';
8
10
  import { ScanNode } from './scan';
9
11
  import { SlabNode } from './slab';
12
+ import { SpawnNode } from './spawn';
10
13
  import { StairNode } from './stair';
11
14
  import { WallNode } from './wall';
12
15
  import { ZoneNode } from './zone';
@@ -17,6 +20,8 @@ export const LevelNode = BaseNode.extend({
17
20
  .array(z.union([
18
21
  WallNode.shape.id,
19
22
  FenceNode.shape.id,
23
+ ColumnNode.shape.id,
24
+ ItemNode.shape.id,
20
25
  ZoneNode.shape.id,
21
26
  SlabNode.shape.id,
22
27
  CeilingNode.shape.id,
@@ -24,6 +29,7 @@ export const LevelNode = BaseNode.extend({
24
29
  StairNode.shape.id,
25
30
  ScanNode.shape.id,
26
31
  GuideNode.shape.id,
32
+ SpawnNode.shape.id,
27
33
  ]))
28
34
  .default([]),
29
35
  // Specific props
@@ -1,12 +1,12 @@
1
1
  import { z } from 'zod';
2
2
  export declare const RoofType: z.ZodEnum<{
3
+ flat: "flat";
3
4
  hip: "hip";
4
5
  gable: "gable";
5
6
  shed: "shed";
6
7
  gambrel: "gambrel";
7
8
  dutch: "dutch";
8
9
  mansard: "mansard";
9
- flat: "flat";
10
10
  }>;
11
11
  export type RoofType = z.infer<typeof RoofType>;
12
12
  export declare const RoofSegmentNode: z.ZodObject<{
@@ -63,13 +63,13 @@ export declare const RoofSegmentNode: z.ZodObject<{
63
63
  position: z.ZodDefault<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
64
64
  rotation: z.ZodDefault<z.ZodNumber>;
65
65
  roofType: z.ZodDefault<z.ZodEnum<{
66
+ flat: "flat";
66
67
  hip: "hip";
67
68
  gable: "gable";
68
69
  shed: "shed";
69
70
  gambrel: "gambrel";
70
71
  dutch: "dutch";
71
72
  mansard: "mansard";
72
- flat: "flat";
73
73
  }>>;
74
74
  width: z.ZodDefault<z.ZodNumber>;
75
75
  depth: z.ZodDefault<z.ZodNumber>;
@@ -1,8 +1,8 @@
1
1
  import { z } from 'zod';
2
- import { type MaterialSchema } from '../material';
2
+ import type { MaterialSchema as MaterialSchemaType } from '../material';
3
3
  export type RoofSurfaceMaterialRole = 'top' | 'edge' | 'wall';
4
4
  export type RoofSurfaceMaterialSpec = {
5
- material?: MaterialSchema;
5
+ material?: MaterialSchemaType;
6
6
  materialPreset?: string;
7
7
  };
8
8
  export declare const RoofNode: z.ZodObject<{
@@ -1 +1 @@
1
- {"version":3,"file":"roof.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/roof.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,EAAE,KAAK,cAAc,EAA0C,MAAM,aAAa,CAAA;AAGzF,MAAM,MAAM,uBAAuB,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,CAAA;AAC7D,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,CAAC,EAAE,cAAc,CAAA;IACzB,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB,CAAA;AAED,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAyBpB,CAAA;AAED,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,QAAQ,CAAC,CAAA;AAS/C,wBAAgB,+BAA+B,CAC7C,IAAI,EAAE,QAAQ,EACd,IAAI,EAAE,uBAAuB,GAC5B,uBAAuB,CAmDzB"}
1
+ {"version":3,"file":"roof.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/roof.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,KAAK,EAAE,cAAc,IAAI,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAIvE,MAAM,MAAM,uBAAuB,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,CAAA;AAC7D,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,CAAC,EAAE,kBAAkB,CAAA;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB,CAAA;AAED,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAyBpB,CAAA;AAED,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,QAAQ,CAAC,CAAA;AAS/C,wBAAgB,+BAA+B,CAC7C,IAAI,EAAE,QAAQ,EACd,IAAI,EAAE,uBAAuB,GAC5B,uBAAuB,CAoDzB"}
@@ -1,18 +1,18 @@
1
1
  import dedent from 'dedent';
2
2
  import { z } from 'zod';
3
3
  import { BaseNode, nodeType, objectId } from '../base';
4
- import { MaterialSchema as MaterialSchemaSchema } from '../material';
4
+ import { MaterialSchema } from '../material';
5
5
  import { RoofSegmentNode } from './roof-segment';
6
6
  export const RoofNode = BaseNode.extend({
7
7
  id: objectId('roof'),
8
8
  type: nodeType('roof'),
9
- material: MaterialSchemaSchema.optional(),
9
+ material: MaterialSchema.optional(),
10
10
  materialPreset: z.string().optional(),
11
- topMaterial: MaterialSchemaSchema.optional(),
11
+ topMaterial: MaterialSchema.optional(),
12
12
  topMaterialPreset: z.string().optional(),
13
- edgeMaterial: MaterialSchemaSchema.optional(),
13
+ edgeMaterial: MaterialSchema.optional(),
14
14
  edgeMaterialPreset: z.string().optional(),
15
- wallMaterial: MaterialSchemaSchema.optional(),
15
+ wallMaterial: MaterialSchema.optional(),
16
16
  wallMaterialPreset: z.string().optional(),
17
17
  position: z.tuple([z.number(), z.number(), z.number()]).default([0, 0, 0]),
18
18
  // Rotation around Y axis in radians
@@ -1 +1 @@
1
- {"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/scan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;iBAQnB,CAAA;AAEF,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,QAAQ,CAAC,CAAA"}
1
+ {"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/scan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;iBAQnB,CAAA;AAEF,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,QAAQ,CAAC,CAAA"}
@@ -1,9 +1,10 @@
1
1
  import { z } from 'zod';
2
+ import { AssetUrl } from '../asset-url';
2
3
  import { BaseNode, nodeType, objectId } from '../base';
3
4
  export const ScanNode = BaseNode.extend({
4
5
  id: objectId('scan'),
5
6
  type: nodeType('scan'),
6
- url: z.string(),
7
+ url: AssetUrl,
7
8
  position: z.tuple([z.number(), z.number(), z.number()]).default([0, 0, 0]),
8
9
  rotation: z.tuple([z.number(), z.number(), z.number()]).default([0, 0, 0]),
9
10
  scale: z.number().default(1),
@@ -76,6 +76,13 @@ export declare const SiteNode: z.ZodObject<{
76
76
  category: z.ZodString;
77
77
  name: z.ZodString;
78
78
  thumbnail: z.ZodString;
79
+ floorPlanUrl: z.ZodOptional<z.ZodString>;
80
+ source: z.ZodDefault<z.ZodEnum<{
81
+ library: "library";
82
+ community: "community";
83
+ mine: "mine";
84
+ }>>;
85
+ isDraft: z.ZodOptional<z.ZodBoolean>;
79
86
  src: z.ZodString;
80
87
  dimensions: z.ZodDefault<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
81
88
  attachTo: z.ZodOptional<z.ZodEnum<{
@@ -1 +1 @@
1
- {"version":3,"file":"site.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/site.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAiBvB,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAwBpB,CAAA;AAED,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,QAAQ,CAAC,CAAA"}
1
+ {"version":3,"file":"site.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/site.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAiBvB,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAwBpB,CAAA;AAED,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,QAAQ,CAAC,CAAA"}
@@ -0,0 +1,24 @@
1
+ import { z } from 'zod';
2
+ export declare const SpawnNode: z.ZodObject<{
3
+ object: z.ZodDefault<z.ZodLiteral<"node">>;
4
+ name: z.ZodOptional<z.ZodString>;
5
+ parentId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
6
+ visible: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
7
+ camera: z.ZodOptional<z.ZodObject<{
8
+ position: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
9
+ target: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
10
+ mode: z.ZodDefault<z.ZodEnum<{
11
+ perspective: "perspective";
12
+ orthographic: "orthographic";
13
+ }>>;
14
+ fov: z.ZodOptional<z.ZodNumber>;
15
+ zoom: z.ZodOptional<z.ZodNumber>;
16
+ }, z.core.$strip>>;
17
+ metadata: z.ZodDefault<z.ZodOptional<z.ZodJSONSchema>>;
18
+ id: z.ZodDefault<z.ZodTemplateLiteral<`spawn_${string}`>>;
19
+ type: z.ZodDefault<z.ZodLiteral<"spawn">>;
20
+ position: z.ZodDefault<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
21
+ rotation: z.ZodDefault<z.ZodNumber>;
22
+ }, z.core.$strip>;
23
+ export type SpawnNode = z.infer<typeof SpawnNode>;
24
+ //# sourceMappingURL=spawn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spawn.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/spawn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;iBAKpB,CAAA;AAEF,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAA"}
@@ -0,0 +1,8 @@
1
+ import { z } from 'zod';
2
+ import { BaseNode, nodeType, objectId } from '../base';
3
+ export const SpawnNode = BaseNode.extend({
4
+ id: objectId('spawn'),
5
+ type: nodeType('spawn'),
6
+ position: z.tuple([z.number(), z.number(), z.number()]).default([0, 0, 0]),
7
+ rotation: z.number().default(0),
8
+ });
@@ -1,15 +1,15 @@
1
1
  import { z } from 'zod';
2
- import { type MaterialSchema } from '../material';
2
+ import type { MaterialSchema as MaterialSchemaType } from '../material';
3
3
  export declare const StairRailingMode: z.ZodEnum<{
4
+ none: "none";
4
5
  left: "left";
5
6
  right: "right";
6
- none: "none";
7
7
  both: "both";
8
8
  }>;
9
9
  export declare const StairType: z.ZodEnum<{
10
10
  straight: "straight";
11
- curved: "curved";
12
11
  spiral: "spiral";
12
+ curved: "curved";
13
13
  }>;
14
14
  export declare const StairTopLandingMode: z.ZodEnum<{
15
15
  none: "none";
@@ -25,7 +25,7 @@ export type StairTopLandingMode = z.infer<typeof StairTopLandingMode>;
25
25
  export type StairSlabOpeningMode = z.infer<typeof StairSlabOpeningMode>;
26
26
  export type StairSurfaceMaterialRole = 'railing' | 'tread' | 'side';
27
27
  export type StairSurfaceMaterialSpec = {
28
- material?: MaterialSchema;
28
+ material?: MaterialSchemaType;
29
29
  materialPreset?: string;
30
30
  };
31
31
  export declare const StairNode: z.ZodObject<{
@@ -182,8 +182,8 @@ export declare const StairNode: z.ZodObject<{
182
182
  rotation: z.ZodDefault<z.ZodNumber>;
183
183
  stairType: z.ZodDefault<z.ZodEnum<{
184
184
  straight: "straight";
185
- curved: "curved";
186
185
  spiral: "spiral";
186
+ curved: "curved";
187
187
  }>>;
188
188
  fromLevelId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
189
189
  toLevelId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
@@ -207,9 +207,9 @@ export declare const StairNode: z.ZodObject<{
207
207
  showCenterColumn: z.ZodDefault<z.ZodBoolean>;
208
208
  showStepSupports: z.ZodDefault<z.ZodBoolean>;
209
209
  railingMode: z.ZodDefault<z.ZodEnum<{
210
+ none: "none";
210
211
  left: "left";
211
212
  right: "right";
212
- none: "none";
213
213
  both: "both";
214
214
  }>>;
215
215
  railingHeight: z.ZodDefault<z.ZodNumber>;
@@ -1 +1 @@
1
- {"version":3,"file":"stair.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/stair.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,EAAE,KAAK,cAAc,EAA0C,MAAM,aAAa,CAAA;AAGzF,eAAO,MAAM,gBAAgB;;;;;EAA4C,CAAA;AACzE,eAAO,MAAM,SAAS;;;;EAA2C,CAAA;AACjE,eAAO,MAAM,mBAAmB;;;EAAiC,CAAA;AACjE,eAAO,MAAM,oBAAoB;;;EAAkC,CAAA;AAEnE,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAA;AAC/D,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAA;AACjD,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AACrE,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AACvE,MAAM,MAAM,wBAAwB,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,CAAA;AACnE,MAAM,MAAM,wBAAwB,GAAG;IACrC,QAAQ,CAAC,EAAE,cAAc,CAAA;IACzB,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB,CAAA;AAED,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA4DrB,CAAA;AAED,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAA;AASjD,wBAAgB,gCAAgC,CAC9C,IAAI,EAAE,SAAS,EACf,IAAI,EAAE,wBAAwB,GAC7B,wBAAwB,CA2D1B"}
1
+ {"version":3,"file":"stair.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/stair.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,KAAK,EAAE,cAAc,IAAI,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAIvE,eAAO,MAAM,gBAAgB;;;;;EAA4C,CAAA;AACzE,eAAO,MAAM,SAAS;;;;EAA2C,CAAA;AACjE,eAAO,MAAM,mBAAmB;;;EAAiC,CAAA;AACjE,eAAO,MAAM,oBAAoB;;;EAAkC,CAAA;AAEnE,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAA;AAC/D,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAA;AACjD,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AACrE,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AACvE,MAAM,MAAM,wBAAwB,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,CAAA;AACnE,MAAM,MAAM,wBAAwB,GAAG;IACrC,QAAQ,CAAC,EAAE,kBAAkB,CAAA;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB,CAAA;AAED,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA4DrB,CAAA;AAED,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAA;AASjD,wBAAgB,gCAAgC,CAC9C,IAAI,EAAE,SAAS,EACf,IAAI,EAAE,wBAAwB,GAC7B,wBAAwB,CAmE1B"}
@@ -1,7 +1,7 @@
1
1
  import dedent from 'dedent';
2
2
  import { z } from 'zod';
3
3
  import { BaseNode, nodeType, objectId } from '../base';
4
- import { MaterialSchema as MaterialSchemaSchema } from '../material';
4
+ import { MaterialSchema } from '../material';
5
5
  import { StairSegmentNode } from './stair-segment';
6
6
  export const StairRailingMode = z.enum(['none', 'left', 'right', 'both']);
7
7
  export const StairType = z.enum(['straight', 'curved', 'spiral']);
@@ -10,13 +10,13 @@ export const StairSlabOpeningMode = z.enum(['none', 'destination']);
10
10
  export const StairNode = BaseNode.extend({
11
11
  id: objectId('stair'),
12
12
  type: nodeType('stair'),
13
- material: MaterialSchemaSchema.optional(),
13
+ material: MaterialSchema.optional(),
14
14
  materialPreset: z.string().optional(),
15
- railingMaterial: MaterialSchemaSchema.optional(),
15
+ railingMaterial: MaterialSchema.optional(),
16
16
  railingMaterialPreset: z.string().optional(),
17
- treadMaterial: MaterialSchemaSchema.optional(),
17
+ treadMaterial: MaterialSchema.optional(),
18
18
  treadMaterialPreset: z.string().optional(),
19
- sideMaterial: MaterialSchemaSchema.optional(),
19
+ sideMaterial: MaterialSchema.optional(),
20
20
  sideMaterialPreset: z.string().optional(),
21
21
  position: z.tuple([z.number(), z.number(), z.number()]).default([0, 0, 0]),
22
22
  // Rotation around Y axis in radians
@@ -105,10 +105,12 @@ export function getEffectiveStairSurfaceMaterial(node, role) {
105
105
  material: node.sideMaterial,
106
106
  materialPreset: typeof node.sideMaterialPreset === 'string' ? node.sideMaterialPreset : undefined,
107
107
  };
108
- if (role === 'tread' && (sideFallback.material !== undefined || sideFallback.materialPreset !== undefined)) {
108
+ if (role === 'tread' &&
109
+ (sideFallback.material !== undefined || sideFallback.materialPreset !== undefined)) {
109
110
  return sideFallback;
110
111
  }
111
- if (role === 'side' && (treadFallback.material !== undefined || treadFallback.materialPreset !== undefined)) {
112
+ if (role === 'side' &&
113
+ (treadFallback.material !== undefined || treadFallback.materialPreset !== undefined)) {
112
114
  return treadFallback;
113
115
  }
114
116
  if (role === 'railing') {
@@ -1,4 +1,17 @@
1
1
  import { z } from 'zod';
2
+ export declare const WindowType: z.ZodEnum<{
3
+ sliding: "sliding";
4
+ fixed: "fixed";
5
+ casement: "casement";
6
+ awning: "awning";
7
+ hopper: "hopper";
8
+ "single-hung": "single-hung";
9
+ "double-hung": "double-hung";
10
+ bay: "bay";
11
+ bow: "bow";
12
+ louvered: "louvered";
13
+ }>;
14
+ export type WindowType = z.infer<typeof WindowType>;
2
15
  export declare const WindowNode: z.ZodObject<{
3
16
  object: z.ZodDefault<z.ZodLiteral<"node">>;
4
17
  name: z.ZodOptional<z.ZodString>;
@@ -58,6 +71,48 @@ export declare const WindowNode: z.ZodObject<{
58
71
  wallId: z.ZodOptional<z.ZodString>;
59
72
  width: z.ZodDefault<z.ZodNumber>;
60
73
  height: z.ZodDefault<z.ZodNumber>;
74
+ openingKind: z.ZodDefault<z.ZodEnum<{
75
+ window: "window";
76
+ opening: "opening";
77
+ }>>;
78
+ windowType: z.ZodDefault<z.ZodEnum<{
79
+ sliding: "sliding";
80
+ fixed: "fixed";
81
+ casement: "casement";
82
+ awning: "awning";
83
+ hopper: "hopper";
84
+ "single-hung": "single-hung";
85
+ "double-hung": "double-hung";
86
+ bay: "bay";
87
+ bow: "bow";
88
+ louvered: "louvered";
89
+ }>>;
90
+ operationState: z.ZodDefault<z.ZodNumber>;
91
+ awningDirection: z.ZodDefault<z.ZodEnum<{
92
+ up: "up";
93
+ down: "down";
94
+ }>>;
95
+ casementStyle: z.ZodDefault<z.ZodEnum<{
96
+ french: "french";
97
+ single: "single";
98
+ }>>;
99
+ hingesSide: z.ZodDefault<z.ZodEnum<{
100
+ left: "left";
101
+ right: "right";
102
+ }>>;
103
+ openingShape: z.ZodDefault<z.ZodEnum<{
104
+ rectangle: "rectangle";
105
+ rounded: "rounded";
106
+ arch: "arch";
107
+ }>>;
108
+ openingRadiusMode: z.ZodDefault<z.ZodEnum<{
109
+ all: "all";
110
+ individual: "individual";
111
+ }>>;
112
+ openingCornerRadii: z.ZodDefault<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
113
+ cornerRadius: z.ZodDefault<z.ZodNumber>;
114
+ archHeight: z.ZodDefault<z.ZodNumber>;
115
+ openingRevealRadius: z.ZodDefault<z.ZodNumber>;
61
116
  frameThickness: z.ZodDefault<z.ZodNumber>;
62
117
  frameDepth: z.ZodDefault<z.ZodNumber>;
63
118
  columnRatios: z.ZodDefault<z.ZodArray<z.ZodNumber>>;
@@ -1 +1 @@
1
- {"version":3,"file":"window.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/window.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAwCrB,CAAA;AAEF,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAA"}
1
+ {"version":3,"file":"window.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/window.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,eAAO,MAAM,UAAU;;;;;;;;;;;EAWrB,CAAA;AACF,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAA;AAEnD,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA2DrB,CAAA;AAEF,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAA"}
@@ -2,6 +2,18 @@ import dedent from 'dedent';
2
2
  import { z } from 'zod';
3
3
  import { BaseNode, nodeType, objectId } from '../base';
4
4
  import { MaterialSchema } from '../material';
5
+ export const WindowType = z.enum([
6
+ 'fixed',
7
+ 'sliding',
8
+ 'casement',
9
+ 'awning',
10
+ 'hopper',
11
+ 'single-hung',
12
+ 'double-hung',
13
+ 'bay',
14
+ 'bow',
15
+ 'louvered',
16
+ ]);
5
17
  export const WindowNode = BaseNode.extend({
6
18
  id: objectId('window'),
7
19
  type: nodeType('window'),
@@ -14,6 +26,22 @@ export const WindowNode = BaseNode.extend({
14
26
  // Overall dimensions
15
27
  width: z.number().default(1.5),
16
28
  height: z.number().default(1.5),
29
+ // Opening mode - when set to "opening", the window is only a shaped cutout
30
+ openingKind: z.enum(['window', 'opening']).default('window'),
31
+ // Window family
32
+ windowType: WindowType.default('fixed'),
33
+ operationState: z.number().min(0).max(1).default(0),
34
+ awningDirection: z.enum(['up', 'down']).default('up'),
35
+ casementStyle: z.enum(['single', 'french']).default('single'),
36
+ hingesSide: z.enum(['left', 'right']).default('left'),
37
+ openingShape: z.enum(['rectangle', 'rounded', 'arch']).default('rectangle'),
38
+ openingRadiusMode: z.enum(['all', 'individual']).default('all'),
39
+ openingCornerRadii: z
40
+ .tuple([z.number(), z.number(), z.number(), z.number()])
41
+ .default([0.15, 0.15, 0.15, 0.15]),
42
+ cornerRadius: z.number().default(0.15),
43
+ archHeight: z.number().default(0.35),
44
+ openingRevealRadius: z.number().default(0.025),
17
45
  // Frame
18
46
  frameThickness: z.number().default(0.05),
19
47
  frameDepth: z.number().default(0.07),
@@ -32,6 +60,7 @@ export const WindowNode = BaseNode.extend({
32
60
  }).describe(dedent `Window node - a parametric window placed on a wall
33
61
  - position: center of the window in wall-local coordinate system
34
62
  - width/height: overall outer dimensions
63
+ - windowType: explicit window family, defaulting old windows to fixed
35
64
  - frameThickness: width of the frame members
36
65
  - frameDepth: how deep the frame sits within the wall
37
66
  - columnRatios/rowRatios: pane division ratios