1mod axis_order;
8pub mod class_tokens;
9mod computed_value;
10mod conformance;
11mod custom_property;
12pub mod first_witness;
13mod frame_footprint;
14mod fuzz;
15mod grn;
16mod modal;
17mod model;
18mod origin;
19mod proofs;
20mod property_metadata;
21mod property_metadata_idl_generated;
22mod ranked_set_loss_census;
23mod ranking;
24mod refinement;
25mod robustness_radius;
26mod selector;
27mod shorthand_authority;
28mod statistics;
29
30pub use class_tokens::*;
31pub use computed_value::*;
32pub use conformance::*;
33pub use custom_property::*;
34pub use first_witness::*;
35pub use frame_footprint::*;
36pub use fuzz::*;
37pub use grn::*;
38pub use modal::*;
39pub use model::*;
40pub use origin::*;
41pub use proofs::{
42 evaluate_static_supports_condition, prove_box_shorthand_combination,
43 prove_layer_flatten_candidate, prove_longhand_merge,
44};
45pub use property_metadata::*;
46pub use property_metadata_idl_generated::{
47 CSS_PROPERTY_METADATA_RECORDS_V1, CSS_PROPERTY_METADATA_V1, CssCustomPropertyPolicyStaticV1,
48 CssCustomPropertyPolicyV1Json, CssPropertyMetadataRecordStaticV1,
49 CssPropertyMetadataRecordV1Json, CssPropertyMetadataSourceStaticV1,
50 CssPropertyMetadataSourceV1Json, CssPropertyMetadataStaticV1, CssPropertyMetadataV1Json,
51};
52pub use ranked_set_loss_census::*;
53pub use ranking::{
54 cascade_margin_for_outcome, rank_cascade_items, select_cascade_winner,
55 select_open_world_cascade_winner, summarize_cascade_margin_schema_v0,
56};
57pub use refinement::*;
58pub use robustness_radius::*;
59pub use selector::*;
60pub use shorthand_authority::*;
61pub use statistics::*;
62
63#[track_caller]
64pub fn cascade_property(
65 declarations: impl IntoIterator<Item = CascadeDeclaration>,
66 property: &str,
67) -> CascadeOutcome {
68 let outcome = ranking::cascade_property(declarations, property);
69 ranked_set_loss_census::observe_cascade_outcome(
70 CascadeRankedSetFunctionV0::CascadeProperty,
71 std::panic::Location::caller(),
72 &outcome,
73 );
74 outcome
75}
76
77#[track_caller]
78pub fn cascade_property_open_world(
79 declarations: impl IntoIterator<Item = CascadeDeclaration>,
80 property: &str,
81) -> CascadeOutcome {
82 let outcome = ranking::cascade_property_open_world(declarations, property);
83 ranked_set_loss_census::observe_cascade_outcome(
84 CascadeRankedSetFunctionV0::CascadePropertyOpenWorld,
85 std::panic::Location::caller(),
86 &outcome,
87 );
88 outcome
89}
90
91pub fn prove_scope_flatten_candidate(mut input: ScopeFlattenInputV0) -> ScopeFlattenProofV0 {
92 if omena_syntax::css_keyword(input.root_selector.trim()).equals(":root") {
93 input.root_selector = ":root".to_string();
94 }
95 proofs::prove_scope_flatten_candidate(input)
96}
97
98pub fn summarize_cascade_boundary() -> CascadeBoundarySummary {
99 CascadeBoundarySummary {
100 product: "omena-cascade.boundary",
101 ordering_model: "lexicographicCascadeKey",
102 substitution_model: "finiteCustomPropertyLeastFixedPoint",
103 least_fixed_point_proof_model: "finite-env monotone custom-property substitution with cycle-to-guaranteed-invalid bottoming and env-size iteration bound",
104 ready_surfaces: vec![
105 "cascadeKeyOrdering",
106 "specificityOrdering",
107 "cascadeOutcomeProof",
108 "genericCascadeWinner",
109 "semanticDesignTokenRanking",
110 "queryReadCascadeAtPosition",
111 "selectorContextWitness",
112 "selectorMatchWitness",
113 "cascadeConformanceSeedCorpus",
114 "customPropertySubstitution",
115 "customPropertyLeastFixedPoint",
116 "customPropertyLeastFixedPointProof",
117 "customPropertyLeastFixedPointTrace",
118 "cycleToGuaranteedInvalid",
119 "computedValueResolutionSeed",
120 "inheritanceInitialValueSeed",
121 "shorthandCombinationProof",
122 "supportsStaticEvalWitness",
123 "scopeFlattenProof",
124 "layerFlattenProof",
125 "modalCheckWitnessV0",
126 "cascadeMarginSchemaV0",
127 "cascadeOrderingAxisSelfCheckCorpus",
128 "spinGlassStatisticsV0",
129 "grnAttractorBasinV0",
130 "diagnosticFrameFootprintV0",
131 ],
132 not_ready_surfaces: vec!["fullInitialValueTable", "fullWptCascadeCorpus"],
133 }
134}
135
136#[cfg(test)]
137mod tests;