#  Licensed to the Apache Software Foundation (ASF) under one
#  or more contributor license agreements.  See the NOTICE file
#  distributed with this work for additional information
#  regarding copyright ownership.  The ASF licenses this file
#  to you under the Apache License, Version 2.0 (the
#  "License"); you may not use this file except in compliance
#  with the License.  You may obtain a copy of the License at
#
#  http://www.apache.org/licenses/LICENSE-2.0
#
#  Unless required by applicable law or agreed to in writing,
#  software distributed under the License is distributed on an
#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
#  KIND, either express or implied.  See the License for the
#  specific language governing permissions and limitations
#  under the License.

name: playground_components
description: Reusable Playground components
version: 0.0.1
publish_to: none

environment:
  sdk: '>=3.0.2 <4.0.0'
  flutter: '>=3.10.4'

dependencies:
  aligned_dialog: ^0.0.6
  app_state: 0.9.4
  clock: ^1.1.1
  collection: ^1.16.0
  connectivity_plus: ^2.3.9
  easy_localization: ">=3.0.1 <3.0.3"
  easy_localization_ext: ^0.1.1
  easy_localization_loader: ^1.0.0
  enum_map: ^0.2.1
  equatable: ^2.0.5
  flutter: { sdk: flutter }
  flutter_code_editor: ^0.3.0

  # TODO(nausharipov): return flutter_markdown when it is fixed, https://github.com/apache/beam/issues/26498
  # The exact version is used because this non-official package can be poorly maintained.
  # Same in Tour of Beam's file.
  flutter_markdown_selectionarea: 0.6.14+3

  flutter_svg: ^2.0.1
  fluttertoast: ^8.1.1
  get_it: ^7.2.0
  google_fonts: ^4.0.3
  grpc: ^3.0.2
  highlight: ^0.7.0
  hive: ^2.2.3
  hive_test: ^1.0.1
  http: ^0.13.5
  json_annotation: ^4.7.0
  keyed_collection_widgets: 0.4.3
  meta: ^1.7.0
  os_detect: ^2.0.1
  protobuf: ^2.1.0
  provider: ^6.0.3
  rxdart: ^0.27.7
  shared_preferences: ^2.0.15
  url_launcher: ^6.1.10
  visibility_detector: ^0.4.0+2
  yaml: ^3.1.1

dev_dependencies:
  build_runner: ^2.2.0
  enum_map_gen: ^0.2.1
  flutter_gen_runner: ^5.2.0
  flutter_test: { sdk: flutter }
  json_serializable: ^6.4.1
  mockito: ^5.4.1
  total_lints: ^2.17.4

flutter:
  uses-material-design: true
  assets:
    - assets/buttons/
    - assets/notification_icons/
    - assets/png/
    - assets/svg/
    - assets/symbols/go.g.yaml
    - assets/symbols/java.g.yaml
    - assets/symbols/python.g.yaml
    - assets/translations/en.yaml

flutter_gen:
  output: lib/src/assets/
