#  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_dev
description: Helpers for testing playground_components package
version: 0.0.1
publish_to: none

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

dependencies:
  app_state: 0.9.4
  flutter: { sdk: flutter }
  flutter_code_editor: ^0.3.0
  flutter_test: { sdk: flutter }
  get_it: ^7.2.0
  highlight: ^0.7.0
  http: ^0.13.5
  keyed_collection_widgets: 0.4.3
  playground_components: { path: ../playground_components }
  provider: ^6.0.3
  total_lints: ^2.18.0
