@aeptus/aexeo-emdash 0.8.19 → 0.9.1

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 (57) hide show
  1. package/CHANGELOG.md +112 -2
  2. package/INSTALL.md +286 -4
  3. package/README.md +20 -5
  4. package/dist/adapter.d.ts +62 -4
  5. package/dist/adapter.d.ts.map +1 -1
  6. package/dist/admin/Findings.d.ts.map +1 -1
  7. package/dist/admin.d.ts.map +1 -1
  8. package/dist/admin.js +73 -6
  9. package/dist/assessment-display.d.ts +10 -0
  10. package/dist/assessment-display.d.ts.map +1 -0
  11. package/dist/cms-coverage.d.ts +10 -0
  12. package/dist/cms-coverage.d.ts.map +1 -0
  13. package/dist/configured.d.ts +16 -1
  14. package/dist/configured.d.ts.map +1 -1
  15. package/dist/configured.js +1341 -172
  16. package/dist/content-evaluator.d.ts +34 -0
  17. package/dist/content-evaluator.d.ts.map +1 -0
  18. package/dist/content.d.ts +98 -0
  19. package/dist/content.d.ts.map +1 -0
  20. package/dist/content.js +445 -0
  21. package/dist/data-route.d.ts +12 -1
  22. package/dist/data-route.d.ts.map +1 -1
  23. package/dist/evaluator-sandbox.d.ts +1 -1
  24. package/dist/evaluator-sandbox.d.ts.map +1 -1
  25. package/dist/evaluator.d.ts +1 -1
  26. package/dist/evaluator.d.ts.map +1 -1
  27. package/dist/findings-view.d.ts +11 -5
  28. package/dist/findings-view.d.ts.map +1 -1
  29. package/dist/index.d.ts +17 -1
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +163 -4
  32. package/dist/inventory.d.ts +59 -0
  33. package/dist/inventory.d.ts.map +1 -0
  34. package/dist/plugin.d.ts +59 -3
  35. package/dist/plugin.d.ts.map +1 -1
  36. package/dist/presence-check.d.ts +1 -0
  37. package/dist/presence-check.d.ts.map +1 -1
  38. package/dist/sandbox-entry.d.ts +2 -1
  39. package/dist/sandbox-entry.d.ts.map +1 -1
  40. package/dist/sandbox-entry.js +1077 -190
  41. package/dist/sandbox.d.ts +2 -2
  42. package/dist/sidecar-url.d.ts.map +1 -1
  43. package/dist/sidecar.d.ts +9 -1
  44. package/dist/sidecar.d.ts.map +1 -1
  45. package/dist/types.d.ts +26 -4
  46. package/dist/types.d.ts.map +1 -1
  47. package/dist/version.d.ts +1 -1
  48. package/dist/version.d.ts.map +1 -1
  49. package/dist/wasm-init.d.ts +8 -0
  50. package/dist/wasm-init.d.ts.map +1 -1
  51. package/package.json +28 -8
  52. package/wasm/aexeo_emdash_bridge.d.ts +22 -0
  53. package/wasm/aexeo_emdash_bridge.js +1 -1
  54. package/wasm/aexeo_emdash_bridge_bg.d.ts +15 -0
  55. package/wasm/aexeo_emdash_bridge_bg.js +130 -0
  56. package/wasm/aexeo_emdash_bridge_bg.wasm +0 -0
  57. package/wasm/aexeo_emdash_bridge_bg.wasm.d.ts +4 -0
package/dist/admin.js CHANGED
@@ -163,10 +163,10 @@ function PillarView({
163
163
  /* @__PURE__ */ jsx(SeverityBadge, { severity: finding.severity }),
164
164
  /* @__PURE__ */ jsx("code", { className: "font-mono text-xs", children: finding.rule_id }),
165
165
  /* @__PURE__ */ jsx("span", { className: "flex-1", children: finding.message }),
166
- finding.layers?.secondaries.length ? /* @__PURE__ */ jsx(SecondariesChips, { layers: finding.layers.secondaries }) : null
166
+ finding.layers?.secondaries?.length ? /* @__PURE__ */ jsx(SecondariesChips, { layers: finding.layers.secondaries }) : null
167
167
  ] }, i)) })
168
168
  ] }),
169
- findings.length === 0 ? sitewide.length === 0 ? /* @__PURE__ */ jsx("p", { className: "text-sm text-kumo-subtle", children: "All clean on this layer." }) : null : /* @__PURE__ */ jsx("div", { className: "overflow-x-auto rounded border border-kumo-line", children: /* @__PURE__ */ jsxs("table", { className: "w-full text-left text-sm", children: [
169
+ findings.length === 0 ? sitewide.length === 0 ? /* @__PURE__ */ jsx("p", { className: "text-sm text-kumo-subtle", children: "No findings from the available CMS checks on this layer." }) : null : /* @__PURE__ */ jsx("div", { className: "overflow-x-auto rounded border border-kumo-line", children: /* @__PURE__ */ jsxs("table", { className: "w-full text-left text-sm", children: [
170
170
  /* @__PURE__ */ jsx("thead", { className: "bg-kumo-tint", children: /* @__PURE__ */ jsxs("tr", { children: [
171
171
  /* @__PURE__ */ jsx("th", { className: "px-3 py-2 font-medium text-kumo-subtle", children: "Route" }),
172
172
  /* @__PURE__ */ jsx("th", { className: "px-3 py-2 font-medium text-kumo-subtle", children: "Rule" }),
@@ -181,7 +181,7 @@ function PillarView({
181
181
  /* @__PURE__ */ jsx("td", { className: "px-3 py-2 align-top", children: /* @__PURE__ */ jsx("code", { className: "rounded bg-kumo-tint px-1.5 py-0.5 font-mono text-xs", children: finding.rule_id }) }),
182
182
  /* @__PURE__ */ jsx("td", { className: "px-3 py-2 align-top", children: /* @__PURE__ */ jsx(SeverityBadge, { severity: finding.severity }) }),
183
183
  /* @__PURE__ */ jsx("td", { className: "px-3 py-2 align-top", children: finding.message }),
184
- /* @__PURE__ */ jsx("td", { className: "px-3 py-2 align-top", children: finding.layers?.secondaries.length ? /* @__PURE__ */ jsx(SecondariesChips, { layers: finding.layers.secondaries }) : /* @__PURE__ */ jsx("span", { className: "text-xs text-kumo-subtle", children: "\u2014" }) })
184
+ /* @__PURE__ */ jsx("td", { className: "px-3 py-2 align-top", children: finding.layers?.secondaries?.length ? /* @__PURE__ */ jsx(SecondariesChips, { layers: finding.layers.secondaries }) : /* @__PURE__ */ jsx("span", { className: "text-xs text-kumo-subtle", children: "\u2014" }) })
185
185
  ] }, i);
186
186
  }) })
187
187
  ] }) })
@@ -800,6 +800,27 @@ function EntityLegitimacy() {
800
800
 
801
801
  // src/admin/Findings.tsx
802
802
  import { useCallback as useCallback4, useEffect as useEffect4, useState as useState4 } from "react";
803
+
804
+ // src/cms-coverage.ts
805
+ function cmsBodyCoverageNotice(coverage) {
806
+ if (coverage === "complete") return void 0;
807
+ return coverage === void 0 ? "Body coverage is unknown for this evaluation; save or refresh to reassess it." : `Body coverage is ${coverage}; content checks depending on missing capabilities cannot be evaluated reliably.`;
808
+ }
809
+
810
+ // src/assessment-display.ts
811
+ function describeGate(gate) {
812
+ const status = gate.status === "not_checked" ? "not checked" : gate.status;
813
+ const reason = gate.status === "not_checked" ? `: ${gate.reason ?? "required input unavailable"}` : "";
814
+ const metrics = Object.entries(gate.measurements ?? {}).map(([key, value]) => `${key.replaceAll("_", " ")}: ${value}`).join(", ");
815
+ return `${gate.gate_id} ${status}${reason} (${gate.blocking ? "blocking" : "advisory"})${metrics ? ` \u2014 ${metrics}` : ""}`;
816
+ }
817
+ function summarizeGates(gates) {
818
+ const counts = { passed: 0, failed: 0, not_checked: 0 };
819
+ for (const gate of gates) counts[gate.status]++;
820
+ return `${gates.length} configured checks: ${counts.passed} passed, ${counts.failed} failed, ${counts.not_checked} not checked`;
821
+ }
822
+
823
+ // src/admin/Findings.tsx
803
824
  import { Fragment as Fragment2, jsx as jsx8, jsxs as jsxs5 } from "react/jsx-runtime";
804
825
  var PLUGIN_ID4 = "aexeo-emdash";
805
826
  var API_BASE4 = "/_emdash/api";
@@ -888,6 +909,7 @@ function Findings() {
888
909
  if (payload === null) {
889
910
  return /* @__PURE__ */ jsx8("div", { className: "p-4 text-sm text-kumo-subtle", children: "No data." });
890
911
  }
912
+ const missingAssessments = payload.routes.filter((route) => route.assessment === void 0).length;
891
913
  const routesByPath = /* @__PURE__ */ new Map();
892
914
  for (const route of payload.routes) {
893
915
  routesByPath.set(route.route, route);
@@ -896,7 +918,7 @@ function Findings() {
896
918
  /* @__PURE__ */ jsxs5("header", { className: "flex items-center justify-between gap-4", children: [
897
919
  /* @__PURE__ */ jsxs5("div", { children: [
898
920
  /* @__PURE__ */ jsx8("h1", { className: "text-xl font-semibold", children: "SEO findings" }),
899
- /* @__PURE__ */ jsx8("p", { className: "mt-1 text-sm text-kumo-subtle", children: payload.totals.findings === 0 ? /* @__PURE__ */ jsx8(Fragment2, { children: "No findings yet \u2014 click Refresh to evaluate the site." }) : /* @__PURE__ */ jsxs5(Fragment2, { children: [
921
+ /* @__PURE__ */ jsx8("p", { className: "mt-1 text-sm text-kumo-subtle", children: payload.totals.findings === 0 ? /* @__PURE__ */ jsx8(Fragment2, { children: payload.totals.documentsIndexed === 0 ? "No CMS records indexed yet." : "No findings from the available CMS checks." }) : /* @__PURE__ */ jsxs5(Fragment2, { children: [
900
922
  payload.totals.findings,
901
923
  " findings across ",
902
924
  payload.totals.routes,
@@ -919,7 +941,19 @@ function Findings() {
919
941
  }
920
942
  )
921
943
  ] }),
944
+ /* @__PURE__ */ jsx8("p", { className: "text-sm text-kumo-subtle", children: "Rendered page markup, generated metadata and sitewide link inventory are not checked here. Audit the built site for page-level and link findings." }),
945
+ missingAssessments > 0 && /* @__PURE__ */ jsxs5("p", { className: "rounded border border-kumo-line p-3 text-sm", children: [
946
+ "No content preset assessment was recorded for ",
947
+ missingAssessments,
948
+ " document(s); absence of findings is not an editorial quality assessment."
949
+ ] }),
922
950
  toast !== null && /* @__PURE__ */ jsx8("div", { className: "rounded border border-kumo-line bg-kumo-tint p-3 text-sm", children: toast }),
951
+ payload.sitewideAssessment?.status === "error" && /* @__PURE__ */ jsxs5("p", { className: "rounded border border-kumo-line p-3 text-sm", children: [
952
+ "Sitewide checks unavailable: ",
953
+ payload.sitewideAssessment.reason,
954
+ ". ",
955
+ payload.sitewideAssessment.detail
956
+ ] }),
923
957
  payload.sitewideFindings.length > 0 && /* @__PURE__ */ jsxs5("section", { className: "rounded border border-kumo-line p-3", children: [
924
958
  /* @__PURE__ */ jsx8("h2", { className: "text-sm font-medium", children: "Sitewide" }),
925
959
  /* @__PURE__ */ jsx8("ul", { className: "mt-2 space-y-1 text-sm", children: payload.sitewideFindings.map((finding, i) => /* @__PURE__ */ jsxs5("li", { className: "flex items-start gap-2", children: [
@@ -928,7 +962,25 @@ function Findings() {
928
962
  /* @__PURE__ */ jsx8("span", { className: "flex-1", children: finding.message })
929
963
  ] }, i)) })
930
964
  ] }),
931
- payload.findings.length === 0 ? /* @__PURE__ */ jsx8("p", { className: "text-sm text-kumo-subtle", children: payload.totals.documentsIndexed === 0 ? "No documents indexed \u2014 click Refresh to do an initial sweep." : "All indexed documents are clean." }) : /* @__PURE__ */ jsx8("div", { className: "overflow-x-auto rounded border border-kumo-line", children: /* @__PURE__ */ jsxs5("table", { className: "w-full text-left text-sm", children: [
965
+ payload.routes.filter((route) => route.assessment !== void 0 || route.body_coverage !== "complete").map((route) => /* @__PURE__ */ jsxs5("section", { className: "rounded border border-kumo-line p-3 text-sm", children: [
966
+ /* @__PURE__ */ jsx8("strong", { children: route.route }),
967
+ route.assessment?.status !== "error" && cmsBodyCoverageNotice(route.body_coverage) && /* @__PURE__ */ jsx8("p", { children: cmsBodyCoverageNotice(route.body_coverage) }),
968
+ route.assessment?.status === "error" ? /* @__PURE__ */ jsxs5("p", { children: [
969
+ "Evaluation failed: ",
970
+ route.assessment.reason,
971
+ ". Findings are unavailable for this revision."
972
+ ] }) : route.assessment?.status === "evaluated" ? /* @__PURE__ */ jsxs5("details", { children: [
973
+ /* @__PURE__ */ jsxs5("summary", { children: [
974
+ "Content preset: ",
975
+ route.assessment.preset,
976
+ " \u2014 ",
977
+ summarizeGates(route.assessment.gates)
978
+ ] }),
979
+ /* @__PURE__ */ jsx8("p", { children: "Results cover only these configured checks." }),
980
+ /* @__PURE__ */ jsx8("ul", { children: route.assessment.gates.map((gate) => /* @__PURE__ */ jsx8("li", { children: describeGate(gate) }, gate.gate_id)) })
981
+ ] }) : null
982
+ ] }, route.route)),
983
+ payload.findings.length === 0 ? /* @__PURE__ */ jsx8("p", { className: "text-sm text-kumo-subtle", children: payload.totals.documentsIndexed === 0 ? "No documents indexed \u2014 click Refresh to do an initial sweep." : "No findings from the available CMS checks." }) : /* @__PURE__ */ jsx8("div", { className: "overflow-x-auto rounded border border-kumo-line", children: /* @__PURE__ */ jsxs5("table", { className: "w-full text-left text-sm", children: [
932
984
  /* @__PURE__ */ jsx8("thead", { className: "bg-kumo-tint", children: /* @__PURE__ */ jsxs5("tr", { children: [
933
985
  /* @__PURE__ */ jsx8("th", { className: "px-3 py-2 font-medium text-kumo-subtle", children: "Route" }),
934
986
  /* @__PURE__ */ jsx8("th", { className: "px-3 py-2 font-medium text-kumo-subtle", children: "Rule" }),
@@ -941,7 +993,22 @@ function Findings() {
941
993
  /* @__PURE__ */ jsx8("td", { className: "px-3 py-2 align-top", children: /* @__PURE__ */ jsx8(RouteLinks2, { finding, info: routeInfo }) }),
942
994
  /* @__PURE__ */ jsx8("td", { className: "px-3 py-2 align-top", children: /* @__PURE__ */ jsx8("code", { className: "rounded bg-kumo-tint px-1.5 py-0.5 font-mono text-xs", children: finding.rule_id }) }),
943
995
  /* @__PURE__ */ jsx8("td", { className: "px-3 py-2 align-top", children: /* @__PURE__ */ jsx8(SeverityBadge2, { severity: finding.severity }) }),
944
- /* @__PURE__ */ jsx8("td", { className: "px-3 py-2 align-top", children: finding.message })
996
+ /* @__PURE__ */ jsxs5("td", { className: "px-3 py-2 align-top", children: [
997
+ finding.message,
998
+ finding.aexeo_cms_location ? /* @__PURE__ */ jsxs5("div", { className: "text-xs text-kumo-subtle", children: [
999
+ "CMS path ",
1000
+ JSON.stringify(finding.aexeo_cms_location.path),
1001
+ ", UTF-16 offset ",
1002
+ finding.aexeo_cms_location.utf16_offset
1003
+ ] }) : finding.aexeo_source_location ? /* @__PURE__ */ jsxs5("div", { className: "text-xs text-kumo-subtle", children: [
1004
+ "Projected body: block ",
1005
+ finding.aexeo_source_location.block_index + 1,
1006
+ ", span ",
1007
+ finding.aexeo_source_location.span_index + 1,
1008
+ ", UTF-16 offset ",
1009
+ finding.aexeo_source_location.utf16_offset
1010
+ ] }) : finding.aexeo_origin === "content_preset" ? /* @__PURE__ */ jsx8("div", { className: "text-xs text-kumo-subtle", children: "Projected location unavailable" }) : null
1011
+ ] })
945
1012
  ] }, i);
946
1013
  }) })
947
1014
  ] }) })
@@ -0,0 +1,10 @@
1
+ import type { DocumentAssessment } from "./plugin.js";
2
+ type Gate = Extract<DocumentAssessment, {
3
+ status: "evaluated";
4
+ }>["gates"][number];
5
+ /** Plain text for both admin renderers; measurements may be absent on older records. */
6
+ export declare function describeGate(gate: Gate): string;
7
+ /** Counts describe only the gates that were configured, including unchecked gates. */
8
+ export declare function summarizeGates(gates: readonly Gate[]): string;
9
+ export {};
10
+ //# sourceMappingURL=assessment-display.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assessment-display.d.ts","sourceRoot":"","sources":["../src/assessment-display.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEtD,KAAK,IAAI,GAAG,OAAO,CAAC,kBAAkB,EAAE;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC;AAElF,wFAAwF;AACxF,wBAAgB,YAAY,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAK/C;AAED,sFAAsF;AACtF,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,GAAG,MAAM,CAI7D"}
@@ -0,0 +1,10 @@
1
+ import type { EmdashDocument, Finding } from "./types.js";
2
+ export declare function isCmsObservableFinding(finding: Finding, bodyComplete?: boolean): boolean;
3
+ export declare function isLegacyCmsObservableFinding(finding: Finding, bodyComplete?: boolean): boolean;
4
+ export declare function hasCompleteBody(document: EmdashDocument): boolean;
5
+ /** Coverage of the body supplied for one evaluation, not of the rendered page. */
6
+ export type CmsBodyCoverage = "complete" | "partial" | "unavailable";
7
+ export declare function cmsBodyCoverage(document: EmdashDocument): CmsBodyCoverage;
8
+ /** Short editor-facing explanation; absent coverage is a legacy or failed result. */
9
+ export declare function cmsBodyCoverageNotice(coverage: CmsBodyCoverage | undefined): string | undefined;
10
+ //# sourceMappingURL=cms-coverage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cms-coverage.d.ts","sourceRoot":"","sources":["../src/cms-coverage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAS1D,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,UAAO,GAAG,OAAO,CAErF;AAED,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,UAAO,GAAG,OAAO,CAK3F;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAIjE;AAED,kFAAkF;AAClF,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,SAAS,GAAG,aAAa,CAAC;AAErE,wBAAgB,eAAe,CAAC,QAAQ,EAAE,cAAc,GAAG,eAAe,CAGzE;AAED,qFAAqF;AACrF,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,eAAe,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAK/F"}
@@ -1,5 +1,13 @@
1
1
  import type { Suppression } from "./suppressions.js";
2
+ import type { ContentPresetOptions, ExternalGateProvider, ExternalGateTelemetry, LinkObservationProvider, LinkProviderTelemetry } from "./content-evaluator.js";
3
+ export type { ExternalGateProvider, ExternalGateTelemetry, LinkObservationProvider, LinkProviderTelemetry } from "./content-evaluator.js";
4
+ import type { CustomBlockMappings } from "./adapter.js";
2
5
  export interface ConfiguredPluginOptions {
6
+ blockMappings?: CustomBlockMappings;
7
+ contentFieldsByCollection?: Record<string, readonly string[]>;
8
+ descriptionFieldsByCollection?: Record<string, readonly string[]>;
9
+ /** Optional portable preset evaluated in addition to the existing site checks. */
10
+ contentPreset?: ContentPresetOptions;
3
11
  /**
4
12
  * Full override of the swept collections. See `aexeoPlugin` in
5
13
  * src/index.ts for the full precedence story.
@@ -23,6 +31,13 @@ export interface ConfiguredPluginOptions {
23
31
  */
24
32
  suppressions?: readonly Suppression[];
25
33
  }
26
- export declare function createPlugin(options?: ConfiguredPluginOptions): unknown;
34
+ /** Runtime-only dependencies must be installed by trusted host code, not JSON options. */
35
+ export interface ConfiguredPluginRuntime {
36
+ externalGates?: ExternalGateProvider;
37
+ onExternalGateTelemetry?: (event: ExternalGateTelemetry) => void;
38
+ linkObservations?: LinkObservationProvider;
39
+ onLinkProviderTelemetry?: (event: LinkProviderTelemetry) => void;
40
+ }
41
+ export declare function createPlugin(options?: ConfiguredPluginOptions, runtime?: ConfiguredPluginRuntime): unknown;
27
42
  export default createPlugin;
28
43
  //# sourceMappingURL=configured.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"configured.d.ts","sourceRoot":"","sources":["../src/configured.ts"],"names":[],"mappings":"AAqCA,OAAO,KAAK,EAAE,WAAW,EAAqB,MAAM,mBAAmB,CAAC;AA0HxE,MAAM,WAAW,uBAAuB;IACtC;;;OAGG;IACH,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAEhC;;;OAGG;IACH,kBAAkB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAEvC;;;OAGG;IACH,kBAAkB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAEvC;;;;;OAKG;IACH,YAAY,CAAC,EAAE,SAAS,WAAW,EAAE,CAAC;CACvC;AAED,wBAAgB,YAAY,CAAC,OAAO,GAAE,uBAA4B,GAAG,OAAO,CA2H3E;AAID,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"configured.d.ts","sourceRoot":"","sources":["../src/configured.ts"],"names":[],"mappings":"AAwCA,OAAO,KAAK,EAAE,WAAW,EAAqB,MAAM,mBAAmB,CAAC;AAKxE,OAAO,KAAK,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAChK,YAAY,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC1I,OAAO,KAAK,EAAE,mBAAmB,EAAqB,MAAM,cAAc,CAAC;AAuH3E,MAAM,WAAW,uBAAuB;IACtC,aAAa,CAAC,EAAE,mBAAmB,CAAC;IACpC,yBAAyB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC;IAC9D,6BAA6B,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC;IAClE,kFAAkF;IAClF,aAAa,CAAC,EAAE,oBAAoB,CAAC;IACrC;;;OAGG;IACH,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAEhC;;;OAGG;IACH,kBAAkB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAEvC;;;OAGG;IACH,kBAAkB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAEvC;;;;;OAKG;IACH,YAAY,CAAC,EAAE,SAAS,WAAW,EAAE,CAAC;CACvC;AAED,0FAA0F;AAC1F,MAAM,WAAW,uBAAuB;IACtC,aAAa,CAAC,EAAE,oBAAoB,CAAC;IACrC,uBAAuB,CAAC,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,IAAI,CAAC;IACjE,gBAAgB,CAAC,EAAE,uBAAuB,CAAC;IAC3C,uBAAuB,CAAC,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,IAAI,CAAC;CAClE;AAED,wBAAgB,YAAY,CAAC,OAAO,GAAE,uBAA4B,EAAE,OAAO,GAAE,uBAA4B,GAAG,OAAO,CAsJlH;eAIc,YAAY"}