{
  "schemaVersion": 1,
  "recorded": "2026-10-14",
  "versions": {
    "web": "0.7.3",
    "starter": "0.7.3",
    "community": "0.3.1",
    "mcp": "0.3.3"
  },
  "components": [
    "DatePicker",
    "TimePicker",
    "DateTimePicker",
    "DateRangePicker",
    "FontProvider",
    "ShapeMask"
  ],
  "status": "complete",
  "scope": "Six-component WCAG 2.2 A/AA support review across Web, Enterprise and Community. All 55 criteria have scoped findings or explicit content/application responsibilities. Earlier automatic baselines retain their original versions; this is not certification of full applications or every assistive-technology combination.",
  "standards": [
    "https://www.w3.org/TR/WCAG22/",
    "https://www.w3.org/WAI/ARIA/apg/patterns/dialog-modal/examples/datepicker-dialog/"
  ],
  "automated": {
    "unitTests": 115,
    "communityTests": 9,
    "mcpTests": 7,
    "typeScriptChecks": "passed",
    "fixtureAudits": [
      {
        "file": "community-baseline-audit.json",
        "violations": 0,
        "incomplete": [
          "aria-valid-attr-value"
        ],
        "passes": 24
      },
      {
        "file": "community-dark-datepicker-audit.json",
        "violations": 0,
        "incomplete": [
          "color-contrast"
        ],
        "passes": 21
      },
      {
        "file": "community-narrow-datetime-audit.json",
        "violations": 0,
        "incomplete": [
          "color-contrast"
        ],
        "passes": 21
      },
      {
        "file": "web-baseline-audit.json",
        "violations": 0,
        "incomplete": [
          "aria-valid-attr-value"
        ],
        "passes": 24
      },
      {
        "file": "web-datepicker-open-audit.json",
        "violations": 0,
        "incomplete": [
          "color-contrast"
        ],
        "passes": 21
      },
      {
        "file": "web-datetime-open-audit.json",
        "violations": 0,
        "incomplete": [
          "color-contrast"
        ],
        "passes": 21
      },
      {
        "file": "web-light-baseline-audit.json",
        "violations": 0,
        "incomplete": [
          "aria-valid-attr-value"
        ],
        "passes": 24
      },
      {
        "file": "web-range-open-audit.json",
        "violations": 0,
        "incomplete": [],
        "passes": 21
      },
      {
        "file": "web-time-open-audit.json",
        "violations": 0,
        "incomplete": [],
        "passes": 17
      }
    ],
    "fixtureBaselineVersion": "0.7.1",
    "nativeAudits": [
      {
        "component": "DatePicker",
        "mode": "Light",
        "state": "closed",
        "edition": "Community",
        "violations": 0,
        "incomplete": [
          "aria-valid-attr-value"
        ],
        "engine": {
          "name": "axe-core",
          "version": "4.13.0"
        }
      },
      {
        "component": "DatePicker",
        "mode": "Light",
        "state": "open",
        "edition": "Community",
        "violations": 0,
        "incomplete": [],
        "engine": {
          "name": "axe-core",
          "version": "4.13.0"
        }
      },
      {
        "component": "DatePicker",
        "mode": "Dark",
        "state": "open",
        "edition": "Community",
        "violations": 0,
        "incomplete": [],
        "engine": {
          "name": "axe-core",
          "version": "4.13.0"
        }
      },
      {
        "component": "TimePicker",
        "mode": "Light",
        "state": "closed",
        "edition": "Community",
        "violations": 0,
        "incomplete": [
          "aria-valid-attr-value"
        ],
        "engine": {
          "name": "axe-core",
          "version": "4.13.0"
        }
      },
      {
        "component": "TimePicker",
        "mode": "Light",
        "state": "open",
        "edition": "Community",
        "violations": 0,
        "incomplete": [],
        "engine": {
          "name": "axe-core",
          "version": "4.13.0"
        }
      },
      {
        "component": "TimePicker",
        "mode": "Dark",
        "state": "open",
        "edition": "Community",
        "violations": 0,
        "incomplete": [],
        "engine": {
          "name": "axe-core",
          "version": "4.13.0"
        }
      },
      {
        "component": "DateTimePicker",
        "mode": "Light",
        "state": "closed",
        "edition": "Community",
        "violations": 0,
        "incomplete": [
          "aria-valid-attr-value"
        ],
        "engine": {
          "name": "axe-core",
          "version": "4.13.0"
        }
      },
      {
        "component": "DateTimePicker",
        "mode": "Light",
        "state": "open",
        "edition": "Community",
        "violations": 0,
        "incomplete": [],
        "engine": {
          "name": "axe-core",
          "version": "4.13.0"
        }
      },
      {
        "component": "DateTimePicker",
        "mode": "Dark",
        "state": "open",
        "edition": "Community",
        "violations": 0,
        "incomplete": [],
        "engine": {
          "name": "axe-core",
          "version": "4.13.0"
        }
      },
      {
        "component": "DateRangePicker",
        "mode": "Light",
        "state": "closed",
        "edition": "Community",
        "violations": 0,
        "incomplete": [
          "aria-valid-attr-value"
        ],
        "engine": {
          "name": "axe-core",
          "version": "4.13.0"
        }
      },
      {
        "component": "DateRangePicker",
        "mode": "Light",
        "state": "open",
        "edition": "Community",
        "violations": 0,
        "incomplete": [],
        "engine": {
          "name": "axe-core",
          "version": "4.13.0"
        }
      },
      {
        "component": "DateRangePicker",
        "mode": "Dark",
        "state": "open",
        "edition": "Community",
        "violations": 0,
        "incomplete": [],
        "engine": {
          "name": "axe-core",
          "version": "4.13.0"
        }
      },
      {
        "component": "FontProvider",
        "mode": "Light",
        "state": "loaded",
        "edition": "Community",
        "violations": 0,
        "incomplete": [],
        "engine": {
          "name": "axe-core",
          "version": "4.13.0"
        }
      },
      {
        "component": "FontProvider",
        "mode": "Dark",
        "state": "loaded",
        "edition": "Community",
        "violations": 0,
        "incomplete": [],
        "engine": {
          "name": "axe-core",
          "version": "4.13.0"
        }
      },
      {
        "component": "ShapeMask",
        "mode": "Light",
        "state": "preset",
        "edition": "Community",
        "violations": 0,
        "incomplete": [],
        "engine": {
          "name": "axe-core",
          "version": "4.13.0"
        }
      },
      {
        "component": "ShapeMask",
        "mode": "Dark",
        "state": "preset",
        "edition": "Community",
        "violations": 0,
        "incomplete": [],
        "engine": {
          "name": "axe-core",
          "version": "4.13.0"
        }
      },
      {
        "component": "DateTimePicker",
        "mode": "Dark",
        "state": "320-open",
        "edition": "Community",
        "violations": 0,
        "incomplete": [],
        "engine": {
          "name": "axe-core",
          "version": "4.13.0"
        }
      },
      {
        "component": "DatePicker",
        "mode": "Dark",
        "state": "320-open",
        "edition": "Community",
        "violations": 0,
        "incomplete": [],
        "engine": {
          "name": "axe-core",
          "version": "4.13.0"
        }
      },
      {
        "component": "TimePicker",
        "mode": "Dark",
        "state": "320-open",
        "edition": "Community",
        "violations": 0,
        "incomplete": [],
        "engine": {
          "name": "axe-core",
          "version": "4.13.0"
        }
      },
      {
        "component": "DateRangePicker",
        "mode": "Dark",
        "state": "320-open",
        "edition": "Community",
        "violations": 0,
        "incomplete": [],
        "engine": {
          "name": "axe-core",
          "version": "4.13.0"
        }
      },
      {
        "component": "FontProvider",
        "mode": "Light",
        "state": "loaded",
        "edition": "Enterprise",
        "violations": 0,
        "incomplete": [],
        "engine": {
          "name": "axe-core",
          "version": "4.13.0"
        }
      },
      {
        "component": "FontProvider",
        "mode": "Dark",
        "state": "loaded",
        "edition": "Enterprise",
        "violations": 0,
        "incomplete": [],
        "engine": {
          "name": "axe-core",
          "version": "4.13.0"
        }
      },
      {
        "component": "DatePicker",
        "mode": "Light",
        "state": "open",
        "edition": "Enterprise",
        "violations": 0,
        "incomplete": [],
        "engine": {
          "name": "axe-core",
          "version": "4.13.0"
        }
      },
      {
        "component": "DatePicker",
        "mode": "Dark",
        "state": "open",
        "edition": "Enterprise",
        "violations": 0,
        "incomplete": [],
        "engine": {
          "name": "axe-core",
          "version": "4.13.0"
        }
      },
      {
        "component": "TimePicker",
        "mode": "Light",
        "state": "open",
        "edition": "Enterprise",
        "violations": 0,
        "incomplete": [],
        "engine": {
          "name": "axe-core",
          "version": "4.13.0"
        }
      },
      {
        "component": "TimePicker",
        "mode": "Dark",
        "state": "open",
        "edition": "Enterprise",
        "violations": 0,
        "incomplete": [],
        "engine": {
          "name": "axe-core",
          "version": "4.13.0"
        }
      },
      {
        "component": "DateTimePicker",
        "mode": "Light",
        "state": "open",
        "edition": "Enterprise",
        "violations": 0,
        "incomplete": [],
        "engine": {
          "name": "axe-core",
          "version": "4.13.0"
        }
      },
      {
        "component": "DateTimePicker",
        "mode": "Dark",
        "state": "open",
        "edition": "Enterprise",
        "violations": 0,
        "incomplete": [],
        "engine": {
          "name": "axe-core",
          "version": "4.13.0"
        }
      },
      {
        "component": "DateRangePicker",
        "mode": "Light",
        "state": "open",
        "edition": "Enterprise",
        "violations": 0,
        "incomplete": [],
        "engine": {
          "name": "axe-core",
          "version": "4.13.0"
        }
      },
      {
        "component": "DateRangePicker",
        "mode": "Dark",
        "state": "open",
        "edition": "Enterprise",
        "violations": 0,
        "incomplete": [],
        "engine": {
          "name": "axe-core",
          "version": "4.13.0"
        }
      },
      {
        "component": "ShapeMask",
        "mode": "Light",
        "state": "preset",
        "edition": "Enterprise",
        "violations": 0,
        "incomplete": [],
        "engine": {
          "name": "axe-core",
          "version": "4.13.0"
        }
      },
      {
        "component": "ShapeMask",
        "mode": "Dark",
        "state": "preset",
        "edition": "Enterprise",
        "violations": 0,
        "incomplete": [],
        "engine": {
          "name": "axe-core",
          "version": "4.13.0"
        }
      }
    ],
    "nativeBaselineAttribution": "32 compiled native states recorded before the final persistent-cell/selected-label repair; final native VoiceOver interactions verify the repaired runtime. This is not a rerun of all 32 scans.",
    "finalRepairAudits": [
      {
        "file": "community-final-range-320-audit.json",
        "violations": 0,
        "note": "See recorded audit for incomplete checks; not counted as passes."
      },
      {
        "file": "web-final-range-audit.json",
        "violations": 0,
        "note": "See recorded audit for incomplete checks; not counted as passes."
      }
    ],
    "finalUnitAttribution": "115 main and 9 independent Community checks rerun after the 0.7.3 Clear-focus repair."
  },
  "manual": {
    "pickers": [
      "Calendar arrow keys and Enter commit",
      "Page Down and Shift+Page Up with inclusive bounds",
      "Escape dismissal and focus restoration",
      "Unchanged option echo preserves active calendar focus",
      "Invalid typed date is rejected with text and aria-invalid; the error can be read with VoiceOver",
      "12-hour time selection emits a 24-hour local value",
      "DateTimePicker emits local ISO date/time without UTC conversion",
      "Reverse range selection normalizes endpoints",
      "Website range preset commits both dates",
      "Actual automatic invalid date/time/range speech and range presets verified with VoiceOver in all three editions.",
      "Clear restores focus to the empty first input and speaks its label on all three surfaces."
    ],
    "fonts": [
      "Eleven bundled font families load",
      "Separate body and heading families",
      "Custom font failure retains readable fallback",
      "Nested ownership preserves the current font owner and restores original styles on disposal"
    ],
    "masks": [
      "Preset and custom mask rendering",
      "Failed mask leaves content visible",
      "Consumer-owned image survives updates",
      "Normal animation runs; test-only reduced-motion simulation suppresses it"
    ],
    "layout": [
      "320 CSS-pixel Community DateTimePicker iframe has no horizontal overflow",
      "Calendar day buttons measured 36 by 40 CSS pixels; navigation buttons 32 by 42",
      "Dark-theme contrast checks use computed browser colors",
      "Final Light/Dark text, border and focus contrast recorded.",
      "Actual 568\u00d7320 landscape dialog scrolling keeps focused actions visible.",
      "320px plus increased text spacing has no horizontal overflow."
    ],
    "website": [
      "All six documented previews mounted",
      "ShapeMask showcase width fixed after visual inspection",
      "Code examples link to advanced TypeScript declarations",
      "Community catalogue includes 31 components"
    ],
    "native": [
      "Published Community and Enterprise picker values/events, validation and focus restoration checked.",
      "All 11 native font families and custom Resource/fallback cases verified in both editions.",
      "Four Community picker dialogs fit a 320 CSS-pixel viewport without horizontal overflow.",
      "Focused 200% text and spacing checks recorded for web and compiled native content."
    ],
    "evidence": [
      "assistive-technology-reviewed.json",
      "final-manual-layout-observed.json",
      "final-validation-observed.json"
    ]
  },
  "contrast": {
    "method": "Computed browser colors; sRGB relative luminance contrast calculation",
    "helpText": 8.34,
    "selectedDateText": 5.46,
    "inputText": 14.75,
    "focusRingAgainstDialog": 3.11
  },
  "automaticReviewNotes": [
    "Axe could not resolve aria-controls for closed native dialogs; all four referenced dialog IDs were verified present in the DOM.",
    "Calendar help contrast was marked incomplete by axe; computed dark-theme help contrast is 8.34:1. Automated incomplete findings are retained, not counted as passes.",
    "Reduced motion was tested through a test-only MediaQueryList simulation, not a change to the user OS preference.",
    "Four closed native Community dialogs retained axe aria-controls findings as incomplete; all open-dialog states passed that rule."
  ],
  "native": {
    "community": "Six native Blocks and showcases published; all 31 components linked from the shared catalogue. Independent picker namespace repaired. Private source archive retained as a non-deployed Resource.",
    "enterprise": "All six native Blocks and showcases published. Pickers are owned by BluKavantUi_Forms. Showcase host is BluGrid_Sample.",
    "fontResources": "All 11 bundled font families, separate headings and custom consumer Resource fonts verified in both editions. Native presets load via private allowlisted font delivery; PresetBaseUrl may remain empty.",
    "customMasks": "Both editions use a verified same-origin native Resource for the custom SVG example.",
    "references": [
      "https://success.outsystems.com/documentation/11/building_apps/data_management/use_resources/",
      "https://success.outsystems.com/documentation/11/building_apps/reusing_and_refactoring/libraries/"
    ]
  },
  "remaining": [],
  "criteriaUrl": "/downloads/six-components-criteria-2026-10-14.json",
  "assistiveTechnology": {
    "observations": 127,
    "coverage": {
      "web": [
        "DatePicker",
        "TimePicker",
        "DateTimePicker",
        "DateRangePicker",
        "FontProvider",
        "ShapeMask"
      ],
      "nativeCommunity": [
        "DatePicker",
        "TimePicker",
        "DateTimePicker",
        "DateRangePicker",
        "FontProvider",
        "ShapeMask"
      ],
      "nativeEnterprise": [
        "DatePicker",
        "TimePicker",
        "DateTimePicker",
        "DateRangePicker",
        "FontProvider",
        "ShapeMask"
      ]
    },
    "method": "User-authorized AppleScript keyboard control and actual VoiceOver caption-panel pixels, transcribed with Apple Vision and reviewed against the expected interaction. Accessibility-tree text is not substituted for spoken evidence.",
    "finding": "Actual Safari/VoiceOver announced invalid date/time/range errors and range presets on Web, Enterprise and Community. Selection confirmation is spoken through the updated chooser name when focus returns. Clear now returns focus to the empty input and speaks its label on all three surfaces.",
    "preferenceRestored": "Play Tone; VoiceOver remains enabled",
    "diagnosticLimit": "FontProvider failure kept text readable; its developer diagnostic was not verified as an automatic announcement. FontProvider has no visible status UI. Applications that display asynchronous loading/error status must expose that status accessibly."
  },
  "additionalStressLimit": "Combining 320px width, 200% text and increased spacing caused crowded calendar text and clipped month/year controls. This combined stress case is not reported as a pass; 200% text, 320px reflow and increased-spacing checks are recorded separately.",
  "distributionNote": "Official Forge distribution and a new OAP export are separate from the published native libraries, showcases and private Community source Resource."
}
