SheetXL - v0.8.0-beta.9+sites.210.e2d420901
    Preparing search index...

    Variable FeatureConst

    Feature: {
        Alignment: "alignment";
        AutoTable: "autoTable";
        Borders: "borders";
        CalcError: "calcError";
        Circular: "circular";
        Comments: "comments";
        Conditionals: "conditionals";
        Contentful: "contentful";
        DataValidations: "dataValidations";
        DateFormat: "dateFormat";
        Error: "error";
        Fill: "fill";
        Font: "font";
        Formula: "formula";
        Hyperlink: "hyperlink";
        Merge: "merge";
        NumberFormat: "numberFormat";
        Protection: "protection";
        Spills: "spills";
        Table: "table";
        Unlock: "unlock";
    } = ...

    The public feature vocabulary — what a cell or range carries, as a queryable dimension.

    Type Declaration

    • ReadonlyAlignment: "alignment"

      Direct alignment.

    • ReadonlyAutoTable: "autoTable"

      Auto-table membership.

    • ReadonlyBorders: "borders"

      Direct borders.

    • ReadonlyCalcError: "calcError"

      Evaluated state: cells whose calculation itself failed. Distinct from Feature.Error: #DIV/0! is a successfully calculated error VALUE (the Error kind); CalcError is the engine failing to evaluate at all. A reference cycle is not a failure — its cells evaluate, to 0 — and is Feature.Circular.

    • ReadonlyCircular: "circular"

      Evaluated state: cells in a reference cycle, or downstream of one. Both evaluate to 0 (Excel, iterative calculation off) with nothing else to show for it — this is the marker. Regions group by cycle and by kind (member | downstream), so a block that reads one bad cell is ONE region, and each region's payload is the cycle itself (ICalculation.ICircularReference — members, counts, whether iteration settled it).

    • ReadonlyComments: "comments"

      Has comments.

    • ReadonlyConditionals: "conditionals"

      Cells under conditional-format rules.

    • ReadonlyContentful: "contentful"

      Occupancy — splits on blank/non-blank, Excel CurrentRegion semantics.

    • ReadonlyDataValidations: "dataValidations"

      Cells under data-validation rules.

    • ReadonlyDateFormat: "dateFormat"

      Direct date-category number format — yyyy-mm-dd, mm/dd/yyyy, and the like.

      A formatting predicate, not a value kind: a blank cell or a text cell formatted this way carries DateFormat too, the same way a blank cell can carry Fill. It says nothing about whether the cell holds a genuine date — that is a question about the VALUE (numeric value under this format), answered by getInteropType() on the cell, not by this feature. See this enum's own remarks for why the two are kept apart rather than fused into one "Date" concept.

    • ReadonlyError: "error"

      Scalar kind: error values (#DIV/0!, #N/A, …), literal or calculated.

    • ReadonlyFill: "fill"

      Direct fill.

    • ReadonlyFont: "font"

      Direct font.

    • ReadonlyFormula: "formula"

      Has a formula. Regions group by canonical R1C1 — a shared formula block is one region.

    • Has a hyperlink.

    • ReadonlyMerge: "merge"

      Merged spans.

    • ReadonlyNumberFormat: "numberFormat"

      Direct number format. Region payloads carry the format string and its category.

    • ReadonlyProtection: "protection"

      Direct cell protection format (IStyle.getProtection()): always unlocked, show formulas. A cell with none of its own reads its named style's, then Normal's.

    • ReadonlySpills: "spills"

      Cells inside a dynamic-array spill zone. Writing into one is a real failure mode.

    • ReadonlyTable: "table"

      Table membership.

    • ReadonlyUnlock: "unlock"

      Unlocked cells — covered by an unlocked range, or with an always-unlocked style. Can I write here is a precondition, not a detail.

    This is the agent-facing read vocabulary: getCounts, getRegions and isContentful select by it, and the agent read tools (grep, the regions read) use the same words. It is deliberately distinct from ICell.Content, the transfer vocabulary (clear, copyFrom) — "paste formats" is a coarse transfer bucket, while querying wants the split parts (Fill, Border, NumberFormat…). One enum serving both jobs is how the vocabulary got muddy the first time.

    Members map onto the engine's per-feature spatial indexes. The mapping is internal and not one-to-one: several features may project from one index (NumberFormat/Alignment/Font over the content-style map). Notes joins when the backing is implemented; a feature that silently reports nothing is worse than a missing one.

    String/Number/Boolean are deliberately absent, even though they are real ScalarType values. This vocabulary is for things with a spatial identity — a fill, a formula, an occupied cell — and a scalar kind has none: it is read straight off the value, which is exactly the one pass IRangeStats.getTypedCounts() already makes, richer (it composes with aggregates and frequencies for free, in the same call). getCounts/getRegions/ isContentful were never the right vocabulary for "how many numbers" — range.getStats() is.

    Error stays, for a reason unrelated to the above: it has real spatial identity of its own (the reconciled error view) and partitions like any stored feature — it was never in the same boat as the other three. DateFormat stays too, but as exactly what its name says: a formatting predicate, the same tier as NumberFormat/Alignment/Font, not a value kind — it answers "does this cell carry a date-category number format", nothing about what the value underneath actually is. A caller after "how many cells are genuinely dates" (numeric value AND that format) composes it: DateFormat regions intersected with getStats().getTypedCounts()'s Number — there is deliberately no single feature that already does that intersection, because "is this a date" is a computed fact about a cell's value, read through getInteropType(), not a thing this vocabulary partitions on.