@ifc-lite/drawing-2d 1.4.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 (158) hide show
  1. package/LICENSE +373 -0
  2. package/dist/drawing-generator.d.ts +80 -0
  3. package/dist/drawing-generator.d.ts.map +1 -0
  4. package/dist/drawing-generator.js +281 -0
  5. package/dist/drawing-generator.js.map +1 -0
  6. package/dist/edge-extractor.d.ts +47 -0
  7. package/dist/edge-extractor.d.ts.map +1 -0
  8. package/dist/edge-extractor.js +204 -0
  9. package/dist/edge-extractor.js.map +1 -0
  10. package/dist/gpu-section-cutter.d.ts +42 -0
  11. package/dist/gpu-section-cutter.d.ts.map +1 -0
  12. package/dist/gpu-section-cutter.js +405 -0
  13. package/dist/gpu-section-cutter.js.map +1 -0
  14. package/dist/graphic-overrides/index.d.ts +10 -0
  15. package/dist/graphic-overrides/index.d.ts.map +1 -0
  16. package/dist/graphic-overrides/index.js +8 -0
  17. package/dist/graphic-overrides/index.js.map +1 -0
  18. package/dist/graphic-overrides/presets.d.ts +22 -0
  19. package/dist/graphic-overrides/presets.d.ts.map +1 -0
  20. package/dist/graphic-overrides/presets.js +283 -0
  21. package/dist/graphic-overrides/presets.js.map +1 -0
  22. package/dist/graphic-overrides/rule-engine.d.ts +64 -0
  23. package/dist/graphic-overrides/rule-engine.d.ts.map +1 -0
  24. package/dist/graphic-overrides/rule-engine.js +438 -0
  25. package/dist/graphic-overrides/rule-engine.js.map +1 -0
  26. package/dist/graphic-overrides/types.d.ts +200 -0
  27. package/dist/graphic-overrides/types.d.ts.map +1 -0
  28. package/dist/graphic-overrides/types.js +5 -0
  29. package/dist/graphic-overrides/types.js.map +1 -0
  30. package/dist/hatch-generator.d.ts +76 -0
  31. package/dist/hatch-generator.d.ts.map +1 -0
  32. package/dist/hatch-generator.js +282 -0
  33. package/dist/hatch-generator.js.map +1 -0
  34. package/dist/hidden-line.d.ts +64 -0
  35. package/dist/hidden-line.d.ts.map +1 -0
  36. package/dist/hidden-line.js +318 -0
  37. package/dist/hidden-line.js.map +1 -0
  38. package/dist/index.d.ts +44 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +109 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/line-merger.d.ts +35 -0
  43. package/dist/line-merger.d.ts.map +1 -0
  44. package/dist/line-merger.js +265 -0
  45. package/dist/line-merger.js.map +1 -0
  46. package/dist/math.d.ts +90 -0
  47. package/dist/math.d.ts.map +1 -0
  48. package/dist/math.js +284 -0
  49. package/dist/math.js.map +1 -0
  50. package/dist/openings/index.d.ts +7 -0
  51. package/dist/openings/index.d.ts.map +1 -0
  52. package/dist/openings/index.js +10 -0
  53. package/dist/openings/index.js.map +1 -0
  54. package/dist/openings/opening-filter.d.ts +61 -0
  55. package/dist/openings/opening-filter.d.ts.map +1 -0
  56. package/dist/openings/opening-filter.js +244 -0
  57. package/dist/openings/opening-filter.js.map +1 -0
  58. package/dist/openings/opening-relationship-builder.d.ts +35 -0
  59. package/dist/openings/opening-relationship-builder.d.ts.map +1 -0
  60. package/dist/openings/opening-relationship-builder.js +121 -0
  61. package/dist/openings/opening-relationship-builder.js.map +1 -0
  62. package/dist/openings/opening-utils.d.ts +55 -0
  63. package/dist/openings/opening-utils.d.ts.map +1 -0
  64. package/dist/openings/opening-utils.js +128 -0
  65. package/dist/openings/opening-utils.js.map +1 -0
  66. package/dist/polygon-builder.d.ts +62 -0
  67. package/dist/polygon-builder.d.ts.map +1 -0
  68. package/dist/polygon-builder.js +261 -0
  69. package/dist/polygon-builder.js.map +1 -0
  70. package/dist/section-cutter.d.ts +49 -0
  71. package/dist/section-cutter.d.ts.map +1 -0
  72. package/dist/section-cutter.js +220 -0
  73. package/dist/section-cutter.js.map +1 -0
  74. package/dist/sheet/frame-renderer.d.ts +28 -0
  75. package/dist/sheet/frame-renderer.d.ts.map +1 -0
  76. package/dist/sheet/frame-renderer.js +199 -0
  77. package/dist/sheet/frame-renderer.js.map +1 -0
  78. package/dist/sheet/frame-types.d.ts +57 -0
  79. package/dist/sheet/frame-types.d.ts.map +1 -0
  80. package/dist/sheet/frame-types.js +88 -0
  81. package/dist/sheet/frame-types.js.map +1 -0
  82. package/dist/sheet/index.d.ts +26 -0
  83. package/dist/sheet/index.d.ts.map +1 -0
  84. package/dist/sheet/index.js +12 -0
  85. package/dist/sheet/index.js.map +1 -0
  86. package/dist/sheet/paper-sizes.d.ts +36 -0
  87. package/dist/sheet/paper-sizes.d.ts.map +1 -0
  88. package/dist/sheet/paper-sizes.js +252 -0
  89. package/dist/sheet/paper-sizes.js.map +1 -0
  90. package/dist/sheet/scale-bar-renderer.d.ts +29 -0
  91. package/dist/sheet/scale-bar-renderer.d.ts.map +1 -0
  92. package/dist/sheet/scale-bar-renderer.js +287 -0
  93. package/dist/sheet/scale-bar-renderer.js.map +1 -0
  94. package/dist/sheet/scale-bar-types.d.ts +82 -0
  95. package/dist/sheet/scale-bar-types.d.ts.map +1 -0
  96. package/dist/sheet/scale-bar-types.js +66 -0
  97. package/dist/sheet/scale-bar-types.js.map +1 -0
  98. package/dist/sheet/sheet-types.d.ts +84 -0
  99. package/dist/sheet/sheet-types.d.ts.map +1 -0
  100. package/dist/sheet/sheet-types.js +77 -0
  101. package/dist/sheet/sheet-types.js.map +1 -0
  102. package/dist/sheet/title-block-renderer.d.ts +44 -0
  103. package/dist/sheet/title-block-renderer.d.ts.map +1 -0
  104. package/dist/sheet/title-block-renderer.js +335 -0
  105. package/dist/sheet/title-block-renderer.js.map +1 -0
  106. package/dist/sheet/title-block-types.d.ts +100 -0
  107. package/dist/sheet/title-block-types.d.ts.map +1 -0
  108. package/dist/sheet/title-block-types.js +174 -0
  109. package/dist/sheet/title-block-types.js.map +1 -0
  110. package/dist/styles.d.ts +77 -0
  111. package/dist/styles.d.ts.map +1 -0
  112. package/dist/styles.js +347 -0
  113. package/dist/styles.js.map +1 -0
  114. package/dist/styling/index.d.ts +7 -0
  115. package/dist/styling/index.d.ts.map +1 -0
  116. package/dist/styling/index.js +10 -0
  117. package/dist/styling/index.js.map +1 -0
  118. package/dist/styling/layer-mapping.d.ts +57 -0
  119. package/dist/styling/layer-mapping.d.ts.map +1 -0
  120. package/dist/styling/layer-mapping.js +303 -0
  121. package/dist/styling/layer-mapping.js.map +1 -0
  122. package/dist/styling/line-styles.d.ts +49 -0
  123. package/dist/styling/line-styles.d.ts.map +1 -0
  124. package/dist/styling/line-styles.js +123 -0
  125. package/dist/styling/line-styles.js.map +1 -0
  126. package/dist/styling/line-weights.d.ts +61 -0
  127. package/dist/styling/line-weights.d.ts.map +1 -0
  128. package/dist/styling/line-weights.js +183 -0
  129. package/dist/styling/line-weights.js.map +1 -0
  130. package/dist/svg-exporter.d.ts +63 -0
  131. package/dist/svg-exporter.d.ts.map +1 -0
  132. package/dist/svg-exporter.js +278 -0
  133. package/dist/svg-exporter.js.map +1 -0
  134. package/dist/symbols/door-symbol.d.ts +82 -0
  135. package/dist/symbols/door-symbol.d.ts.map +1 -0
  136. package/dist/symbols/door-symbol.js +390 -0
  137. package/dist/symbols/door-symbol.js.map +1 -0
  138. package/dist/symbols/index.d.ts +8 -0
  139. package/dist/symbols/index.d.ts.map +1 -0
  140. package/dist/symbols/index.js +11 -0
  141. package/dist/symbols/index.js.map +1 -0
  142. package/dist/symbols/symbol-renderer.d.ts +29 -0
  143. package/dist/symbols/symbol-renderer.d.ts.map +1 -0
  144. package/dist/symbols/symbol-renderer.js +173 -0
  145. package/dist/symbols/symbol-renderer.js.map +1 -0
  146. package/dist/symbols/symbol-utils.d.ts +48 -0
  147. package/dist/symbols/symbol-utils.d.ts.map +1 -0
  148. package/dist/symbols/symbol-utils.js +129 -0
  149. package/dist/symbols/symbol-utils.js.map +1 -0
  150. package/dist/symbols/window-symbol.d.ts +57 -0
  151. package/dist/symbols/window-symbol.d.ts.map +1 -0
  152. package/dist/symbols/window-symbol.js +209 -0
  153. package/dist/symbols/window-symbol.js.map +1 -0
  154. package/dist/types.d.ts +443 -0
  155. package/dist/types.d.ts.map +1 -0
  156. package/dist/types.js +31 -0
  157. package/dist/types.js.map +1 -0
  158. package/package.json +53 -0
@@ -0,0 +1,283 @@
1
+ /* This Source Code Form is subject to the terms of the Mozilla Public
2
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
+ import { ifcTypeCriterion, propertyCriterion, andCriteria } from './rule-engine';
5
+ // ═══════════════════════════════════════════════════════════════════════════
6
+ // HELPER FUNCTIONS
7
+ // ═══════════════════════════════════════════════════════════════════════════
8
+ let ruleIdCounter = 0;
9
+ function generateRuleId() {
10
+ return `builtin-rule-${++ruleIdCounter}`;
11
+ }
12
+ function createRule(name, criteria, style, priority = 100, description) {
13
+ return {
14
+ id: generateRuleId(),
15
+ name,
16
+ description,
17
+ enabled: true,
18
+ priority,
19
+ criteria,
20
+ style,
21
+ };
22
+ }
23
+ // ═══════════════════════════════════════════════════════════════════════════
24
+ // ARCHITECTURAL STANDARDS PRESET
25
+ // ═══════════════════════════════════════════════════════════════════════════
26
+ const ARCHITECTURAL_RULES = [
27
+ // Structural elements - heavy lines, concrete hatch
28
+ createRule('Walls - Heavy cut lines', ifcTypeCriterion(['IfcWall']), {
29
+ lineWeight: 'heavy',
30
+ strokeColor: '#000000',
31
+ hatchPattern: 'diagonal',
32
+ hatchSpacing: 3,
33
+ hatchAngle: 45,
34
+ }, 100, 'Standard wall representation'),
35
+ createRule('Columns - Heavy cut lines', ifcTypeCriterion(['IfcColumn']), {
36
+ lineWeight: 'heavy',
37
+ strokeColor: '#000000',
38
+ hatchPattern: 'cross-hatch',
39
+ hatchSpacing: 2,
40
+ }, 100),
41
+ createRule('Slabs - Medium lines', ifcTypeCriterion(['IfcSlab']), {
42
+ lineWeight: 'medium',
43
+ fillColor: '#E0E0E0',
44
+ hatchPattern: 'concrete',
45
+ }, 90),
46
+ // Openings - lighter representation
47
+ createRule('Windows - Light blue tint', ifcTypeCriterion(['IfcWindow']), {
48
+ lineWeight: 'light',
49
+ fillColor: '#E3F2FD',
50
+ strokeColor: '#1976D2',
51
+ hatchPattern: 'none',
52
+ }, 80),
53
+ createRule('Doors - No fill', ifcTypeCriterion(['IfcDoor']), {
54
+ lineWeight: 'medium',
55
+ fillColor: '#FFFFFF',
56
+ strokeColor: '#000000',
57
+ hatchPattern: 'none',
58
+ }, 80),
59
+ // Furniture - lightest
60
+ createRule('Furniture - Hairline', ifcTypeCriterion(['IfcFurnishingElement', 'IfcFurniture']), {
61
+ lineWeight: 'hairline',
62
+ strokeColor: '#666666',
63
+ fillColor: '#F5F5F5',
64
+ hatchPattern: 'none',
65
+ }, 60),
66
+ ];
67
+ export const ARCHITECTURAL_PRESET = {
68
+ id: 'preset-architectural',
69
+ name: 'Architectural Standards',
70
+ description: 'ISO 128 compliant architectural drawing standards',
71
+ icon: 'PenTool',
72
+ rules: ARCHITECTURAL_RULES,
73
+ builtIn: true,
74
+ category: 'Standards',
75
+ };
76
+ // ═══════════════════════════════════════════════════════════════════════════
77
+ // FIRE SAFETY PRESET
78
+ // ═══════════════════════════════════════════════════════════════════════════
79
+ const FIRE_SAFETY_RULES = [
80
+ // Fire-rated walls (based on property)
81
+ createRule('Fire Rated 2hr+ - Red', andCriteria(ifcTypeCriterion(['IfcWall']), propertyCriterion('FireRating', 'greaterOrEqual', 120)), {
82
+ fillColor: '#FFCDD2',
83
+ strokeColor: '#C62828',
84
+ lineWeight: 'heavy',
85
+ hatchPattern: 'diagonal',
86
+ hatchColor: '#C62828',
87
+ }, 200, '2-hour or higher fire rating'),
88
+ createRule('Fire Rated 1hr - Orange', andCriteria(ifcTypeCriterion(['IfcWall']), propertyCriterion('FireRating', 'greaterOrEqual', 60)), {
89
+ fillColor: '#FFE0B2',
90
+ strokeColor: '#E65100',
91
+ lineWeight: 'heavy',
92
+ hatchPattern: 'diagonal',
93
+ hatchColor: '#E65100',
94
+ }, 190),
95
+ createRule('Fire Rated 30min - Yellow', andCriteria(ifcTypeCriterion(['IfcWall']), propertyCriterion('FireRating', 'greaterOrEqual', 30)), {
96
+ fillColor: '#FFF9C4',
97
+ strokeColor: '#F9A825',
98
+ lineWeight: 'medium',
99
+ hatchPattern: 'diagonal',
100
+ hatchColor: '#F9A825',
101
+ }, 180),
102
+ // Fire doors
103
+ createRule('Fire Doors - Red outline', andCriteria(ifcTypeCriterion(['IfcDoor']), propertyCriterion('FireRating', 'exists')), {
104
+ strokeColor: '#C62828',
105
+ lineWeight: 'heavy',
106
+ }, 200),
107
+ // Escape routes (spaces marked as circulation)
108
+ createRule('Escape Routes - Green', andCriteria(ifcTypeCriterion(['IfcSpace']), propertyCriterion('OccupancyType', 'contains', 'CIRCULATION')), {
109
+ fillColor: '#C8E6C9',
110
+ strokeColor: '#2E7D32',
111
+ lineWeight: 'light',
112
+ }, 150),
113
+ ];
114
+ export const FIRE_SAFETY_PRESET = {
115
+ id: 'preset-fire-safety',
116
+ name: 'Fire Safety',
117
+ description: 'Highlight fire-rated elements and escape routes',
118
+ icon: 'Flame',
119
+ rules: FIRE_SAFETY_RULES,
120
+ builtIn: true,
121
+ category: 'Safety',
122
+ };
123
+ // ═══════════════════════════════════════════════════════════════════════════
124
+ // STRUCTURAL PRESET
125
+ // ═══════════════════════════════════════════════════════════════════════════
126
+ const STRUCTURAL_RULES = [
127
+ // Highlight all structural elements
128
+ createRule('Load-bearing Walls - Blue', andCriteria(ifcTypeCriterion(['IfcWall']), propertyCriterion('LoadBearing', 'equals', true)), {
129
+ fillColor: '#BBDEFB',
130
+ strokeColor: '#1565C0',
131
+ lineWeight: 'heavy',
132
+ hatchPattern: 'diagonal',
133
+ hatchColor: '#1565C0',
134
+ }, 200),
135
+ createRule('Columns - Blue heavy', ifcTypeCriterion(['IfcColumn']), {
136
+ fillColor: '#90CAF9',
137
+ strokeColor: '#0D47A1',
138
+ lineWeight: 'heavy',
139
+ hatchPattern: 'cross-hatch',
140
+ hatchColor: '#0D47A1',
141
+ }, 190),
142
+ createRule('Beams - Blue medium', ifcTypeCriterion(['IfcBeam']), {
143
+ fillColor: '#64B5F6',
144
+ strokeColor: '#1976D2',
145
+ lineWeight: 'medium',
146
+ hatchPattern: 'diagonal',
147
+ }, 180),
148
+ createRule('Slabs - Light blue', ifcTypeCriterion(['IfcSlab']), {
149
+ fillColor: '#E3F2FD',
150
+ strokeColor: '#42A5F5',
151
+ lineWeight: 'medium',
152
+ }, 170),
153
+ createRule('Footings - Dark blue', ifcTypeCriterion(['IfcFooting', 'IfcPile']), {
154
+ fillColor: '#1976D2',
155
+ strokeColor: '#0D47A1',
156
+ lineWeight: 'heavy',
157
+ hatchPattern: 'concrete',
158
+ }, 200),
159
+ // Fade non-structural
160
+ createRule('Non-structural - Faded', ifcTypeCriterion(['IfcFurnishingElement', 'IfcFurniture', 'IfcCovering']), {
161
+ opacity: 0.3,
162
+ lineWeight: 'hairline',
163
+ }, 50),
164
+ ];
165
+ export const STRUCTURAL_PRESET = {
166
+ id: 'preset-structural',
167
+ name: 'Structural Highlight',
168
+ description: 'Emphasize structural elements, fade non-structural',
169
+ icon: 'Building2',
170
+ rules: STRUCTURAL_RULES,
171
+ builtIn: true,
172
+ category: 'Discipline',
173
+ };
174
+ // ═══════════════════════════════════════════════════════════════════════════
175
+ // MEP (MECHANICAL, ELECTRICAL, PLUMBING) PRESET
176
+ // ═══════════════════════════════════════════════════════════════════════════
177
+ const MEP_RULES = [
178
+ // HVAC - Blue
179
+ createRule('HVAC Ducts - Blue', ifcTypeCriterion(['IfcDuctSegment', 'IfcDuctFitting']), {
180
+ fillColor: '#E3F2FD',
181
+ strokeColor: '#1976D2',
182
+ lineWeight: 'medium',
183
+ }, 150),
184
+ createRule('Air Terminals - Blue', ifcTypeCriterion(['IfcAirTerminal', 'IfcAirTerminalBox']), {
185
+ fillColor: '#BBDEFB',
186
+ strokeColor: '#1565C0',
187
+ lineWeight: 'light',
188
+ }, 140),
189
+ // Plumbing - Green
190
+ createRule('Pipes - Green', ifcTypeCriterion(['IfcPipeSegment', 'IfcPipeFitting']), {
191
+ fillColor: '#E8F5E9',
192
+ strokeColor: '#388E3C',
193
+ lineWeight: 'medium',
194
+ }, 150),
195
+ createRule('Plumbing Fixtures - Green', ifcTypeCriterion(['IfcSanitaryTerminal', 'IfcWasteTerminal']), {
196
+ fillColor: '#C8E6C9',
197
+ strokeColor: '#2E7D32',
198
+ lineWeight: 'light',
199
+ }, 140),
200
+ // Electrical - Yellow/Orange
201
+ createRule('Cable Trays - Orange', ifcTypeCriterion(['IfcCableCarrierSegment', 'IfcCableCarrierFitting']), {
202
+ fillColor: '#FFF3E0',
203
+ strokeColor: '#E65100',
204
+ lineWeight: 'light',
205
+ }, 150),
206
+ createRule('Electrical Equipment - Yellow', ifcTypeCriterion(['IfcElectricDistributionBoard', 'IfcSwitchingDevice', 'IfcOutlet']), {
207
+ fillColor: '#FFFDE7',
208
+ strokeColor: '#F9A825',
209
+ lineWeight: 'light',
210
+ }, 140),
211
+ // Fade architectural
212
+ createRule('Architectural - Faded', ifcTypeCriterion(['IfcWall', 'IfcSlab', 'IfcDoor', 'IfcWindow']), {
213
+ opacity: 0.4,
214
+ strokeColor: '#9E9E9E',
215
+ }, 50),
216
+ ];
217
+ export const MEP_PRESET = {
218
+ id: 'preset-mep',
219
+ name: 'MEP Highlight',
220
+ description: 'Color-code mechanical, electrical, and plumbing systems',
221
+ icon: 'Wrench',
222
+ rules: MEP_RULES,
223
+ builtIn: true,
224
+ category: 'Discipline',
225
+ };
226
+ // ═══════════════════════════════════════════════════════════════════════════
227
+ // IFC MATERIALS PRESET (default - uses actual colors from IFC file)
228
+ // ═══════════════════════════════════════════════════════════════════════════
229
+ export const VIEW_3D_PRESET = {
230
+ id: 'preset-3d-colors',
231
+ name: 'Default',
232
+ description: 'By material color',
233
+ icon: 'Palette',
234
+ rules: [], // No rules needed - colors come from mesh data directly
235
+ builtIn: true,
236
+ category: 'Standards',
237
+ };
238
+ // ═══════════════════════════════════════════════════════════════════════════
239
+ // MONOCHROME PRESET
240
+ // ═══════════════════════════════════════════════════════════════════════════
241
+ const MONOCHROME_RULES = [
242
+ createRule('All elements - Black and white', { type: 'all' }, {
243
+ strokeColor: '#000000',
244
+ fillColor: '#FFFFFF',
245
+ hatchColor: '#000000',
246
+ }, 1),
247
+ createRule('Cut elements - Gray fill', ifcTypeCriterion(['IfcWall', 'IfcColumn', 'IfcSlab', 'IfcBeam']), {
248
+ fillColor: '#E0E0E0',
249
+ }, 10),
250
+ ];
251
+ export const MONOCHROME_PRESET = {
252
+ id: 'preset-monochrome',
253
+ name: 'Monochrome',
254
+ description: 'Black and white print-ready output',
255
+ icon: 'Printer',
256
+ rules: MONOCHROME_RULES,
257
+ builtIn: true,
258
+ category: 'Output',
259
+ };
260
+ // ═══════════════════════════════════════════════════════════════════════════
261
+ // ALL BUILT-IN PRESETS
262
+ // ═══════════════════════════════════════════════════════════════════════════
263
+ export const BUILT_IN_PRESETS = [
264
+ VIEW_3D_PRESET,
265
+ ARCHITECTURAL_PRESET,
266
+ FIRE_SAFETY_PRESET,
267
+ STRUCTURAL_PRESET,
268
+ MEP_PRESET,
269
+ MONOCHROME_PRESET,
270
+ ];
271
+ /**
272
+ * Get a built-in preset by ID
273
+ */
274
+ export function getBuiltInPreset(id) {
275
+ return BUILT_IN_PRESETS.find((p) => p.id === id);
276
+ }
277
+ /**
278
+ * Get all built-in presets for a category
279
+ */
280
+ export function getPresetsByCategory(category) {
281
+ return BUILT_IN_PRESETS.filter((p) => p.category === category);
282
+ }
283
+ //# sourceMappingURL=presets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presets.js","sourceRoot":"","sources":["../../src/graphic-overrides/presets.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAS/D,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjF,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E,IAAI,aAAa,GAAG,CAAC,CAAC;AACtB,SAAS,cAAc;IACrB,OAAO,gBAAgB,EAAE,aAAa,EAAE,CAAC;AAC3C,CAAC;AAED,SAAS,UAAU,CACjB,IAAY,EACZ,QAAyC,EACzC,KAAmC,EACnC,WAAmB,GAAG,EACtB,WAAoB;IAEpB,OAAO;QACL,EAAE,EAAE,cAAc,EAAE;QACpB,IAAI;QACJ,WAAW;QACX,OAAO,EAAE,IAAI;QACb,QAAQ;QACR,QAAQ;QACR,KAAK;KACN,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,iCAAiC;AACjC,8EAA8E;AAE9E,MAAM,mBAAmB,GAA0B;IACjD,oDAAoD;IACpD,UAAU,CACR,yBAAyB,EACzB,gBAAgB,CAAC,CAAC,SAAS,CAAC,CAAC,EAC7B;QACE,UAAU,EAAE,OAAO;QACnB,WAAW,EAAE,SAAS;QACtB,YAAY,EAAE,UAAU;QACxB,YAAY,EAAE,CAAC;QACf,UAAU,EAAE,EAAE;KACf,EACD,GAAG,EACH,8BAA8B,CAC/B;IACD,UAAU,CACR,2BAA2B,EAC3B,gBAAgB,CAAC,CAAC,WAAW,CAAC,CAAC,EAC/B;QACE,UAAU,EAAE,OAAO;QACnB,WAAW,EAAE,SAAS;QACtB,YAAY,EAAE,aAAa;QAC3B,YAAY,EAAE,CAAC;KAChB,EACD,GAAG,CACJ;IACD,UAAU,CACR,sBAAsB,EACtB,gBAAgB,CAAC,CAAC,SAAS,CAAC,CAAC,EAC7B;QACE,UAAU,EAAE,QAAQ;QACpB,SAAS,EAAE,SAAS;QACpB,YAAY,EAAE,UAAU;KACzB,EACD,EAAE,CACH;IACD,oCAAoC;IACpC,UAAU,CACR,2BAA2B,EAC3B,gBAAgB,CAAC,CAAC,WAAW,CAAC,CAAC,EAC/B;QACE,UAAU,EAAE,OAAO;QACnB,SAAS,EAAE,SAAS;QACpB,WAAW,EAAE,SAAS;QACtB,YAAY,EAAE,MAAM;KACrB,EACD,EAAE,CACH;IACD,UAAU,CACR,iBAAiB,EACjB,gBAAgB,CAAC,CAAC,SAAS,CAAC,CAAC,EAC7B;QACE,UAAU,EAAE,QAAQ;QACpB,SAAS,EAAE,SAAS;QACpB,WAAW,EAAE,SAAS;QACtB,YAAY,EAAE,MAAM;KACrB,EACD,EAAE,CACH;IACD,uBAAuB;IACvB,UAAU,CACR,sBAAsB,EACtB,gBAAgB,CAAC,CAAC,sBAAsB,EAAE,cAAc,CAAC,CAAC,EAC1D;QACE,UAAU,EAAE,UAAU;QACtB,WAAW,EAAE,SAAS;QACtB,SAAS,EAAE,SAAS;QACpB,YAAY,EAAE,MAAM;KACrB,EACD,EAAE,CACH;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAA0B;IACzD,EAAE,EAAE,sBAAsB;IAC1B,IAAI,EAAE,yBAAyB;IAC/B,WAAW,EAAE,mDAAmD;IAChE,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,mBAAmB;IAC1B,OAAO,EAAE,IAAI;IACb,QAAQ,EAAE,WAAW;CACtB,CAAC;AAEF,8EAA8E;AAC9E,qBAAqB;AACrB,8EAA8E;AAE9E,MAAM,iBAAiB,GAA0B;IAC/C,uCAAuC;IACvC,UAAU,CACR,uBAAuB,EACvB,WAAW,CACT,gBAAgB,CAAC,CAAC,SAAS,CAAC,CAAC,EAC7B,iBAAiB,CAAC,YAAY,EAAE,gBAAgB,EAAE,GAAG,CAAC,CACvD,EACD;QACE,SAAS,EAAE,SAAS;QACpB,WAAW,EAAE,SAAS;QACtB,UAAU,EAAE,OAAO;QACnB,YAAY,EAAE,UAAU;QACxB,UAAU,EAAE,SAAS;KACtB,EACD,GAAG,EACH,8BAA8B,CAC/B;IACD,UAAU,CACR,yBAAyB,EACzB,WAAW,CACT,gBAAgB,CAAC,CAAC,SAAS,CAAC,CAAC,EAC7B,iBAAiB,CAAC,YAAY,EAAE,gBAAgB,EAAE,EAAE,CAAC,CACtD,EACD;QACE,SAAS,EAAE,SAAS;QACpB,WAAW,EAAE,SAAS;QACtB,UAAU,EAAE,OAAO;QACnB,YAAY,EAAE,UAAU;QACxB,UAAU,EAAE,SAAS;KACtB,EACD,GAAG,CACJ;IACD,UAAU,CACR,2BAA2B,EAC3B,WAAW,CACT,gBAAgB,CAAC,CAAC,SAAS,CAAC,CAAC,EAC7B,iBAAiB,CAAC,YAAY,EAAE,gBAAgB,EAAE,EAAE,CAAC,CACtD,EACD;QACE,SAAS,EAAE,SAAS;QACpB,WAAW,EAAE,SAAS;QACtB,UAAU,EAAE,QAAQ;QACpB,YAAY,EAAE,UAAU;QACxB,UAAU,EAAE,SAAS;KACtB,EACD,GAAG,CACJ;IACD,aAAa;IACb,UAAU,CACR,0BAA0B,EAC1B,WAAW,CACT,gBAAgB,CAAC,CAAC,SAAS,CAAC,CAAC,EAC7B,iBAAiB,CAAC,YAAY,EAAE,QAAQ,CAAC,CAC1C,EACD;QACE,WAAW,EAAE,SAAS;QACtB,UAAU,EAAE,OAAO;KACpB,EACD,GAAG,CACJ;IACD,+CAA+C;IAC/C,UAAU,CACR,uBAAuB,EACvB,WAAW,CACT,gBAAgB,CAAC,CAAC,UAAU,CAAC,CAAC,EAC9B,iBAAiB,CAAC,eAAe,EAAE,UAAU,EAAE,aAAa,CAAC,CAC9D,EACD;QACE,SAAS,EAAE,SAAS;QACpB,WAAW,EAAE,SAAS;QACtB,UAAU,EAAE,OAAO;KACpB,EACD,GAAG,CACJ;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAA0B;IACvD,EAAE,EAAE,oBAAoB;IACxB,IAAI,EAAE,aAAa;IACnB,WAAW,EAAE,iDAAiD;IAC9D,IAAI,EAAE,OAAO;IACb,KAAK,EAAE,iBAAiB;IACxB,OAAO,EAAE,IAAI;IACb,QAAQ,EAAE,QAAQ;CACnB,CAAC;AAEF,8EAA8E;AAC9E,oBAAoB;AACpB,8EAA8E;AAE9E,MAAM,gBAAgB,GAA0B;IAC9C,oCAAoC;IACpC,UAAU,CACR,2BAA2B,EAC3B,WAAW,CACT,gBAAgB,CAAC,CAAC,SAAS,CAAC,CAAC,EAC7B,iBAAiB,CAAC,aAAa,EAAE,QAAQ,EAAE,IAAI,CAAC,CACjD,EACD;QACE,SAAS,EAAE,SAAS;QACpB,WAAW,EAAE,SAAS;QACtB,UAAU,EAAE,OAAO;QACnB,YAAY,EAAE,UAAU;QACxB,UAAU,EAAE,SAAS;KACtB,EACD,GAAG,CACJ;IACD,UAAU,CACR,sBAAsB,EACtB,gBAAgB,CAAC,CAAC,WAAW,CAAC,CAAC,EAC/B;QACE,SAAS,EAAE,SAAS;QACpB,WAAW,EAAE,SAAS;QACtB,UAAU,EAAE,OAAO;QACnB,YAAY,EAAE,aAAa;QAC3B,UAAU,EAAE,SAAS;KACtB,EACD,GAAG,CACJ;IACD,UAAU,CACR,qBAAqB,EACrB,gBAAgB,CAAC,CAAC,SAAS,CAAC,CAAC,EAC7B;QACE,SAAS,EAAE,SAAS;QACpB,WAAW,EAAE,SAAS;QACtB,UAAU,EAAE,QAAQ;QACpB,YAAY,EAAE,UAAU;KACzB,EACD,GAAG,CACJ;IACD,UAAU,CACR,oBAAoB,EACpB,gBAAgB,CAAC,CAAC,SAAS,CAAC,CAAC,EAC7B;QACE,SAAS,EAAE,SAAS;QACpB,WAAW,EAAE,SAAS;QACtB,UAAU,EAAE,QAAQ;KACrB,EACD,GAAG,CACJ;IACD,UAAU,CACR,sBAAsB,EACtB,gBAAgB,CAAC,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC,EAC3C;QACE,SAAS,EAAE,SAAS;QACpB,WAAW,EAAE,SAAS;QACtB,UAAU,EAAE,OAAO;QACnB,YAAY,EAAE,UAAU;KACzB,EACD,GAAG,CACJ;IACD,sBAAsB;IACtB,UAAU,CACR,wBAAwB,EACxB,gBAAgB,CAAC,CAAC,sBAAsB,EAAE,cAAc,EAAE,aAAa,CAAC,CAAC,EACzE;QACE,OAAO,EAAE,GAAG;QACZ,UAAU,EAAE,UAAU;KACvB,EACD,EAAE,CACH;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAA0B;IACtD,EAAE,EAAE,mBAAmB;IACvB,IAAI,EAAE,sBAAsB;IAC5B,WAAW,EAAE,oDAAoD;IACjE,IAAI,EAAE,WAAW;IACjB,KAAK,EAAE,gBAAgB;IACvB,OAAO,EAAE,IAAI;IACb,QAAQ,EAAE,YAAY;CACvB,CAAC;AAEF,8EAA8E;AAC9E,gDAAgD;AAChD,8EAA8E;AAE9E,MAAM,SAAS,GAA0B;IACvC,cAAc;IACd,UAAU,CACR,mBAAmB,EACnB,gBAAgB,CAAC,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,CAAC,EACtD;QACE,SAAS,EAAE,SAAS;QACpB,WAAW,EAAE,SAAS;QACtB,UAAU,EAAE,QAAQ;KACrB,EACD,GAAG,CACJ;IACD,UAAU,CACR,sBAAsB,EACtB,gBAAgB,CAAC,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,CAAC,EACzD;QACE,SAAS,EAAE,SAAS;QACpB,WAAW,EAAE,SAAS;QACtB,UAAU,EAAE,OAAO;KACpB,EACD,GAAG,CACJ;IACD,mBAAmB;IACnB,UAAU,CACR,eAAe,EACf,gBAAgB,CAAC,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,CAAC,EACtD;QACE,SAAS,EAAE,SAAS;QACpB,WAAW,EAAE,SAAS;QACtB,UAAU,EAAE,QAAQ;KACrB,EACD,GAAG,CACJ;IACD,UAAU,CACR,2BAA2B,EAC3B,gBAAgB,CAAC,CAAC,qBAAqB,EAAE,kBAAkB,CAAC,CAAC,EAC7D;QACE,SAAS,EAAE,SAAS;QACpB,WAAW,EAAE,SAAS;QACtB,UAAU,EAAE,OAAO;KACpB,EACD,GAAG,CACJ;IACD,6BAA6B;IAC7B,UAAU,CACR,sBAAsB,EACtB,gBAAgB,CAAC,CAAC,wBAAwB,EAAE,wBAAwB,CAAC,CAAC,EACtE;QACE,SAAS,EAAE,SAAS;QACpB,WAAW,EAAE,SAAS;QACtB,UAAU,EAAE,OAAO;KACpB,EACD,GAAG,CACJ;IACD,UAAU,CACR,+BAA+B,EAC/B,gBAAgB,CAAC,CAAC,8BAA8B,EAAE,oBAAoB,EAAE,WAAW,CAAC,CAAC,EACrF;QACE,SAAS,EAAE,SAAS;QACpB,WAAW,EAAE,SAAS;QACtB,UAAU,EAAE,OAAO;KACpB,EACD,GAAG,CACJ;IACD,qBAAqB;IACrB,UAAU,CACR,uBAAuB,EACvB,gBAAgB,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC,EAChE;QACE,OAAO,EAAE,GAAG;QACZ,WAAW,EAAE,SAAS;KACvB,EACD,EAAE,CACH;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAA0B;IAC/C,EAAE,EAAE,YAAY;IAChB,IAAI,EAAE,eAAe;IACrB,WAAW,EAAE,yDAAyD;IACtE,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,SAAS;IAChB,OAAO,EAAE,IAAI;IACb,QAAQ,EAAE,YAAY;CACvB,CAAC;AAEF,8EAA8E;AAC9E,oEAAoE;AACpE,8EAA8E;AAE9E,MAAM,CAAC,MAAM,cAAc,GAA0B;IACnD,EAAE,EAAE,kBAAkB;IACtB,IAAI,EAAE,SAAS;IACf,WAAW,EAAE,mBAAmB;IAChC,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,EAAE,EAAE,wDAAwD;IACnE,OAAO,EAAE,IAAI;IACb,QAAQ,EAAE,WAAW;CACtB,CAAC;AAEF,8EAA8E;AAC9E,oBAAoB;AACpB,8EAA8E;AAE9E,MAAM,gBAAgB,GAA0B;IAC9C,UAAU,CACR,gCAAgC,EAChC,EAAE,IAAI,EAAE,KAAK,EAAE,EACf;QACE,WAAW,EAAE,SAAS;QACtB,SAAS,EAAE,SAAS;QACpB,UAAU,EAAE,SAAS;KACtB,EACD,CAAC,CACF;IACD,UAAU,CACR,0BAA0B,EAC1B,gBAAgB,CAAC,CAAC,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,EAChE;QACE,SAAS,EAAE,SAAS;KACrB,EACD,EAAE,CACH;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAA0B;IACtD,EAAE,EAAE,mBAAmB;IACvB,IAAI,EAAE,YAAY;IAClB,WAAW,EAAE,oCAAoC;IACjD,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,gBAAgB;IACvB,OAAO,EAAE,IAAI;IACb,QAAQ,EAAE,QAAQ;CACnB,CAAC;AAEF,8EAA8E;AAC9E,uBAAuB;AACvB,8EAA8E;AAE9E,MAAM,CAAC,MAAM,gBAAgB,GAA4B;IACvD,cAAc;IACd,oBAAoB;IACpB,kBAAkB;IAClB,iBAAiB;IACjB,UAAU;IACV,iBAAiB;CAClB,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,EAAU;IACzC,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;AACnD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAAgB;IACnD,OAAO,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;AACjE,CAAC"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Graphic Overrides Rule Engine
3
+ *
4
+ * Evaluates override rules against element data and resolves
5
+ * the final graphic style to apply.
6
+ */
7
+ import type { GraphicOverrideRule, OverrideCriteria, OverrideCriterion, CriteriaOperator, ElementData, GraphicStyle, OverrideResult } from './types';
8
+ export declare class GraphicOverrideEngine {
9
+ private rules;
10
+ constructor(rules?: GraphicOverrideRule[]);
11
+ /**
12
+ * Set the active rules
13
+ */
14
+ setRules(rules: GraphicOverrideRule[]): void;
15
+ /**
16
+ * Add a rule
17
+ */
18
+ addRule(rule: GraphicOverrideRule): void;
19
+ /**
20
+ * Remove a rule by ID
21
+ */
22
+ removeRule(ruleId: string): void;
23
+ /**
24
+ * Get all active rules
25
+ */
26
+ getRules(): GraphicOverrideRule[];
27
+ /**
28
+ * Apply overrides to an element and get resolved style
29
+ */
30
+ applyOverrides(element: ElementData, baseStyle?: Partial<GraphicStyle>): OverrideResult;
31
+ /**
32
+ * Apply overrides to multiple elements
33
+ */
34
+ applyOverridesToMany(elements: ElementData[], baseStyles?: Map<number, Partial<GraphicStyle>>): Map<number, OverrideResult>;
35
+ /**
36
+ * Check which rules match an element (for debugging/preview)
37
+ */
38
+ getMatchingRules(element: ElementData): GraphicOverrideRule[];
39
+ /**
40
+ * Validate a rule's criteria syntax
41
+ */
42
+ static validateCriteria(criteria: OverrideCriteria | OverrideCriterion): string[];
43
+ }
44
+ /**
45
+ * Create a default override engine
46
+ */
47
+ export declare function createOverrideEngine(rules?: GraphicOverrideRule[]): GraphicOverrideEngine;
48
+ /**
49
+ * Helper to create a simple IFC type criterion
50
+ */
51
+ export declare function ifcTypeCriterion(types: string[], includeSubtypes?: boolean): OverrideCriterion;
52
+ /**
53
+ * Helper to create a property criterion
54
+ */
55
+ export declare function propertyCriterion(propertyName: string, operator: CriteriaOperator, value?: unknown, propertySet?: string): OverrideCriterion;
56
+ /**
57
+ * Helper to combine criteria with AND
58
+ */
59
+ export declare function andCriteria(...conditions: (OverrideCriteria | OverrideCriterion)[]): OverrideCriteria;
60
+ /**
61
+ * Helper to combine criteria with OR
62
+ */
63
+ export declare function orCriteria(...conditions: (OverrideCriteria | OverrideCriterion)[]): OverrideCriteria;
64
+ //# sourceMappingURL=rule-engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rule-engine.d.ts","sourceRoot":"","sources":["../../src/graphic-overrides/rule-engine.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,WAAW,EACX,YAAY,EAEZ,cAAc,EAIf,MAAM,SAAS,CAAC;AAyWjB,qBAAa,qBAAqB;IAChC,OAAO,CAAC,KAAK,CAA6B;gBAE9B,KAAK,CAAC,EAAE,mBAAmB,EAAE;IAMzC;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,mBAAmB,EAAE,GAAG,IAAI;IAK5C;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI;IAKxC;;OAEG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAIhC;;OAEG;IACH,QAAQ,IAAI,mBAAmB,EAAE;IAIjC;;OAEG;IACH,cAAc,CAAC,OAAO,EAAE,WAAW,EAAE,SAAS,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,cAAc;IAyBvF;;OAEG;IACH,oBAAoB,CAClB,QAAQ,EAAE,WAAW,EAAE,EACvB,UAAU,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC,GAC9C,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC;IAW9B;;OAEG;IACH,gBAAgB,CAAC,OAAO,EAAE,WAAW,GAAG,mBAAmB,EAAE;IAM7D;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,iBAAiB,GAAG,MAAM,EAAE;CA0BlF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,CAAC,EAAE,mBAAmB,EAAE,GAAG,qBAAqB,CAEzF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,eAAe,UAAO,GAAG,iBAAiB,CAM3F;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,gBAAgB,EAC1B,KAAK,CAAC,EAAE,OAAO,EACf,WAAW,CAAC,EAAE,MAAM,GACnB,iBAAiB,CAQnB;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,GAAG,UAAU,EAAE,CAAC,gBAAgB,GAAG,iBAAiB,CAAC,EAAE,GACtD,gBAAgB,CAElB;AAED;;GAEG;AACH,wBAAgB,UAAU,CACxB,GAAG,UAAU,EAAE,CAAC,gBAAgB,GAAG,iBAAiB,CAAC,EAAE,GACtD,gBAAgB,CAElB"}