Skip to content
GitHub

LayoutCard

LayoutCard manifests describe card-shaped containers that can host charts, tables, and text. They are useful for dashboards and reusable widgets.

LayoutCards in a 2x2 grid showing revenue overview, trend, financial summary, and executive highlights
apiVersion: bino.bi/v1alpha1
kind: LayoutCard
metadata:
  name: revenue_card
spec:
  titleImage: "debug/concordia.png"
  titleBusinessUnit: "Sales"
  titleScenarios: ["ac1", "fc1", "pp1"]
  titleVariances: ["dpp1_ac1_pos"]
  titleOrder: category
  titleOrderDirection: desc
  titleMeasures:
    - name: "Revenue"
      unit: "mEUR"
  titleDateStart: 2024-01-01
  titleDateEnd: 2024-03-31
  titleDateFormat: quarter
  titleDateLink: interval
  titleNamespace: _system
  footerText: "Quarterly revenue overview"
  cardLayout: split-horizontal
  cardCustomTemplate: '"a b" "c d"'
  cardGridGap: "0.5rem"
  cardFitToContent: true
  cardShowBorder: true
  children:
    - kind: ChartStructure
      spec: { ... }
    - kind: Table
      spec: { ... }

Important fields mirror LayoutPage but are scoped to a card:

  • Header: titleImage, titleBusinessUnit, titleScenarios, titleVariances, titleOrder, titleOrderDirection, titleMeasures, titleDateStart, titleDateEnd, titleDateFormat, titleDateLink, titleNamespace. The date fields accept both date (2024-01-01) and datetime (2024-01-01T14:30:00Z) values.
  • Footer: footerText.
  • Layout: cardLayout, cardCustomTemplate, cardGridGap, cardFitToContent, cardShowBorder.
  • Content: children – required array of layoutChild objects.
---
apiVersion: bino.bi/v1alpha1
kind: LayoutCard
metadata:
  name: revenue_card
spec:
  titleBusinessUnit: "Sales"
  titleMeasures:
    - name: "Revenue"
      unit: "mEUR"
  cardLayout: full
  children:
    - kind: ChartTime
      spec:
        dataset: revenue_monthly
        chartTitle: "Monthly revenue"
        type: line
        dateInterval: month
        axisLabelsMode: smart
---
apiVersion: bino.bi/v1alpha1
kind: LayoutPage
metadata:
  name: dashboard_page
spec:
  pageLayout: 2x2
  children:
    - kind: LayoutCard
      spec:
        # embed card spec directly or reference by convention
        titleBusinessUnit: "Sales"
        cardLayout: full
        children:
          - kind: ChartTime
            spec:
              dataset: revenue_monthly
              chartTitle: "Monthly revenue"
              type: line

Use cards to keep layout definitions modular and to reuse card patterns across multiple reports.

You can define LayoutCard as a standalone document and reference it from a LayoutPage using ref. This enables card reuse across multiple pages.

---
apiVersion: bino.bi/v1alpha1
kind: LayoutCard
metadata:
  name: revenue_card
spec:
  titleBusinessUnit: "Sales"
  cardLayout: full
  children:
    - kind: ChartTime
      spec:
        dataset: revenue_monthly
        chartTitle: "Monthly revenue"
        type: line

---
apiVersion: bino.bi/v1alpha1
kind: LayoutPage
metadata:
  name: dashboard_page
spec:
  pageLayout: 2x2
  children:
    - kind: LayoutCard
      ref: revenue_card
    - kind: LayoutCard
      ref: revenue_card
      spec:
        titleBusinessUnit: "Marketing" # Override the business unit

See the LayoutPage reference for more details on ref syntax and override behavior.

LayoutCard children support the same optional field as LayoutPage children. Use it for references that may legitimately be missing:

children:
  - kind: ChartTime
    ref: mainChart           # Required: fails if missing
  - kind: Text
    ref: debugInfo
    optional: true           # Optional: skips gracefully if missing

See the LayoutPage optional references section for details on when to use this field.

LayoutCard children support metadata.constraints just like LayoutPage. Use constraints to conditionally include components based on the artefact’s context.

apiVersion: bino.bi/v1alpha1
kind: LayoutCard
metadata:
  name: summary_card
spec:
  cardLayout: split-horizontal
  children:
    # Only in production builds
    - kind: Table
      metadata:
        constraints:
          - labels.env==prod
          - mode==build
      spec:
        dataset: production_metrics

    # Only in preview mode (string format)
    - kind: Text
      metadata:
        constraints:
          - mode==preview
      spec:
        value: "Preview placeholder"

    # Using in operator for multiple environments
    - kind: ChartStructure
      metadata:
        constraints:
          - field: labels.env
            operator: in
            value: [staging, prod]
      spec:
        dataset: metrics

For the full constraint syntax and operators, see Inline child constraints and Constraints and Scoped Names.

AttributeTypeRequiredDefaultDescription
apiVersionstringyesMust be bino.bi/v1alpha1.
kindstringyesMust be LayoutCard.
metadata.namestringyesUnique identifier.
metadata.labelsobjectnoKey-value pairs for categorization and constraint matching.
metadata.annotationsobjectnoArbitrary key-value metadata, not used by the system.
metadata.descriptionstringnoFree-form description.
metadata.constraintsarraynoConditional inclusion rules. See Constraints.
AttributeTypeRequiredDefaultDescriptionSample
spec.titleImagestringno""URL or asset name for the card title image.titleImage: "debug/concordia.png"
spec.titleBusinessUnitstringno""Business unit name in the card header.titleBusinessUnit: "Sales"
spec.titleScenariosarray or stringnoScenarios displayed in the card header. Values: ac1-ac4, fc1-fc4, pp1-pp4, pl1-pl4.titleScenarios: ["ac1", "fc1", "pp1"]
spec.titleVariancesarray or stringnoVariance definitions. Pattern: d<scenarioB>_<scenarioA>_[pos|neg|neu].titleVariances: ["dpp1_ac1_pos"]
spec.titleOrderstringnocategorySort order for title elements. Values: category, categoryindex, rowgroup, rowgroupindex, ac1-ac4, fc1-fc4, pp1-pp4, pl1-pl4.titleOrder: ac1
spec.titleOrderDirectionstringnoascSort direction. Values: asc, desc.titleOrderDirection: desc
spec.titleMeasuresarray or stringnoMeasures displayed in the card header. Array of {name, unit} objects or JSON string.see below
spec.titleDateStartstringnoStart date (ISO 8601 date or datetime).titleDateStart: 2024-01-01
spec.titleDateEndstringnoEnd date (ISO 8601 date or datetime).titleDateEnd: 2024-03-31
spec.titleDateFormatstringnononeDate display format. Values: year, quarter, month, week, day, time, auto, none.titleDateFormat: quarter
spec.titleDateLinkstringnononeDate linking style. Values: avg, interval, cum, start, end, ytd, ytg, mat, none.titleDateLink: interval
spec.titleNamespacestringno"_system"i18n namespace for the card title.titleNamespace: _system
AttributeTypeRequiredDefaultDescriptionSample
spec.footerTextstringno""Card footer text.footerText: "Quarterly overview"
AttributeTypeRequiredDefaultDescriptionSample
spec.cardLayoutstringnofullGrid layout preset. Values: full, split-horizontal, split-vertical, 2x2, 3x3, 4x4, 1-over-2, 1-over-3, 2-over-1, 3-over-1, custom-template.cardLayout: split-horizontal
spec.cardCustomTemplatestringno"a b" "c d"CSS grid-template-areas string. Used with cardLayout: custom-template.cardCustomTemplate: '"a b" "c d"'
spec.cardGridGapstringno"0"Gap between grid cells.cardGridGap: "0.5rem"
spec.cardFitToContentbooleannotrueShrink to content height or stretch to fill available height.cardFitToContent: true
spec.cardShowBorderbooleannotrueDisplay a border around the card.cardShowBorder: true
AttributeTypeRequiredDefaultDescriptionSample
spec.childrenarrayyesArray of layout child objects (minimum 1). Each child specifies a kind, optional ref, optional spec, and optional metadata with constraints.see Card inside a page
spec:
  titleMeasures:
    - name: "Revenue"
      unit: "mEUR"