@ifc-lite/sdk 9.0.0 → 9.2.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 (123) hide show
  1. package/README.md +36 -0
  2. package/dist/cost-store-backend.d.ts +2 -0
  3. package/dist/cost-store-backend.d.ts.map +1 -1
  4. package/dist/cost-store-backend.js.map +1 -1
  5. package/dist/group-store-backend.d.ts +5 -0
  6. package/dist/group-store-backend.d.ts.map +1 -0
  7. package/dist/group-store-backend.js +43 -0
  8. package/dist/group-store-backend.js.map +1 -0
  9. package/dist/headless-mutate.d.ts +0 -10
  10. package/dist/headless-mutate.d.ts.map +1 -1
  11. package/dist/headless-mutate.js +8 -2
  12. package/dist/headless-mutate.js.map +1 -1
  13. package/dist/host.d.ts +2 -0
  14. package/dist/host.d.ts.map +1 -1
  15. package/dist/host.js +34 -11
  16. package/dist/host.js.map +1 -1
  17. package/dist/index.d.ts +6 -9
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +4 -4
  20. package/dist/index.js.map +1 -1
  21. package/dist/namespaces/ids-authoring.d.ts +74 -0
  22. package/dist/namespaces/ids-authoring.d.ts.map +1 -0
  23. package/dist/namespaces/ids-authoring.js +99 -0
  24. package/dist/namespaces/ids-authoring.js.map +1 -0
  25. package/dist/namespaces/ids.d.ts +4 -0
  26. package/dist/namespaces/ids.d.ts.map +1 -1
  27. package/dist/namespaces/ids.js +11 -0
  28. package/dist/namespaces/ids.js.map +1 -1
  29. package/dist/namespaces/mutate.d.ts +3 -3
  30. package/dist/namespaces/mutate.d.ts.map +1 -1
  31. package/dist/namespaces/mutate.js +7 -3
  32. package/dist/namespaces/mutate.js.map +1 -1
  33. package/dist/namespaces/store-group.d.ts +9 -0
  34. package/dist/namespaces/store-group.d.ts.map +1 -0
  35. package/dist/namespaces/store-group.js +31 -0
  36. package/dist/namespaces/store-group.js.map +1 -0
  37. package/dist/namespaces/store-modelling.d.ts +42 -1
  38. package/dist/namespaces/store-modelling.d.ts.map +1 -1
  39. package/dist/namespaces/store-modelling.js +119 -0
  40. package/dist/namespaces/store-modelling.js.map +1 -1
  41. package/dist/namespaces/store.d.ts +14 -13
  42. package/dist/namespaces/store.d.ts.map +1 -1
  43. package/dist/namespaces/store.js +10 -9
  44. package/dist/namespaces/store.js.map +1 -1
  45. package/dist/review/bcf.d.ts +10 -0
  46. package/dist/review/bcf.d.ts.map +1 -0
  47. package/dist/review/bcf.js +33 -0
  48. package/dist/review/bcf.js.map +1 -0
  49. package/dist/review/cards.d.ts +60 -0
  50. package/dist/review/cards.d.ts.map +1 -0
  51. package/dist/review/cards.js +90 -0
  52. package/dist/review/cards.js.map +1 -0
  53. package/dist/review/disciplines.d.ts +3 -0
  54. package/dist/review/disciplines.d.ts.map +1 -0
  55. package/dist/review/disciplines.js +10 -0
  56. package/dist/review/disciplines.js.map +1 -0
  57. package/dist/review/identity.d.ts +27 -0
  58. package/dist/review/identity.d.ts.map +1 -0
  59. package/dist/review/identity.js +42 -0
  60. package/dist/review/identity.js.map +1 -0
  61. package/dist/review/snapshot.d.ts +15 -0
  62. package/dist/review/snapshot.d.ts.map +1 -0
  63. package/dist/review/snapshot.js +25 -0
  64. package/dist/review/snapshot.js.map +1 -0
  65. package/dist/review/types.d.ts +167 -0
  66. package/dist/review/types.d.ts.map +1 -0
  67. package/dist/review/types.js +11 -0
  68. package/dist/review/types.js.map +1 -0
  69. package/dist/review/validation.d.ts +14 -0
  70. package/dist/review/validation.d.ts.map +1 -0
  71. package/dist/review/validation.js +57 -0
  72. package/dist/review/validation.js.map +1 -0
  73. package/dist/review.d.ts +11 -0
  74. package/dist/review.d.ts.map +1 -0
  75. package/dist/review.js +12 -0
  76. package/dist/review.js.map +1 -0
  77. package/dist/schedule-types.d.ts +4 -0
  78. package/dist/schedule-types.d.ts.map +1 -1
  79. package/dist/store-align-command.d.ts +13 -0
  80. package/dist/store-align-command.d.ts.map +1 -0
  81. package/dist/store-align-command.js +31 -0
  82. package/dist/store-align-command.js.map +1 -0
  83. package/dist/store-authoring-exports.d.ts +10 -0
  84. package/dist/store-authoring-exports.d.ts.map +1 -0
  85. package/dist/store-authoring-exports.js +9 -0
  86. package/dist/store-authoring-exports.js.map +1 -0
  87. package/dist/store-authoring-types.d.ts +8 -0
  88. package/dist/store-authoring-types.d.ts.map +1 -0
  89. package/dist/store-authoring-types.js +2 -0
  90. package/dist/store-authoring-types.js.map +1 -0
  91. package/dist/store-group-types.d.ts +20 -0
  92. package/dist/store-group-types.d.ts.map +1 -0
  93. package/dist/store-group-types.js +2 -0
  94. package/dist/store-group-types.js.map +1 -0
  95. package/dist/store-modelling-backend.d.ts.map +1 -1
  96. package/dist/store-modelling-backend.js +61 -1
  97. package/dist/store-modelling-backend.js.map +1 -1
  98. package/dist/store-modelling-types.d.ts +31 -2
  99. package/dist/store-modelling-types.d.ts.map +1 -1
  100. package/dist/store-ordinary-backend.d.ts +10 -0
  101. package/dist/store-ordinary-backend.d.ts.map +1 -0
  102. package/dist/store-ordinary-backend.js +27 -0
  103. package/dist/store-ordinary-backend.js.map +1 -0
  104. package/dist/store-physical-backend.d.ts +5 -0
  105. package/dist/store-physical-backend.d.ts.map +1 -0
  106. package/dist/store-physical-backend.js +51 -0
  107. package/dist/store-physical-backend.js.map +1 -0
  108. package/dist/store-physical-types.d.ts +33 -0
  109. package/dist/store-physical-types.d.ts.map +1 -0
  110. package/dist/store-physical-types.js +5 -0
  111. package/dist/store-physical-types.js.map +1 -0
  112. package/dist/store-room-auto-all.d.ts +5 -0
  113. package/dist/store-room-auto-all.d.ts.map +1 -0
  114. package/dist/store-room-auto-all.js +94 -0
  115. package/dist/store-room-auto-all.js.map +1 -0
  116. package/dist/store-room-command.d.ts +91 -0
  117. package/dist/store-room-command.d.ts.map +1 -0
  118. package/dist/store-room-command.js +197 -0
  119. package/dist/store-room-command.js.map +1 -0
  120. package/dist/types.d.ts +12 -24
  121. package/dist/types.d.ts.map +1 -1
  122. package/dist/types.js.map +1 -1
  123. package/package.json +21 -14
@@ -2,7 +2,7 @@
2
2
  * License, v. 2.0. If a copy of the MPL was not distributed with this
3
3
  * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
4
  import { isInstantiable, isKnownType, normalizeIfcTypeName } from '@ifc-lite/parser';
5
- import { StoreModellingNamespace } from './store-modelling.js';
5
+ import { StoreGroupNamespace } from './store-group.js';
6
6
  /**
7
7
  * `bim.store` — document-level edits on a parsed model.
8
8
  *
@@ -18,7 +18,7 @@ import { StoreModellingNamespace } from './store-modelling.js';
18
18
  * Changes accumulate in a per-model overlay and are flushed to the IFC
19
19
  * file on the next `bim.export.ifc({ applyMutations: true })`.
20
20
  */
21
- export class StoreNamespace extends StoreModellingNamespace {
21
+ export class StoreNamespace extends StoreGroupNamespace {
22
22
  /**
23
23
  * Inject a new entity into the active model. Returns an `EntityRef`
24
24
  * pointing at the freshly-allocated expressId.
@@ -100,8 +100,9 @@ export class StoreNamespace extends StoreModellingNamespace {
100
100
  * so the column appears next to the existing model on export.
101
101
  *
102
102
  * `Position` is the base centre in storey-local coordinates (metres),
103
- * `Width`×`Depth` is the centred rectangular cross-section, and
104
- * `Height` is the +Z extrusion length.
103
+ * `Width`×`Depth` selects a centred rectangle; `Profile` selects the
104
+ * canonical parameterised section. `RefDirection` turns its local X axis
105
+ * in the storey plane, and `Height` is the +Z extrusion length.
105
106
  *
106
107
  * @example
107
108
  * const storeyId = bim.query.byType('IfcBuildingStorey')[0].ref.expressId;
@@ -137,9 +138,9 @@ export class StoreNamespace extends StoreModellingNamespace {
137
138
  return this.backend.store.addSlab(modelId, storeyExpressId, params);
138
139
  }
139
140
  /**
140
- * Add an IfcBeam between `Start` and `End` with a centred rectangular
141
- * cross-section (`Width` × `Height`). Local Z is the beam axis so the
142
- * extrusion runs along the beam.
141
+ * Add an IfcBeam between `Start` and `End` with a centred rectangle
142
+ * (`Width` × `Height`) or parameterised `Profile`. Local Z is the beam
143
+ * axis so the extrusion runs along the beam.
143
144
  */
144
145
  addBeam(modelId, storeyExpressId, params) {
145
146
  return this.backend.store.addBeam(modelId, storeyExpressId, params);
@@ -179,8 +180,8 @@ export class StoreNamespace extends StoreModellingNamespace {
179
180
  }
180
181
  /**
181
182
  * Add an IfcMember (generic structural member — brace, post, strut)
182
- * between `Start` and `End`. Same axial extrusion as `addBeam`;
183
- * choose the PredefinedType to disambiguate the role.
183
+ * between `Start` and `End`. Same rectangular or parameterised Profile
184
+ * extrusion as `addBeam`; choose PredefinedType to disambiguate the role.
184
185
  */
185
186
  addMember(modelId, storeyExpressId, params) {
186
187
  return this.backend.store.addMember(modelId, storeyExpressId, params);
@@ -1 +1 @@
1
- {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/namespaces/store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/namespaces/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * BCF topics as coordination records. A topic's elements are the IfcGuids its
3
+ * viewpoints select or colour; BCF names no model, so a GlobalId present in two
4
+ * loaded models stays ambiguous. The topic status is the topic's own and is
5
+ * never changed by the review workspace.
6
+ */
7
+ import type { BCFProject } from '@ifc-lite/bcf';
8
+ import type { ReviewMessage, FindingSourceResult } from './types.js';
9
+ export declare function bcfFindings<Message extends ReviewMessage = ReviewMessage>(project: BCFProject | null): FindingSourceResult<Message>;
10
+ //# sourceMappingURL=bcf.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bcf.d.ts","sourceRoot":"","sources":["../../src/review/bcf.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAY,MAAM,eAAe,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAc,mBAAmB,EAAiB,MAAM,YAAY,CAAC;AAYhG,wBAAgB,WAAW,CAAC,OAAO,SAAS,aAAa,GAAG,aAAa,EAAE,OAAO,EAAE,UAAU,GAAG,IAAI,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAanI"}
@@ -0,0 +1,33 @@
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
+ function topicGuids(topic) {
5
+ const guids = new Set();
6
+ for (const viewpoint of topic.viewpoints) {
7
+ const components = viewpoint.components;
8
+ for (const component of components?.selection ?? [])
9
+ if (component.ifcGuid)
10
+ guids.add(component.ifcGuid);
11
+ for (const coloring of components?.coloring ?? [])
12
+ for (const component of coloring.components)
13
+ if (component.ifcGuid)
14
+ guids.add(component.ifcGuid);
15
+ }
16
+ return [...guids];
17
+ }
18
+ export function bcfFindings(project) {
19
+ if (!project || project.topics.size === 0)
20
+ return { runs: [], findings: [] };
21
+ const run = { id: 'bcf:project', source: 'bcf', temporal: 'current', label: project.name || 'BCF',
22
+ capturedAt: null, complete: true, incomplete: [], models: [] };
23
+ const findings = [...project.topics.values()].map(topic => ({
24
+ id: `${run.id}#${topic.guid}`, lineage: `bcf|${topic.guid}`, source: 'bcf', run,
25
+ elements: topicGuids(topic).map(globalId => ({ globalId, modelId: null, modelName: null })),
26
+ nativeStatus: topic.topicStatus ?? '', title: topic.title,
27
+ detail: [topic.topicType, topic.priority ? `priority ${topic.priority}` : '', topic.assignedTo ? `assigned ${topic.assignedTo}` : '',
28
+ topic.labels?.length ? `labels ${topic.labels.join(', ')}` : ''].filter((line) => !!line),
29
+ lifecycle: 'record', disciplines: [], storeys: [], evidence: { kind: 'bcf', topicGuid: topic.guid },
30
+ }));
31
+ return { runs: [run], findings };
32
+ }
33
+ //# sourceMappingURL=bcf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bcf.js","sourceRoot":"","sources":["../../src/review/bcf.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAY/D,SAAS,UAAU,CAAC,KAAe;IACjC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,KAAK,MAAM,SAAS,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;QACzC,MAAM,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC;QACxC,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,SAAS,IAAI,EAAE;YAAE,IAAI,SAAS,CAAC,OAAO;gBAAE,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACzG,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE,QAAQ,IAAI,EAAE;YAAE,KAAK,MAAM,SAAS,IAAI,QAAQ,CAAC,UAAU;gBAAE,IAAI,SAAS,CAAC,OAAO;oBAAE,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACtJ,CAAC;IACD,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,WAAW,CAAgD,OAA0B;IACnG,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IAC7E,MAAM,GAAG,GAAwB,EAAE,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,IAAI,KAAK;QACpH,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IACjE,MAAM,QAAQ,GAA6B,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACpF,EAAE,EAAE,GAAG,GAAG,CAAC,EAAE,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,OAAO,KAAK,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG;QAC/E,QAAQ,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3F,YAAY,EAAE,KAAK,CAAC,WAAW,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK;QACzD,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE;YAClI,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAC3G,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,IAAI,EAAE;KACpG,CAAC,CAAC,CAAC;IACJ,OAAO,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC;AACnC,CAAC"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Coordination cards (P18, #6922): findings that refer to exactly the same
3
+ * set of validated elements form one card. Cards are not transitive clusters:
4
+ * a clash between A and B is its own card, and links to the card of findings
5
+ * on A alone as *related* instead of absorbing it, so no finding is ever in
6
+ * two cards and one busy element cannot swallow the whole model.
7
+ *
8
+ * A finding with any element that does not resolve to exactly one loaded
9
+ * model (ambiguous, missing, or unresolved by its native source) is never
10
+ * merged: it gets a card of its own marked unvalidated.
11
+ */
12
+ import { type ElementResolution } from './identity.js';
13
+ import type { FindingElement, FindingSourceKind, ReviewFinding, ReviewModel, ReviewMessage } from './types.js';
14
+ export interface CardElement extends FindingElement {
15
+ /** Durable key when validated; null otherwise. */
16
+ key: string | null;
17
+ resolution: ElementResolution['state'];
18
+ /** Live express id in `resolvedModelId` when validated. */
19
+ expressId: number | null;
20
+ resolvedModelId: string | null;
21
+ }
22
+ /**
23
+ * `current`: an analysis observes it now. `not-evaluated`: only historical
24
+ * evidence, and no complete compatible run looked again. `resolution-candidate`:
25
+ * only historical evidence, every item re-examined by a complete current run
26
+ * and no longer observed; a human decides. `record`: only coordination records (BCF topics or saved grouping receipts).
27
+ */
28
+ export type CardState = 'current' | 'not-evaluated' | 'resolution-candidate' | 'record';
29
+ export interface CoordinationCard<Message extends ReviewMessage = ReviewMessage> {
30
+ /** Durable identity: the sorted validated element keys, or the single finding for an unvalidated card. */
31
+ key: string;
32
+ identity: 'validated' | 'unvalidated';
33
+ elements: CardElement[];
34
+ findings: ReviewFinding<Message>[];
35
+ sources: FindingSourceKind[];
36
+ state: CardState;
37
+ /** BCF topic GUIDs among the findings. */
38
+ topics: string[];
39
+ /** Cards sharing at least one validated element with this one. */
40
+ related: string[];
41
+ disciplines: string[];
42
+ storeys: string[];
43
+ models: string[];
44
+ }
45
+ /** Each total counts a different thing; none is derived from another. */
46
+ export interface ReviewTotals {
47
+ uniqueElements: number;
48
+ unverifiedElements: number;
49
+ currentFindings: number;
50
+ historicalFindings: number;
51
+ cards: number;
52
+ topics: number;
53
+ }
54
+ export declare function buildCards<Message extends ReviewMessage>(findings: readonly ReviewFinding<Message>[], models: readonly ReviewModel[]): {
55
+ cards: CoordinationCard<Message>[];
56
+ totals: ReviewTotals;
57
+ };
58
+ /** Totals for the exact cards included in an action, independently of workspace filters. */
59
+ export declare function totalsForCards<Message extends ReviewMessage>(cards: readonly CoordinationCard<Message>[]): ReviewTotals;
60
+ //# sourceMappingURL=cards.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cards.d.ts","sourceRoot":"","sources":["../../src/review/cards.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;GAUG;AAEH,OAAO,EAA8B,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACnF,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE/G,MAAM,WAAW,WAAY,SAAQ,cAAc;IACjD,kDAAkD;IAClD,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,UAAU,EAAE,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACvC,2DAA2D;IAC3D,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED;;;;;GAKG;AACH,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,eAAe,GAAG,sBAAsB,GAAG,QAAQ,CAAC;AAExF,MAAM,WAAW,gBAAgB,CAAC,OAAO,SAAS,aAAa,GAAG,aAAa;IAC7E,0GAA0G;IAC1G,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,WAAW,GAAG,aAAa,CAAC;IACtC,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;IACnC,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,KAAK,EAAE,SAAS,CAAC;IACjB,0CAA0C;IAC1C,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,kEAAkE;IAClE,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,yEAAyE;AACzE,MAAM,WAAW,YAAY;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAcD,wBAAgB,UAAU,CAAC,OAAO,SAAS,aAAa,EAAE,QAAQ,EAAE,SAAS,aAAa,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,WAAW,EAAE,GAAG;IAAE,KAAK,EAAE,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC;IAAC,MAAM,EAAE,YAAY,CAAA;CAAE,CA0CnM;AAED,4FAA4F;AAC5F,wBAAgB,cAAc,CAAC,OAAO,SAAS,aAAa,EAAE,KAAK,EAAE,SAAS,gBAAgB,CAAC,OAAO,CAAC,EAAE,GAAG,YAAY,CAYvH"}
@@ -0,0 +1,90 @@
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
+ /**
5
+ * Coordination cards (P18, #6922): findings that refer to exactly the same
6
+ * set of validated elements form one card. Cards are not transitive clusters:
7
+ * a clash between A and B is its own card, and links to the card of findings
8
+ * on A alone as *related* instead of absorbing it, so no finding is ever in
9
+ * two cards and one busy element cannot swallow the whole model.
10
+ *
11
+ * A finding with any element that does not resolve to exactly one loaded
12
+ * model (ambiguous, missing, or unresolved by its native source) is never
13
+ * merged: it gets a card of its own marked unvalidated.
14
+ */
15
+ import { elementKey, resolveElement } from './identity.js';
16
+ const ANALYSIS_CURRENT = new Set(['observed', 'new', 'persistent', 'changed']);
17
+ function cardState(findings) {
18
+ if (findings.some(finding => finding.source !== 'bcf' && ANALYSIS_CURRENT.has(finding.lifecycle)))
19
+ return 'current';
20
+ const historical = findings.filter(finding => finding.lifecycle !== 'record');
21
+ if (historical.length === 0)
22
+ return 'record';
23
+ // A partial or missing re-run leaves at least one item not evaluated, which blocks a resolution candidate.
24
+ return historical.every(finding => finding.lifecycle === 'no-longer-observed') ? 'resolution-candidate' : 'not-evaluated';
25
+ }
26
+ const STATE_ORDER = { current: 0, 'not-evaluated': 1, 'resolution-candidate': 2, record: 3 };
27
+ export function buildCards(findings, models) {
28
+ const groups = new Map();
29
+ for (const finding of findings) {
30
+ const elements = finding.elements.map((element) => {
31
+ const resolution = resolveElement(element, models);
32
+ if (resolution.state !== 'resolved') {
33
+ return { ...element, key: null, resolution: resolution.state, expressId: null, resolvedModelId: null };
34
+ }
35
+ return { ...element, modelName: resolution.modelName, key: elementKey(resolution.modelName, element.globalId),
36
+ resolution: 'resolved', expressId: resolution.expressId, resolvedModelId: resolution.modelId };
37
+ });
38
+ const validated = elements.length > 0 && elements.every(element => element.key !== null);
39
+ const key = validated ? [...new Set(elements.map(element => element.key))].sort().join('\n') : `finding:${finding.id}`;
40
+ const group = groups.get(key) ?? { identity: validated ? 'validated' : 'unvalidated', elements: new Map(), findings: [] };
41
+ for (const element of elements) {
42
+ const id = element.key ?? `${element.modelName ?? ''}\u001f${element.globalId}`;
43
+ if (!group.elements.has(id))
44
+ group.elements.set(id, element);
45
+ }
46
+ group.findings.push(finding);
47
+ groups.set(key, group);
48
+ }
49
+ const byElement = new Map();
50
+ for (const [key, group] of groups) {
51
+ if (group.identity !== 'validated')
52
+ continue;
53
+ for (const elementId of group.elements.keys())
54
+ byElement.set(elementId, [...(byElement.get(elementId) ?? []), key]);
55
+ }
56
+ const cards = [...groups].map(([key, group]) => {
57
+ const related = new Set();
58
+ if (group.identity === 'validated')
59
+ for (const elementId of group.elements.keys()) {
60
+ for (const other of byElement.get(elementId) ?? [])
61
+ if (other !== key)
62
+ related.add(other);
63
+ }
64
+ const elements = [...group.elements.values()];
65
+ return { key, identity: group.identity, elements, findings: group.findings,
66
+ sources: [...new Set(group.findings.map(finding => finding.source))], state: cardState(group.findings),
67
+ topics: [...new Set(group.findings.flatMap(finding => finding.evidence.kind === 'bcf' ? [finding.evidence.topicGuid] : []))],
68
+ related: [...related].sort(),
69
+ disciplines: [...new Set(group.findings.flatMap(finding => finding.disciplines))].sort(),
70
+ storeys: [...new Set(group.findings.flatMap(finding => finding.storeys))].sort(),
71
+ models: [...new Set(elements.flatMap(element => element.modelName ? [element.modelName] : []))].sort() };
72
+ }).sort((a, b) => STATE_ORDER[a.state] - STATE_ORDER[b.state] || b.sources.length - a.sources.length
73
+ || b.findings.length - a.findings.length || (a.key < b.key ? -1 : a.key > b.key ? 1 : 0));
74
+ return { cards, totals: totalsForCards(cards) };
75
+ }
76
+ /** Totals for the exact cards included in an action, independently of workspace filters. */
77
+ export function totalsForCards(cards) {
78
+ const validatedElements = new Set(cards.flatMap(card => card.elements.flatMap(element => element.key ? [element.key] : [])));
79
+ const unverifiedElements = new Set(cards.flatMap(card => card.elements.filter(element => !element.key).map(element => `${element.modelName ?? ''}\u001f${element.globalId}`)));
80
+ const analysis = cards.flatMap(card => card.findings).filter(finding => finding.lifecycle !== 'record');
81
+ return {
82
+ uniqueElements: validatedElements.size,
83
+ unverifiedElements: unverifiedElements.size,
84
+ currentFindings: analysis.filter(finding => finding.run.temporal === 'current').length,
85
+ historicalFindings: analysis.filter(finding => finding.run.temporal === 'historical').length,
86
+ cards: cards.length,
87
+ topics: new Set(cards.flatMap(card => card.topics)).size,
88
+ };
89
+ }
90
+ //# sourceMappingURL=cards.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cards.js","sourceRoot":"","sources":["../../src/review/cards.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ /** Native taxonomy hints, retaining overlapping and unknown discipline candidates. */
2
+ export declare function typeDisciplines(ifcType: string | undefined): string[];
3
+ //# sourceMappingURL=disciplines.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"disciplines.d.ts","sourceRoot":"","sources":["../../src/review/disciplines.ts"],"names":[],"mappings":"AAMA,sFAAsF;AACtF,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,EAAE,CAGrE"}
@@ -0,0 +1,10 @@
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 { DISCIPLINES, matchesSelector } from '@ifc-lite/clash';
5
+ /** Native taxonomy hints, retaining overlapping and unknown discipline candidates. */
6
+ export function typeDisciplines(ifcType) {
7
+ return ifcType ? Object.values(DISCIPLINES).filter(discipline => matchesSelector(ifcType, discipline.selector))
8
+ .map(discipline => discipline.code) : [];
9
+ }
10
+ //# sourceMappingURL=disciplines.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"disciplines.js","sourceRoot":"","sources":["../../src/review/disciplines.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAE/D,sFAAsF;AACtF,MAAM,UAAU,eAAe,CAAC,OAA2B;IACzD,OAAO,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,eAAe,CAAC,OAAO,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;SAC5G,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC7C,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Element identity validation against the loaded models (P18, #6922).
3
+ *
4
+ * A finding only joins a coordination card when every element it names
5
+ * resolves to exactly one loaded model that contains the GlobalId, under a
6
+ * model name no other loaded model shares. Revisions and federations reuse
7
+ * GlobalIds across models, so an element named without a model (a BCF
8
+ * component, a linked record) that occurs in two loaded models is ambiguous
9
+ * and is never merged on a guess.
10
+ */
11
+ import type { FindingElement, ReviewModel } from './types.js';
12
+ export type ElementResolution = {
13
+ state: 'resolved';
14
+ modelId: string;
15
+ modelName: string;
16
+ expressId: number;
17
+ } | {
18
+ state: 'ambiguous';
19
+ modelNames: string[];
20
+ } | {
21
+ state: 'missing';
22
+ };
23
+ export declare function resolveElement(element: FindingElement, models: readonly ReviewModel[]): ElementResolution;
24
+ /** Legacy name-based display/navigation key, stable only while name and GlobalId stay unchanged.
25
+ * It does not prove source identity or revision equality across sessions. */
26
+ export declare function elementKey(modelName: string, globalId: string): string;
27
+ //# sourceMappingURL=identity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../src/review/identity.ts"],"names":[],"mappings":"AAIA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9D,MAAM,MAAM,iBAAiB,GACzB;IAAE,KAAK,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAC5E;IAAE,KAAK,EAAE,WAAW,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,GAC5C;IAAE,KAAK,EAAE,SAAS,CAAA;CAAE,CAAC;AAEzB,wBAAgB,cAAc,CAAC,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,WAAW,EAAE,GAAG,iBAAiB,CAyBzG;AAED;6EAC6E;AAC7E,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEtE"}
@@ -0,0 +1,42 @@
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
+ export function resolveElement(element, models) {
5
+ // A native identity failure is authoritative; a GlobalId match must not overrule it.
6
+ if (element.nativeUnresolved === 'ambiguous')
7
+ return { state: 'ambiguous', modelNames: [] };
8
+ if (element.nativeUnresolved === 'unmatched')
9
+ return { state: 'missing' };
10
+ let candidates;
11
+ if (element.modelId !== null) {
12
+ const named = models.find(model => model.id === element.modelId);
13
+ candidates = named ? [named] : element.modelName !== null ? models.filter(model => model.name === element.modelName) : [];
14
+ }
15
+ else if (element.modelName !== null) {
16
+ candidates = models.filter(model => model.name === element.modelName);
17
+ }
18
+ else {
19
+ candidates = models;
20
+ }
21
+ const hits = candidates.flatMap(model => {
22
+ const expressId = model.expressIdOf(element.globalId);
23
+ return expressId > 0 ? [{ model, expressId }] : [];
24
+ });
25
+ if (hits.length === 0)
26
+ return { state: 'missing' };
27
+ if (hits.length > 1)
28
+ return { state: 'ambiguous', modelNames: hits.map(hit => hit.model.name) };
29
+ const [{ model, expressId }] = hits;
30
+ // Legacy name-based card keys cannot distinguish two loaded models with the same name.
31
+ // A name and GlobalId match does not prove the same source bytes or revision.
32
+ const sameName = models.filter(other => other.name === model.name);
33
+ if (sameName.length > 1)
34
+ return { state: 'ambiguous', modelNames: sameName.map(other => other.name) };
35
+ return { state: 'resolved', modelId: model.id, modelName: model.name, expressId };
36
+ }
37
+ /** Legacy name-based display/navigation key, stable only while name and GlobalId stay unchanged.
38
+ * It does not prove source identity or revision equality across sessions. */
39
+ export function elementKey(modelName, globalId) {
40
+ return `${modelName}\u001f${globalId}`;
41
+ }
42
+ //# sourceMappingURL=identity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity.js","sourceRoot":"","sources":["../../src/review/identity.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAoB/D,MAAM,UAAU,cAAc,CAAC,OAAuB,EAAE,MAA8B;IACpF,qFAAqF;IACrF,IAAI,OAAO,CAAC,gBAAgB,KAAK,WAAW;QAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;IAC5F,IAAI,OAAO,CAAC,gBAAgB,KAAK,WAAW;QAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IAC1E,IAAI,UAAkC,CAAC;IACvC,IAAI,OAAO,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;QACjE,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5H,CAAC;SAAM,IAAI,OAAO,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;QACtC,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IACxE,CAAC;SAAM,CAAC;QACN,UAAU,GAAG,MAAM,CAAC;IACtB,CAAC;IACD,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QACtC,MAAM,SAAS,GAAG,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACtD,OAAO,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACrD,CAAC,CAAC,CAAC;IACH,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IACnD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;IAChG,MAAM,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,GAAG,IAAI,CAAC;IACpC,uFAAuF;IACvF,8EAA8E;IAC9E,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC;IACnE,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;IACtG,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC;AACpF,CAAC;AAED;6EAC6E;AAC7E,MAAM,UAAU,UAAU,CAAC,SAAiB,EAAE,QAAgB;IAC5D,OAAO,GAAG,SAAS,SAAS,QAAQ,EAAE,CAAC;AACzC,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { type CoordinationCard, type ReviewTotals } from './cards.js';
2
+ import type { FindingRun, FindingSource, FindingSourceKind, ReviewFinding, ReviewModel, ReviewMessage } from './types.js';
3
+ export interface ReviewSnapshot<Message extends ReviewMessage = ReviewMessage> {
4
+ runs: FindingRun<Message>[];
5
+ findings: ReviewFinding<Message>[];
6
+ cards: CoordinationCard<Message>[];
7
+ totals: ReviewTotals;
8
+ /** Failed source contributions remain explicit rather than a clean empty result. */
9
+ failed: Array<{
10
+ source: FindingSourceKind;
11
+ message: string;
12
+ }>;
13
+ }
14
+ export declare function snapshotFrom<Message extends ReviewMessage>(sources: readonly FindingSource<Message>[], models: readonly ReviewModel[], onFailure?: (source: FindingSourceKind, error: unknown) => void): ReviewSnapshot<Message>;
15
+ //# sourceMappingURL=snapshot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../src/review/snapshot.ts"],"names":[],"mappings":"AAIA,OAAO,EAAc,KAAK,gBAAgB,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAClF,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,iBAAiB,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE1H,MAAM,WAAW,cAAc,CAAC,OAAO,SAAS,aAAa,GAAG,aAAa;IAC3E,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;IAC5B,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;IACnC,KAAK,EAAE,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC;IACnC,MAAM,EAAE,YAAY,CAAC;IACrB,oFAAoF;IACpF,MAAM,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,iBAAiB,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC/D;AAED,wBAAgB,YAAY,CAAC,OAAO,SAAS,aAAa,EAAE,OAAO,EAAE,SAAS,aAAa,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,WAAW,EAAE,EAAE,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,iBAAiB,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,cAAc,CAAC,OAAO,CAAC,CAgBhO"}
@@ -0,0 +1,25 @@
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 { buildCards } from './cards.js';
5
+ export function snapshotFrom(sources, models, onFailure) {
6
+ const runs = [];
7
+ const findings = [];
8
+ const failed = [];
9
+ for (const source of sources) {
10
+ try {
11
+ const result = source.collect(models);
12
+ for (const run of result.runs)
13
+ runs.push(run);
14
+ for (const finding of result.findings)
15
+ findings.push(finding);
16
+ }
17
+ catch (error) {
18
+ onFailure?.(source.kind, error);
19
+ failed.push({ source: source.kind, message: error instanceof Error ? error.message : String(error) });
20
+ }
21
+ }
22
+ const { cards, totals } = buildCards(findings, models);
23
+ return { runs, findings, cards, totals, failed };
24
+ }
25
+ //# sourceMappingURL=snapshot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../src/review/snapshot.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D,OAAO,EAAE,UAAU,EAA4C,MAAM,YAAY,CAAC;AAYlF,MAAM,UAAU,YAAY,CAAgC,OAA0C,EAAE,MAA8B,EAAE,SAA+D;IACrM,MAAM,IAAI,GAA0B,EAAE,CAAC;IACvC,MAAM,QAAQ,GAA6B,EAAE,CAAC;IAC9C,MAAM,MAAM,GAAsC,EAAE,CAAC;IACrD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACtC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI;gBAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC9C,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ;gBAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAChE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,SAAS,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAChC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACxG,CAAC;IACH,CAAC;IACD,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACvD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AACnD,CAAC"}