// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// TODO(yjbanov): The code in this file was temporarily moved to lib/web_ui/lib/ui.dart
//                during the NNBD migration so that `dart:ui` does not have to export
//                `dart:_engine`. NNBD does not allow exported non-migrated libraries
//                from migrated libraries.
