From f308eca45cae5b36d9595f24621d7d63fd24725e Mon Sep 17 00:00:00 2001 From: nshahan Date: Tue, 13 Mar 2018 14:35:45 -0700 Subject: [PATCH 1/9] ... PiperOrigin-RevId: 188931428 --- .../examples/android/AndroidManifest.xml | 22 +++ .../android/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2029 bytes .../android/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1464 bytes .../android/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 2810 bytes .../android/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 4094 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 5502 bytes charts_flutter/examples/lib/image_test.dart | 66 +++++++ .../examples/lib/image_test_main.dart | 180 ++++++++++++++++++ .../lib/internal/internal_scaffold.dart | 48 +++++ .../lib/internal/time_series_performance.dart | 37 ++++ .../examples/lib/internal_main.dart | 138 ++++++++++++++ 11 files changed, 491 insertions(+) create mode 100644 charts_flutter/examples/android/AndroidManifest.xml create mode 100644 charts_flutter/examples/android/res/mipmap-hdpi/ic_launcher.png create mode 100644 charts_flutter/examples/android/res/mipmap-mdpi/ic_launcher.png create mode 100644 charts_flutter/examples/android/res/mipmap-xhdpi/ic_launcher.png create mode 100644 charts_flutter/examples/android/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 charts_flutter/examples/android/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 charts_flutter/examples/lib/image_test.dart create mode 100644 charts_flutter/examples/lib/image_test_main.dart create mode 100644 charts_flutter/examples/lib/internal/internal_scaffold.dart create mode 100644 charts_flutter/examples/lib/internal/time_series_performance.dart create mode 100644 charts_flutter/examples/lib/internal_main.dart diff --git a/charts_flutter/examples/android/AndroidManifest.xml b/charts_flutter/examples/android/AndroidManifest.xml new file mode 100644 index 000000000..7f2c3be1a --- /dev/null +++ b/charts_flutter/examples/android/AndroidManifest.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + diff --git a/charts_flutter/examples/android/res/mipmap-hdpi/ic_launcher.png b/charts_flutter/examples/android/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..733717e47f2988a31abab9f7ceea6e3ff9ab1b7a GIT binary patch literal 2029 zcmV!*FleL}fpgv?iein+<*K0kv>+v%WHgX- zJ|P?qf6qBD9k`&w=50J3#u$OA3WY+;Gcqzd)F8zLL^UVs&%VCCD#q9X&Ux5)D$b2y zjJX4WKy_AD7A?FIJLlM}69IBD#-yH}o~16A>&F2&Zo8+ea3HK%M&oBi6H5^iXDkRp zI2a7NFI~Fy+N@c#e&C!(=6rvI8X&o|vvaq{-Da+OF;zZpr7NfF5}9H*h+_TV#-7WP(wq*H$_E7q#$Pl zB3tcmwhaz(N*+K~Y$Y(@jVTO^Ch4+O>^_qmfUMYx;Jo=T!*kh&;UtHGtiT~8YaTHT z$N7K)5^%`R(a>$YAX~6ia#*Zex?7N&1LojZu$A)xk*)SLjW`@AL!m&p|(WTI{i|Mh|zGidEnV1S}drX(D z?BB(rzfsL@1ZVT~#J2k5Hpk~p3f%N;!{Cvf3hbCEU{b2Vz>#<_77vmhI3Lz32uK{c zX$%=|{g5ocvDad;YZv=jY^)2|G@T(oBmSgoIuvZL=jfL1?u0ZdCyim84oGAx+N}tZ z$z%Ap`9z7)r+K;sczH7LczS#|zui=@tzH2=#E(7nK(eSDdv~!!kVq4W%#sLB^jd0= zh6v8cSxigrRFL04Cl6B2{c-Ui4Ivz70@6}WJh+oR44Ek`a%a3_h5&Dh))MGGKXNrF zUW$L-=Gdr1Iq_oiJz*R!_6#K)=P8JGw@tN*;lCUUb>2eznQ|O^YXMe0Jx#YfbPRNs zf+*oTVU8_z3P??Qj!?&Sw4SLzSQ6oOxo~7n3Dzvg(-W#^jPn3d)^tO-;jFfj`fprA zYxyZiJQWb!0AmmZhJ$5uvG&=SdH`sRaV8+jTFY+z|6D=qsc#{%G{Efv1XlzQ9YYAo zxq#H{*4Ng8w(pKZ5;Fi#`T(H23W^>CY0s)+Y<&I+EtRO9cQ&A?-KZx0KJd`3?{X6^ zpV$jUd;l1q1EggFV(L9`{=1oEz!$6MS+Se*0mVY9K7SFHPacAtk_n7^2uPu(BK5O0<*2B;8CNZ8m@L>Wc>ocB-hK(M9{3rR4eeUO8FZe?(`PH@V9S!HjKn4v zAevcMFpL$4D(!-le1M{m%8vempX#p|QA1=bDe2Q!X5-@*3-rVe38151ua_DCTZj{dNT7i0r=^Q5Tu07e?> zYHMr1nm>R3MpJ;QtE*QP7Z;zT&X|FgMZ>GjrIQ8`D(^&wr_wV1oc*cww`5uoaRhDHgiuZm~g)GZV6vc?d=x6#j_W$&=o-wg7 z^^7+#h5!h`V6eZbsp}GOQc^Oerlw{bfOP7#PQq_o zxPR`nh#|T!&CSj2YHMqwzidiaJG1~rE?!z%>Iw#fX`FL+I2=xDkGb7$sx@Jc$J1L? zRW+z6-%nE)pqL<|2slxQ zY{(3WiOJ-{_yaP8m`PQp(`hW58QXA)(QOTEFlM3My{|dlZr$43-dlEW2{-$-ydTf= zoadar?|TSW_(xYbexxKIgph&MV=^FsAR;B%KDq>i5E4%yA~gd54Yx>zCxHMD)_@Bk zaxPrBFk1*A40o|%01=VP-*^(b1VW+EPDzq#E|c)O9b%Svy966PA;OZ4(NGx+F<* z3n9Xj5ty-s6aoBl78p0kDk5O{)qso32S6MFNs^pnV`IVY?(U^tuXj+x8Xcg~6+&bY z(RfEk$KvAR;vZ#Mo(q7pe`2W_d<=f)DHY#Got*kxS44Ouf0{8AB9hOaKRR7#G0DeJYNhNe!GKKT$|nU64>$VgwEyI#gCwRb`5R zB@tldKk8NS)37mkU!wBbq{~Af9p#_Ap779hNq5lwWK5AZ)*d82pDOm49{t z;U2eX@Eiqu30zcwZG8g2nXpZo%G+-tR(@-bK;W#g=PyBddkL6TUMAo<58zs%lZ;igivq?KnTUUk5+J=?a1HY$V;OimdYsG{4gr|yV>Pvz(7BWMC!9Tx9f_MJ^ z8mj{Mq+g&lXbya3k&VacR2E96{H{OEgO5|*`W)aD^^%yu*DRD!mNQ-X?R_fR3@$P} z!CPpS7w1K50bk_l%uROd|Z`>sju^i)6Um;}qYaLI`}P%8R8;)x za5!>QRkf_a!6XiL{Dp`?hl7Yvv8(`dT#jg-bAv;cW#{nl@ad+erWJK{b$!jv&9cwu zi(c;ZT1?K)&dxm^kH_b5IJmLK-AY5{>=>Z!9S(;P2n6oicYRxiMu2$Yg73dqyG=rKhLIUt3%IdV70&*W~~82}~i84Ir<) zynIn!ULLnuV-uK*okWNzc9bO|X>f3G?C{~koIKncyBOcQPTJ_Msi~108ylTg^vGsN zSgEeA4mUJ3a55*H7E`Lp$>Mfj`jgrWfk&qYgF&GstloOI+QA9}Mr&O01pWihrUiU- SV_J~_0000qX4uS-L1b`?j5arV+G9UpU$_hmJ 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 literal 0 HcmV?d00001 diff --git a/charts_flutter/examples/android/res/mipmap-xxxhdpi/ic_launcher.png b/charts_flutter/examples/android/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..0f9552e270e6ccd4867e02f425244f6bace1a086 GIT binary patch literal 5502 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 BP6_}3 literal 0 HcmV?d00001 diff --git a/charts_flutter/examples/lib/image_test.dart b/charts_flutter/examples/lib/image_test.dart new file mode 100644 index 000000000..510e31e1a --- /dev/null +++ b/charts_flutter/examples/lib/image_test.dart @@ -0,0 +1,66 @@ +// Copyright 2018 the Charts project authors. Please see the AUTHORS file +// for details. +// +// Licensed 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. + +import 'package:flutter/material.dart'; + +class ImageTest extends StatelessWidget { + static const _chartHeight = 220.0; + + /// The title for this chart used to navigate to the chart. + final String title; + + /// The chart widget. + final Widget child; + + ImageTest(this.title, this.child); + + @override + Widget build(BuildContext context) { + return new GestureDetector( + child: new Text(title), + onTap: () { + Navigator.push(context, + new _LowTransitionMaterialPageRouter(builder: (_) { + return new Scaffold( + appBar: new AppBar( + title: new Text(title, style: new TextStyle(fontSize: 14.0)), + elevation: 0.0, + backgroundColor: Colors.transparent, + ), + body: new ListView( + padding: kMaterialListPadding, + children: [ + new SizedBox( + height: _chartHeight, + child: child, + ), + ], + ), + ); + })); + }); + } +} + +/// Hack the existing [MaterialPageRoute] with low transition for image tests. +class _LowTransitionMaterialPageRouter extends MaterialPageRoute { + _LowTransitionMaterialPageRouter({WidgetBuilder builder}) + : super(builder: builder); + + /// Transition duration needs to be non zero or else the animation dismissed + /// is not set. + @override + Duration get transitionDuration => const Duration(milliseconds: 1); +} diff --git a/charts_flutter/examples/lib/image_test_main.dart b/charts_flutter/examples/lib/image_test_main.dart new file mode 100644 index 000000000..143999b4f --- /dev/null +++ b/charts_flutter/examples/lib/image_test_main.dart @@ -0,0 +1,180 @@ +// Copyright 2018 the Charts project authors. Please see the AUTHORS file +// for details. +// +// Licensed 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. + +import 'package:flutter/material.dart'; +import 'package:flutter_driver/driver_extension.dart'; +import 'bar_chart/horizontal.dart'; +import 'bar_chart/horizontal_bar_label.dart'; +import 'bar_chart/horizontal_pattern_forward_hatch.dart'; +import 'bar_chart/grouped.dart'; +import 'bar_chart/grouped_single_target_line.dart'; +import 'bar_chart/grouped_stacked.dart'; +import 'bar_chart/grouped_target_line.dart'; +import 'bar_chart/pattern_forward_hatch.dart'; +import 'bar_chart/simple.dart'; +import 'bar_chart/stacked.dart'; +import 'bar_chart/stacked_horizontal.dart'; +import 'bar_chart/stacked_target_line.dart'; +import 'bar_chart/spark_bar.dart'; +import 'line_chart/dash_pattern.dart'; +import 'line_chart/simple.dart'; +import 'line_chart/range_annotation.dart'; +import 'a11y/domain_a11y_explore_bar_chart.dart'; +import 'axes/bar_secondary_axis.dart'; +import 'axes/bar_secondary_axis_only.dart'; +import 'axes/horizontal_bar_secondary_axis.dart'; +import 'axes/short_tick_length_axis.dart'; +import 'axes/custom_font_size_and_color.dart'; +import 'axes/measure_axis_label_alignment.dart'; +import 'axes/hidden_ticks_and_labels_axis.dart'; +import 'axes/custom_axis_tick_formatters.dart'; +import 'axes/custom_measure_tick_count.dart'; +import 'axes/integer_only_measure_axis.dart'; +import 'axes/nonzero_bound_measure_axis.dart'; +import 'axes/statically_provided_ticks.dart'; +import 'interactions/selection_bar_highlight.dart'; +import 'interactions/selection_line_highlight.dart'; +import 'interactions/selection_callback_example.dart'; +import 'i18n/rtl_bar_chart.dart'; +import 'i18n/rtl_line_chart.dart'; +import 'i18n/rtl_series_legend.dart'; +import 'legends/simple_series_legend.dart'; +import 'legends/legend_options.dart'; +import 'legends/legend_custom_symbol.dart'; +import 'time_series_chart/range_annotation.dart'; +import 'time_series_chart/simple.dart'; +import 'image_test_only/legend.dart'; +import 'image_test_only/rtl_grouped.dart'; +import 'image_test_only/rtl_grouped_stacked.dart'; +import 'image_test.dart'; + +const _appName = 'Charts Flutter Image Test'; + +void main() { + enableFlutterDriverExtension(); + final app = new MaterialApp( + debugShowCheckedModeBanner: false, + title: _appName, + theme: new ThemeData( + brightness: Brightness.light, primarySwatch: Colors.lightBlue), + home: new Home(), + ); + runApp(app); +} + +/// Main entry point of the image test app. +class Home extends StatelessWidget { + /// List of test charts. + final _tests = [ + new ImageTest('bar_chart__simple', new SimpleBarChart.withSampleData()), + new ImageTest('bar_chart__stacked', new StackedBarChart.withSampleData()), + new ImageTest('bar_chart__grouped', new GroupedBarChart.withSampleData()), + new ImageTest('bar_chart__grouped_stacked', + new GroupedStackedBarChart.withSampleData()), + new ImageTest('bar_chart__grouped_target_line', + new GroupedBarTargetLineChart.withSampleData()), + new ImageTest('bar_chart__grouped_single_target_line', + new GroupedBarSingleTargetLineChart.withSampleData()), + new ImageTest('bar_chart__stacked_horizontal', + new StackedHorizontalBarChart.withSampleData()), + new ImageTest('bar_chart__stacked_target_line', + new StackedBarTargetLineChart.withSampleData()), + new ImageTest( + 'bar_chart__horizontal', new HorizontalBarChart.withSampleData()), + new ImageTest('bar_chart__horizontal_bar_label', + new HorizontalBarLabelChart.withSampleData()), + new ImageTest('bar_chart__spark_bar', new SparkBar.withSampleData()), + new ImageTest('bar_chart__pattern_forward_hatch', + new PatternForwardHatchBarChart.withSampleData()), + new ImageTest('bar_chart__horizontal_pattern_forward_hatch', + new HorizontalPatternForwardHatchBarChart.withSampleData()), + new ImageTest('line_chart__simple', new SimpleLineChart.withSampleData()), + new ImageTest( + 'line_chart__dash_pattern', new DashPatternLineChart.withSampleData()), + new ImageTest('line_chart__range_annotation', + new LineRangeAnnotationChart.withSampleData()), + new ImageTest('axes__bar_secondary_axis', + new BarChartWithSecondaryAxis.withSampleData()), + new ImageTest('axes__bar_secondary_axis_only', + new BarChartWithSecondaryAxisOnly.withSampleData()), + new ImageTest('axes__horizontal_bar_secondary_axis', + new HorizontalBarChartWithSecondaryAxis.withSampleData()), + new ImageTest('axes__short_tick_length_axis', + new ShortTickLengthAxis.withSampleData()), + new ImageTest('axes__custom_font_size_and_color', + new CustomFontSizeAndColor.withSampleData()), + new ImageTest('axes__measure_axis_label_alignment', + new MeasureAxisLabelAlignment.withSampleData()), + new ImageTest('axes__hidden_ticks_and_labels_axis', + new HiddenTicksAndLabelsAxis.withSampleData()), + new ImageTest('axes__custom_axis_tick_formatters', + new CustomAxisTickFormatters.withSampleData()), + new ImageTest('axes__custom_measure_tick_count', + new CustomMeasureTickCount.withSampleData()), + new ImageTest('axes__integer_only_measure_axis', + new IntegerOnlyMeasureAxis.withSampleData()), + new ImageTest('axes__nonzero_bound_measure_axis', + new NonzeroBoundMeasureAxis.withSampleData()), + new ImageTest('axes__statically_provided_ticks', + new StaticallyProvidedTicks.withSampleData()), + new ImageTest('interactions__selection_bar_highlight', + new SelectionBarHighlight.withSampleData()), + new ImageTest('interactions__selection_line_highlight', + new SelectionLineHighlight.withSampleData()), + new ImageTest('interactions__selection_callback_example', + new SelectionCallbackExample.withSampleData()), + new ImageTest('legends__simple_series_legend', + new SimpleSeriesLegend.withSampleData()), + new ImageTest( + 'legends__legend_options', new LegendOptions.withSampleData()), + new ImageTest('legends__legend_custom_symbol', + new LegendWithCustomSymbol.withSampleData()), + new ImageTest('time_series_chart__simple', + new SimpleTimeSeriesChart.withSampleData()), + new ImageTest('time_series_chart__range_annotation', + new TimeSeriesRangeAnnotationChart.withSampleData()), + new ImageTest('image_test_only__rtl_grouped', + new RTLGroupedBarChart.withSampleData()), + new ImageTest('image_test_only__rtl_grouped_stacked', + new RTLGroupedStackedBarChart.withSampleData()), + new ImageTest('image_test_only__legend_top', + new ImageTestLegend.top(TextDirection.ltr)), + new ImageTest('image_test_only__legend_bottom', + new ImageTestLegend.bottom(TextDirection.ltr)), + new ImageTest('image_test_only__legend_start_ltr', + new ImageTestLegend.start(TextDirection.ltr)), + new ImageTest('image_test_only__legend_end_ltr', + new ImageTestLegend.end(TextDirection.ltr)), + new ImageTest('image_test_only__legend_start_rtl', + new ImageTestLegend.start(TextDirection.rtl)), + new ImageTest('image_test_only__legend_end_rtl', + new ImageTestLegend.end(TextDirection.rtl)), + new ImageTest('i18n__rtl_bar_chart', new RTLBarChart.withSampleData()), + new ImageTest('i18n__rtl_line_chart', new RTLLineChart.withSampleData()), + new ImageTest( + 'i18n__rtl_series_legend', new RTLSeriesLegend.withSampleData()), + new ImageTest('a11y__domain_a11y_explore_bar_chart', + new DomainA11yExploreBarChart.withSampleData()), + ]; + + Home({Key key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return new Scaffold( + appBar: new AppBar(title: new Text(_appName)), + body: new ListView(children: _tests)); + } +} diff --git a/charts_flutter/examples/lib/internal/internal_scaffold.dart b/charts_flutter/examples/lib/internal/internal_scaffold.dart new file mode 100644 index 000000000..f9a6cbced --- /dev/null +++ b/charts_flutter/examples/lib/internal/internal_scaffold.dart @@ -0,0 +1,48 @@ +// Copyright 2018 the Charts project authors. Please see the AUTHORS file +// for details. +// +// Licensed 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. + +import 'package:charts_flutter/flutter.dart' as charts; +import 'package:flutter/material.dart'; + +typedef Widget GalleryWidgetBuilder(List seriesList); +typedef List SeriesListBuilder(); + +/// Helper to build gallery. +class InternalScaffold extends StatelessWidget { + /// The widget used for leading in a [ListTile]. + final String title; + final Widget child; + + InternalScaffold({this.title, this.child}); + + /// Gets the gallery + Widget buildGalleryListTile(BuildContext context) => new ListTile( + title: new Text(title), + onTap: () { + Navigator.push(context, new MaterialPageRoute(builder: (_) => this)); + }); + + @override + Widget build(BuildContext context) { + return new Scaffold( + appBar: new AppBar(title: new Text(title)), + body: new Padding( + padding: const EdgeInsets.all(8.0), + child: new ListView(children: [ + new SizedBox(height: 250.0, child: child), + ])), + ); + } +} diff --git a/charts_flutter/examples/lib/internal/time_series_performance.dart b/charts_flutter/examples/lib/internal/time_series_performance.dart new file mode 100644 index 000000000..61a022eed --- /dev/null +++ b/charts_flutter/examples/lib/internal/time_series_performance.dart @@ -0,0 +1,37 @@ +// Copyright 2018 the Charts project authors. Please see the AUTHORS file +// for details. +// +// Licensed 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. + +/// Timeseries chart example +import 'package:charts_flutter/flutter.dart' as charts; +import 'package:flutter/material.dart'; + +class TimeSeriesPerformanceChart extends StatelessWidget { + final List seriesList; + final bool animate; + + TimeSeriesPerformanceChart(this.seriesList, {this.animate}); + + @override + Widget build(BuildContext context) { + return new charts.TimeSeriesChart( + seriesList, + animate: animate, + // Optionally pass in a [DateTimeFactory] used by the chart. The factory + // should create the same type of [DateTime] as the data provided. If none + // specified, the default creates local date time. + dateTimeFactory: const charts.LocalDateTimeFactory(), + ); + } +} diff --git a/charts_flutter/examples/lib/internal_main.dart b/charts_flutter/examples/lib/internal_main.dart new file mode 100644 index 000000000..07b4489df --- /dev/null +++ b/charts_flutter/examples/lib/internal_main.dart @@ -0,0 +1,138 @@ +// Copyright 2018 the Charts project authors. Please see the AUTHORS file +// for details. +// +// Licensed 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. + +import 'dart:developer'; +import 'dart:math'; +import 'package:charts_flutter/flutter.dart' as charts; +import 'package:flutter/material.dart'; +import 'drawer.dart'; +import 'internal/internal_scaffold.dart'; +import 'internal/time_series_performance.dart' show TimeSeriesPerformanceChart; + +void main() { + final app = new InternalApp(); + runApp(app); +} + +class InternalApp extends StatefulWidget { + @override + InternalAppState createState() => new InternalAppState(); +} + +class InternalAppState extends State { + // Initialize app settings from the default configuration. + bool _showPerformanceOverlay = false; + + final _timeSeriesData = _createSampleData(); + + @override + Widget build(BuildContext context) { + _setupPerformance(); + + return new MaterialApp( + title: 'Internal Testing App', + theme: new ThemeData( + brightness: Brightness.light, primarySwatch: Colors.amber), + showPerformanceOverlay: _showPerformanceOverlay, + home: new Scaffold( + drawer: new GalleryDrawer( + showPerformanceOverlay: _showPerformanceOverlay, + onShowPerformanceOverlayChanged: (bool value) { + setState(() { + _showPerformanceOverlay = value; + }); + }), + appBar: new AppBar(title: new Text('Internal')), + body: new _Gallery(_timeSeriesData)), + ); + } +} + +class _Gallery extends StatelessWidget { + final List> timeSeriesData; + + _Gallery(this.timeSeriesData); + + @override + Widget build(BuildContext context) { + return new ListView(children: [ + new InternalScaffold( + title: 'Lots of data time series chart', + child: new TimeSeriesPerformanceChart(timeSeriesData)) + .buildGalleryListTile(context) + ]); + } +} + +void _setupPerformance() { + // Change [printPerformance] to true and set the app to release mode to + // print performance numbers to console. By default, Flutter builds in debug + // mode and this mode is slow. To build in release mode, specify the flag + // blaze-run flag "--define flutter_build_mode=release". + // The build target must also be an actual device and not the emulator. + charts.Performance.time = (String tag) => Timeline.startSync(tag); + charts.Performance.timeEnd = (_) => Timeline.finishSync(); +} + +/// Create one series with sample hard coded data. +List> _createSampleData() { + const int numDataPointsToGenerate = 6000; + const int maxVariation = 10; + const Duration timeIncrements = const Duration(minutes: 15); + final random = new Random(); + var startTime = new DateTime(2017, 10, 20); + + final salesData = + new List<_TimeSeriesSales>.generate(numDataPointsToGenerate, (int index) { + final onePoint = + new _TimeSeriesSales(startTime, index + random.nextInt(maxVariation)); + startTime = startTime.add(timeIncrements); + return onePoint; + }); + + final seriesList = [ + new charts.Series<_TimeSeriesSales, DateTime>( + id: 'Sales', + colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault, + domainFn: (_TimeSeriesSales sales, _) => sales.time, + measureFn: (_TimeSeriesSales sales, _) => sales.sales, + data: salesData, + ), + ]; + + // Add 10 other lines with slight offset + for (var i = 1; i < 10; i++) { + seriesList.add(new charts.Series<_TimeSeriesSales, DateTime>( + id: 'Projection' + i.toString(), + colorFn: (_, __) => charts.MaterialPalette.red.shadeDefault, + domainFn: (_TimeSeriesSales sales, _) => sales.time, + measureFn: (_TimeSeriesSales sales, _) => sales.sales, + data: salesData + .map((sales) => + new _TimeSeriesSales(sales.time, sales.sales + 50 * (i))) + .toList(), + )); + } + + return seriesList; +} + +/// Sample time series data type. +class _TimeSeriesSales { + final DateTime time; + final int sales; + + _TimeSeriesSales(this.time, this.sales); +} From d0753a53fef7230d8eb196b20948404df54e0b19 Mon Sep 17 00:00:00 2001 From: lorrainekan Date: Tue, 13 Mar 2018 16:48:22 -0700 Subject: [PATCH 2/9] Add generated Android files. PiperOrigin-RevId: 188951931 --- charts_flutter/examples/android.iml | 12 ++ charts_flutter/examples/android/.gitignore | 10 ++ .../examples/android/app/build.gradle | 53 ++++++ .../android/app/src/main/AndroidManifest.xml | 39 +++++ .../com/example/examples/MainActivity.java | 17 ++ .../plugins/GeneratedPluginRegistrant.java | 23 +++ .../main/res/drawable/launch_background.xml | 12 ++ .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 544 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 442 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 721 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 1031 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 1443 bytes .../app/src/main/res/values/styles.xml | 8 + charts_flutter/examples/android/build.gradle | 31 ++++ .../examples/android/gradle.properties | 1 + .../android/gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 53636 bytes .../gradle/wrapper/gradle-wrapper.properties | 6 + charts_flutter/examples/android/gradlew | 160 ++++++++++++++++++ charts_flutter/examples/android/gradlew.bat | 90 ++++++++++ .../examples/android/settings.gradle | 17 ++ charts_flutter/examples/examples.iml | 17 ++ charts_flutter/examples/examples_android.iml | 26 +++ 22 files changed, 522 insertions(+) create mode 100644 charts_flutter/examples/android.iml create mode 100644 charts_flutter/examples/android/.gitignore create mode 100644 charts_flutter/examples/android/app/build.gradle create mode 100644 charts_flutter/examples/android/app/src/main/AndroidManifest.xml create mode 100644 charts_flutter/examples/android/app/src/main/java/com/example/examples/MainActivity.java create mode 100644 charts_flutter/examples/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java create mode 100644 charts_flutter/examples/android/app/src/main/res/drawable/launch_background.xml create mode 100644 charts_flutter/examples/android/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 charts_flutter/examples/android/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 charts_flutter/examples/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 charts_flutter/examples/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 charts_flutter/examples/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 charts_flutter/examples/android/app/src/main/res/values/styles.xml create mode 100644 charts_flutter/examples/android/build.gradle create mode 100644 charts_flutter/examples/android/gradle.properties create mode 100644 charts_flutter/examples/android/gradle/wrapper/gradle-wrapper.jar create mode 100644 charts_flutter/examples/android/gradle/wrapper/gradle-wrapper.properties create mode 100755 charts_flutter/examples/android/gradlew create mode 100644 charts_flutter/examples/android/gradlew.bat create mode 100644 charts_flutter/examples/android/settings.gradle create mode 100644 charts_flutter/examples/examples.iml create mode 100644 charts_flutter/examples/examples_android.iml diff --git a/charts_flutter/examples/android.iml b/charts_flutter/examples/android.iml new file mode 100644 index 000000000..462b903e0 --- /dev/null +++ b/charts_flutter/examples/android.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/charts_flutter/examples/android/.gitignore b/charts_flutter/examples/android/.gitignore new file mode 100644 index 000000000..65b7315af --- /dev/null +++ b/charts_flutter/examples/android/.gitignore @@ -0,0 +1,10 @@ +*.iml +*.class +.gradle +/local.properties +/.idea/workspace.xml +/.idea/libraries +.DS_Store +/build +/captures +GeneratedPluginRegistrant.java diff --git a/charts_flutter/examples/android/app/build.gradle b/charts_flutter/examples/android/app/build.gradle new file mode 100644 index 000000000..e60adc3b9 --- /dev/null +++ b/charts_flutter/examples/android/app/build.gradle @@ -0,0 +1,53 @@ +package third_party.dart.charts_flutter.examples.android.app + +def localProperties = new Properties() +def localPropertiesFile = rootProject.file('local.properties') +if (localPropertiesFile.exists()) { + localPropertiesFile.withReader('UTF-8') { reader -> + localProperties.load(reader) + } +} + +def flutterRoot = localProperties.getProperty('flutter.sdk') +if (flutterRoot == null) { + throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") +} + +apply plugin: 'com.android.application' +apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" + +android { + compileSdkVersion 27 + + lintOptions { + disable 'InvalidPackage' + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId "com.example.examples" + minSdkVersion 16 + targetSdkVersion 27 + versionCode 1 + versionName "1.0" + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig signingConfigs.debug + } + } +} + +flutter { + source '../..' +} + +dependencies { + testImplementation 'junit:junit:4.12' + androidTestImplementation 'com.android.support.test:runner:1.0.1' + androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' +} diff --git a/charts_flutter/examples/android/app/src/main/AndroidManifest.xml b/charts_flutter/examples/android/app/src/main/AndroidManifest.xml new file mode 100644 index 000000000..ac8855d5c --- /dev/null +++ b/charts_flutter/examples/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + diff --git a/charts_flutter/examples/android/app/src/main/java/com/example/examples/MainActivity.java b/charts_flutter/examples/android/app/src/main/java/com/example/examples/MainActivity.java new file mode 100644 index 000000000..89a83b2e9 --- /dev/null +++ b/charts_flutter/examples/android/app/src/main/java/com/example/examples/MainActivity.java @@ -0,0 +1,17 @@ +package com.example.examples; + +import android.os.Bundle; + +import io.flutter.app.FlutterActivity; +import io.flutter.plugins.GeneratedPluginRegistrant; + +/** + * FlutterActivity + */ +public class MainActivity extends FlutterActivity { + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + GeneratedPluginRegistrant.registerWith(this); + } +} diff --git a/charts_flutter/examples/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java b/charts_flutter/examples/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java new file mode 100644 index 000000000..d007606a4 --- /dev/null +++ b/charts_flutter/examples/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java @@ -0,0 +1,23 @@ +package io.flutter.plugins; + +import io.flutter.plugin.common.PluginRegistry; + +/** + * Generated file. Do not edit. + */ +public final class GeneratedPluginRegistrant { + public static void registerWith(PluginRegistry registry) { + if (alreadyRegisteredWith(registry)) { + return; + } + } + + private static boolean alreadyRegisteredWith(PluginRegistry registry) { + final String key = GeneratedPluginRegistrant.class.getCanonicalName(); + if (registry.hasPlugin(key)) { + return true; + } + registry.registrarFor(key); + return false; + } +} diff --git a/charts_flutter/examples/android/app/src/main/res/drawable/launch_background.xml b/charts_flutter/examples/android/app/src/main/res/drawable/launch_background.xml new file mode 100644 index 000000000..304732f88 --- /dev/null +++ b/charts_flutter/examples/android/app/src/main/res/drawable/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/charts_flutter/examples/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/charts_flutter/examples/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..db77bb4b7b0906d62b1847e87f15cdcacf6a4f29 GIT binary patch literal 544 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY3?!3`olAj~WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8bpbvhu0Wd6uZuB!w&u2PAxD2eNXD>P5D~Wn-+_Wa#27Xc zC?Zj|6r#X(-D3u$NCt}(Ms06KgJ4FxJVv{GM)!I~&n8Bnc94O7-Hd)cjDZswgC;Qs zO=b+9!WcT8F?0rF7!Uys2bs@gozCP?z~o%U|N3vA*22NaGQG zlg@K`O_XuxvZ&Ks^m&R!`&1=spLvfx7oGDKDwpwW`#iqdw@AL`7MR}m`rwr|mZgU`8P7SBkL78fFf!WnuYWm$5Z0 zNXhDbCv&49sM544K|?c)WrFfiZvCi9h0O)B3Pgg&ebxsLQ05GG~ AQ2+n{ literal 0 HcmV?d00001 diff --git a/charts_flutter/examples/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/charts_flutter/examples/android/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..17987b79bb8a35cc66c3c1fd44f5a5526c1b78be GIT binary patch literal 442 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5Xx&nMcT!A!W`0S9QKQy;}1Cl^CgaH=;G9cpY;r$Q>i*pfB zP2drbID<_#qf;rPZx^FqH)F_D#*k@@q03KywUtLX8Ua?`H+NMzkczFPK3lFz@i_kW%1NOn0|D2I9n9wzH8m|-tHjsw|9>@K=iMBhxvkv6m8Y-l zytQ?X=U+MF$@3 zt`~i=@j|6y)RWMK--}M|=T`o&^Ni>IoWKHEbBXz7?A@mgWoL>!*SXo`SZH-*HSdS+ yn*9;$7;m`l>wYBC5bq;=U}IMqLzqbYCidGC!)_gkIk_C@Uy!y&wkt5C($~2D>~)O*cj@FGjOCM)M>_ixfudOh)?xMu#Fs z#}Y=@YDTwOM)x{K_j*Q;dPdJ?Mz0n|pLRx{4n|)f>SXlmV)XB04CrSJn#dS5nK2lM zrZ9#~WelCp7&e13Y$jvaEXHskn$2V!!DN-nWS__6T*l;H&Fopn?A6HZ-6WRLFP=R` zqG+CE#d4|IbyAI+rJJ`&x9*T`+a=p|0O(+s{UBcyZdkhj=yS1>AirP+0R;mf2uMgM zC}@~JfByORAh4SyRgi&!(cja>F(l*O+nd+@4m$|6K6KDn_&uvCpV23&>G9HJp{xgg zoq1^2_p9@|WEo z*X_Uko@K)qYYv~>43eQGMdbiGbo>E~Q& zrYBH{QP^@Sti!`2)uG{irBBq@y*$B zi#&(U-*=fp74j)RyIw49+0MRPMRU)+a2r*PJ$L5roHt2$UjExCTZSbq%V!HeS7J$N zdG@vOZB4v_lF7Plrx+hxo7(fCV&}fHq)$ literal 0 HcmV?d00001 diff --git a/charts_flutter/examples/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/charts_flutter/examples/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..d5f1c8d34e7a88e3f88bea192c3a370d44689c3c GIT binary patch literal 1031 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q8Ax83A=Cw=BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrIztFa`(sgt!6~Yi|1%a`XoT0ojZ}lNrNjb9xjc(B0U1_% zz5^97Xt*%oq$rQy4?0GKNfJ44uvxI)gC`h-NZ|&0-7(qS@?b!5r36oQ}zyZrNO3 zMO=Or+<~>+A&uN&E!^Sl+>xE!QC-|oJv`ApDhqC^EWD|@=#J`=d#Xzxs4ah}w&Jnc z$|q_opQ^2TrnVZ0o~wh<3t%W&flvYGe#$xqda2bR_R zvPYgMcHgjZ5nSA^lJr%;<&0do;O^tDDh~=pIxA#coaCY>&N%M2^tq^U%3DB@ynvKo}b?yu-bFc-u0JHzced$sg7S3zqI(2 z#Km{dPr7I=pQ5>FuK#)QwK?Y`E`B?nP+}U)I#c1+FM*1kNvWG|a(TpksZQ3B@sD~b zpQ2)*V*TdwjFOtHvV|;OsiDqHi=6%)o4b!)x$)%9pGTsE z-JL={-Ffv+T87W(Xpooq<`r*VzWQcgBN$$`u}f>-ZQI1BB8ykN*=e4rIsJx9>z}*o zo~|9I;xof literal 0 HcmV?d00001 diff --git a/charts_flutter/examples/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/charts_flutter/examples/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..4d6372eebdb28e45604e46eeda8dd24651419bc0 GIT binary patch literal 1443 zcmb`G{WsKk6vsdJTdFg%tJav9_E4vzrOaqkWF|A724Nly!y+?N9`YV6wZ}5(X(D_N(?!*n3`|_r0Hc?=PQw&*vnU?QTFY zB_MsH|!j$PP;I}?dppoE_gA(4uc!jV&0!l7_;&p2^pxNo>PEcNJv za5_RT$o2Mf!<+r?&EbHH6nMoTsDOa;mN(wv8RNsHpG)`^ymG-S5By8=l9iVXzN_eG%Xg2@Xeq76tTZ*dGh~Lo9vl;Zfs+W#BydUw zCkZ$o1LqWQO$FC9aKlLl*7x9^0q%0}$OMlp@Kk_jHXOjofdePND+j!A{q!8~Jn+s3 z?~~w@4?egS02}8NuulUA=L~QQfm;MzCGd)XhiftT;+zFO&JVyp2mBww?;QByS_1w! zrQlx%{^cMj0|Bo1FjwY@Q8?Hx0cIPF*@-ZRFpPc#bBw{5@tD(5%sClzIfl8WU~V#u zm5Q;_F!wa$BSpqhN>W@2De?TKWR*!ujY;Yylk_X5#~V!L*Gw~;$%4Q8~Mad z@`-kG?yb$a9cHIApZDVZ^U6Xkp<*4rU82O7%}0jjHlK{id@?-wpN*fCHXyXh(bLt* zPc}H-x0e4E&nQ>y%B-(EL=9}RyC%MyX=upHuFhAk&MLbsF0LP-q`XnH78@fT+pKPW zu72MW`|?8ht^tz$iC}ZwLp4tB;Q49K!QCF3@!iB1qOI=?w z7In!}F~ij(18UYUjnbmC!qKhPo%24?8U1x{7o(+?^Zu0Hx81|FuS?bJ0jgBhEMzf< zCgUq7r2OCB(`XkKcN-TL>u5y#dD6D!)5W?`O5)V^>jb)P)GBdy%t$uUMpf$SNV31$ zb||OojAbvMP?T@$h_ZiFLFVHDmbyMhJF|-_)HX3%m=CDI+ID$0^C>kzxprBW)hw(v zr!Gmda);ICoQyhV_oP5+C%?jcG8v+D@9f?Dk*!BxY}dazmrT@64UrP3hlslANK)bq z$67n83eh}OeW&SV@HG95P|bjfqJ7gw$e+`Hxo!4cx`jdK1bJ>YDSpGKLPZ^1cv$ek zIB?0S<#tX?SJCLWdMd{-ME?$hc7A$zBOdIJ)4!KcAwb=VMov)nK;9z>x~rfT1>dS+ zZ6#`2v@`jgbqq)P22H)Tx2CpmM^o1$B+xT6`(v%5xJ(?j#>Q$+rx_R|7TzDZe{J6q zG1*EcU%tE?!kO%^M;3aM6JN*LAKUVb^xz8-Pxo#jR5(-KBeLJvA@-gxNHx0M-ZJLl z;#JwQoh~9V?`UVo#}{6ka@II>++D@%KqGpMdlQ}?9E*wFcf5(#XQnP$Dk5~%iX^>f z%$y;?M0BLp{O3a(-4A?ewryHrrD%cx#Q^%KY1H zNre$ve+vceSLZcNY4U(RBX&)oZn*Py()h)XkE?PL$!bNb{N5FVI2Y%LKEm%yvpyTP z(1P?z~7YxD~Rf<(a@_y` literal 0 HcmV?d00001 diff --git a/charts_flutter/examples/android/app/src/main/res/values/styles.xml b/charts_flutter/examples/android/app/src/main/res/values/styles.xml new file mode 100644 index 000000000..00fa4417c --- /dev/null +++ b/charts_flutter/examples/android/app/src/main/res/values/styles.xml @@ -0,0 +1,8 @@ + + + + diff --git a/charts_flutter/examples/android/build.gradle b/charts_flutter/examples/android/build.gradle new file mode 100644 index 000000000..a4841d312 --- /dev/null +++ b/charts_flutter/examples/android/build.gradle @@ -0,0 +1,31 @@ +package third_party.dart.charts_flutter.examples.android + +buildscript { + repositories { + google() + jcenter() + } + + dependencies { + classpath 'com.android.tools.build:gradle:3.0.1' + } +} + +allprojects { + repositories { + google() + jcenter() + } +} + +rootProject.buildDir = '../build' +subprojects { + project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { + project.evaluationDependsOn(':app') +} + +task clean(type: Delete) { + delete rootProject.buildDir +} diff --git a/charts_flutter/examples/android/gradle.properties b/charts_flutter/examples/android/gradle.properties new file mode 100644 index 000000000..8bd86f680 --- /dev/null +++ b/charts_flutter/examples/android/gradle.properties @@ -0,0 +1 @@ +org.gradle.jvmargs=-Xmx1536M diff --git a/charts_flutter/examples/android/gradle/wrapper/gradle-wrapper.jar b/charts_flutter/examples/android/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..13372aef5e24af05341d49695ee84e5f9b594659 GIT binary patch literal 53636 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ⅅ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 H-+%o-(+5aQ literal 0 HcmV?d00001 diff --git a/charts_flutter/examples/android/gradle/wrapper/gradle-wrapper.properties b/charts_flutter/examples/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 000000000..aa901e1e0 --- /dev/null +++ b/charts_flutter/examples/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Fri Jun 23 08:50:38 CEST 2017 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip diff --git a/charts_flutter/examples/android/gradlew b/charts_flutter/examples/android/gradlew new file mode 100755 index 000000000..9d82f7891 --- /dev/null +++ b/charts_flutter/examples/android/gradlew @@ -0,0 +1,160 @@ +#!/usr/bin/env bash + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn ( ) { + echo "$*" +} + +die ( ) { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; +esac + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules +function splitJvmOpts() { + JVM_OPTS=("$@") +} +eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS +JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" + +exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/charts_flutter/examples/android/gradlew.bat b/charts_flutter/examples/android/gradlew.bat new file mode 100644 index 000000000..8a0b282aa --- /dev/null +++ b/charts_flutter/examples/android/gradlew.bat @@ -0,0 +1,90 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windowz variants + +if not "%OS%" == "Windows_NT" goto win9xME_args +if "%@eval[2+2]" == "4" goto 4NT_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* +goto execute + +:4NT_args +@rem Get arguments from the 4NT Shell from JP Software +set CMD_LINE_ARGS=%$ + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/charts_flutter/examples/android/settings.gradle b/charts_flutter/examples/android/settings.gradle new file mode 100644 index 000000000..5330ba6c1 --- /dev/null +++ b/charts_flutter/examples/android/settings.gradle @@ -0,0 +1,17 @@ +package third_party.dart.charts_flutter.examples.android + +include ':app' + +def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() + +def plugins = new Properties() +def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') +if (pluginsFile.exists()) { + pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) } +} + +plugins.each { name, path -> + def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() + include ":$name" + project(":$name").projectDir = pluginDirectory +} diff --git a/charts_flutter/examples/examples.iml b/charts_flutter/examples/examples.iml new file mode 100644 index 000000000..4881df8ae --- /dev/null +++ b/charts_flutter/examples/examples.iml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/charts_flutter/examples/examples_android.iml b/charts_flutter/examples/examples_android.iml new file mode 100644 index 000000000..0ca70ed93 --- /dev/null +++ b/charts_flutter/examples/examples_android.iml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + From 28a3b203ca0e488bea9d22725ccba4d4e753de37 Mon Sep 17 00:00:00 2001 From: lorrainekan Date: Wed, 14 Mar 2018 09:16:02 -0700 Subject: [PATCH 3/9] Internal changes. PiperOrigin-RevId: 189037458 --- .../a11ys/domain_a11y_explore_bar_chart.md | 157 ++++++++++++++++++ .../domain_a11y_explore_bar_chart_full.png | Bin 0 -> 4914 bytes .../domain_a11y_explore_bar_chart_thumb.png | Bin 0 -> 2637 bytes .../docs/examples/axes/bar_secondary_axis.md | 102 ++++++++++++ .../examples/axes/bar_secondary_axis_full.png | Bin 0 -> 12565 bytes .../examples/axes/bar_secondary_axis_only.md | 72 ++++++++ .../axes/bar_secondary_axis_only_full.png | Bin 0 -> 6052 bytes .../axes/bar_secondary_axis_only_thumb.png | Bin 0 -> 2873 bytes .../axes/bar_secondary_axis_thumb.png | Bin 0 -> 3407 bytes .../axes/custom_axis_tick_formatters.md | 82 +++++++++ .../axes/custom_axis_tick_formatters_full.png | Bin 0 -> 21930 bytes .../custom_axis_tick_formatters_thumb.png | Bin 0 -> 4405 bytes .../axes/custom_font_size_and_color.md | 96 +++++++++++ .../axes/custom_font_size_and_color_full.png | Bin 0 -> 13775 bytes .../axes/custom_font_size_and_color_thumb.png | Bin 0 -> 4253 bytes .../axes/custom_measure_tick_count.md | 75 +++++++++ .../axes/custom_measure_tick_count_full.png | Bin 0 -> 16976 bytes .../axes/custom_measure_tick_count_thumb.png | Bin 0 -> 3628 bytes .../axes/hidden_ticks_and_labels_axis.md | 78 +++++++++ .../hidden_ticks_and_labels_axis_full.png | Bin 0 -> 1606 bytes .../hidden_ticks_and_labels_axis_thumb.png | Bin 0 -> 1546 bytes .../axes/horizontal_bar_secondary_axis.md | 104 ++++++++++++ .../horizontal_bar_secondary_axis_full.png | Bin 0 -> 13216 bytes .../horizontal_bar_secondary_axis_thumb.png | Bin 0 -> 3275 bytes .../axes/integer_only_measure_axis.md | 82 +++++++++ .../axes/integer_only_measure_axis_full.png | Bin 0 -> 10503 bytes .../axes/integer_only_measure_axis_thumb.png | Bin 0 -> 2277 bytes .../axes/measure_axis_label_alignment.md | 82 +++++++++ .../measure_axis_label_alignment_full.png | Bin 0 -> 5599 bytes .../measure_axis_label_alignment_thumb.png | Bin 0 -> 2996 bytes .../axes/nonzero_bound_measure_axis.md | 72 ++++++++ .../axes/nonzero_bound_measure_axis_full.png | Bin 0 -> 18019 bytes .../axes/nonzero_bound_measure_axis_thumb.png | Bin 0 -> 3756 bytes .../examples/axes/short_tick_length_axis.md | 75 +++++++++ .../axes/short_tick_length_axis_full.png | Bin 0 -> 5809 bytes .../axes/short_tick_length_axis_thumb.png | Bin 0 -> 2860 bytes .../axes/statically_provided_ticks.md | 94 +++++++++++ .../axes/statically_provided_ticks_full.png | Bin 0 -> 14415 bytes .../axes/statically_provided_ticks_thumb.png | Bin 0 -> 3434 bytes .../docs/examples/bar_charts/grouped.md | 88 ++++++++++ .../docs/examples/bar_charts/grouped_full.png | Bin 0 -> 10367 bytes .../examples/bar_charts/grouped_stacked.md | 133 +++++++++++++++ .../bar_charts/grouped_stacked_full.png | Bin 0 -> 11085 bytes .../bar_charts/grouped_stacked_thumb.png | Bin 0 -> 3850 bytes .../bar_charts/grouped_target_line.md | 137 +++++++++++++++ .../bar_charts/grouped_target_line_full.png | Bin 0 -> 11018 bytes .../bar_charts/grouped_target_line_thumb.png | Bin 0 -> 4255 bytes .../examples/bar_charts/grouped_thumb.png | Bin 0 -> 3313 bytes .../docs/examples/bar_charts/horizontal.md | 64 +++++++ .../bar_charts/horizontal_bar_label.md | 81 +++++++++ .../bar_charts/horizontal_bar_label_full.png | Bin 0 -> 16036 bytes .../bar_charts/horizontal_bar_label_thumb.png | Bin 0 -> 3894 bytes .../examples/bar_charts/horizontal_full.png | Bin 0 -> 5668 bytes .../horizontal_pattern_forward_hatch.md | 95 +++++++++++ .../horizontal_pattern_forward_hatch_full.png | Bin 0 -> 13928 bytes ...horizontal_pattern_forward_hatch_thumb.png | Bin 0 -> 5247 bytes .../examples/bar_charts/horizontal_thumb.png | Bin 0 -> 2899 bytes .../bar_charts/pattern_forward_hatch.md | 93 +++++++++++ .../bar_charts/pattern_forward_hatch_full.png | Bin 0 -> 12956 bytes .../pattern_forward_hatch_thumb.png | Bin 0 -> 4743 bytes .../docs/examples/bar_charts/simple.md | 63 +++++++ .../docs/examples/bar_charts/simple_full.png | Bin 0 -> 5209 bytes .../docs/examples/bar_charts/simple_thumb.png | Bin 0 -> 2459 bytes .../docs/examples/bar_charts/spark_bar.md | 93 +++++++++++ .../examples/bar_charts/spark_bar_full.png | Bin 0 -> 3616 bytes .../examples/bar_charts/spark_bar_thumb.png | Bin 0 -> 1844 bytes .../docs/examples/bar_charts/stacked.md | 89 ++++++++++ .../docs/examples/bar_charts/stacked_full.png | Bin 0 -> 5550 bytes .../examples/bar_charts/stacked_horizontal.md | 91 ++++++++++ .../bar_charts/stacked_horizontal_full.png | Bin 0 -> 12372 bytes .../bar_charts/stacked_horizontal_thumb.png | Bin 0 -> 3551 bytes .../bar_charts/stacked_target_line.md | 138 +++++++++++++++ .../bar_charts/stacked_target_line_full.png | Bin 0 -> 10715 bytes .../bar_charts/stacked_target_line_thumb.png | Bin 0 -> 3867 bytes .../examples/bar_charts/stacked_thumb.png | Bin 0 -> 2904 bytes .../docs/examples/i18ns/rtl_bar_chart.md | 79 +++++++++ .../examples/i18ns/rtl_bar_chart_full.png | Bin 0 -> 5714 bytes .../examples/i18ns/rtl_bar_chart_thumb.png | Bin 0 -> 2876 bytes .../docs/examples/i18ns/rtl_line_chart.md | 75 +++++++++ .../examples/i18ns/rtl_line_chart_full.png | Bin 0 -> 14720 bytes .../examples/i18ns/rtl_line_chart_thumb.png | Bin 0 -> 3476 bytes .../docs/examples/i18ns/rtl_series_legend.md | 127 ++++++++++++++ .../examples/i18ns/rtl_series_legend_full.png | Bin 0 -> 18788 bytes .../i18ns/rtl_series_legend_thumb.png | Bin 0 -> 4994 bytes .../interactions/selection_bar_highlight.md | 71 ++++++++ .../selection_bar_highlight_full.png | Bin 0 -> 4865 bytes .../selection_bar_highlight_thumb.png | Bin 0 -> 2480 bytes .../selection_callback_example.md | 149 +++++++++++++++++ .../selection_callback_example_full.png | Bin 0 -> 31094 bytes .../selection_callback_example_thumb.png | Bin 0 -> 6271 bytes .../interactions/selection_line_highlight.md | 81 +++++++++ .../selection_line_highlight_full.png | Bin 0 -> 15543 bytes .../selection_line_highlight_thumb.png | Bin 0 -> 3857 bytes .../examples/legends/legend_custom_symbol.md | 125 ++++++++++++++ .../legends/legend_custom_symbol_full.png | Bin 0 -> 18408 bytes .../legends/legend_custom_symbol_thumb.png | Bin 0 -> 5207 bytes .../docs/examples/legends/legend_options.md | 131 +++++++++++++++ .../examples/legends/legend_options_full.png | Bin 0 -> 17396 bytes .../examples/legends/legend_options_thumb.png | Bin 0 -> 5016 bytes .../examples/legends/simple_series_legend.md | 104 ++++++++++++ .../legends/simple_series_legend_full.png | Bin 0 -> 17554 bytes .../legends/simple_series_legend_thumb.png | Bin 0 -> 5223 bytes .../docs/examples/line_charts/dash_pattern.md | 91 ++++++++++ .../line_charts/dash_pattern_full.png | Bin 0 -> 26452 bytes .../line_charts/dash_pattern_thumb.png | Bin 0 -> 6216 bytes .../examples/line_charts/range_annotation.md | 71 ++++++++ .../line_charts/range_annotation_full.png | Bin 0 -> 16313 bytes .../line_charts/range_annotation_thumb.png | Bin 0 -> 3443 bytes .../docs/examples/line_charts/simple.md | 60 +++++++ .../docs/examples/line_charts/simple_full.png | Bin 0 -> 14794 bytes .../examples/line_charts/simple_thumb.png | Bin 0 -> 3484 bytes .../time_series_charts/range_annotation.md | 71 ++++++++ .../range_annotation_full.png | Bin 0 -> 17074 bytes .../range_annotation_thumb.png | Bin 0 -> 3836 bytes .../examples/time_series_charts/simple.md | 67 ++++++++ .../time_series_charts/simple_full.png | Bin 0 -> 17255 bytes .../time_series_charts/simple_thumb.png | Bin 0 -> 3784 bytes charts_flutter/docs/gallery.md | 70 ++++++++ 118 files changed, 3708 insertions(+) create mode 100644 charts_flutter/docs/examples/a11ys/domain_a11y_explore_bar_chart.md create mode 100644 charts_flutter/docs/examples/a11ys/domain_a11y_explore_bar_chart_full.png create mode 100644 charts_flutter/docs/examples/a11ys/domain_a11y_explore_bar_chart_thumb.png create mode 100644 charts_flutter/docs/examples/axes/bar_secondary_axis.md create mode 100644 charts_flutter/docs/examples/axes/bar_secondary_axis_full.png create mode 100644 charts_flutter/docs/examples/axes/bar_secondary_axis_only.md create mode 100644 charts_flutter/docs/examples/axes/bar_secondary_axis_only_full.png create mode 100644 charts_flutter/docs/examples/axes/bar_secondary_axis_only_thumb.png create mode 100644 charts_flutter/docs/examples/axes/bar_secondary_axis_thumb.png create mode 100644 charts_flutter/docs/examples/axes/custom_axis_tick_formatters.md create mode 100644 charts_flutter/docs/examples/axes/custom_axis_tick_formatters_full.png create mode 100644 charts_flutter/docs/examples/axes/custom_axis_tick_formatters_thumb.png create mode 100644 charts_flutter/docs/examples/axes/custom_font_size_and_color.md create mode 100644 charts_flutter/docs/examples/axes/custom_font_size_and_color_full.png create mode 100644 charts_flutter/docs/examples/axes/custom_font_size_and_color_thumb.png create mode 100644 charts_flutter/docs/examples/axes/custom_measure_tick_count.md create mode 100644 charts_flutter/docs/examples/axes/custom_measure_tick_count_full.png create mode 100644 charts_flutter/docs/examples/axes/custom_measure_tick_count_thumb.png create mode 100644 charts_flutter/docs/examples/axes/hidden_ticks_and_labels_axis.md create mode 100644 charts_flutter/docs/examples/axes/hidden_ticks_and_labels_axis_full.png create mode 100644 charts_flutter/docs/examples/axes/hidden_ticks_and_labels_axis_thumb.png create mode 100644 charts_flutter/docs/examples/axes/horizontal_bar_secondary_axis.md create mode 100644 charts_flutter/docs/examples/axes/horizontal_bar_secondary_axis_full.png create mode 100644 charts_flutter/docs/examples/axes/horizontal_bar_secondary_axis_thumb.png create mode 100644 charts_flutter/docs/examples/axes/integer_only_measure_axis.md create mode 100644 charts_flutter/docs/examples/axes/integer_only_measure_axis_full.png create mode 100644 charts_flutter/docs/examples/axes/integer_only_measure_axis_thumb.png create mode 100644 charts_flutter/docs/examples/axes/measure_axis_label_alignment.md create mode 100644 charts_flutter/docs/examples/axes/measure_axis_label_alignment_full.png create mode 100644 charts_flutter/docs/examples/axes/measure_axis_label_alignment_thumb.png create mode 100644 charts_flutter/docs/examples/axes/nonzero_bound_measure_axis.md create mode 100644 charts_flutter/docs/examples/axes/nonzero_bound_measure_axis_full.png create mode 100644 charts_flutter/docs/examples/axes/nonzero_bound_measure_axis_thumb.png create mode 100644 charts_flutter/docs/examples/axes/short_tick_length_axis.md create mode 100644 charts_flutter/docs/examples/axes/short_tick_length_axis_full.png create mode 100644 charts_flutter/docs/examples/axes/short_tick_length_axis_thumb.png create mode 100644 charts_flutter/docs/examples/axes/statically_provided_ticks.md create mode 100644 charts_flutter/docs/examples/axes/statically_provided_ticks_full.png create mode 100644 charts_flutter/docs/examples/axes/statically_provided_ticks_thumb.png create mode 100644 charts_flutter/docs/examples/bar_charts/grouped.md create mode 100644 charts_flutter/docs/examples/bar_charts/grouped_full.png create mode 100644 charts_flutter/docs/examples/bar_charts/grouped_stacked.md create mode 100644 charts_flutter/docs/examples/bar_charts/grouped_stacked_full.png create mode 100644 charts_flutter/docs/examples/bar_charts/grouped_stacked_thumb.png create mode 100644 charts_flutter/docs/examples/bar_charts/grouped_target_line.md create mode 100644 charts_flutter/docs/examples/bar_charts/grouped_target_line_full.png create mode 100644 charts_flutter/docs/examples/bar_charts/grouped_target_line_thumb.png create mode 100644 charts_flutter/docs/examples/bar_charts/grouped_thumb.png create mode 100644 charts_flutter/docs/examples/bar_charts/horizontal.md create mode 100644 charts_flutter/docs/examples/bar_charts/horizontal_bar_label.md create mode 100644 charts_flutter/docs/examples/bar_charts/horizontal_bar_label_full.png create mode 100644 charts_flutter/docs/examples/bar_charts/horizontal_bar_label_thumb.png create mode 100644 charts_flutter/docs/examples/bar_charts/horizontal_full.png create mode 100644 charts_flutter/docs/examples/bar_charts/horizontal_pattern_forward_hatch.md create mode 100644 charts_flutter/docs/examples/bar_charts/horizontal_pattern_forward_hatch_full.png create mode 100644 charts_flutter/docs/examples/bar_charts/horizontal_pattern_forward_hatch_thumb.png create mode 100644 charts_flutter/docs/examples/bar_charts/horizontal_thumb.png create mode 100644 charts_flutter/docs/examples/bar_charts/pattern_forward_hatch.md create mode 100644 charts_flutter/docs/examples/bar_charts/pattern_forward_hatch_full.png create mode 100644 charts_flutter/docs/examples/bar_charts/pattern_forward_hatch_thumb.png create mode 100644 charts_flutter/docs/examples/bar_charts/simple.md create mode 100644 charts_flutter/docs/examples/bar_charts/simple_full.png create mode 100644 charts_flutter/docs/examples/bar_charts/simple_thumb.png create mode 100644 charts_flutter/docs/examples/bar_charts/spark_bar.md create mode 100644 charts_flutter/docs/examples/bar_charts/spark_bar_full.png create mode 100644 charts_flutter/docs/examples/bar_charts/spark_bar_thumb.png create mode 100644 charts_flutter/docs/examples/bar_charts/stacked.md create mode 100644 charts_flutter/docs/examples/bar_charts/stacked_full.png create mode 100644 charts_flutter/docs/examples/bar_charts/stacked_horizontal.md create mode 100644 charts_flutter/docs/examples/bar_charts/stacked_horizontal_full.png create mode 100644 charts_flutter/docs/examples/bar_charts/stacked_horizontal_thumb.png create mode 100644 charts_flutter/docs/examples/bar_charts/stacked_target_line.md create mode 100644 charts_flutter/docs/examples/bar_charts/stacked_target_line_full.png create mode 100644 charts_flutter/docs/examples/bar_charts/stacked_target_line_thumb.png create mode 100644 charts_flutter/docs/examples/bar_charts/stacked_thumb.png create mode 100644 charts_flutter/docs/examples/i18ns/rtl_bar_chart.md create mode 100644 charts_flutter/docs/examples/i18ns/rtl_bar_chart_full.png create mode 100644 charts_flutter/docs/examples/i18ns/rtl_bar_chart_thumb.png create mode 100644 charts_flutter/docs/examples/i18ns/rtl_line_chart.md create mode 100644 charts_flutter/docs/examples/i18ns/rtl_line_chart_full.png create mode 100644 charts_flutter/docs/examples/i18ns/rtl_line_chart_thumb.png create mode 100644 charts_flutter/docs/examples/i18ns/rtl_series_legend.md create mode 100644 charts_flutter/docs/examples/i18ns/rtl_series_legend_full.png create mode 100644 charts_flutter/docs/examples/i18ns/rtl_series_legend_thumb.png create mode 100644 charts_flutter/docs/examples/interactions/selection_bar_highlight.md create mode 100644 charts_flutter/docs/examples/interactions/selection_bar_highlight_full.png create mode 100644 charts_flutter/docs/examples/interactions/selection_bar_highlight_thumb.png create mode 100644 charts_flutter/docs/examples/interactions/selection_callback_example.md create mode 100644 charts_flutter/docs/examples/interactions/selection_callback_example_full.png create mode 100644 charts_flutter/docs/examples/interactions/selection_callback_example_thumb.png create mode 100644 charts_flutter/docs/examples/interactions/selection_line_highlight.md create mode 100644 charts_flutter/docs/examples/interactions/selection_line_highlight_full.png create mode 100644 charts_flutter/docs/examples/interactions/selection_line_highlight_thumb.png create mode 100644 charts_flutter/docs/examples/legends/legend_custom_symbol.md create mode 100644 charts_flutter/docs/examples/legends/legend_custom_symbol_full.png create mode 100644 charts_flutter/docs/examples/legends/legend_custom_symbol_thumb.png create mode 100644 charts_flutter/docs/examples/legends/legend_options.md create mode 100644 charts_flutter/docs/examples/legends/legend_options_full.png create mode 100644 charts_flutter/docs/examples/legends/legend_options_thumb.png create mode 100644 charts_flutter/docs/examples/legends/simple_series_legend.md create mode 100644 charts_flutter/docs/examples/legends/simple_series_legend_full.png create mode 100644 charts_flutter/docs/examples/legends/simple_series_legend_thumb.png create mode 100644 charts_flutter/docs/examples/line_charts/dash_pattern.md create mode 100644 charts_flutter/docs/examples/line_charts/dash_pattern_full.png create mode 100644 charts_flutter/docs/examples/line_charts/dash_pattern_thumb.png create mode 100644 charts_flutter/docs/examples/line_charts/range_annotation.md create mode 100644 charts_flutter/docs/examples/line_charts/range_annotation_full.png create mode 100644 charts_flutter/docs/examples/line_charts/range_annotation_thumb.png create mode 100644 charts_flutter/docs/examples/line_charts/simple.md create mode 100644 charts_flutter/docs/examples/line_charts/simple_full.png create mode 100644 charts_flutter/docs/examples/line_charts/simple_thumb.png create mode 100644 charts_flutter/docs/examples/time_series_charts/range_annotation.md create mode 100644 charts_flutter/docs/examples/time_series_charts/range_annotation_full.png create mode 100644 charts_flutter/docs/examples/time_series_charts/range_annotation_thumb.png create mode 100644 charts_flutter/docs/examples/time_series_charts/simple.md create mode 100644 charts_flutter/docs/examples/time_series_charts/simple_full.png create mode 100644 charts_flutter/docs/examples/time_series_charts/simple_thumb.png create mode 100644 charts_flutter/docs/gallery.md diff --git a/charts_flutter/docs/examples/a11ys/domain_a11y_explore_bar_chart.md b/charts_flutter/docs/examples/a11ys/domain_a11y_explore_bar_chart.md new file mode 100644 index 000000000..89e02ef96 --- /dev/null +++ b/charts_flutter/docs/examples/a11ys/domain_a11y_explore_bar_chart.md @@ -0,0 +1,157 @@ +# Domain A11y Explore Bar Chart a11y Example + +![](domain_a11y_explore_bar_chart_full.png) + +Example: + +``` +/// Example of a bar chart with domain selection A11y behavior. +/// +/// The OS screen reader (TalkBack / VoiceOver) setting must be turned on, or +/// the behavior does not do anything. +/// +/// Note that the screenshot does not show any visual differences but when the +/// OS screen reader is enabled, the node that is being read out loud will be +/// surrounded by a rectangle. +/// +/// When [DomainA11yExploreBehavior] is added to the chart, the chart will +/// listen for the gesture that triggers "explore mode". +/// "Explore mode" creates semantic nodes for each domain value in the chart +/// with a description (customizable, defaults to domain value) and a bounding +/// box that surrounds the domain. +/// +/// These semantic node descriptions are read out loud by the OS screen reader +/// when the user taps within the bounding box, or when the user cycles through +/// the screen's elements (such as swiping left and right). +import 'package:charts_flutter/flutter.dart' as charts; +import 'package:flutter/material.dart'; + +class DomainA11yExploreBarChart extends StatelessWidget { + final List seriesList; + final bool animate; + + DomainA11yExploreBarChart(this.seriesList, {this.animate}); + + /// Creates a [BarChart] with sample data and no transition. + factory DomainA11yExploreBarChart.withSampleData() { + return new DomainA11yExploreBarChart( + _createSampleData(), + // Disable animations for image tests. + animate: false, + ); + } + + /// An example of how to generate a customized vocalization for + /// [DomainA11yExploreBehavior] from a list of [SeriesDatum]s. + /// + /// The list of series datums is for one domain. + /// + /// This example vocalizes the domain, then for each series that has that + /// domain, it vocalizes the series display name and the measure and a + /// description of that measure. + String vocalizeDomainAndMeasures( + List> seriesDatums) { + final buffer = new StringBuffer(); + + buffer.write(seriesDatums.first.datum.year); + + for (charts.SeriesDatum seriesDatum in seriesDatums) { + final series = seriesDatum.series; + final datum = seriesDatum.datum; + + buffer.write(' ${series.displayName} ' + '${datum.sales / 1000} thousand dollars'); + } + + return buffer.toString(); + } + + @override + Widget build(BuildContext context) { + return new Semantics( + // Describe your chart + label: 'Yearly sales bar chart', + // Optionally provide a hint for the user to know how to trigger + // explore mode. + hint: 'Press and hold to enable explore', + child: new charts.BarChart( + seriesList, + animate: animate, + // To prevent conflict with the select nearest behavior that uses the + // tap gesture, turn off default interactions. + defaultInteractions: false, + behaviors: [ + new charts.DomainA11yExploreBehavior( + // Callback for generating the message that is vocalized. + // An example of how to use is in [vocalizeDomainAndMeasures]. + // If none is set, the default only vocalizes the domain value. + vocalizationCallback: vocalizeDomainAndMeasures, + // The following settings are optional, but shown here for + // demonstration purchases. + // [exploreModeTrigger] Default is press and hold, can be + // changed to tap. + exploreModeTrigger: charts.ExploreModeTrigger.pressHold, + // [exploreModeEnabledAnnouncement] Optionally notify the OS + // when explore mode is enabled. + exploreModeEnabledAnnouncement: 'Explore mode enabled', + // [exploreModeDisabledAnnouncement] Optionally notify the OS + // when explore mode is disabled. + exploreModeDisabledAnnouncement: 'Explore mode disabled', + // [minimumWidth] Default and minimum is 1.0. This is the + // minimum width of the screen reader bounding box. The bounding + // box width is calculated based on the domain axis step size. + // Minimum width will be used if the step size is smaller. + minimumWidth: 1.0, + ), + // Optionally include domain highlighter as a behavior. + // This behavior is included in this example to show that when an + // a11y node has focus, the chart's internal selection model is + // also updated. + new charts.DomainHighlighter(charts.SelectionModelType.info), + ], + )); + } + + /// Create one series with sample hard coded data. + static List> _createSampleData() { + final mobileData = [ + new OrdinalSales('2014', 5), + new OrdinalSales('2015', 25), + new OrdinalSales('2016', 100), + new OrdinalSales('2017', 75), + ]; + + final tabletData = [ + // Purposely missing data to show that only measures that are available + // are vocalized. + new OrdinalSales('2016', 25), + new OrdinalSales('2017', 50), + ]; + + return [ + new charts.Series( + id: 'Mobile Sales', + colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault, + domainFn: (OrdinalSales sales, _) => sales.year, + measureFn: (OrdinalSales sales, _) => sales.sales, + data: mobileData, + ), + new charts.Series( + id: 'Tablet Sales', + colorFn: (_, __) => charts.MaterialPalette.red.shadeDefault, + domainFn: (OrdinalSales sales, _) => sales.year, + measureFn: (OrdinalSales sales, _) => sales.sales, + data: tabletData, + ) + ]; + } +} + +/// Sample ordinal data type. +class OrdinalSales { + final String year; + final int sales; + + OrdinalSales(this.year, this.sales); +} +``` diff --git a/charts_flutter/docs/examples/a11ys/domain_a11y_explore_bar_chart_full.png b/charts_flutter/docs/examples/a11ys/domain_a11y_explore_bar_chart_full.png new file mode 100644 index 0000000000000000000000000000000000000000..8fb805dc3aae8b42d9ec3444779da8cef4d64ad4 GIT binary patch literal 4914 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 hGLf) seriesList; + final bool animate; + + BarChartWithSecondaryAxis(this.seriesList, {this.animate}); + + factory BarChartWithSecondaryAxis.withSampleData() { + return new BarChartWithSecondaryAxis( + _createSampleData(), + // Disable animations for image tests. + animate: false, + ); + } + + @override + Widget build(BuildContext context) { + return new charts.BarChart( + seriesList, + animate: animate, + barGroupingType: charts.BarGroupingType.grouped, + // It is important when using both primary and secondary axes to choose + // the same number of ticks for both sides to get the gridlines to line + // up. + primaryMeasureAxis: new charts.NumericAxisSpec( + tickProviderSpec: + new charts.BasicNumericTickProviderSpec(desiredTickCount: 3)), + secondaryMeasureAxis: new charts.NumericAxisSpec( + tickProviderSpec: + new charts.BasicNumericTickProviderSpec(desiredTickCount: 3)), + ); + } + + /// Create series list with multiple series + static List> _createSampleData() { + final globalSalesData = [ + new OrdinalSales('2014', 5000), + new OrdinalSales('2015', 25000), + new OrdinalSales('2016', 100000), + new OrdinalSales('2017', 750000), + ]; + + final losAngelesSalesData = [ + new OrdinalSales('2014', 25), + new OrdinalSales('2015', 50), + new OrdinalSales('2016', 10), + new OrdinalSales('2017', 20), + ]; + + return [ + new charts.Series( + id: 'Global Revenue', + domainFn: (OrdinalSales sales, _) => sales.year, + measureFn: (OrdinalSales sales, _) => sales.sales, + data: globalSalesData, + ), + new charts.Series( + id: 'Los Angeles Revenue', + domainFn: (OrdinalSales sales, _) => sales.year, + measureFn: (OrdinalSales sales, _) => sales.sales, + data: losAngelesSalesData, + )..setAttribute(charts.measureAxisIdKey, secondaryMeasureAxisId) + // Set the 'Los Angeles Revenue' series to use the secondary measure axis. + // All series that have this set will use the secondary measure axis. + // All other series will use the primary measure axis. + ]; + } +} + +/// Sample ordinal data type. +class OrdinalSales { + final String year; + final int sales; + + OrdinalSales(this.year, this.sales); +} +``` diff --git a/charts_flutter/docs/examples/axes/bar_secondary_axis_full.png b/charts_flutter/docs/examples/axes/bar_secondary_axis_full.png new file mode 100644 index 0000000000000000000000000000000000000000..db74b1cbcb793e93e5ec3b43e698ea187ddf8296 GIT binary patch literal 12565 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 Ah5!Hn literal 0 HcmV?d00001 diff --git a/charts_flutter/docs/examples/axes/bar_secondary_axis_only.md b/charts_flutter/docs/examples/axes/bar_secondary_axis_only.md new file mode 100644 index 000000000..985e187ab --- /dev/null +++ b/charts_flutter/docs/examples/axes/bar_secondary_axis_only.md @@ -0,0 +1,72 @@ +# Bar Secondary Axis Only Axes Example + +![](bar_secondary_axis_only_full.png) + +Example: + +``` +/// Bar chart example +import 'package:flutter/material.dart'; +import 'package:charts_flutter/flutter.dart' as charts; + +/// Example of using only a secondary axis (on the right) for a set of grouped +/// bars. +/// +/// Both series plots using the secondary axis due to the measureAxisId of +/// secondaryMeasureAxisId. +/// +/// Note: secondary may flip left and right positioning when +/// RTL.flipAxisLocations is set. +class BarChartWithSecondaryAxisOnly extends StatelessWidget { + static const secondaryMeasureAxisId = 'secondaryMeasureAxisId'; + final List seriesList; + final bool animate; + + BarChartWithSecondaryAxisOnly(this.seriesList, {this.animate}); + + factory BarChartWithSecondaryAxisOnly.withSampleData() { + return new BarChartWithSecondaryAxisOnly( + _createSampleData(), + // Disable animations for image tests. + animate: false, + ); + } + + @override + Widget build(BuildContext context) { + return new charts.BarChart( + seriesList, + animate: animate, + ); + } + + /// Create series list with multiple series + static List> _createSampleData() { + final globalSalesData = [ + new OrdinalSales('2014', 500), + new OrdinalSales('2015', 2500), + new OrdinalSales('2016', 1000), + new OrdinalSales('2017', 7500), + ]; + + return [ + new charts.Series( + id: 'Global Revenue', + domainFn: (OrdinalSales sales, _) => sales.year, + measureFn: (OrdinalSales sales, _) => sales.sales, + data: globalSalesData, + ) + // Set series to use the secondary measure axis. + ..setAttribute(charts.measureAxisIdKey, secondaryMeasureAxisId), + ]; + } +} + +/// Sample ordinal data type. +class OrdinalSales { + final String year; + final int sales; + + OrdinalSales(this.year, this.sales); +} +``` diff --git a/charts_flutter/docs/examples/axes/bar_secondary_axis_only_full.png b/charts_flutter/docs/examples/axes/bar_secondary_axis_only_full.png new file mode 100644 index 0000000000000000000000000000000000000000..fbc1931f7888b7d9e390424eaa5c4c03d33d551e GIT binary patch literal 6052 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 E3yce_MF0Q* literal 0 HcmV?d00001 diff --git a/charts_flutter/docs/examples/axes/bar_secondary_axis_only_thumb.png b/charts_flutter/docs/examples/axes/bar_secondary_axis_only_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..c75ef8d838ec822ecae00d311e669382913f900e GIT binary patch literal 2873 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 SKReL~IsmqoIBcDTALTzv@Ie&- literal 0 HcmV?d00001 diff --git a/charts_flutter/docs/examples/axes/bar_secondary_axis_thumb.png b/charts_flutter/docs/examples/axes/bar_secondary_axis_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..fb66f83b1311456c6cb3082baff80f99f3054554 GIT binary patch literal 3407 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 nSwmY{x!(+R@t+K^0k?g seriesList; + final bool animate; + + CustomAxisTickFormatters(this.seriesList, {this.animate}); + + /// Creates a [TimeSeriesChart] with sample data and no transition. + factory CustomAxisTickFormatters.withSampleData() { + return new CustomAxisTickFormatters( + _createSampleData(), + // Disable animations for image tests. + animate: false, + ); + } + + @override + Widget build(BuildContext context) { + return new charts.TimeSeriesChart(seriesList, + animate: animate, + // Sets up a currency formatter for the measure axis. + primaryMeasureAxis: new charts.NumericAxisSpec( + tickFormatterSpec: new charts.BasicNumericTickFormatterSpec( + new NumberFormat.compactSimpleCurrency())), + + /// Customizes the date tick formatter. It will print the day of month + /// as the default format, but include the month and year if it + /// transitions to a new month. + /// + /// minute, hour, day, month, and year are all provided by default and + /// you can override them following this pattern. + domainAxis: new charts.DateTimeAxisSpec( + tickFormatterSpec: new charts.AutoDateTimeTickFormatterSpec( + day: new charts.TimeFormatterSpec( + format: 'd', transitionFormat: 'MM/dd/yyyy')))); + } + + /// Create one series with sample hard coded data. + static List> _createSampleData() { + final data = [ + new MyRow(new DateTime(2017, 9, 25), 6), + new MyRow(new DateTime(2017, 9, 26), 8), + new MyRow(new DateTime(2017, 9, 27), 6), + new MyRow(new DateTime(2017, 9, 28), 9), + new MyRow(new DateTime(2017, 9, 29), 11), + new MyRow(new DateTime(2017, 9, 30), 15), + new MyRow(new DateTime(2017, 10, 01), 25), + new MyRow(new DateTime(2017, 10, 02), 33), + new MyRow(new DateTime(2017, 10, 03), 27), + new MyRow(new DateTime(2017, 10, 04), 31), + new MyRow(new DateTime(2017, 10, 05), 23), + ]; + + return [ + new charts.Series( + id: 'Cost', + domainFn: (MyRow row, _) => row.timeStamp, + measureFn: (MyRow row, _) => row.cost, + data: data, + ) + ]; + } +} + +/// Sample time series data type. +class MyRow { + final DateTime timeStamp; + final int cost; + MyRow(this.timeStamp, this.cost); +} +``` diff --git a/charts_flutter/docs/examples/axes/custom_axis_tick_formatters_full.png b/charts_flutter/docs/examples/axes/custom_axis_tick_formatters_full.png new file mode 100644 index 0000000000000000000000000000000000000000..51e744bb4e2acfd411558ed9532baec6e432681a GIT binary patch literal 21930 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 W?-RC7e5k|;G+&?nyDPn;PW}m*5SFz7 literal 0 HcmV?d00001 diff --git a/charts_flutter/docs/examples/axes/custom_axis_tick_formatters_thumb.png b/charts_flutter/docs/examples/axes/custom_axis_tick_formatters_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..057b7bf41791eb44b98a4626370b05bb0119632e GIT binary patch literal 4405 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 Iiq_%(1H$`R0{{R3 literal 0 HcmV?d00001 diff --git a/charts_flutter/docs/examples/axes/custom_font_size_and_color.md b/charts_flutter/docs/examples/axes/custom_font_size_and_color.md new file mode 100644 index 000000000..8d9d5eb24 --- /dev/null +++ b/charts_flutter/docs/examples/axes/custom_font_size_and_color.md @@ -0,0 +1,96 @@ +# Custom Font Size And Color Axes Example + +![](custom_font_size_and_color_full.png) + +Example: + +``` +/// Custom Font Style Example +import 'package:flutter/material.dart'; +import 'package:charts_flutter/flutter.dart' as charts; + +/// Example of using a custom primary measure and domain axis replacing the +/// renderSpec with one with a custom font size and a custom color. +/// +/// There are many axis styling options in the SmallTickRenderer allowing you +/// to customize the font, tick lengths, and offsets. +class CustomFontSizeAndColor extends StatelessWidget { + final List seriesList; + final bool animate; + + CustomFontSizeAndColor(this.seriesList, {this.animate}); + + factory CustomFontSizeAndColor.withSampleData() { + return new CustomFontSizeAndColor( + _createSampleData(), + // Disable animations for image tests. + animate: false, + ); + } + + @override + Widget build(BuildContext context) { + return new charts.BarChart( + seriesList, + animate: animate, + + /// Assign a custom style for the domain axis. + /// + /// This is an OrdinalAxisSpec to match up with BarChart's default + /// ordinal domain axis (use NumericAxisSpec or DateTimeAxisSpec for + /// other charts). + domainAxis: new charts.OrdinalAxisSpec( + renderSpec: new charts.SmallTickRendererSpec( + + // Tick and Label styling here. + labelStyle: new charts.TextStyleSpec( + fontSize: 18, // size in Pts. + color: charts.MaterialPalette.black), + + // Change the line colors to match text color. + lineStyle: new charts.LineStyleSpec( + color: charts.MaterialPalette.black))), + + /// Assign a custom style for the measure axis. + primaryMeasureAxis: new charts.NumericAxisSpec( + renderSpec: new charts.GridlineRendererSpec( + + // Tick and Label styling here. + labelStyle: new charts.TextStyleSpec( + fontSize: 18, // size in Pts. + color: charts.MaterialPalette.black), + + // Change the line colors to match text color. + lineStyle: new charts.LineStyleSpec( + color: charts.MaterialPalette.black))), + ); + } + + /// Create series list with single series + static List> _createSampleData() { + final globalSalesData = [ + new OrdinalSales('2014', 5000), + new OrdinalSales('2015', 25000), + new OrdinalSales('2016', 100000), + new OrdinalSales('2017', 750000), + ]; + + return [ + new charts.Series( + id: 'Global Revenue', + domainFn: (OrdinalSales sales, _) => sales.year, + measureFn: (OrdinalSales sales, _) => sales.sales, + data: globalSalesData, + ), + ]; + } +} + +/// Sample ordinal data type. +class OrdinalSales { + final String year; + final int sales; + + OrdinalSales(this.year, this.sales); +} +``` diff --git a/charts_flutter/docs/examples/axes/custom_font_size_and_color_full.png b/charts_flutter/docs/examples/axes/custom_font_size_and_color_full.png new file mode 100644 index 0000000000000000000000000000000000000000..33d1d24e213436e97e20adbc5ec9b00511c8f113 GIT binary patch literal 13775 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 literal 0 HcmV?d00001 diff --git a/charts_flutter/docs/examples/axes/custom_font_size_and_color_thumb.png b/charts_flutter/docs/examples/axes/custom_font_size_and_color_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..83557979509ce393679cf78cf0fa29b9cd122237 GIT binary patch literal 4253 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 r@(4IgTvlFOT=v)_KOHZTJHE> literal 0 HcmV?d00001 diff --git a/charts_flutter/docs/examples/axes/custom_measure_tick_count.md b/charts_flutter/docs/examples/axes/custom_measure_tick_count.md new file mode 100644 index 000000000..6438f5e4a --- /dev/null +++ b/charts_flutter/docs/examples/axes/custom_measure_tick_count.md @@ -0,0 +1,75 @@ +# Custom Measure Tick Count Axes Example + +![](custom_measure_tick_count_full.png) + +Example: + +``` +/// Example of timeseries chart with a custom number of ticks +/// +/// The tick count can be set by setting the [desiredMinTickCount] and +/// [desiredMaxTickCount] for automatically adjusted tick counts (based on +/// how 'nice' the ticks are) or [desiredTickCount] for a fixed tick count. +import 'package:charts_flutter/flutter.dart' as charts; +import 'package:flutter/material.dart'; + +class CustomMeasureTickCount extends StatelessWidget { + final List seriesList; + final bool animate; + + CustomMeasureTickCount(this.seriesList, {this.animate}); + + /// Creates a [TimeSeriesChart] with sample data and no transition. + factory CustomMeasureTickCount.withSampleData() { + return new CustomMeasureTickCount( + _createSampleData(), + // Disable animations for image tests. + animate: false, + ); + } + + @override + Widget build(BuildContext context) { + return new charts.TimeSeriesChart(seriesList, + animate: animate, + + /// Customize the measure axis to have 2 ticks, + primaryMeasureAxis: new charts.NumericAxisSpec( + tickProviderSpec: + new charts.BasicNumericTickProviderSpec(desiredTickCount: 2))); + } + + /// Create one series with sample hard coded data. + static List> _createSampleData() { + final data = [ + new MyRow(new DateTime(2017, 9, 25), 6), + new MyRow(new DateTime(2017, 9, 26), 8), + new MyRow(new DateTime(2017, 9, 27), 6), + new MyRow(new DateTime(2017, 9, 28), 9), + new MyRow(new DateTime(2017, 9, 29), 11), + new MyRow(new DateTime(2017, 9, 30), 15), + new MyRow(new DateTime(2017, 10, 01), 25), + new MyRow(new DateTime(2017, 10, 02), 33), + new MyRow(new DateTime(2017, 10, 03), 27), + new MyRow(new DateTime(2017, 10, 04), 31), + new MyRow(new DateTime(2017, 10, 05), 23), + ]; + + return [ + new charts.Series( + id: 'Cost', + domainFn: (MyRow row, _) => row.timeStamp, + measureFn: (MyRow row, _) => row.cost, + data: data, + ) + ]; + } +} + +/// Sample time series data type. +class MyRow { + final DateTime timeStamp; + final int cost; + MyRow(this.timeStamp, this.cost); +} +``` diff --git a/charts_flutter/docs/examples/axes/custom_measure_tick_count_full.png b/charts_flutter/docs/examples/axes/custom_measure_tick_count_full.png new file mode 100644 index 0000000000000000000000000000000000000000..90933c08a626ea92fc3de1e5da042b3413e7c862 GIT binary patch literal 16976 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 literal 0 HcmV?d00001 diff --git a/charts_flutter/docs/examples/axes/custom_measure_tick_count_thumb.png b/charts_flutter/docs/examples/axes/custom_measure_tick_count_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..189e449023d65cebf1cad5b4d034dd4a4300cfaf GIT binary patch literal 3628 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

4cRC!e_SDZ<(+(P}Ug6nkxUDsnsms zOHNMd4eUTPhXqX=mOp`Qs2Uz$0KzYEiK@+uf((cNg~9~vfUzT+)_yQ|_KiQp*An96 z&k*t8@l0AbVfR7zN5gWq9F>Cw*!59tTxp^$X(VYy-wv~!9*Gy92HGzS87-7ZTmnZ73e0lZI9C{Bo4nd3r z4d6kya03N_e|BOaNOV(LjOeOJ&Xt-WSkvl@?3?x64dG`Su*K-rWBN9b#swk01rU}V zp|O4vOJG)f+iV(P_OPYS7#gA}hN<~M^s>81hnoZ0w>KbW(7qa0o*xF(Mn0GtG)fFL zm`FO5l9qTOtfse!qmlmPe92_}+FTdZ$r1#wXi$5xq7e0z1YK;z)6*_xdcZuqJ~?y~ z$H;jF&v!Y{x0rndW}nV*;pNZFig1nYc^?KguRShR9<&ev5}+Cn+8CgE zl!F&D-v>_!$zbd4K`dX=DDFe=^4Oq!zBVA2sJkfu(1^QX#-WvL46n9z_==l6LU|C2 zT|dWu`SLX8$%H686jSX6eY)4=)e?HIfzt5BHDaj4qY1=9%_R6vI1X+6RkGHBpvJay?( z7B~XSGyNG6!gvW>8W?!SMAY|ZtNKBnmJ~|P%R>_wz}xkS4TR!|6v0o$;FQ^ytAA^9 z;IBbDW*>e%?;dn|;ymwr1g8XniflCA0u~;`Ww=l90rqujx;X`2Q74woutF{QHrP6! zc$Nw(-%CwBT|O{uWoo(~Lm7_;_9hug|6H*97W!6}Fz*?|`?W`ZJ)-pb*I z_0EP+v+IyJ);(yLY>e7Z1ur1nq0d-jk%xPVxy`iG&V6f4YxL>t#Kc6BT@Uzw5T(ci z6Kx;!M~*5V?$#gO+}y4Sd*Qr-sD%aJHgYyZg3p&oK(U@X#sO2;K%X77QhXnj@z`T9YjM$s zP%}8Y{M879sm6t7O(eZ}0P;oW4V8uA;a-3f^iiGDG-=6=p7rW(PP=Ncb}i{ zfLwS!$|Hg0fScBdWi9eE8GQ}C;B7+OCJ*k5(aeI-Oip%Mm@WE6q5nCD)K4WpfQ%IM zs_8BxjUH6h2J^zBzf{M)uh0S(Ej9Sl1JYXl23#;>X(|J*il){91d(4F&HB4a|T$mj`6h^;N7S8iwy?Ln@pBZYCCrf($_-)YAM5DB)Ce9 zfMF-FIetWN9)%OtcOl~_bEj*{9DotMERFekW#dMK^r$LzLOI?W(d2@7Ghv9S#Su=P z#ivZ8>Z=TuzQP3_(c@|V!UO+{|EI+YnfQQ#b*Gs|w^#?LSWj?_N5R8uD KsY0!D*Zu<;9A#|) literal 0 HcmV?d00001 diff --git a/charts_flutter/docs/examples/axes/horizontal_bar_secondary_axis_thumb.png b/charts_flutter/docs/examples/axes/horizontal_bar_secondary_axis_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..b13edcd53e3059760d662136efb59c77d9b41dd3 GIT binary patch literal 3275 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 literal 0 HcmV?d00001 diff --git a/charts_flutter/docs/examples/axes/integer_only_measure_axis.md b/charts_flutter/docs/examples/axes/integer_only_measure_axis.md new file mode 100644 index 000000000..770898c10 --- /dev/null +++ b/charts_flutter/docs/examples/axes/integer_only_measure_axis.md @@ -0,0 +1,82 @@ +# Integer Only Measure Axis Axes Example + +![](integer_only_measure_axis_full.png) + +Example: + +``` +/// Example of timeseries chart forcing the measure axis to have whole number +/// ticks. This is useful if the measure units don't make sense to present as +/// fractional. +/// +/// This is done by customizing the measure axis and setting +/// [dataIsInWholeNumbers] on the tick provider. +import 'package:charts_flutter/flutter.dart' as charts; +import 'package:flutter/material.dart'; + +class IntegerOnlyMeasureAxis extends StatelessWidget { + final List seriesList; + final bool animate; + + IntegerOnlyMeasureAxis(this.seriesList, {this.animate}); + + /// Creates a [TimeSeriesChart] with sample data and no transition. + factory IntegerOnlyMeasureAxis.withSampleData() { + return new IntegerOnlyMeasureAxis( + _createSampleData(), + // Disable animations for image tests. + animate: false, + ); + } + + @override + Widget build(BuildContext context) { + return new charts.TimeSeriesChart( + seriesList, + animate: animate, + // Provides a custom axis ensuring that the ticks are in whole numbers. + primaryMeasureAxis: new charts.NumericAxisSpec( + tickProviderSpec: new charts.BasicNumericTickProviderSpec( + // Make sure we don't have values less than 1 as ticks + // (ie: counts). + dataIsInWholeNumbers: true, + // Fixed tick count to highlight the integer only behavior + // generating ticks [0, 1, 2, 3, 4]. + desiredTickCount: 5)), + ); + } + + /// Create one series with sample hard coded data. + static List> _createSampleData() { + final data = [ + new MyRow(new DateTime(2017, 9, 25), 0), + new MyRow(new DateTime(2017, 9, 26), 0), + new MyRow(new DateTime(2017, 9, 27), 0), + new MyRow(new DateTime(2017, 9, 28), 0), + new MyRow(new DateTime(2017, 9, 29), 0), + new MyRow(new DateTime(2017, 9, 30), 0), + new MyRow(new DateTime(2017, 10, 01), 1), + new MyRow(new DateTime(2017, 10, 02), 1), + new MyRow(new DateTime(2017, 10, 03), 1), + new MyRow(new DateTime(2017, 10, 04), 1), + new MyRow(new DateTime(2017, 10, 05), 1), + ]; + + return [ + new charts.Series( + id: 'Headcount', + domainFn: (MyRow row, _) => row.timeStamp, + measureFn: (MyRow row, _) => row.headcount, + data: data, + ) + ]; + } +} + +/// Sample time series data type. +class MyRow { + final DateTime timeStamp; + final int headcount; + MyRow(this.timeStamp, this.headcount); +} +``` diff --git a/charts_flutter/docs/examples/axes/integer_only_measure_axis_full.png b/charts_flutter/docs/examples/axes/integer_only_measure_axis_full.png new file mode 100644 index 0000000000000000000000000000000000000000..cb283d2771a39230426df34fcaa32dc9b202cca4 GIT binary patch literal 10503 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 literal 0 HcmV?d00001 diff --git a/charts_flutter/docs/examples/axes/integer_only_measure_axis_thumb.png b/charts_flutter/docs/examples/axes/integer_only_measure_axis_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..d894a93d6362e1a6b6548a0c9a63305e3c821e13 GIT binary patch literal 2277 zcmZ`)c|4R`AAe+D%93T$FcM+1%pgfq_F?Si+8SivX6$5{43aP{G=^6sM5r6GUz3@! zH>HcFP?kcjx~}YN8N5%Q&-=&w-p_l_^Eu~xe!u7Ze$P4I^L)=CJJ?wq7LpYL0N^mj z(hLh?8Ccx~_`r6fD0>?Oo*-jeV*qH#5$5>tg0_O6CDs-Ih^GJ`H5~wcfUeX(0pJP( z0RHj@0E2q~AQM^q+z|!7;PbV%Far*LK4pw*D(Df6K%-+o{8?b&z%~c4!yk*WHRu1# zEg~k)hiY7r1YLr0k;XwFmH_~lATT*dDg=jhV9bo262=!l4n(+LI>uUErfrXBFM6=Z z)aHj;m`wOX+p2s^a|_?=>Ait2QkGdGoeHZmD;@RM#M5}y-RcjKtrS`$ge8@RCC44# z>60ghXAHvja(6Z-dlc`Gsd`!uKB(B14D}~A!MqM)2QM&l?42su2mv3mUpo-hiUDpo zOBng&^EkLEb4j}V#~djET5%f9qpb@PL1q>}58{udkL@)zHPiaq`Zt%>TO(8}-8?)V zIlyx!=z0N3Q|Mer zX%~vTcp2c!_Qc2QbZ!b z-|_AJ#gn~Jczy@9zVUHcQP{;t9-7ty=Jw6^#cv~>;8JVfQ8+^QCpsC4E;`!l8vVv- zlzlj6Y4Th&&0}`~Arhi1+gf^k2RP>EU?qO5@5p=c!}V=#S;!1Gb-vVD{f*7dv1HB9 zk_*9>VS4wSo;v^7-K~`J+URvZUp_~--{>##vFlbLV!mAZJ9U3!@~7DnlsQafgtwoH z%7|_DyFlE?O1e0df7-Q;xC!@xjMv#0N6X2vWwb7v5o~K+xLeV^flVRp=+$djE4k!b zmswG&`Bpr}or@E{O~}>OEsQ72gA;>rSyxJ|CKO|zn5Co`TB)IicH!Gvy-WjHY{1pa zY=T_ReUQ>3y68Xg_}?sldT#zqjPaH!U6WVtpt{2O9#iMlq3Mb6{8CJjyW7J(E^IK~ z&^!wM0f=+w$X^p1%_9oZ`J$!FYXjPIm)4*Vd$sc2=DawOm_i%AsqKk}Ixk*IGgvlU zDgClbj1^0k-7+E=Fcc~sXuGW>xh%`t`n`#pn|o0+c&vOofhM%ilwHd?z$fo(WE=Zg9IyW^Vk%stoZL7-O{%4==jvn(Hy z96J!8SosHiSxzaHWuunhti!=yUjG#@NheM7^c$w{cNu<+Zw$kaut z(AN`Uq! z8%^N(zC>aXo9zf?ohThTdIxy2NieGkvpB;HRZ;Aa*AYA_nFC=(y}`xLA)&Qr3T-mx<^sUOd7C6b=EM|p>aicD=|s^9S#dy|x_^L)d??u6>SURgnue5Ke`KN-P~5+>?~wn@=6sFoMA zcb&dfll#g)((|{yQUN;?Mmyn|%TtKoV<&iMXlQIDdh@T5)6~~VB zW9skgJpGcAicKCGX%_ee2WKUq27ml8DA4k%>gbqSlB|)Wd1P;HUdhPJ6zsW+t9`Mv zli*r)YnvUc>xRQAO5cjw=Oq5Cpa4^eh4_J)MUEW7s!OwRI{Nwvhks+xTZ~%>Q5$4#*LCB zvcFDzOIpm?W5%bbH_3>?dt2j~n3LeGrSN_t-T8o9*i~)Mg?yS0-s{S-=5De6KCuA? ze$fFS0NMzoz6L@^1F7wV)H6VyH9+WTAix&ka+|mRe*(fH{6hj0|2aT~&4>d70F1ev KS)GY@+P?t>jSflx literal 0 HcmV?d00001 diff --git a/charts_flutter/docs/examples/axes/measure_axis_label_alignment.md b/charts_flutter/docs/examples/axes/measure_axis_label_alignment.md new file mode 100644 index 000000000..47addf5ae --- /dev/null +++ b/charts_flutter/docs/examples/axes/measure_axis_label_alignment.md @@ -0,0 +1,82 @@ +# Measure Axis Label Alignment Axes Example + +![](measure_axis_label_alignment_full.png) + +Example: + +``` +/// Custom Tick Label Alignment Example +import 'package:flutter/material.dart'; +import 'package:charts_flutter/flutter.dart' as charts; + +/// Example of using a custom primary measure replacing the renderSpec with one +/// that aligns the text under the tick and left justifies. +class MeasureAxisLabelAlignment extends StatelessWidget { + final List seriesList; + final bool animate; + + MeasureAxisLabelAlignment(this.seriesList, {this.animate}); + + factory MeasureAxisLabelAlignment.withSampleData() { + return new MeasureAxisLabelAlignment( + _createSampleData(), + // Disable animations for image tests. + animate: false, + ); + } + + @override + Widget build(BuildContext context) { + return new charts.BarChart( + seriesList, + animate: animate, + + /// Customize the primary measure axis using a small tick renderer. + /// Use String instead of num for ordinal domain axis + /// (typically bar charts). + primaryMeasureAxis: new charts.NumericAxisSpec( + renderSpec: new charts.GridlineRendererSpec( + // Display the measure axis labels below the gridline. + // + // 'Before' & 'after' follow the axis value direction. + // Vertical axes draw 'before' below & 'after' above the tick. + // Horizontal axes draw 'before' left & 'after' right the tick. + labelAnchor: charts.TickLabelAnchor.before, + + // Left justify the text in the axis. + // + // Note: outside means that the secondary measure axis would right + // justify. + labelJustification: charts.TickLabelJustification.outside, + )), + ); + } + + /// Create series list with single series + static List> _createSampleData() { + final globalSalesData = [ + new OrdinalSales('2014', 5000), + new OrdinalSales('2015', 25000), + new OrdinalSales('2016', 100000), + new OrdinalSales('2017', 750000), + ]; + + return [ + new charts.Series( + id: 'Global Revenue', + domainFn: (OrdinalSales sales, _) => sales.year, + measureFn: (OrdinalSales sales, _) => sales.sales, + data: globalSalesData, + ), + ]; + } +} + +/// Sample ordinal data type. +class OrdinalSales { + final String year; + final int sales; + + OrdinalSales(this.year, this.sales); +} +``` diff --git a/charts_flutter/docs/examples/axes/measure_axis_label_alignment_full.png b/charts_flutter/docs/examples/axes/measure_axis_label_alignment_full.png new file mode 100644 index 0000000000000000000000000000000000000000..ff94c98589a537269d32b4a005b0527d1e5ae7da GIT binary patch literal 5599 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 literal 0 HcmV?d00001 diff --git a/charts_flutter/docs/examples/axes/measure_axis_label_alignment_thumb.png b/charts_flutter/docs/examples/axes/measure_axis_label_alignment_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..393fe38f8c9678ce501c305aa84134ebd9bbe0c8 GIT binary patch literal 2996 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 ayAbGi>Axo=^WP%D1i;eF23wEuy7~|Ig?=vp literal 0 HcmV?d00001 diff --git a/charts_flutter/docs/examples/axes/nonzero_bound_measure_axis.md b/charts_flutter/docs/examples/axes/nonzero_bound_measure_axis.md new file mode 100644 index 000000000..f95cbd884 --- /dev/null +++ b/charts_flutter/docs/examples/axes/nonzero_bound_measure_axis.md @@ -0,0 +1,72 @@ +# Nonzero Bound Measure Axis Axes Example + +![](nonzero_bound_measure_axis_full.png) + +Example: + +``` +/// Example of timeseries chart that has a measure axis that does NOT include +/// zero. It starts at 100 and goes to 140. +import 'package:charts_flutter/flutter.dart' as charts; +import 'package:flutter/material.dart'; + +class NonzeroBoundMeasureAxis extends StatelessWidget { + final List seriesList; + final bool animate; + + NonzeroBoundMeasureAxis(this.seriesList, {this.animate}); + + /// Creates a [TimeSeriesChart] with sample data and no transition. + factory NonzeroBoundMeasureAxis.withSampleData() { + return new NonzeroBoundMeasureAxis( + _createSampleData(), + // Disable animations for image tests. + animate: false, + ); + } + + @override + Widget build(BuildContext context) { + return new charts.TimeSeriesChart(seriesList, + animate: animate, + // Provide a tickProviderSpec which does NOT require that zero is + // included. + primaryMeasureAxis: new charts.NumericAxisSpec( + tickProviderSpec: + new charts.BasicNumericTickProviderSpec(zeroBound: false))); + } + + /// Create one series with sample hard coded data. + static List> _createSampleData() { + final data = [ + new MyRow(new DateTime(2017, 9, 25), 106), + new MyRow(new DateTime(2017, 9, 26), 108), + new MyRow(new DateTime(2017, 9, 27), 106), + new MyRow(new DateTime(2017, 9, 28), 109), + new MyRow(new DateTime(2017, 9, 29), 111), + new MyRow(new DateTime(2017, 9, 30), 115), + new MyRow(new DateTime(2017, 10, 01), 125), + new MyRow(new DateTime(2017, 10, 02), 133), + new MyRow(new DateTime(2017, 10, 03), 127), + new MyRow(new DateTime(2017, 10, 04), 131), + new MyRow(new DateTime(2017, 10, 05), 123), + ]; + + return [ + new charts.Series( + id: 'Headcount', + domainFn: (MyRow row, _) => row.timeStamp, + measureFn: (MyRow row, _) => row.headcount, + data: data, + ) + ]; + } +} + +/// Sample time series data type. +class MyRow { + final DateTime timeStamp; + final int headcount; + MyRow(this.timeStamp, this.headcount); +} +``` diff --git a/charts_flutter/docs/examples/axes/nonzero_bound_measure_axis_full.png b/charts_flutter/docs/examples/axes/nonzero_bound_measure_axis_full.png new file mode 100644 index 0000000000000000000000000000000000000000..e571787658d5ee282b612ac9dd68fba2991965e2 GIT binary patch literal 18019 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 literal 0 HcmV?d00001 diff --git a/charts_flutter/docs/examples/axes/nonzero_bound_measure_axis_thumb.png b/charts_flutter/docs/examples/axes/nonzero_bound_measure_axis_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..347d4308b56cc679b5640e26675ee1d69035436a GIT binary patch literal 3756 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 literal 0 HcmV?d00001 diff --git a/charts_flutter/docs/examples/axes/short_tick_length_axis.md b/charts_flutter/docs/examples/axes/short_tick_length_axis.md new file mode 100644 index 000000000..9367c5717 --- /dev/null +++ b/charts_flutter/docs/examples/axes/short_tick_length_axis.md @@ -0,0 +1,75 @@ +# Short Tick Length Axis Axes Example + +![](short_tick_length_axis_full.png) + +Example: + +``` +/// Custom Tick Style Example +import 'package:flutter/material.dart'; +import 'package:charts_flutter/flutter.dart' as charts; + +/// Example of using a custom primary measure axis replacing the default +/// gridline rendering with a short tick rendering. It also turns on the axis +/// line so that the ticks have something to line up against. +/// +/// There are many axis styling options in the SmallTickRenderer allowing you +/// to customize the font, tick lengths, and offsets. +class ShortTickLengthAxis extends StatelessWidget { + final List seriesList; + final bool animate; + + ShortTickLengthAxis(this.seriesList, {this.animate}); + + factory ShortTickLengthAxis.withSampleData() { + return new ShortTickLengthAxis( + _createSampleData(), + // Disable animations for image tests. + animate: false, + ); + } + + @override + Widget build(BuildContext context) { + return new charts.BarChart( + seriesList, + animate: animate, + + /// Customize the primary measure axis using a small tick renderer. + /// Note: use String instead of num for ordinal domain axis + /// (typically bar charts). + primaryMeasureAxis: new charts.NumericAxisSpec( + renderSpec: new charts.SmallTickRendererSpec( + // Tick and Label styling here. + )), + ); + } + + /// Create series list with single series + static List> _createSampleData() { + final globalSalesData = [ + new OrdinalSales('2014', 5000), + new OrdinalSales('2015', 25000), + new OrdinalSales('2016', 100000), + new OrdinalSales('2017', 750000), + ]; + + return [ + new charts.Series( + id: 'Global Revenue', + domainFn: (OrdinalSales sales, _) => sales.year, + measureFn: (OrdinalSales sales, _) => sales.sales, + data: globalSalesData, + ), + ]; + } +} + +/// Sample ordinal data type. +class OrdinalSales { + final String year; + final int sales; + + OrdinalSales(this.year, this.sales); +} +``` diff --git a/charts_flutter/docs/examples/axes/short_tick_length_axis_full.png b/charts_flutter/docs/examples/axes/short_tick_length_axis_full.png new file mode 100644 index 0000000000000000000000000000000000000000..7878d338ccb739492414b3806fd06daa1bbb9178 GIT binary patch literal 5809 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 literal 0 HcmV?d00001 diff --git a/charts_flutter/docs/examples/axes/short_tick_length_axis_thumb.png b/charts_flutter/docs/examples/axes/short_tick_length_axis_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..b68c963c60b82cfa78534e36ba36e86f89b5bbf4 GIT binary patch literal 2860 zcmb7GdpK0<8voo!O*JH@LX>Q5GHP;b5)A4moYL#rc_4AxP);{b`%Xe z*M=s=w#9VWHFl#Y9OO>OwX@p)oU_mK>_5)8*7|uM3 zQ=C%wc)y(ux)u$l568M&rwu0BO{RY8>-1^ED!&)6=b-RH_df%CJhtd`sap^D6LlZPsb;!9ZpdG7)q`EZZ`dDZcr^SgKNkYpxD z*t;GlAu=eTd$&Vy?xY7lz_y=g4)(|n5{`s75o^vL-tCdy{%N+RZL^unjib?E zU?ki_u;{Gii^QpC^4udo8AyuclKs9S*)z*z7s+C+H?KhP{wBU0v3X@D{M~W};S> zXkvnPH}?Gs35<$S^+f$!JNJnReYtvK43d1Jo2x5G&~ts@x`H!iQwaua`-M3<^5oo5 zr)RI{q0Wz?!d+2mW+9tB%VY*==}#s)Twyb93L{9)dG$$i|WhBSG;*3@n{y}!B#y#gsV$F|LT|GTBbL?g&e>5#E z?aeqEj5W75HQlyVzw%;PqTdhQF%;JFVF|-WF}YkWWR1+so$V-iJBhimzQCWOJ$9{n z8}P^vy($c8GrD=8zhh=AjZ8j}VWp_7Y;(&TR>BHTv9{6d$VGgPDb(%;Pmn{&fx`Nr zwfcxdxzd{2t1o zoFVyF4eSV>tyO-0J`@<)zWfD{fT(S4oo)`U5uC;2eV8)X`4x--eHoM15bjNk@k$4# zx732QwgOK_?6t~DrXB+^(9SOmge-ezlvkR%DmGWzJ_<{WyNT%gKftPAIs1}ODxu3V zzE#iY*@+zo80x$_@nzBR$;lVB_aWydxgOHhooH^Yt(8s1?M=NpWH=t#{L1f+lO`CW zwp_s`Cds*r=QMgK?}O#V`C;jD zwBq&%>60bt{&|daYRkr=z$>;;Ar+^qtK0qw1-`CrnC};PdUAYI#Xpa_7}9|>NWR%Q zlo@t(Kn(O}FV!z-H;TM&xy;>*acAsoZM&wR^xw7T?=gEv*!zT?q`f4&g!|cYQv{Yc z;4{ff`@Z-^JwMi)HwBMxrY0ArUggcx?P zVQ}XCLCnl*Yc#)Lytm&!TCylkYM1DmqUu9_lgB;`r--XV*H2y%YfOAHG)FU3?C{~7 zcfGB?6*4oi~{eo%vQ9V zqqyDCbl zU{8m@40~qY?4A@rwza9qnKnQ4!pwN1U6h%mKi~?gjEaJ%2{DB~$s7(c*L8F~fy%0z zyVH{4+vIf5c9>S>a0C}mB`iY$lW3|UpK_f3?Pcx#3o=(UpUQpI(#KvC0b-1oeY?Gg zo__c}2_h<{A$JShR9;x@iE|_?>=Q&{bg)ePQAYZZ;fLTHOHxtaabg>Ys&Q56FuZMR^Ex(f;=bqs zMkFDmLHOK94+(GmUQp!$D0#;%GJHKa_lat)d70>aQihZ}WYD?kTSHxxBVvrY1{O%t4fD z*t8Ag_*y%%Br<_`67OYLfgd`+bx_7hPn{zB2nR7uR#^Abt(twA=RRi|4cJKN1 zU_(R0S&Xji_1wGn{NIyM#jN1C5*vFg!%Ev7 z(HTaiQnkDBczknXql4VR%r21EiKWkzEbLT!zE+f6t*WHwY$(DOxemrydM~- zVBLM=PY@6UE-t&sOoXwK(JOS2Omr`Qk;7Yf9H^h77yorEqk3Y6PIP2Jxf^NBt*!Mz zN_t88$Y_+8I9T0MGdViCcO=|M_Ih9aRP*%e>gwl5r!{*tf8p~s&px=&ysPoJ=JTJ8}yzs`e&<6>yOv$O8;2+ zRik`o+T!VvDwDa(ZP`J}2a0kg-pCIJ5Oj!+MW;wSrBD3DkJG2GLEUD3N0z~dxjMA| zFf<+>jI?l%Jm($hYfKLJg#a8z=^5&vj_BwecGlB3hVG+BbWjGyC{$VYX@kEB1cjXQ Yr^NiT!0Ybi6i5JATiBadV@a3)4N&eeJpcdz literal 0 HcmV?d00001 diff --git a/charts_flutter/docs/examples/axes/statically_provided_ticks.md b/charts_flutter/docs/examples/axes/statically_provided_ticks.md new file mode 100644 index 000000000..01e420aca --- /dev/null +++ b/charts_flutter/docs/examples/axes/statically_provided_ticks.md @@ -0,0 +1,94 @@ +# Statically Provided Ticks Axes Example + +![](statically_provided_ticks_full.png) + +Example: + +``` +/// Example of axis using statically provided ticks. +import 'package:flutter/material.dart'; +import 'package:charts_flutter/flutter.dart' as charts; + +/// Example of specifying a custom set of ticks to be used on the domain axis. +/// +/// Specifying custom set of ticks allows specifying exactly what ticks are +/// used in the axis. Each tick is also allowed to have a different style set. +/// +/// For an ordinal axis, the [StaticOrdinalTickProviderSpec] is shown in this +/// example defining ticks to be used with [TickSpec] of String. +/// +/// For numeric axis, the [StaticNumericTickProviderSpec] can be used by passing +/// in a list of ticks defined with [TickSpec] of num. +/// +/// For datetime axis, the [StaticDateTimeTickProviderSpec] can be used by +/// passing in a list of ticks defined with [TickSpec] of datetime. +class StaticallyProvidedTicks extends StatelessWidget { + final List seriesList; + final bool animate; + + StaticallyProvidedTicks(this.seriesList, {this.animate}); + + factory StaticallyProvidedTicks.withSampleData() { + return new StaticallyProvidedTicks( + _createSampleData(), + // Disable animations for image tests. + animate: false, + ); + } + + @override + Widget build(BuildContext context) { + // Create the ticks to be used the domain axis. + final staticTicks = >[ + new charts.TickSpec( + // Value must match the domain value. + '2014', + // Optional label for this tick, defaults to domain value if not set. + label: 'Year 2014', + // The styling for this tick. + style: new charts.TextStyleSpec( + color: new charts.Color(r: 0x4C, g: 0xAF, b: 0x50))), + // If no text style is specified - the style from renderSpec will be used + // if one is specified. + new charts.TickSpec('2015'), + new charts.TickSpec('2016'), + new charts.TickSpec('2017'), + ]; + + return new charts.BarChart( + seriesList, + animate: animate, + domainAxis: new charts.OrdinalAxisSpec( + tickProviderSpec: + new charts.StaticOrdinalTickProviderSpec(staticTicks)), + ); + } + + /// Create series list with single series + static List> _createSampleData() { + final globalSalesData = [ + new OrdinalSales('2014', 5000), + new OrdinalSales('2015', 25000), + new OrdinalSales('2016', 100000), + new OrdinalSales('2017', 750000), + ]; + + return [ + new charts.Series( + id: 'Global Revenue', + domainFn: (OrdinalSales sales, _) => sales.year, + measureFn: (OrdinalSales sales, _) => sales.sales, + data: globalSalesData, + ), + ]; + } +} + +/// Sample ordinal data type. +class OrdinalSales { + final String year; + final int sales; + + OrdinalSales(this.year, this.sales); +} +``` diff --git a/charts_flutter/docs/examples/axes/statically_provided_ticks_full.png b/charts_flutter/docs/examples/axes/statically_provided_ticks_full.png new file mode 100644 index 0000000000000000000000000000000000000000..f165edd53e802d9313851aa164baa0e087c9361a GIT binary patch literal 14415 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 HQ|!M1mXJWp literal 0 HcmV?d00001 diff --git a/charts_flutter/docs/examples/bar_charts/grouped.md b/charts_flutter/docs/examples/bar_charts/grouped.md new file mode 100644 index 000000000..9538783d8 --- /dev/null +++ b/charts_flutter/docs/examples/bar_charts/grouped.md @@ -0,0 +1,88 @@ +# Grouped Bar Chart Example + +![](grouped_full.png) + +Example: + +``` +/// Bar chart example +import 'package:flutter/material.dart'; +import 'package:charts_flutter/flutter.dart' as charts; + +class GroupedBarChart extends StatelessWidget { + final List seriesList; + final bool animate; + + GroupedBarChart(this.seriesList, {this.animate}); + + factory GroupedBarChart.withSampleData() { + return new GroupedBarChart( + _createSampleData(), + // Disable animations for image tests. + animate: false, + ); + } + + @override + Widget build(BuildContext context) { + return new charts.BarChart( + seriesList, + animate: animate, + barGroupingType: charts.BarGroupingType.grouped, + ); + } + + /// Create series list with multiple series + static List> _createSampleData() { + final desktopSalesData = [ + new OrdinalSales('2014', 5), + new OrdinalSales('2015', 25), + new OrdinalSales('2016', 100), + new OrdinalSales('2017', 75), + ]; + + final tableSalesData = [ + new OrdinalSales('2014', 25), + new OrdinalSales('2015', 50), + new OrdinalSales('2016', 10), + new OrdinalSales('2017', 20), + ]; + + final mobileSalesData = [ + new OrdinalSales('2014', 10), + new OrdinalSales('2015', 15), + new OrdinalSales('2016', 50), + new OrdinalSales('2017', 45), + ]; + + return [ + new charts.Series( + id: 'Desktop', + domainFn: (OrdinalSales sales, _) => sales.year, + measureFn: (OrdinalSales sales, _) => sales.sales, + data: desktopSalesData, + ), + new charts.Series( + id: 'Tablet', + domainFn: (OrdinalSales sales, _) => sales.year, + measureFn: (OrdinalSales sales, _) => sales.sales, + data: tableSalesData, + ), + new charts.Series( + id: 'Mobile', + domainFn: (OrdinalSales sales, _) => sales.year, + measureFn: (OrdinalSales sales, _) => sales.sales, + data: mobileSalesData, + ), + ]; + } +} + +/// Sample ordinal data type. +class OrdinalSales { + final String year; + final int sales; + + OrdinalSales(this.year, this.sales); +} +``` diff --git a/charts_flutter/docs/examples/bar_charts/grouped_full.png b/charts_flutter/docs/examples/bar_charts/grouped_full.png new file mode 100644 index 0000000000000000000000000000000000000000..e920c93a53857aa551075afa848cd2641ddd9737 GIT binary patch literal 10367 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 O5ZqC#UrLU+{`N1|3z35W literal 0 HcmV?d00001 diff --git a/charts_flutter/docs/examples/bar_charts/grouped_stacked.md b/charts_flutter/docs/examples/bar_charts/grouped_stacked.md new file mode 100644 index 000000000..53a8eb2ee --- /dev/null +++ b/charts_flutter/docs/examples/bar_charts/grouped_stacked.md @@ -0,0 +1,133 @@ +# Grouped Stacked Bar Chart Example + +![](grouped_stacked_full.png) + +Example: + +``` +/// Bar chart example +import 'package:flutter/material.dart'; +import 'package:charts_flutter/flutter.dart' as charts; + +class GroupedStackedBarChart extends StatelessWidget { + final List seriesList; + final bool animate; + + GroupedStackedBarChart(this.seriesList, {this.animate}); + + factory GroupedStackedBarChart.withSampleData() { + return new GroupedStackedBarChart( + createSampleData(), + // Disable animations for image tests. + animate: false, + ); + } + + @override + Widget build(BuildContext context) { + return new charts.BarChart( + seriesList, + animate: animate, + barGroupingType: charts.BarGroupingType.groupedStacked, + ); + } + + /// Create series list with multiple series + static List> createSampleData() { + final desktopSalesDataA = [ + new OrdinalSales('2014', 5), + new OrdinalSales('2015', 25), + new OrdinalSales('2016', 100), + new OrdinalSales('2017', 75), + ]; + + final tableSalesDataA = [ + new OrdinalSales('2014', 25), + new OrdinalSales('2015', 50), + new OrdinalSales('2016', 10), + new OrdinalSales('2017', 20), + ]; + + final mobileSalesDataA = [ + new OrdinalSales('2014', 10), + new OrdinalSales('2015', 15), + new OrdinalSales('2016', 50), + new OrdinalSales('2017', 45), + ]; + + final desktopSalesDataB = [ + new OrdinalSales('2014', 5), + new OrdinalSales('2015', 25), + new OrdinalSales('2016', 100), + new OrdinalSales('2017', 75), + ]; + + final tableSalesDataB = [ + new OrdinalSales('2014', 25), + new OrdinalSales('2015', 50), + new OrdinalSales('2016', 10), + new OrdinalSales('2017', 20), + ]; + + final mobileSalesDataB = [ + new OrdinalSales('2014', 10), + new OrdinalSales('2015', 15), + new OrdinalSales('2016', 50), + new OrdinalSales('2017', 45), + ]; + + return [ + new charts.Series( + id: 'Desktop A', + seriesCategory: 'A', + domainFn: (OrdinalSales sales, _) => sales.year, + measureFn: (OrdinalSales sales, _) => sales.sales, + data: desktopSalesDataA, + ), + new charts.Series( + id: 'Tablet A', + seriesCategory: 'A', + domainFn: (OrdinalSales sales, _) => sales.year, + measureFn: (OrdinalSales sales, _) => sales.sales, + data: tableSalesDataA, + ), + new charts.Series( + id: 'Mobile A', + seriesCategory: 'A', + domainFn: (OrdinalSales sales, _) => sales.year, + measureFn: (OrdinalSales sales, _) => sales.sales, + data: mobileSalesDataA, + ), + new charts.Series( + id: 'Desktop B', + seriesCategory: 'B', + domainFn: (OrdinalSales sales, _) => sales.year, + measureFn: (OrdinalSales sales, _) => sales.sales, + data: desktopSalesDataB, + ), + new charts.Series( + id: 'Tablet B', + seriesCategory: 'B', + domainFn: (OrdinalSales sales, _) => sales.year, + measureFn: (OrdinalSales sales, _) => sales.sales, + data: tableSalesDataB, + ), + new charts.Series( + id: 'Mobile B', + seriesCategory: 'B', + domainFn: (OrdinalSales sales, _) => sales.year, + measureFn: (OrdinalSales sales, _) => sales.sales, + data: mobileSalesDataB, + ), + ]; + } +} + +/// Sample ordinal data type. +class OrdinalSales { + final String year; + final int sales; + + OrdinalSales(this.year, this.sales); +} +``` diff --git a/charts_flutter/docs/examples/bar_charts/grouped_stacked_full.png b/charts_flutter/docs/examples/bar_charts/grouped_stacked_full.png new file mode 100644 index 0000000000000000000000000000000000000000..11c9ef86773bc2fa86b96d76f3c950707b431316 GIT binary patch literal 11085 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 T*+UATH~@xvrm$)q=V$*0{FyNT literal 0 HcmV?d00001 diff --git a/charts_flutter/docs/examples/bar_charts/grouped_target_line.md b/charts_flutter/docs/examples/bar_charts/grouped_target_line.md new file mode 100644 index 000000000..49190c198 --- /dev/null +++ b/charts_flutter/docs/examples/bar_charts/grouped_target_line.md @@ -0,0 +1,137 @@ +# Grouped Target Line Bar Chart Example + +![](grouped_target_line_full.png) + +Example: + +``` +/// Bar chart example +import 'package:flutter/material.dart'; +import 'package:charts_flutter/flutter.dart' as charts; + +class GroupedBarTargetLineChart extends StatelessWidget { + final List seriesList; + final bool animate; + + GroupedBarTargetLineChart(this.seriesList, {this.animate}); + + factory GroupedBarTargetLineChart.withSampleData() { + return new GroupedBarTargetLineChart( + _createSampleData(), + // Disable animations for image tests. + animate: false, + ); + } + + @override + Widget build(BuildContext context) { + return new charts.BarChart(seriesList, + animate: animate, + barGroupingType: charts.BarGroupingType.grouped, + customSeriesRenderers: [ + new charts.BarTargetLineRendererConfig( + // ID used to link series to this renderer. + customRendererId: 'customTargetLine', + groupingType: charts.BarGroupingType.grouped) + ]); + } + + /// Create series list with multiple series + static List> _createSampleData() { + final desktopSalesData = [ + new OrdinalSales('2014', 5), + new OrdinalSales('2015', 25), + new OrdinalSales('2016', 100), + new OrdinalSales('2017', 75), + ]; + + final tableSalesData = [ + new OrdinalSales('2014', 25), + new OrdinalSales('2015', 50), + new OrdinalSales('2016', 10), + new OrdinalSales('2017', 20), + ]; + + final mobileSalesData = [ + new OrdinalSales('2014', 10), + new OrdinalSales('2015', 15), + new OrdinalSales('2016', 50), + new OrdinalSales('2017', 45), + ]; + + final desktopTargetLineData = [ + new OrdinalSales('2014', 4), + new OrdinalSales('2015', 20), + new OrdinalSales('2016', 80), + new OrdinalSales('2017', 65), + ]; + + final tableTargetLineData = [ + new OrdinalSales('2014', 30), + new OrdinalSales('2015', 55), + new OrdinalSales('2016', 15), + new OrdinalSales('2017', 25), + ]; + + final mobileTargetLineData = [ + new OrdinalSales('2014', 10), + new OrdinalSales('2015', 5), + new OrdinalSales('2016', 45), + new OrdinalSales('2017', 35), + ]; + + return [ + new charts.Series( + id: 'Desktop', + domainFn: (OrdinalSales sales, _) => sales.year, + measureFn: (OrdinalSales sales, _) => sales.sales, + data: desktopSalesData, + ), + new charts.Series( + id: 'Tablet', + domainFn: (OrdinalSales sales, _) => sales.year, + measureFn: (OrdinalSales sales, _) => sales.sales, + data: tableSalesData, + ), + new charts.Series( + id: 'Mobile', + domainFn: (OrdinalSales sales, _) => sales.year, + measureFn: (OrdinalSales sales, _) => sales.sales, + data: mobileSalesData, + ), + new charts.Series( + id: 'Desktop Target Line', + domainFn: (OrdinalSales sales, _) => sales.year, + measureFn: (OrdinalSales sales, _) => sales.sales, + data: desktopTargetLineData, + ) + // Configure our custom bar target renderer for this series. + ..setAttribute(charts.rendererIdKey, 'customTargetLine'), + new charts.Series( + id: 'Tablet Target Line', + domainFn: (OrdinalSales sales, _) => sales.year, + measureFn: (OrdinalSales sales, _) => sales.sales, + data: tableTargetLineData, + ) + // Configure our custom bar target renderer for this series. + ..setAttribute(charts.rendererIdKey, 'customTargetLine'), + new charts.Series( + id: 'Mobile Target Line', + domainFn: (OrdinalSales sales, _) => sales.year, + measureFn: (OrdinalSales sales, _) => sales.sales, + data: mobileTargetLineData, + ) + // Configure our custom bar target renderer for this series. + ..setAttribute(charts.rendererIdKey, 'customTargetLine'), + ]; + } +} + +/// Sample ordinal data type. +class OrdinalSales { + final String year; + final int sales; + + OrdinalSales(this.year, this.sales); +} +``` diff --git a/charts_flutter/docs/examples/bar_charts/grouped_target_line_full.png b/charts_flutter/docs/examples/bar_charts/grouped_target_line_full.png new file mode 100644 index 0000000000000000000000000000000000000000..127d4dc18a7993dd14cee7565ec35094b29ae52d GIT binary patch literal 11018 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 Nt7u;=x^V5@KLP7(=GOoK literal 0 HcmV?d00001 diff --git a/charts_flutter/docs/examples/bar_charts/grouped_target_line_thumb.png b/charts_flutter/docs/examples/bar_charts/grouped_target_line_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..9d846a16d2f5f40f1b940c6725dbfcefdefd3791 GIT binary patch literal 4255 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 L8tdS+9b^6jAL9qZ literal 0 HcmV?d00001 diff --git a/charts_flutter/docs/examples/bar_charts/grouped_thumb.png b/charts_flutter/docs/examples/bar_charts/grouped_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..49a59845dbfb41c9675219996dfeb42a689cb99e GIT binary patch literal 3313 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 literal 0 HcmV?d00001 diff --git a/charts_flutter/docs/examples/bar_charts/horizontal.md b/charts_flutter/docs/examples/bar_charts/horizontal.md new file mode 100644 index 000000000..c2335b0f2 --- /dev/null +++ b/charts_flutter/docs/examples/bar_charts/horizontal.md @@ -0,0 +1,64 @@ +# Horizontal Bar Chart Example + +![](horizontal_full.png) + +Example: + +``` +/// Horizontal bar chart example +import 'package:charts_flutter/flutter.dart' as charts; +import 'package:flutter/material.dart'; + +class HorizontalBarChart extends StatelessWidget { + final List seriesList; + final bool animate; + + HorizontalBarChart(this.seriesList, {this.animate}); + + /// Creates a [BarChart] with sample data and no transition. + factory HorizontalBarChart.withSampleData() { + return new HorizontalBarChart( + _createSampleData(), + // Disable animations for image tests. + animate: false, + ); + } + + @override + Widget build(BuildContext context) { + // For horizontal bar charts, set the [vertical] flag to false. + return new charts.BarChart( + seriesList, + animate: animate, + vertical: false, + ); + } + + /// Create one series with sample hard coded data. + static List> _createSampleData() { + final data = [ + new OrdinalSales('2014', 5), + new OrdinalSales('2015', 25), + new OrdinalSales('2016', 100), + new OrdinalSales('2017', 75), + ]; + + return [ + new charts.Series( + id: 'Sales', + domainFn: (OrdinalSales sales, _) => sales.year, + measureFn: (OrdinalSales sales, _) => sales.sales, + data: data, + ) + ]; + } +} + +/// Sample ordinal data type. +class OrdinalSales { + final String year; + final int sales; + + OrdinalSales(this.year, this.sales); +} +``` diff --git a/charts_flutter/docs/examples/bar_charts/horizontal_bar_label.md b/charts_flutter/docs/examples/bar_charts/horizontal_bar_label.md new file mode 100644 index 000000000..49d0cecde --- /dev/null +++ b/charts_flutter/docs/examples/bar_charts/horizontal_bar_label.md @@ -0,0 +1,81 @@ +# Horizontal Bar Label Bar Chart Example + +![](horizontal_bar_label_full.png) + +Example: + +``` +/// Horizontal bar chart with bar label renderer example and hidden domain axis. +import 'package:charts_flutter/flutter.dart' as charts; +import 'package:flutter/material.dart'; + +class HorizontalBarLabelChart extends StatelessWidget { + final List seriesList; + final bool animate; + + HorizontalBarLabelChart(this.seriesList, {this.animate}); + + /// Creates a [BarChart] with sample data and no transition. + factory HorizontalBarLabelChart.withSampleData() { + return new HorizontalBarLabelChart( + _createSampleData(), + // Disable animations for image tests. + animate: false, + ); + } + + // [BarLabelDecorator] will automatically position the label + // inside the bar if the label will fit. If the label will not fit and the + // area outside of the bar is larger than the bar, it will draw outside of the + // bar. Labels can always display inside or outside using [LabelPosition]. + // + // Text style for inside / outside can be controlled independently by setting + // [insideLabelStyleSpec] and [outsideLabelStyleSpec]. + @override + Widget build(BuildContext context) { + return new charts.BarChart( + seriesList, + animate: animate, + vertical: false, + // Set a bar label decorator. + // Example configuring different styles for inside/outside: + // barRendererDecorator: new Charts.BarLabelDecorator( + // insideLabelStyleSpec: new Charts.TextStyleSpec(...), + // outsideLabelStyleSpec: new Charts.TextStyleSpec(...)), + barRendererDecorator: new charts.BarLabelDecorator(), + // Hide domain axis. + domainAxis: + new charts.OrdinalAxisSpec(renderSpec: new charts.NoneRenderSpec()), + ); + } + + /// Create one series with sample hard coded data. + static List> _createSampleData() { + final data = [ + new OrdinalSales('2014', 5), + new OrdinalSales('2015', 25), + new OrdinalSales('2016', 100), + new OrdinalSales('2017', 75), + ]; + + return [ + new charts.Series( + id: 'Sales', + domainFn: (OrdinalSales sales, _) => sales.year, + measureFn: (OrdinalSales sales, _) => sales.sales, + data: data, + // Set a label accessor to control the text of the bar label. + labelAccessorFn: (OrdinalSales sales, _) => + '${sales.year}: \$${sales.sales.toString()}') + ]; + } +} + +/// Sample ordinal data type. +class OrdinalSales { + final String year; + final int sales; + + OrdinalSales(this.year, this.sales); +} +``` diff --git a/charts_flutter/docs/examples/bar_charts/horizontal_bar_label_full.png b/charts_flutter/docs/examples/bar_charts/horizontal_bar_label_full.png new file mode 100644 index 0000000000000000000000000000000000000000..1294625acb8561ca5b5a0f263122eff11ec11838 GIT binary patch literal 16036 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 literal 0 HcmV?d00001 diff --git a/charts_flutter/docs/examples/bar_charts/horizontal_bar_label_thumb.png b/charts_flutter/docs/examples/bar_charts/horizontal_bar_label_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..55f2971c67e80e7fd908ca62de5645808e3527fa GIT binary patch literal 3894 zcmaKvXEicJg5ElS!b z^3sn1A$3;PQwD+RGN>+W$$)n*drf0K5Ga%n1d5IYfzAL^^cn~h00V)3KL&whUV%U? z-udlDa=-_2I~@%*(AB?ZaR>G}V1al&c;E-TTWhh@0CDaADwObI< zx3u#u-Y>yLa^MwxT+n+;Ifo3aLi`|lkaeR6RGmEwH|mc9jUV29{Ei~ zGEWz5vo&qrgI{}*&|uEB!1mVb?jvzzp?4XG%mqE+9&Jn^X4v~QDgTb3egeiUovE1N z#7X013`<{fb1J||M0aJuYu=y^Cdg_QjVyeQ!97mW`IwdmMV4v(LsfD+S_s50rb5t9 z1o0S5J;5h5a%@c}%SC!dU2dLlMG4(ZFw--o874T%Y?<*r(ZAX3v?{e*@!Go}lpY z@c5Rw&=faf_1=gECtOD6D}gg=fPypp<79(#-->VeejmRH&a?}*+%TlD^m`1atEWeE z7LH{2W$vU>ZPnJbxhXv8^n78#mXDu*PcDOK6IH+kKDjs;x;8OA%?l<`i&ZI6Dlz0L z&_^gJe0xf9gMkz4OI^sqTx^_N^Wksa*qCWfPR_*atYcW%>gxgp+Uo)|7JFiCO` z&$@r!y<|=7sEOdsaUwCds0eFZS=-XGIu(OWwSN;MqN=JYEG!JWfB$p2&dXsG0)gmW z>3=D}L@6vL=C}SGsut_i&^J6x2lW33TB6#zWlKsLUQ8?oIRqud|8$}nX%Zu z*dHGwf6XA%JgDX7&Kor|; zQ;;RLt7>|3KJTL9!LXSKF1~SL#@332Ui4Y?xLNotW$?$Qo7U2qCH;cl^KrP6ofv2F zqm-lnbDw3VlcYLeYg(fCE=Q~9P*$^&c8`aoN8xEzYbLvft^vtF=Iccs@hLL2{k2L%1zc z#D!`{H_R%3|I1nN?481=9HjS1dg7tOIR){KEv^ERcD8fV5J)4n8eX)urmE87crD~$QnATQpNzBtCOPu+{&YonW(B2)2^*nm~AY-OH3*pB%#5okVyihbi%xV9EWZ40VilR4{=HHIC z{C61!_GR=D`qAl6_Gg$oE=x@>`EHKxH*Q%OQ{?(1Finm8BW?n-9{KN3e-zxK_p>$v zC2v2YrEMYGrWjXg5O7eTz5D5i%AO0%#WwZ%HW6i63KqBZB^uvi-T6NB8$EJPykex! zTlQpgBg88K7^Wh~ZrvSuDVD%r_mz8ER-bnKXnbz7jm1inD$f6+fqKb;d+SLJ z*A7ADYjB;7?z@tau2**A{D~h81p}uzr5zO0M|FtSwN0>`n~{;Aslv|jH>Ehy4-j3ytGUH@dlPFf^6Xr7;Znk7CNpbQPXjG%@5CrvBe*+zTPN-E$ z*7igW>}B~lNTyXhx9k^R&>EWD_8PtYM6veKMnmhs z+VjLF*mJ3ir38hPrOH)Sisf~B%#mmlI_v|qIgnnyd3&q=kz0{y$Ii0t`c`{j^P1_i z<2aKn%3Gg*7N>+_^rgc5@=hHJz9!6oBwqM-|ohgG@u*QY+ML4)lz@bq{GP4S@p_j40wUVCGi^phd zQZu{U7oM!*f+T%n1x)o2$8N})=AuKay9&{m3ry|K3JnYZk2Y;DB6|mrSszCv$03r8GKB*m5D-+`_~msgcS=79U>N@h!WWq(4}sQ z6ori6IliOfh_Z>dY~r2I_I_ST(u@sDI~4?m)~~V88I;(B>g}x_D7YG&^i>gNo&i&R zM#q=^Vzjg@Pd+<+{P(VzT01_m)Uvn)37x5@eeW0f8#q)2lw}jRDde5hcJ2$8$CtM{ zSH|U}p=PvBB8i4nc3vMxQoUOo%msRWWv^5?;?cJT!Fud9>}`jdei5n&`MW;GxY3`L zSpJl`g%`Vj-`^m)v5}MVkVBS62N5${(PQS*eko-czh2TR$e~a5@DwS3HITUL{XvkU zpE5IP^pHKhP&o9Mr(ZFOUBQ~uH>}_AhRD>%sM(ZZ^1tViY7YrJ8sytAMTpzVm9CZK zIq!Oq0av5vw+(to{MqR>3<~J%OD4kYMyA~xrfH56>hp%=u7}%*8(6$+`n)-QT^8m4 zC%*3U(R;C{>NOZdo%97Rs6KM)Ix`r3!@ zm)I7hm__x3#OH7ULqRQThxRFRW$AB6T%LU^Gt!1KjDB|-c^ymYIA7Wla>3kD;5lVR zEDgHKG}#+QBlwsbJeq8b%RS#6?zv(ypc{U;9jT{@>mhw8M53luS5eHX*=olGb*()L z4;7l}qhOvamzlfv%>?N_cvxE4vWQU)5rDy@aHD7x{z02nFRFigTXfK=VFw`E9~%LU z<4h^)rEjkIv<^c7S_8*K8(01af~y&+)tRfg4bIJRWNVk#>~+EJf=Q~HUTBwB6GB~X z-XXna6TU}g%j&zgs9u4^o`;s^4f5GUoCfY&D7bAsk0TD-uil+uj@F zA~`Q#PR`6YpwY=eb0JtUf*{Z4=BD>jFO8^8=fLc{ph^=#0M;66Yop=^=2=Dka3AjgIj%wWG`oGXlR&e^GgU<$VfEAjhUlRc0N9PmG<(6 zB+1~zQ12ky!AdAoc7?UZ`;L5MPYvazpg8Jp@oDt zzg5u0)RdjA?Gtp9cDb=FP{Odid?TfPxiPTl1_lOxS@DgKRo7;Gmw|kg7nyavjGc1i*TXbqz3Z!)Dw{Gy11T(_R37udll{x3t`1XO9S9 zJc}F8)5ze+99ji@mj-eXscC74_%`}@ZXqF|)b#Yl5DrUA%YmVxV?8=NI?CSuXT&e&YMX0~Jxxa(0 zzoU%3uOlEJaTpva0z-(v#ZBOnGXJ?mU{W$LSirI;`u_!ZcsaN_h5Yvb(zfw&AONJL MuCG?D@;K)I04F0;_W%F@ literal 0 HcmV?d00001 diff --git a/charts_flutter/docs/examples/bar_charts/horizontal_full.png b/charts_flutter/docs/examples/bar_charts/horizontal_full.png new file mode 100644 index 0000000000000000000000000000000000000000..7feb06c1d61d3bda5f45c6be002283f2b9626d11 GIT binary patch literal 5668 zcmb`KcU+U%n#bc#qzDM&C_@nj5K$Nb0Y&;mfrykS9q9rBB1H(D5QhjVNEf6N6+xv* zK%_^d_Xr3Q2ptj(gp!buK*9#^diT!W>wfO8^ZxUm=Q%m&JbBOa{XOSAxMB+CJ0NlZ z008hAUeYrI0R9650PM@=`ibp1^z^Pe`vvp>nScO*$|Rm0m;G$}SJz8sCICSA2>{^E zT>yZ=cHJQW06|Isz!zr#KqC_X5c1EhzpBNajC94=LZ8843=9lVD3s~x>6MigB9Ta? zQfFsp=jZ3iWb&6UUnDcg%J~#06a}}!P(zY8sEm(zddtk#`uaK&iM)ROIv5N#F)@Kc zp{=d0tE;OyIXRAwjusXcckkZC;cycZ6S=v$c6N3d85tKYTnG*hc6D{Vb?a7ER@TFZ z4=-Q7{OZ-K&CSi5H*W?82IlAI-@kufUtga@B2`sYUAlB>XlN)cEsaj6kB^TV7#J)s zFQZVXq@<*lmX@ffsF08lGc&V4{`jM_vvY24&c($=Pfu@cZLOrFq@$yQMx#L>kY~@H zZEbDk<>kG6`7$vvF)l7{cz76rKx}Mmw6(SQ`T3cenl3FZRa8{mxN)Pox%u_$*Kgju z85|sRc6M%RYFb=eG%_-}efxG_UtfQJ|J2mf^!D}|8XAU&ho`5f z2L%P;@%RrPKJ@hTym;}##>VE;r%xCRW@cu_$HxadIirDGKU+XX4XsQrEHACmMsV|= zrxq7iC}bKVqM01<=1XY9T1fqBB$^UfLxjFvj%lSn`A8#@8LIhY!UjEmfOfZ)3V%vpGWoKt!y?Ql1 zKEAH5?#h)bF)=Y8KYr}$>MAZSPEAcsNl6I^2q-8hC@Ly?_wHS7ZLO7+RdscBVPWC! z?(QdTo?~nz_FXpu>(Pzftk>8Ex1WJQAp5=dJOr4CxjbMuIH86n`kb>r@e1%M9f6-` za|hrK_6K?VjX_{3Aia}#4ge73Hq--Igko24VfJG9uy^Z1$0cl<%nBWVJO*25N?*4= zZHfN0pDP)7?YJ9Iu;$=+y_|lA8_p-K{lQRC!h(uvB*l1W`{CSqQ?UkG`ecar8`7cT z+jFWW*lMrc<>g+5-%`D;=xe=)(L2p>rPXCrc;@;5am+yn^)2GPsQ=yPq>+Bi%v!g4 zAYZYQ3jSKl(x`*q`NnQa>l89OIbUSbPBbs& zp!GL9xv-tL_`)X}{g~(aq@_KjtJDZ#enVQy(dU%o5v<^^z8_iYTcnL=qs#NrzowMh z{!;EuG<(2^73HC+D%_N#H|NYRb{*UM8$(&+znxxcD+@4s?TE6#DzEgUCcF=)#~n>c zPn!xU5rE!DCOi_R$k`6h*n3DdVC&AJ&egi-mGU?lnF9@Wx!)np3?3dxTaEN z^im36|EEiSQMgg`$2yZ7&WUL^jGfzI&^<2fr7#dawkCGm$85$PrD@OKLnZWgAw{d+ z_DK>1K%#Z8Lev9Z&fhOdUG$edt@+eWHo89{apgFHYp)L(Vt67Hc5-f}KY2nNr*VjK z3^jfTdKZ~sZ-R+HMU-4dObX%bc^Ul;BvK|l09c_XQS=}wqQPLlyBnf4*8>Zb&vcW9JEBKG>;-LbK<2HuPQw7k+?IVBmNC0a=Avq_lPcI z;y7F0@Hbk}v6j7H9?L$yoLDR8bueTQC0+mK7ijTsQClfsYYRw}?%o0$%c;g|j4SOe zd6IS7?0$;t#|SZ+SoT)bo-nwNrQz%>MJUaL#p@V}7hyYB+~@R#S5NBPVM`!X{a|p? zLP4bL-@wuc@F|!OxfM)0DE8Vn1IgED8Lcz;=)3@{aZrflbeqpX>39R8qABZL6!8W( z_MP2v0(PB62)v+n{-`f@!NvtG099c8?q0GirxR;*@E-`?5oeOBbqcGCGd5+N98;xfmwHR{iq?iNUW)O66d-e9d732UA-2CcZ;wXU;ER6&!Ve)+ktg2#1vC zO)4Fv?6v<2{=bFtBP?W zpQ|-l0j!WNcH44Lj8y2}F^nuQeyFwE1tH0L+SF(NW69EyA$Ut{4R6b=RUV3t%`4#w zhXngsdSSMUfUty1WL8SMNZ4JZOYshpKRD@Fz;lp9z96)M*D(zpp=6gg)dQs3Nr>Gj zKq2D@jeqGj3K7xQM0$-}cRX|HUZlOc4o2!~tR zHoO$nor`*r^5gTNE@LuudH%=UiN@U6gzk8HpIKcR(xs>o8K@obs#fQ;heocZoCj_g zN$YCM4ZOD?1I8$sJ7R(YNP5Td90u;Hfz7&+F*YLAnu>Ev@u`u~?5G=&ed+7OPs@lChc4_OxzkuLY9?!{Vji8xAnhQ=Ugjzs_4Mil$!DNcD8F>4(a%=(+( zyx;-Wjv|+c4&5j^ z7Q%`{&ZMDFcy8VOH$L0C)W5Dx{t;K>5(TSABe}xATbW{~P^&8`kHn-rE9e5>J?XhG zg^-MQ`dYJ*P4gEqxE?ujj`-NLeF9~16vhUx;!CpI-Gs78z~kS(c)%Y zGN1i@i+tIscGqAOGte^^W4Xd&Gh)uq7X@_CoJ7ACShK11dhBWqWQGjdGJa7|Z=Bc1 zr27OkzFv;gIbiG#R^Vr>KKJfs*L5QuU>-5WylvAW-?AjQ&agta2R{y?+fAgdv^Dv z70e|vxzzz@;JsKcx5c0_GbxtY`J>*d1H|g`hDrbPKYU$bAHKvn`Tl-;a<1uuQO&$j zHv%VIOYn-9j(Z=CC1UF>o;J_4XTqb2tEmt>6Q`)z_oVTMiQ2R=>jJ}(NCnoCG`PXE zPQJZg-Kn5fO&cNcL05ivgKminP|ZikW&iWlW1YnXG5V#tjiOy)_{9l5eXB@U2Jed< zkqc?nVvc~*q;e(}IGM9V{>U?dRgtf67A-=%w=S*SN{{q0oHjVzMw^l+Vu@cLKapjudxT~E(VQY)UZa)t$5Vdky4VAdh% zC-BB+wTW;>_DO=c`q6F5b&QN_L2|4=^JRLSu*e2-B6(^#8Twm?s^xzd8*pSA`uIf! zUaT`i)~zS7;jLEVP?quPij#nSK(7~!j{RIL6s>SN*C6H08;Z4!VkeU1rG zwtw51!k*(0#rnE>(J87M%_?1ds`>MYf=77V0;uC0(>A3y@J+FG4K-VAJ8$>U&iL^p zi+1?3HLyuB)IC($ULM#am*FZG^g3c0^Jq>}Y;<18?X$xn=&d1%$8>t%Q92}kNz;j> zV;?bJvH?|~E?EO%we!N^cwW9RB}Q6sC*D=PND!PY$hk2tx5Pu6Ye;OQc8ywTS~tcf zM$|`GQ1NPz&Y`12Lm$Bh2fE>HIqermoLA#aa zFiVy!dhCQm!b0W=iyD(g;qm{frmd>mF^8Yr9t)nmvNMDu&+LaJ4_`yLhJ^II-&yoz z`IKcA3n3JQ8wxkQ=`^BaN`uGE&RkBaFO<|a!m}P_mPyRofqd8#7~K{RS0?v?$6_2q zfjkVqpz?Z|U0bW2pXP6kDiV88bw1*1J%_#8c z=KCRzp?DBPI0EMnquPguJ(T^sTKuVjp}@avY3C2ym_@PuGEjXRsGAGaUBflNo&5qR zE1fxiT1n;f8D)zz=QPf!XsEJHH4P=DctMQNp9c8&xq00P`~Cn1#Is~?WkY>az48mr G(f seriesList; + final bool animate; + + HorizontalPatternForwardHatchBarChart(this.seriesList, {this.animate}); + + factory HorizontalPatternForwardHatchBarChart.withSampleData() { + return new HorizontalPatternForwardHatchBarChart( + _createSampleData(), + // Disable animations for image tests. + animate: false, + ); + } + + @override + Widget build(BuildContext context) { + return new charts.BarChart( + seriesList, + animate: animate, + barGroupingType: charts.BarGroupingType.grouped, + vertical: false, + ); + } + + /// Create series list with multiple series + static List> _createSampleData() { + final desktopSalesData = [ + new OrdinalSales('2014', 5), + new OrdinalSales('2015', 25), + new OrdinalSales('2016', 100), + new OrdinalSales('2017', 75), + ]; + + final tableSalesData = [ + new OrdinalSales('2014', 25), + new OrdinalSales('2015', 50), + new OrdinalSales('2016', 10), + new OrdinalSales('2017', 20), + ]; + + final mobileSalesData = [ + new OrdinalSales('2014', 10), + new OrdinalSales('2015', 15), + new OrdinalSales('2016', 50), + new OrdinalSales('2017', 45), + ]; + + return [ + new charts.Series( + id: 'Desktop', + domainFn: (OrdinalSales sales, _) => sales.year, + measureFn: (OrdinalSales sales, _) => sales.sales, + data: desktopSalesData, + ), + new charts.Series( + id: 'Tablet', + domainFn: (OrdinalSales sales, _) => sales.year, + measureFn: (OrdinalSales sales, _) => sales.sales, + data: tableSalesData, + fillPatternFn: (OrdinalSales sales, _) => + charts.FillPatternType.forwardHatch, + ), + new charts.Series( + id: 'Mobile', + domainFn: (OrdinalSales sales, _) => sales.year, + measureFn: (OrdinalSales sales, _) => sales.sales, + data: mobileSalesData, + ), + ]; + } +} + +/// Sample ordinal data type. +class OrdinalSales { + final String year; + final int sales; + + OrdinalSales(this.year, this.sales); +} +``` diff --git a/charts_flutter/docs/examples/bar_charts/horizontal_pattern_forward_hatch_full.png b/charts_flutter/docs/examples/bar_charts/horizontal_pattern_forward_hatch_full.png new file mode 100644 index 0000000000000000000000000000000000000000..da5c8c4746291abb684da3fc4ebfaa06fa03e638 GIT binary patch literal 13928 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 Kz2Mrt$NvK@mpu~z literal 0 HcmV?d00001 diff --git a/charts_flutter/docs/examples/bar_charts/horizontal_pattern_forward_hatch_thumb.png b/charts_flutter/docs/examples/bar_charts/horizontal_pattern_forward_hatch_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..8c4aa75f7a1035ccdbe8dff3f372ed23970441a8 GIT binary patch literal 5247 zcma)=byOTnv%nW$ERdkVNpKcf+zA9-f)jLs;O+#sESBKz?p!Rmlf@y6gaAvpxJ$4g z7YpQ@d(Qj*cz?We-bmF<&-AJ3?y0I@_a`k4Wnuyv0uTs9tg51*1Lz{)Gy&rR@-ipk z8c^7Fa_Vv*P-7zDZwnmYp2vB zgzw`nX9wsa5C{Vwv^*7@4FZuFsVd0n`Tc#IZ{$li>K|43*I@zuy?oe^2CR$))#i+n zX|htz2ri2i`>K9&uIZUBo5YwbIXdcdl$R=&lJH`@O~r_fN4$lT7xPp6k4y~P)04lx zDo%r#z)95LS<_&i_w@`1pDfQ&koB-ICq6+^gu8S z*+0u0nb(+k(o}A&>xJeXepYWvzQE0!viP9tI7Of~sVqL@xz(A{$aK$MyErWV-6S!2 za0Dr}Rg#YDG(3WIX)AK&xRy}b!M*IAZ!IUrO7&S61V<=}Mt<(kh|F@-*{M(aQ;Q-K z+P(yE=p}NRw&9*7PQ1`3ue_WUR{ktJJiNBPezS`=KR>^=p<#AyEm0@t_SQcjAi&); znvsMyB#8M#W%0gAmo5S+KhrF=@N%(gAYeX44Xi_e=E_KWX|D#>=f*W4kkCcUHz^YA zYY?KjDXoe{Uyd2@6f|CzvziF^>npnJ%e{@JS>gOp|MSWQd)#lr|1Xb<%F1f}nu)0? z%#H8Jvorp}kULJdo?p1>u*mk+fLPJBpw#+$-m=spOA5vb9Pe^$)91s{f*3ll0%4vz zeHBM0X7q32=4eP7q#+)5vcps8W@tvAT>BOhYK9K-9qXs=5NNpF4J(nxV4Sco`1zKo zwZD5dW1|gw8ZYHf{*(PT_+|`ALHx8u*uQ7J5Q2;OX3*VBW^=y{oRo2v>^D(>ae-_i zdV2cHt1Im~{mzgFi39H($JVcRcQo^k>Fp=D9L#>j2EV3y!%|4rsNHWK@@&hUZ>Nlg z+0}B!dv?;BW2QwRf7)yP{k0n5Z9zf}w|CDYD>r(x!_=f>T3-6yn<3r1%VfE43cGU( z($?iOH|qj1>dAvzHGiFWzY-2>DAe9|8rquFP3Q@_6^NAo0DO_YzCK4f%v#_%-KZS6 ze|?=PVQc+f#xy@4vOpIwdo~iWITgiLzRpfXx7#Mv*Y^7XN3qXwvDP@m)9fiVDyaW# zq~rBS4DT^ske~ky385O8KZo;1w^CXWWxuJAkrW}1M}3c~x|Zsme(ZO_U`ey-;Gt_U zD(ZbKfFvb_(YB?&YU>lTE-RPBAHVxUOZJ4&n{BJ+G&RiYThy=Buw{qn=5MwV3{Hcq z(@kVT-4rCwOM?%l69?r7bsZ5x-YmI|~T5<4wzK z9-|gAU2*tWH9qbgrDdI>lY3q?S#er~=m-l{mx41&VpwSJBW^te_IR8TGWK*u0-N;c zKKCSTuz7{+2~syM;+uQd{aWuwze&~#MX`dt4S$A3=L}dmA}z&Q;M1OeN4;8|eyMR? z3TnqaZF5I33a(VV&9LAVy!1w7ss78;=1Tgg9#*jTN_Mka!y^q}ezN4!`}cV7t>9IM zglo2%CJgICtFFx#eKgMpmX1wn0+)XIUfNeJn1?=?18&Vp8T&>9uEM4)~)`M%Y(1%>1D+z&AmVQu_9lbxH)=DNSaFO*$8!QYw{rm z$NSGNrhPY?vEDvDO^uCm1_o506cE+|sv@~7ZFc?z%AN2EI9IaA`hyWlayBZWw4=-V zwm~&KX=D60afxP4WjE%m*(3+SH@1K++v{NX7g*}$&4K#l9Hk29%_7gF-OnU%mM>ja z9c|XC>?~h8?QYKcSTj9u*Fn7|v}ZphXc)RT5K7@jw7fc zf$Ooy*^t*LM5v;p+ahb3zenWovoZe4T=WdBWZ5c7qW0;c>o}fZj-@vaUIE9@C}XHI z1}+}n;_~v42i?f%sF9&zQG0u4dOC%Oh)7me7E|i@S>+<8Nb(jucY8O7`55U}xsC3U z!<_b3V-qDR_@K6uvWO_xYK9*r*QW8**r1wM5G5qngc+YSKHyZGXKeV$eSNyT$e%Y3 z?$U9$S}Yaa^Aut4>@-{WS@jd&uR={ATl9v8_a7D8b_mY2XSH%ukI8iSy&_5>8hKQi zN#V`PBbtE~;H9A(pg4VQSy;qApSSTsqznN@FwqSz=t7x$d_>>;72l%n#G~ZIW>Ax+ zAQE)Gg?rgO3!z1vX*urN=azSeocqX{(}tV-a>&BAidv>d0;Qad?Td&%gnIYd8ia2G z1m`PU_3);Ogjydbt<`cyay38cWG?*4UQ}M|#>D&&ywJxgkwEp@XuqkGf2ihT9TIli zHzQUwsAYLK`|oGfW~1g97D^j<-aG#^!`%OPAz5IYbAllVo6W9Eq)Oy;+*}U~5Fdys z`$*3L9aTEQ`!6RYv~c=qeOk3rKB6WmDY8iW_(oHqhJ84}mi$O0iB4e_qhm*|k(76| zg~keb!L%cqjUTEf?eYst+cSosZhIgMZdE}Z7Q_-^#qz9tIlCT z+IHxJf*1G&q_O<^%I~t4zKV5U2V7_DxE$fX4pw`z4>KN-z)o1Uo4zU%QI@UjzOFJ+ z57w2E=)D{9_70HTYn!Jg43DmQ$L+e-=Rz2XSz1~O;pGJYC^$HHVtQH-3YBX#WGS2$ z6c9j=x<7;@TUW%xNHg}2)zyN?&{#(r(RgiUtu5@>s;q|9hE2SA<3i@W%f_*L{>d%{ zqON*m=>;NDOkfom%jQSJs}?0E^%u!ySExUj4nbWh8P?}dZ6oB1UsdaE9?sX4=~TPm z4VwSCGq}6EyV);I+&@0HvA5@dSn`t9>am_qANifE=HjbVee=5BSWehG`6_P+y_$a- zNt)r+x!dPIV(2KWQl49_;N{&yc_UM%Gjpk89Dceqc8Oq`Bl==qw{ZE}{rd$+-pq`) z>vD&jn;Re6_^)}cf05?$a^0T+pctL%q29pj{gaatJrBP?sGI@pEL~=JNf+bU4O%>! z#8wDr`uy*zK}IT}3q_PuX-uvYu51`!U56unr87tw%H^~juaItIca&P^n`M#NH z(6ylF9EF<}A!uq_G)(M3B#m4z{4=ECB~ChWQ$>YCZjpq?#6j74!9zoGk}u5I=~wWd zS-V0$c*~T{c`P~ zcIa?uP`5v}#ms6|5^@IdV3}znMkN`TGb~<3e(K7=HRJT6>*xpqR~&qL1tAqm$=(7x z$LzLkLdw!AMCoVD+@;<0VHD~^Cb3Y;>YR=Yw3ou)&xZPav2(l>u!8GHZxg%~VzY4@ zC|6v_;-G$g%3O;*W^lxfJsmSUi@a!DJemgqR{r3T0P`LSL1vM$KKZZM0kZ~_zE@C| zz}+5qS17DNN_uRLN^viwHfaRmnz6EOV@t8!VZi8&kx>yJmh{2w%sqyfL4#R2oEM-u z$s~7cTMB(`r)dY+W)uW%|ORaWoT; zLX8zQSFu5h6_euD*=c(ND^$S0xoFzR=2f+WxxbeaT;_f5NEXynbf8Me>!T)9uux{& zZ*b3A$m>{eng%~KsQdE@hnnXsNS&*^grBGs>nwb0VYaf$GPB3~;2AJUg7EOn%*=ey zAsF>gVR;5-?r`70JU%`K{7H+0d`#@@ByQ*7`DAo7FOcuUhn~7(i?)hWOuCvBjtDuGW5**V^yrx5{5{hd^ zuN~B6KejNC(%FtC7Bq=k7@_OZt=#i`HY>F`NFv)J51uNJMvaW%*8lX}7{J-x-KD0c ze&^y6?<}IGtc-`ImgzN*P)O*{+y1AEd22wWdwVKM4nJ!@ZF!OwlPu$B{)#}_!{=Uj zo3kE-stenM0g^sI)Qv{;wqM!-#`Ob-##n#;7|cdYvKG7bA*C~sbD_K4#doRkMUghK{?}+Kyoj(yAGK>J zS|AR~J(2mnXg82XUKW*5pb9?jk3cX#vfcPxJ`v+540hO0_+Iot?tb~KSDQ!dSmQue zPWtJujP+UhS=N9+)5H%6dJ4EZ9H}YDAMPuS$t2CR%te#Z(kR->$cjK@%XjYz9v)2! zDhtalcH(5BWCcTdZaChu?Dx%e$q--(!O546oM-rirA*m#)0e$}G@0_bdY8peUuLB~ zbHoo{rN3b%bFp_f8uF(eGMF3wPv3G&4dkwwPL3=6;8855y84wrwC7JfS<&|dh|_g- zbs1m$>x5}(X>a-x_xzn*UEAP-U`)qWnpR_;XT3Vr5vTXb`_HY$_AZk5g{QJxGlFC^ zw?gJ_gF?(FUz;PsnbrXa2f}4R=%YV?R3@IJ@?e0~v-9&;`j!o9-WCM^V+42`eDUe9jfgj)% z>M{-r@Ae_)WW~b5S_Vk+4O=)V0?0477kk-RS$?lBw4{qj5x^t_8dY4(j9yqU*?roA z_B>e@kBW|N&$LidRyHy>cl*~^XQ#NnfkAs9vazu-<4|2)y|J@%yw0TExE{}%YZ*lT^$uu+C-XliN`6qIM#s8X!;&e9Um+S(dj;8g``LAwTG8|dpBcfDtcU@DyU z+8T*JcH95{T}MqgcKC(P*JIS&`MIas6)?#MlK=LFKZ42r_Sf5*w|DpV$vSQDX%D&x zQozqLGBUJa%;nY|9vQ9egoNY-H~@^Ah|p5Xf9~iQ8yLWpmX_|QNA2#iZEbDw zm?rUNqV%}ZkAK;5UjZYetE=nn>uXi#QVq1tvTc-u%=dD;L9B)|_90DN%; z0E1irICv$$+0Kx+u;2ZRIS$zSU5i`FGI<(7vYA;34}TYVp5ZfF-UJj%u)>3;_(dQP z(K;GzlBW`+Ucq|vuowXL2?7%X5qSV0q(Q)8&t3npSm0!H#9W#^SiVGc`RYr$1wBZr zNorCyecgBJp%syOH|hDJ-=mSp+#Rtk#E*!E4`YVaI=G8SacpLvCn#5j&&#!j(zw`q zz93>wW~vF0&eEcOQHdAHHTFzf2p!QcvnEO5i(xMBYCy%XV?FJpH0|Zw2O@^Es{FV0 z|3{3F$qhm6hzldCT9Hub&}sj|KvzWkx2<5dQhYjG@qlS3<(Tu?O+9_?Fgs7_HGvUk z+-9Q$5?5Kae8b+|VBbQV%YLKeH~x0jF}m?3sWOYh-Q{{J-m;ivq)K=x&*<8h@T+Yo!Tdhf4 z3lhqkQ&(5d4;j0vqN1W}6(YxF4jM57S?AO=G&DT5WlFV5XTQBF8SLv*n4$zE(1V-g zpn?cFHbPNh154_9bUzAKwxs*x9_Y`ak4A*b=Vo!Org!)AJAo=yG7^BNr2&R~`GKz3 zWw!Ee5@V94JPHZ2tlQ_YEtSEGo`7u=Qs|Gw>Tw{xQYZn@OCn!~A>B z5lublp`ldV0FMmkjwx2_;w}Ner*!_fn@FIrXZ^1_jn-lWCba zyuO*#kM;SpgKIrA!4)H4sH~@f{tRS%Zeiho7jtWCOOP9<=T-7dF0|XxsAzB|n8V>T zSFx&S)7_~7$H(VGFOOA@_%%Htd4(%pO^_q3(|#`P1EBo_1ANgC_sGaXde6-2%a?r6 zJLyrYmK5JP_R`N5!#xTjn$dW~%H_TVwq4M5`JnrOvMg(tjZY^t*SWHmB<)joO~I+Y zZJQvz?oU*^uA|DF3wZVk;q7YmW*pf{>1Ddp=*g(V&}EB4i^IN~y-0+@t6M(M7X9gm zFrALqpo)uOzK`SgaydCE`vK(7=c=vxx7DD08$m_3t;miObrM)Z3jc6Uj1%-1T)|@P ziK&TH%z?~K=ck{fR9w5YCylx3N~#wy1QYNpoVIRWG+|-d_)B#{2WID^Q|&}J8med! zbQ}Y-O0OiC0INEJt^?4hy_VzTNDuMh3&Keb0^@K|h0n(Hu2HgeCNLHMQj)L7K(Y10 zPz>FaULVy#skh%$K8r{R9lRm2IXhd*y^)fV@;z)4eapVQp2<90F%tffeEi;B3%omU zhO#kN$ZZ&3Y-rH!t(($AmL!SGXInh_*18qs=l9oT6vo4E+@QIps|yeCu0)R)Guv}! zZNt45hPQ(VEK+G9Axz43SSahS5)#g>qM~Avdh%XB91c%(%k7;B7=Iebx{L}LILyvd zm9p%$zflOq@2&P~CP1=1`}_N~x-B`|+iQbYo!e+XgJ6m81Egcl2`3HVuQ?wC!Y&LY zx&hHu3yE%!I~K!fI-5zNvT6F232{?BS2kl}c*K+0e{s4%S}eF*d2(eBse7}%znuU| zS?)_5Q|f%+tof$;erJa_?={TV!brG0hA0xIEW5Lm!9eU<{F){5h+Sp~O7Fx&KQD!< z*%w+EdFz>03+ilLiLFVNkH||^f!>UH$@q3vzTS)zx{&L!6w~a4;VK(2K_ox!=y^;nDQa@H_da10I znwn2rk+8(4fwGA)^tSEQl)&+-h2R0rH6l%@X$}i{_jFNjptCdH4OX?_P;s84Bii9e zB<=^su43|@`h7;1%(;ZG;5U6DBjEtuheEkSpPii@)=X;ZzHk|~^U$y@xOW=crXiPc z#`iPY8hj`+Ut+Tl^il0iQFdOZ2?z>C=#=X!#tkVU=E51V#Z&Gt*TMQJ%F+)Qh0N7^E!`ACBY7~$f=tQ9#hgt zHyNgMFXmA@%+3i3JLdaaC926KUd)ZcuQDhDLIy}29`E++wMtRnzyR@zCH>d-##)Z1 zOR14DIQHHNvV+=PVJZ{fIWjV`Za=lPTj|t@dVG^!O>DX3;=*Ip(gX9`1_c9Mx-ukL zSy`Jx!`Iw3;0nbG(HRF4hmkNCj7^czRXGrJeDTNkg)#qz54B%?F)%1=vIN(@MWu&d!ymfB5#uxo0I+RxUABopFe*-3h;&0z7N=4=h)1j zyhbM5BtQAKb*uL6R!i7-i)3EDe`H_&J^)Ej^v}maENyHs-5$QBjjK-sX*^qwPPbzV zG0Nu0SN!PGQWf{ch~M`qe_z~_u>}^3)#W~fzV+b21HT5fnF*6J&ODVh{|7PI3zq2Q zjeVcWxe_iAnDrbCR;+S*_{rZ(FHTCsx{im6t`KTA3x)H`f zf_&tAF{ke&H0qj3@S+*a)~AmZ3KeR13(+CrKf?$XlQAl(>iYOyJ0lYCk)VNl?iPBe>nt_J$$`x{C@|B Sm< seriesList; + final bool animate; + + PatternForwardHatchBarChart(this.seriesList, {this.animate}); + + factory PatternForwardHatchBarChart.withSampleData() { + return new PatternForwardHatchBarChart( + _createSampleData(), + // Disable animations for image tests. + animate: false, + ); + } + + @override + Widget build(BuildContext context) { + return new charts.BarChart( + seriesList, + animate: animate, + barGroupingType: charts.BarGroupingType.grouped, + ); + } + + /// Create series list with multiple series + static List> _createSampleData() { + final desktopSalesData = [ + new OrdinalSales('2014', 5), + new OrdinalSales('2015', 25), + new OrdinalSales('2016', 100), + new OrdinalSales('2017', 75), + ]; + + final tableSalesData = [ + new OrdinalSales('2014', 25), + new OrdinalSales('2015', 50), + new OrdinalSales('2016', 10), + new OrdinalSales('2017', 20), + ]; + + final mobileSalesData = [ + new OrdinalSales('2014', 10), + new OrdinalSales('2015', 15), + new OrdinalSales('2016', 50), + new OrdinalSales('2017', 45), + ]; + + return [ + new charts.Series( + id: 'Desktop', + domainFn: (OrdinalSales sales, _) => sales.year, + measureFn: (OrdinalSales sales, _) => sales.sales, + data: desktopSalesData, + ), + new charts.Series( + id: 'Tablet', + domainFn: (OrdinalSales sales, _) => sales.year, + measureFn: (OrdinalSales sales, _) => sales.sales, + data: tableSalesData, + fillPatternFn: (OrdinalSales sales, _) => + charts.FillPatternType.forwardHatch, + ), + new charts.Series( + id: 'Mobile', + domainFn: (OrdinalSales sales, _) => sales.year, + measureFn: (OrdinalSales sales, _) => sales.sales, + data: mobileSalesData, + ), + ]; + } +} + +/// Sample ordinal data type. +class OrdinalSales { + final String year; + final int sales; + + OrdinalSales(this.year, this.sales); +} +``` diff --git a/charts_flutter/docs/examples/bar_charts/pattern_forward_hatch_full.png b/charts_flutter/docs/examples/bar_charts/pattern_forward_hatch_full.png new file mode 100644 index 0000000000000000000000000000000000000000..d6c4cdf9e31f4eb9a795d679ee237a1dd79a57ac GIT binary patch literal 12956 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 W`G#$6>jJm|rLLl-T&#HK@&5sgy@v(> literal 0 HcmV?d00001 diff --git a/charts_flutter/docs/examples/bar_charts/pattern_forward_hatch_thumb.png b/charts_flutter/docs/examples/bar_charts/pattern_forward_hatch_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..609aa84d61d10bccdfd58c58dafcbd6826aa1d76 GIT binary patch literal 4743 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 seriesList; + final bool animate; + + SimpleBarChart(this.seriesList, {this.animate}); + + /// Creates a [BarChart] with sample data and no transition. + factory SimpleBarChart.withSampleData() { + return new SimpleBarChart( + _createSampleData(), + // Disable animations for image tests. + animate: false, + ); + } + + @override + Widget build(BuildContext context) { + return new charts.BarChart( + seriesList, + animate: animate, + ); + } + + /// Create one series with sample hard coded data. + static List> _createSampleData() { + final data = [ + new OrdinalSales('2014', 5), + new OrdinalSales('2015', 25), + new OrdinalSales('2016', 100), + new OrdinalSales('2017', 75), + ]; + + return [ + new charts.Series( + id: 'Sales', + colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault, + domainFn: (OrdinalSales sales, _) => sales.year, + measureFn: (OrdinalSales sales, _) => sales.sales, + data: data, + ) + ]; + } +} + +/// Sample ordinal data type. +class OrdinalSales { + final String year; + final int sales; + + OrdinalSales(this.year, this.sales); +} +``` diff --git a/charts_flutter/docs/examples/bar_charts/simple_full.png b/charts_flutter/docs/examples/bar_charts/simple_full.png new file mode 100644 index 0000000000000000000000000000000000000000..6ba88da7064b72ee700f2fab411ebcf3fd0efdc1 GIT binary patch literal 5209 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 Q=K>}GHWm(e4$hPDA7M6UH~;_u literal 0 HcmV?d00001 diff --git a/charts_flutter/docs/examples/bar_charts/spark_bar.md b/charts_flutter/docs/examples/bar_charts/spark_bar.md new file mode 100644 index 000000000..9fe7f60b4 --- /dev/null +++ b/charts_flutter/docs/examples/bar_charts/spark_bar.md @@ -0,0 +1,93 @@ +# Spark Bar Bar Chart Example + +![](spark_bar_full.png) + +Example: + +``` +/// Spark Bar Example +import 'package:flutter/material.dart'; +import 'package:charts_flutter/flutter.dart' as charts; + +/// Example of a Spark Bar by hiding both axis, reducing the chart margins. +class SparkBar extends StatelessWidget { + final List seriesList; + final bool animate; + + SparkBar(this.seriesList, {this.animate}); + + factory SparkBar.withSampleData() { + return new SparkBar( + _createSampleData(), + // Disable animations for image tests. + animate: false, + ); + } + + @override + Widget build(BuildContext context) { + return new charts.BarChart( + seriesList, + animate: animate, + + /// Assign a custom style for the measure axis. + /// + /// The NoneRenderSpec only draws an axis line (and even that can be hidden + /// with showAxisLine=false). + primaryMeasureAxis: + new charts.NumericAxisSpec(renderSpec: new charts.NoneRenderSpec()), + + /// This is an OrdinalAxisSpec to match up with BarChart's default + /// ordinal domain axis (use NumericAxisSpec or DateTimeAxisSpec for + /// other charts). + domainAxis: new charts.OrdinalAxisSpec( + // Make sure that we draw the domain axis line. + showAxisLine: true, + // But don't draw anything else. + renderSpec: new charts.NoneRenderSpec()), + + // With a spark chart we likely don't want large chart margins. + // 1px is the smallest we can make each margin. + layoutConfig: new charts.LayoutConfig( + leftMarginSpec: new charts.MarginSpec.fixedPixel(0), + topMarginSpec: new charts.MarginSpec.fixedPixel(0), + rightMarginSpec: new charts.MarginSpec.fixedPixel(0), + bottomMarginSpec: new charts.MarginSpec.fixedPixel(0)), + ); + } + + /// Create series list with single series + static List> _createSampleData() { + final globalSalesData = [ + new OrdinalSales('2007', 3100), + new OrdinalSales('2008', 3500), + new OrdinalSales('2009', 5000), + new OrdinalSales('2010', 2500), + new OrdinalSales('2011', 3200), + new OrdinalSales('2012', 4500), + new OrdinalSales('2013', 4400), + new OrdinalSales('2014', 5000), + new OrdinalSales('2015', 5000), + new OrdinalSales('2016', 4500), + new OrdinalSales('2017', 4300), + ]; + + return [ + new charts.Series( + id: 'Global Revenue', + domainFn: (OrdinalSales sales, _) => sales.year, + measureFn: (OrdinalSales sales, _) => sales.sales, + data: globalSalesData, + ), + ]; + } +} + +/// Sample ordinal data type. +class OrdinalSales { + final String year; + final int sales; + + OrdinalSales(this.year, this.sales); +} +``` diff --git a/charts_flutter/docs/examples/bar_charts/spark_bar_full.png b/charts_flutter/docs/examples/bar_charts/spark_bar_full.png new file mode 100644 index 0000000000000000000000000000000000000000..6768553c2b759383a1fe842a6827a28b778c5aac GIT binary patch literal 3616 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 seriesList; + final bool animate; + + StackedBarChart(this.seriesList, {this.animate}); + + /// Creates a stacked [BarChart] with sample data and no transition. + factory StackedBarChart.withSampleData() { + return new StackedBarChart( + _createSampleData(), + // Disable animations for image tests. + animate: false, + ); + } + + @override + Widget build(BuildContext context) { + return new charts.BarChart( + seriesList, + animate: animate, + barGroupingType: charts.BarGroupingType.stacked, + ); + } + + /// Create series list with multiple series + static List> _createSampleData() { + final desktopSalesData = [ + new OrdinalSales('2014', 5), + new OrdinalSales('2015', 25), + new OrdinalSales('2016', 100), + new OrdinalSales('2017', 75), + ]; + + final tableSalesData = [ + new OrdinalSales('2014', 25), + new OrdinalSales('2015', 50), + new OrdinalSales('2016', 10), + new OrdinalSales('2017', 20), + ]; + + final mobileSalesData = [ + new OrdinalSales('2014', 10), + new OrdinalSales('2015', 15), + new OrdinalSales('2016', 50), + new OrdinalSales('2017', 45), + ]; + + return [ + new charts.Series( + id: 'Desktop', + domainFn: (OrdinalSales sales, _) => sales.year, + measureFn: (OrdinalSales sales, _) => sales.sales, + data: desktopSalesData, + ), + new charts.Series( + id: 'Tablet', + domainFn: (OrdinalSales sales, _) => sales.year, + measureFn: (OrdinalSales sales, _) => sales.sales, + data: tableSalesData, + ), + new charts.Series( + id: 'Mobile', + domainFn: (OrdinalSales sales, _) => sales.year, + measureFn: (OrdinalSales sales, _) => sales.sales, + data: mobileSalesData, + ), + ]; + } +} + +/// Sample ordinal data type. +class OrdinalSales { + final String year; + final int sales; + + OrdinalSales(this.year, this.sales); +} +``` diff --git a/charts_flutter/docs/examples/bar_charts/stacked_full.png b/charts_flutter/docs/examples/bar_charts/stacked_full.png new file mode 100644 index 0000000000000000000000000000000000000000..4af50bfab815192114c590fbf457c46ef90418ab GIT binary patch literal 5550 zcmeHLcTkhtwhtm=IS3XG=cvH3!8sxw;Rr|wM+ilVfFeQ&igY2A&~@41!XS`0aR=6K@qzX)cDkm9 z5J;c|1QK=+0s%lMj0S=D$Uz{pwh)MFG6W*xkzRLI9b9a{QBhIm=H_rX9DzWjq@>X4^q!ucr%#`1X=xP|6}^7_ zT3cKD?%li3o;~aC?j9W-H8C;y!U%#%Wr$?bstgNio*4Ah=nwy*3`}gk$1_tikyLaQp z4P9N`)z#ImuCBqs!JM3&rlzLl<>mJF_UF%^J2^Qq7z{KT9T5>>V`KB-!v`D=H$6SQ zxVZS~)2EJ(j+vPm%E&05%%~gYR1I_MhgUi&^D8SWrKP0>1qBHS3C_;W?UTUZJlD(1 zYkYjXuC8uqXec~9Twh;*6#yEjKy7VpT3VW?r{~HlP&3T6wzi&|o134XkBNz?tgI|6 zE32xix_0eaVq#)VO^unESzBA1x3@QeKo}bv)6vmcSXfwE;gT1)Ju|=;8Zg7+PBXdv zv%rTj?iv8#DBKwqFihtzu5epM0S5<%l9CcU9$#HuZD3#!8yky6B2!aSO-)V7WO8R` z=fuRs)vH&(e*GF89Gsn<9U2;HYisN7?mjy^`|;z)bOb2FJK<_M<#sqq1xRZ-({WEI?eXDN< zRvB#IdKr6gZteZ(YH0IH8jk2#K*7DkKY8*bIy(B!ojd*g{UISCFJHdAdGjU)gL(Y; zabaO$MMcHs%a>bQTg%JKU1kU%rq? zBnt}*BO{~FpFj8Y^*ws@=)r>ruCA^RA3h8U3fkJ*;`rSIGX}zQ+W>xBBifntHtAe{$3j7g1(xHzQS>>YG;w?;mBJ> zMXn^}m|wNkcq_AZ_FRXxFRr}g{a z%63ItU-h4EpHZ-zx;A>1+*eUrkR|Os1yJD6Ulm<0#TXx2_EBH}Eo&-m_lAeo6y6L& zliT0|DwLzvmJo8S?P%xyis^o(3)4nF5`r*-XY_9#TE3lPuI~Eq{1YRTGXb!HKYx9S zrsp-sm5{Nbq^en;l*+ESPH>^lMIXMtn=IjahBR3B%MD3Zc7;RRsT~v{ox&+=bZh)X zm|DQB3lZrxhXRV^60XoSoI$^vd4wH$n zkviUzAV_E(#?WGE#YPK%sLkd{eZDv^Lq+B$#9*Q45u*eN%OBAlQ?z2fOP!4*#EFf^ zN4oqriy37-dfG%b(|eRaRygT2Zz-f<%G7b0_!HrcJsi@^t5Y=FxAR{IlAa-O?@P($xs8U`s{k>-XS-=frNR%c z%+m>N3ZIjLFqUBcA2)KumSxw+;EXa4zm0f?Rk*2v z8ZGXkB`1uL7XC$FjfV79WQ;eW`1OCIW1*uC6nHT8;B(VKm|7~olN8S}V(u;_tRbJ1 zX4-yYn6faI$L*XZ@1S|up2`Acep%T8VX-N`va|fEsr*qR(`8Ap`M_dQxn+}T-@3~m0|i}W!Z zZ~WVFPjd~COrI+*W(|9h-}n35mPzd$cvmyhN(~dV;Gvm&e|r9zBwRziH?Vmn0Im`} z0KOk4Kvl!k}Z#*td_q*D+9V9ZB z$Szk`cTTzpdu>_wewc5}R5|=37v!K1931>k>6?YC*@c$IVWuj^e=EFg~s@rUwKfXWb zxi9fmQQ3NKTDw@jXl3>sL#pvl>t8YKnql)5O*&Q-5sG9BOls}>@6;?uta1fXBE`m5 zZI$oC`fQuvb>UHU*txc1Si9Vv8~(osT8t6al+?fEMCZ9_F$-&2A96qECyw>`YvB$| z$Ld*xiAmDRa1XbZ96muV84+Wr8s?9;-#`36Q2C5XYQPAnO>dhxY%e@m2KI3=B3t6U z(AD<}B+w)Pr&YEbsZbejF)U9;G1QY6Fz!g_chZ!c>jG;lOJRE339KzV0yI-l+TtMs zv^(3?L{mzT7-sZqYiH9QuE^wPUM1`ic9Q$M^=m1t?=GPCZ<@TSdf-?N)*wyZx}zY) z84$7z+XF6$04tRdxQC4Mn!Lw|VKQJ0B*Ei0`Vr)E(o6z56Ly2p0phl|0m!Mh4S`;u zcMiyL=AXaWzd}1R7fR19FN5xsOmzI_6pC!V!Un@&#oW}E2bFsiT}1Xs$aq;=Iz|U8J-O$DSg>b=bNNviV;H@QwKKr zv;X-#&Ere|7ID3PMCSLN@^*+aHoLvCx(XDzvIy*4X{L|i#@!S}6-pkjYTMp}B{MwTEg zzq|}Z2cuDRf+k$9po%zKWQWn%=4|}N>4hZ`)@kSm=VRDwVX^19K)(j4+U?;s>wjp9 zTXC|va24btv_z^5^?MzxJv}cJ)NATbb}jLq;bLnC8ye9RCgCzA(A^qqp$kV3{>;)q z|4c6m%{2{0pS$Fr&ET`E&Ix(L*k|YKx^ahkM294umfZvPkcoABHRGf-B@5p;!dCss zhF-=WWp)wA_Y(=T2|?Z{$M)(N#4ape7@N>nW!2wXLn!QzL9}d^>QIpr$(Otnz=f52 zFLZM5$-6QNPh^zWm7!chQS=b1BKTt|I$EZ6A;_MxOjbd|@s15b5<#`7&bB-OpLPXt zmQ5gFa3Q7Ir+aDkEvf$s0!V3rAB$BHj(wru=-(7XyJaghyy?PdaTjN$`iWv{?QO?Q z{L{Y|?$Oh8l8q~Y{s8u<8qLmjup#pqN=*EDYEeW5a<4b__||#mRNJ)MQCV!>wT{Pw zHGvaIFZ`3P4hmqA=XlHu&!uLb{9?NLO2kn>XAL6iI%1O5t6rr@LB;1-v5q>Y;=D8K zf7alu`PK=TERQ`Ec*Gy2eTqnGdWNdL%aM~~%hul9yx>=kP>lo`Pn(kE_oER8aUw)f zFLggNG-(+n5P>2z@r|M!Fp8X&!znk1%$C0>by0Jr<;reY8u~t7^1)E#NKDj&hy*^_&JFkmBHVM2uR)cpl)N~lfyvU-0y73^Y+Po)KifJu$BC+c} z9{)-?bjlK&q??7u6x3K=Pv6o?K16iQRoSfp_E5lZ98y83!CQaxQmA`(N6dN`jpe>l zjhYWX?m%YV{(bQ`6z3{bEm)P~3-(G3uvcPDXYv8pex@>LbF(otXxB&R{^ha7g+w@! z%77~PRVIlr9YtVU@F6Lc8s#6_H9v-=_y+UVOoY7Cu8pp(!AptCf6;*0&Y#s!x*UC#rfRgeAIEt{xh42;C?kIYCzC_azXd zN282axHt=QAEhnijeY3N$&-%ZGGxPYqS}Rq?wSd2Vz6vI89oNBy|91ziC0dPb7FxjKBdLGe7aF67ZSKpo)1fDxO<-)P!hz7 z%iJ^SE!-W4apfL>S_{Lv3Lbu@u~;<@kHhoM0F(%Z(uar6 zZa5Am9t?)HI8G+vHg#kPF8O=LQh|^wzyJgxB!<%9!4DsF&NO+F~xt zW^XpnGWkndR?Ye2KV-bMKd&GtjkAhCgnXoxmsepb`g;V6eK;rjE1C!mKlef|Kj1&RczRm}ckoBxx@8n=1ar zhi=f8;9(Do==X}8?SFsHqP1_J@7zM$tJ- seriesList; + final bool animate; + + StackedHorizontalBarChart(this.seriesList, {this.animate}); + + /// Creates a stacked [BarChart] with sample data and no transition. + factory StackedHorizontalBarChart.withSampleData() { + return new StackedHorizontalBarChart( + _createSampleData(), + // Disable animations for image tests. + animate: false, + ); + } + + @override + Widget build(BuildContext context) { + // For horizontal bar charts, set the [vertical] flag to false. + return new charts.BarChart( + seriesList, + animate: animate, + barGroupingType: charts.BarGroupingType.stacked, + vertical: false, + ); + } + + /// Create series list with multiple series + static List> _createSampleData() { + final desktopSalesData = [ + new OrdinalSales('2014', 5), + new OrdinalSales('2015', 25), + new OrdinalSales('2016', 100), + new OrdinalSales('2017', 75), + ]; + + final tableSalesData = [ + new OrdinalSales('2014', 25), + new OrdinalSales('2015', 50), + new OrdinalSales('2016', 10), + new OrdinalSales('2017', 20), + ]; + + final mobileSalesData = [ + new OrdinalSales('2014', 10), + new OrdinalSales('2015', 15), + new OrdinalSales('2016', 50), + new OrdinalSales('2017', 45), + ]; + + return [ + new charts.Series( + id: 'Desktop', + domainFn: (OrdinalSales sales, _) => sales.year, + measureFn: (OrdinalSales sales, _) => sales.sales, + data: desktopSalesData, + ), + new charts.Series( + id: 'Tablet', + domainFn: (OrdinalSales sales, _) => sales.year, + measureFn: (OrdinalSales sales, _) => sales.sales, + data: tableSalesData, + ), + new charts.Series( + id: 'Mobile', + domainFn: (OrdinalSales sales, _) => sales.year, + measureFn: (OrdinalSales sales, _) => sales.sales, + data: mobileSalesData, + ), + ]; + } +} + +/// Sample ordinal data type. +class OrdinalSales { + final String year; + final int sales; + + OrdinalSales(this.year, this.sales); +} +``` diff --git a/charts_flutter/docs/examples/bar_charts/stacked_horizontal_full.png b/charts_flutter/docs/examples/bar_charts/stacked_horizontal_full.png new file mode 100644 index 0000000000000000000000000000000000000000..959a2c27a9107783aa9ddeb39e3eb832a6368199 GIT binary patch literal 12372 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 CgNs=J literal 0 HcmV?d00001 diff --git a/charts_flutter/docs/examples/bar_charts/stacked_horizontal_thumb.png b/charts_flutter/docs/examples/bar_charts/stacked_horizontal_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..117bb00dcf5f6027f244be2da43a66e3628216f6 GIT binary patch literal 3551 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 seriesList; + final bool animate; + + StackedBarTargetLineChart(this.seriesList, {this.animate}); + + /// Creates a stacked [BarChart] with sample data and no transition. + factory StackedBarTargetLineChart.withSampleData() { + return new StackedBarTargetLineChart( + _createSampleData(), + // Disable animations for image tests. + animate: false, + ); + } + + @override + Widget build(BuildContext context) { + return new charts.BarChart(seriesList, + animate: animate, + barGroupingType: charts.BarGroupingType.stacked, + customSeriesRenderers: [ + new charts.BarTargetLineRendererConfig( + // ID used to link series to this renderer. + customRendererId: 'customTargetLine', + groupingType: charts.BarGroupingType.stacked) + ]); + } + + /// Create series list with multiple series + static List> _createSampleData() { + final desktopSalesData = [ + new OrdinalSales('2014', 5), + new OrdinalSales('2015', 25), + new OrdinalSales('2016', 100), + new OrdinalSales('2017', 75), + ]; + + final tableSalesData = [ + new OrdinalSales('2014', 25), + new OrdinalSales('2015', 50), + new OrdinalSales('2016', 10), + new OrdinalSales('2017', 20), + ]; + + final mobileSalesData = [ + new OrdinalSales('2014', 10), + new OrdinalSales('2015', 15), + new OrdinalSales('2016', 50), + new OrdinalSales('2017', 45), + ]; + + final desktopTargetLineData = [ + new OrdinalSales('2014', 4), + new OrdinalSales('2015', 20), + new OrdinalSales('2016', 80), + new OrdinalSales('2017', 65), + ]; + + final tableTargetLineData = [ + new OrdinalSales('2014', 30), + new OrdinalSales('2015', 55), + new OrdinalSales('2016', 15), + new OrdinalSales('2017', 25), + ]; + + final mobileTargetLineData = [ + new OrdinalSales('2014', 10), + new OrdinalSales('2015', 5), + new OrdinalSales('2016', 45), + new OrdinalSales('2017', 35), + ]; + + return [ + new charts.Series( + id: 'Desktop', + domainFn: (OrdinalSales sales, _) => sales.year, + measureFn: (OrdinalSales sales, _) => sales.sales, + data: desktopSalesData, + ), + new charts.Series( + id: 'Tablet', + domainFn: (OrdinalSales sales, _) => sales.year, + measureFn: (OrdinalSales sales, _) => sales.sales, + data: tableSalesData, + ), + new charts.Series( + id: 'Mobile', + domainFn: (OrdinalSales sales, _) => sales.year, + measureFn: (OrdinalSales sales, _) => sales.sales, + data: mobileSalesData, + ), + new charts.Series( + id: 'Desktop Target Line', + domainFn: (OrdinalSales sales, _) => sales.year, + measureFn: (OrdinalSales sales, _) => sales.sales, + data: desktopTargetLineData, + ) + // Configure our custom bar target renderer for this series. + ..setAttribute(charts.rendererIdKey, 'customTargetLine'), + new charts.Series( + id: 'Tablet Target Line', + domainFn: (OrdinalSales sales, _) => sales.year, + measureFn: (OrdinalSales sales, _) => sales.sales, + data: tableTargetLineData, + ) + // Configure our custom bar target renderer for this series. + ..setAttribute(charts.rendererIdKey, 'customTargetLine'), + new charts.Series( + id: 'Mobile Target Line', + domainFn: (OrdinalSales sales, _) => sales.year, + measureFn: (OrdinalSales sales, _) => sales.sales, + data: mobileTargetLineData, + ) + // Configure our custom bar target renderer for this series. + ..setAttribute(charts.rendererIdKey, 'customTargetLine'), + ]; + } +} + +/// Sample ordinal data type. +class OrdinalSales { + final String year; + final int sales; + + OrdinalSales(this.year, this.sales); +} +``` diff --git a/charts_flutter/docs/examples/bar_charts/stacked_target_line_full.png b/charts_flutter/docs/examples/bar_charts/stacked_target_line_full.png new file mode 100644 index 0000000000000000000000000000000000000000..085f660ccad0f93b2c14e4d36844fd50352e5876 GIT binary patch literal 10715 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 O07yr}5Lu;e6ZT(g7e225 literal 0 HcmV?d00001 diff --git a/charts_flutter/docs/examples/bar_charts/stacked_thumb.png b/charts_flutter/docs/examples/bar_charts/stacked_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..eb2f463c24fd64e65ff19adac420f2532d76fa34 GIT binary patch literal 2904 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 literal 0 HcmV?d00001 diff --git a/charts_flutter/docs/examples/i18ns/rtl_bar_chart.md b/charts_flutter/docs/examples/i18ns/rtl_bar_chart.md new file mode 100644 index 000000000..bd09c69eb --- /dev/null +++ b/charts_flutter/docs/examples/i18ns/rtl_bar_chart.md @@ -0,0 +1,79 @@ +# Rtl Bar Chart i18n Example + +![](rtl_bar_chart_full.png) + +Example: + +``` +/// RTL Bar chart example +import 'package:charts_flutter/flutter.dart' as charts; +import 'package:flutter/material.dart'; + +class RTLBarChart extends StatelessWidget { + final List seriesList; + final bool animate; + + RTLBarChart(this.seriesList, {this.animate}); + + /// Creates a [BarChart] with sample data and no transition. + factory RTLBarChart.withSampleData() { + return new RTLBarChart( + _createSampleData(), + // Disable animations for image tests. + animate: false, + ); + } + + @override + Widget build(BuildContext context) { + // Charts will determine if RTL is enabled by checking the directionality by + // requesting Directionality.of(context). This returns the text direction + // from the closest instance of that encloses the context passed to build + // the chart. A [TextDirection.rtl] will be treated as a RTL chart. This + // means that the directionality widget does not have to directly wrap each + // chart. It is show here as an example only. + // + // By default, when a chart detects RTL: + // Measure axis positions are flipped. Primary measure axis is on the right + // and the secondary measure axis is on the left (when used). + // Domain axis' first domain starts on the right and grows left. + // + // Optionally, [RTLSpec] can be passed in when creating the chart to specify + // chart display settings in RTL mode. + return new Directionality( + textDirection: TextDirection.rtl, + child: new charts.BarChart( + seriesList, + animate: animate, + vertical: false, + )); + } + + /// Create one series with sample hard coded data. + static List> _createSampleData() { + final data = [ + new OrdinalSales('2014', 5), + new OrdinalSales('2015', 25), + new OrdinalSales('2016', 100), + new OrdinalSales('2017', 75), + ]; + + return [ + new charts.Series( + id: 'Sales', + domainFn: (OrdinalSales sales, _) => sales.year, + measureFn: (OrdinalSales sales, _) => sales.sales, + data: data, + ) + ]; + } +} + +/// Sample ordinal data type. +class OrdinalSales { + final String year; + final int sales; + + OrdinalSales(this.year, this.sales); +} +``` diff --git a/charts_flutter/docs/examples/i18ns/rtl_bar_chart_full.png b/charts_flutter/docs/examples/i18ns/rtl_bar_chart_full.png new file mode 100644 index 0000000000000000000000000000000000000000..0032a85ca863e09886fb14766b693b19f303f295 GIT binary patch literal 5714 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 literal 0 HcmV?d00001 diff --git a/charts_flutter/docs/examples/i18ns/rtl_bar_chart_thumb.png b/charts_flutter/docs/examples/i18ns/rtl_bar_chart_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..e8d89ff40f900a514eb0cbc3f3586353c5b9cbaf GIT binary patch literal 2876 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 BOmzSN literal 0 HcmV?d00001 diff --git a/charts_flutter/docs/examples/i18ns/rtl_line_chart.md b/charts_flutter/docs/examples/i18ns/rtl_line_chart.md new file mode 100644 index 000000000..fd8e3493e --- /dev/null +++ b/charts_flutter/docs/examples/i18ns/rtl_line_chart.md @@ -0,0 +1,75 @@ +# Rtl Line Chart i18n Example + +![](rtl_line_chart_full.png) + +Example: + +``` +/// RTL Line chart example +import 'package:charts_flutter/flutter.dart' as charts; +import 'package:flutter/material.dart'; + +class RTLLineChart extends StatelessWidget { + final List seriesList; + final bool animate; + + RTLLineChart(this.seriesList, {this.animate}); + + /// Creates a [LineChart] with sample data and no transition. + factory RTLLineChart.withSampleData() { + return new RTLLineChart( + _createSampleData(), + // Disable animations for image tests. + animate: false, + ); + } + + @override + Widget build(BuildContext context) { + // Charts will determine if RTL is enabled by checking the directionality by + // requesting Directionality.of(context). This returns the text direction + // from the closest instance of that encloses the context passed to build + // the chart. A [TextDirection.rtl] will be treated as a RTL chart. This + // means that the directionality widget does not have to directly wrap each + // chart. It is show here as an example only. + // + // By default, when a chart detects RTL: + // Measure axis positions are flipped. Primary measure axis is on the right + // and the secondary measure axis is on the left (when used). + // Domain axis' first domain starts on the right and grows left. + return new Directionality( + textDirection: TextDirection.rtl, + child: new charts.LineChart( + seriesList, + animate: animate, + )); + } + + /// Create one series with sample hard coded data. + static List> _createSampleData() { + final data = [ + new LinearSales(0, 5), + new LinearSales(1, 25), + new LinearSales(2, 100), + new LinearSales(3, 75), + ]; + + return [ + new charts.Series( + id: 'Sales', + domainFn: (LinearSales sales, _) => sales.year, + measureFn: (LinearSales sales, _) => sales.sales, + data: data, + ) + ]; + } +} + +/// Sample linear data type. +class LinearSales { + final int year; + final int sales; + + LinearSales(this.year, this.sales); +} +``` diff --git a/charts_flutter/docs/examples/i18ns/rtl_line_chart_full.png b/charts_flutter/docs/examples/i18ns/rtl_line_chart_full.png new file mode 100644 index 0000000000000000000000000000000000000000..a14c26929de33c45a96d27198db3558aca53341d GIT binary patch literal 14720 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 WJmF20?PD+j(z>p9tw8nelm7+l-3^ie literal 0 HcmV?d00001 diff --git a/charts_flutter/docs/examples/i18ns/rtl_line_chart_thumb.png b/charts_flutter/docs/examples/i18ns/rtl_line_chart_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..2c5ff61f0636fc5c924ea8818f5b4d7cc998f3c5 GIT binary patch literal 3476 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 seriesList; + final bool animate; + + RTLSeriesLegend(this.seriesList, {this.animate}); + + /// Creates a [BarChart] with sample data and no transition. + factory RTLSeriesLegend.withSampleData() { + return new RTLSeriesLegend( + _createSampleData(), + // Disable animations for image tests. + animate: false, + ); + } + + @override + Widget build(BuildContext context) { + // Charts will determine if RTL is enabled by checking the directionality by + // requesting Directionality.of(context). This returns the text direction + // from the closest instance of that encloses the context passed to build + // the chart. A [TextDirection.rtl] will be treated as a RTL chart. This + // means that the directionality widget does not have to directly wrap each + // chart. It is show here as an example only. + // + // When the legend behavior detects RTL: + // [BuildablePosition.start] is to the right of the chart. + // [BuildablePosition.end] is to the left of the chart. + // + // If the [BuildablePosition] is top or bottom, the start justification + // is to the right, and the end justification is to the left. + // + // The legend's tabular layout will also layout rows and columns from right + // to left. + // + // The below example changes the position to 'start' and max rows of 2 in + // order to show these effects, but are not required for SeriesLegend to + // work with the correct directionality. + return new Directionality( + textDirection: TextDirection.rtl, + child: new charts.BarChart( + seriesList, + animate: animate, + behaviors: [ + new charts.SeriesLegend( + position: charts.BuildablePosition.end, desiredMaxRows: 2) + ], + )); + } + + /// Create series list with multiple series + static List> _createSampleData() { + final desktopSalesData = [ + new OrdinalSales('2014', 5), + new OrdinalSales('2015', 25), + new OrdinalSales('2016', 100), + new OrdinalSales('2017', 75), + ]; + + final tabletSalesData = [ + new OrdinalSales('2014', 25), + new OrdinalSales('2015', 50), + new OrdinalSales('2016', 10), + new OrdinalSales('2017', 20), + ]; + + final mobileSalesData = [ + new OrdinalSales('2014', 10), + new OrdinalSales('2015', 15), + new OrdinalSales('2016', 50), + new OrdinalSales('2017', 45), + ]; + + final otherSalesData = [ + new OrdinalSales('2014', 20), + new OrdinalSales('2015', 35), + new OrdinalSales('2016', 15), + new OrdinalSales('2017', 10), + ]; + + return [ + new charts.Series( + id: 'Desktop', + domainFn: (OrdinalSales sales, _) => sales.year, + measureFn: (OrdinalSales sales, _) => sales.sales, + data: desktopSalesData, + ), + new charts.Series( + id: 'Tablet', + domainFn: (OrdinalSales sales, _) => sales.year, + measureFn: (OrdinalSales sales, _) => sales.sales, + data: tabletSalesData, + ), + new charts.Series( + id: 'Mobile', + domainFn: (OrdinalSales sales, _) => sales.year, + measureFn: (OrdinalSales sales, _) => sales.sales, + data: mobileSalesData, + ), + new charts.Series( + id: 'Other', + domainFn: (OrdinalSales sales, _) => sales.year, + measureFn: (OrdinalSales sales, _) => sales.sales, + data: otherSalesData, + ), + ]; + } +} + +/// Sample ordinal data type. +class OrdinalSales { + final String year; + final int sales; + + OrdinalSales(this.year, this.sales); +} +``` diff --git a/charts_flutter/docs/examples/i18ns/rtl_series_legend_full.png b/charts_flutter/docs/examples/i18ns/rtl_series_legend_full.png new file mode 100644 index 0000000000000000000000000000000000000000..25955eaedce141c4189ff48ef9f69e2f77b017d6 GIT binary patch literal 18788 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 literal 0 HcmV?d00001 diff --git a/charts_flutter/docs/examples/interactions/selection_bar_highlight.md b/charts_flutter/docs/examples/interactions/selection_bar_highlight.md new file mode 100644 index 000000000..412dc02cc --- /dev/null +++ b/charts_flutter/docs/examples/interactions/selection_bar_highlight.md @@ -0,0 +1,71 @@ +# Selection Bar Highlight Interactions Example + +![](selection_bar_highlight_full.png) + +Example: + +``` +import 'package:charts_flutter/flutter.dart' as charts; +import 'package:flutter/material.dart'; + +class SelectionBarHighlight extends StatelessWidget { + final List seriesList; + final bool animate; + + SelectionBarHighlight(this.seriesList, {this.animate}); + + /// Creates a [BarChart] with sample data and no transition. + factory SelectionBarHighlight.withSampleData() { + return new SelectionBarHighlight( + _createSampleData(), + // Disable animations for image tests. + animate: false, + ); + } + + @override + Widget build(BuildContext context) { + // This is just a simple bar chart with optional property + // [defaultInteractions] set to true to include the default + // interactions/behaviors when building the chart. + // This includes bar highlighting. + // + // Note: defaultInteractions defaults to true. + // + // [defaultInteractions] can be set to false to avoid the default + // interactions. + return new charts.BarChart( + seriesList, + animate: animate, + defaultInteractions: true, + ); + } + + /// Create one series with sample hard coded data. + static List> _createSampleData() { + final data = [ + new OrdinalSales('2014', 5), + new OrdinalSales('2015', 25), + new OrdinalSales('2016', 100), + new OrdinalSales('2017', 75), + ]; + + return [ + new charts.Series( + id: 'Sales', + domainFn: (OrdinalSales sales, _) => sales.year, + measureFn: (OrdinalSales sales, _) => sales.sales, + data: data, + ) + ]; + } +} + +/// Sample ordinal data type. +class OrdinalSales { + final String year; + final int sales; + + OrdinalSales(this.year, this.sales); +} +``` diff --git a/charts_flutter/docs/examples/interactions/selection_bar_highlight_full.png b/charts_flutter/docs/examples/interactions/selection_bar_highlight_full.png new file mode 100644 index 0000000000000000000000000000000000000000..83a97bfdd02b308904f50788f4b59f82e8f229dc GIT binary patch literal 4865 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 AUH||9 literal 0 HcmV?d00001 diff --git a/charts_flutter/docs/examples/interactions/selection_bar_highlight_thumb.png b/charts_flutter/docs/examples/interactions/selection_bar_highlight_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..ddd273e3bff91fc78974a6e8e499463c5474b7f3 GIT binary patch literal 2480 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 literal 0 HcmV?d00001 diff --git a/charts_flutter/docs/examples/interactions/selection_callback_example.md b/charts_flutter/docs/examples/interactions/selection_callback_example.md new file mode 100644 index 000000000..481b41f55 --- /dev/null +++ b/charts_flutter/docs/examples/interactions/selection_callback_example.md @@ -0,0 +1,149 @@ +# Selection Callback Example Interactions Example + +![](selection_callback_example_full.png) + +Example: + +``` +/// Timeseries chart with example of updating external state based on selection. +/// +/// A SelectionModelConfig can be provided for each of the different +/// [SelectionModel] (currently info and action). +/// +/// [SelectionModelType.info] is the default selection chart exploration type +/// initiated by some tap event. This is a different model from +/// [SelectionModelType.action] which is typically used to select some value as +/// an input to some other UI component. This allows dual state of exploring +/// and selecting data via different touch events. +/// +/// See [SelectNearest] behavior on setting the different ways of triggering +/// [SelectionModel] updates from hover & click events. +import 'package:charts_flutter/flutter.dart' as charts; +import 'package:flutter/material.dart'; + +class SelectionCallbackExample extends StatefulWidget { + final List seriesList; + final bool animate; + + SelectionCallbackExample(this.seriesList, {this.animate}); + + /// Creates a [charts.TimeSeriesChart] with sample data and no transition. + factory SelectionCallbackExample.withSampleData() { + return new SelectionCallbackExample( + _createSampleData(), + // Disable animations for image tests. + animate: false, + ); + } + + // We need a Stateful widget to build the selection details with the current + // selection as the state. + @override + State createState() => new _SelectionCallbackState(); + + /// Create one series with sample hard coded data. + static List> _createSampleData() { + final us_data = [ + new TimeSeriesSales(new DateTime(2017, 9, 19), 5), + new TimeSeriesSales(new DateTime(2017, 9, 26), 25), + new TimeSeriesSales(new DateTime(2017, 10, 3), 78), + new TimeSeriesSales(new DateTime(2017, 10, 10), 54), + ]; + + final uk_data = [ + new TimeSeriesSales(new DateTime(2017, 9, 19), 15), + new TimeSeriesSales(new DateTime(2017, 9, 26), 33), + new TimeSeriesSales(new DateTime(2017, 10, 3), 68), + new TimeSeriesSales(new DateTime(2017, 10, 10), 48), + ]; + + return [ + new charts.Series( + id: 'US Sales', + domainFn: (TimeSeriesSales sales, _) => sales.time, + measureFn: (TimeSeriesSales sales, _) => sales.sales, + data: us_data, + ), + new charts.Series( + id: 'UK Sales', + domainFn: (TimeSeriesSales sales, _) => sales.time, + measureFn: (TimeSeriesSales sales, _) => sales.sales, + data: uk_data, + ) + ]; + } +} + +class _SelectionCallbackState extends State { + DateTime _time; + Map _measures; + + // Listens to the underlying selection changes, and updates the information + // relevant to building the primitive legend like information under the + // chart. + _onSelectionChanged(charts.SelectionModel model) { + final selectedDatum = model.selectedDatum; + + DateTime time; + final measures = {}; + + // We get the model that updated with a list of [SeriesDatum] which is + // simply a pair of series & datum. + // + // Walk the selection updating the measures map, storing off the sales and + // series name for each selection point. + if (selectedDatum.isNotEmpty) { + time = selectedDatum.first.datum.time; + selectedDatum + .forEach((charts.SeriesDatum datumPair) { + measures[datumPair.series.displayName] = datumPair.datum.sales; + }); + } + + // Request a build. + setState(() { + _time = time; + _measures = measures; + }); + } + + @override + Widget build(BuildContext context) { + // The children consist of a Chart and Text widgets below to hold the info. + final children = [ + new SizedBox( + height: 150.0, + child: new charts.TimeSeriesChart( + widget.seriesList, + animate: widget.animate, + selectionModels: [ + new charts.SelectionModelConfig( + type: charts.SelectionModelType.info, + listener: _onSelectionChanged, + ) + ], + )), + ]; + + // If there is a selection, then include the details. + if (_time != null) { + children.add(new Padding( + padding: new EdgeInsets.only(top: 5.0), + child: new Text(_time.toString()))); + } + _measures?.forEach((String series, num value) { + children.add(new Text('${series}: ${value}')); + }); + + return new Column(children: children); + } +} + +/// Sample time series data type. +class TimeSeriesSales { + final DateTime time; + final int sales; + + TimeSeriesSales(this.time, this.sales); +} +``` diff --git a/charts_flutter/docs/examples/interactions/selection_callback_example_full.png b/charts_flutter/docs/examples/interactions/selection_callback_example_full.png new file mode 100644 index 0000000000000000000000000000000000000000..9320f7de27bcc752fec8630cdf7d24bf2f712448 GIT binary patch literal 31094 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 Kjmhf|p89VAD=e@8 literal 0 HcmV?d00001 diff --git a/charts_flutter/docs/examples/interactions/selection_callback_example_thumb.png b/charts_flutter/docs/examples/interactions/selection_callback_example_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..0dc151a43ebc9a14b12db7bc80ba76e64badc629 GIT binary patch literal 6271 zcmZ{IcQ{;M*zK4M84`j>B#7R7C)z~sf>DF$UG(0gMDH!41<^)}5@Yxwh(SaN(V|Bu zTJ#d`&VBAb_xYZ0=9$@N?>T#)v)^~Eb=JHwni`6P1QY}i2!v2sNlqKI@4?3ijt9Pv z-X)%b24*X*E)9XyCEd9)#|3>_OC@b}2*jTm0ttC$4nAadC@32&Yp5(It>gQ1C$Haw(%ye9#MFXLkCe6<@?I(VS84T+ zA{CUkm%i$!#wSERUh!oT9y#3+&)bK_L&A6x_YsRZLGFs^-Y1gdCR>kvDoaqL^4g^2 zZY(%%_mv?qI59r$VU8?4@rVFa4tw82^1!W@?GOKW%$iMFyNI4&{X^nkdOo z3JnnlSXCjaoaEyhRFT4G3RElwj$=9d{~gqXL=aEhX+=AhFPX@uXr~UWjtCN}kM*s( zk5eNF%it%z5<@?JkR2Z%PdN!UH8pMQ?UfZ5-!hr3lx#=dq5Iq@Pnyi)+4A`%E16Q+ zSo(mq1ogeVyu7OFYC{-j*1$ORaz!{qm>|q_*g=%+%n&UTK1Tb?Exdclx6sITc>PdN zNJxwGAzRkK2W_^kt*v-UI#{fB9FmCA8}~X$Z=I%ts|YTwQMnwFtG_Syj0BJ5c)1Vz zx90fwbOR?h_vqAAbP;P+ZSC0HTtYf29n8D6?Wd)LkYFLS5|wZ>y7c4Q z$Y_1nLgkSKR(Jp|wYcWfwPsT7bQLDHh-Z4acRh^qb;_3EGG@sxenx)=?DM9%`pcdW zO#c_#&D=b_Nnfo(?V`dg?4{>U8bu#11m}JOla!WjFj{PUygs&iz&BZ>M~F0;f;nX^ zR^leysBIWKYn}O_Wf~Oe^jT>k`gwPf;W#Zs+4PL{c#m1qQdbhctdkwV?neH0Ach%3 zTP@0qCAuQ2NIt4)!tBKER&QRpEA;L~bZjU<4L%0A8&ud+mtH{6-%Mp1wI^C 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 T;dLEg0z_F}L#{@~EbRXPy~_(8 literal 0 HcmV?d00001 diff --git a/charts_flutter/docs/examples/interactions/selection_line_highlight.md b/charts_flutter/docs/examples/interactions/selection_line_highlight.md new file mode 100644 index 000000000..10f78a736 --- /dev/null +++ b/charts_flutter/docs/examples/interactions/selection_line_highlight.md @@ -0,0 +1,81 @@ +# Selection Line Highlight Interactions Example + +![](selection_line_highlight_full.png) + +Example: + +``` +import 'package:charts_flutter/flutter.dart' as charts; +import 'package:flutter/material.dart'; + +class SelectionLineHighlight extends StatelessWidget { + final List seriesList; + final bool animate; + + SelectionLineHighlight(this.seriesList, {this.animate}); + + /// Creates a [LineChart] with sample data and no transition. + factory SelectionLineHighlight.withSampleData() { + return new SelectionLineHighlight( + _createSampleData(), + // Disable animations for image tests. + animate: false, + ); + } + + @override + Widget build(BuildContext context) { + // This is just a simple line chart with a behavior that highlights the + // selected points along the lines. A point will be drawn at the selected + // datum's x,y coordinate, and a vertical follow line will be drawn through + // it. + // + // A [Charts.LinePointHighlighter] behavior is added manually to enable the + // highlighting effect. + // + // As an alternative, [defaultInteractions] can be set to true to include + // the default chart interactions, including a LinePointHighlighter. + return new charts.LineChart(seriesList, animate: animate, behaviors: [ + // Optional - Configures a [LinePointHighlighter] behavior with a + // vertical follow line. A vertical follow line is included by default, + // but is shown here as an example configuration. + new charts.LinePointHighlighter( + showHorizontalFollowLine: false, showVerticalFollowLine: true), + // Optional - By default, select nearest is configured to trigger with tap + // so that a user can have pan/zoom behavior and line point highlighter. + // Changing the trigger to tap and drag allows the highlighter to follow + // the dragging gesture but it is not recommended to be used when pan/zoom + // behavior is enabled. + new charts.SelectNearest( + eventTrigger: charts.SelectNearestTrigger.tapAndDrag) + ]); + } + + /// Create one series with sample hard coded data. + static List> _createSampleData() { + final data = [ + new LinearSales(0, 5), + new LinearSales(1, 25), + new LinearSales(2, 100), + new LinearSales(3, 75), + ]; + + return [ + new charts.Series( + id: 'Sales', + domainFn: (LinearSales sales, _) => sales.year, + measureFn: (LinearSales sales, _) => sales.sales, + data: data, + ) + ]; + } +} + +/// Sample linear data type. +class LinearSales { + final int year; + final int sales; + + LinearSales(this.year, this.sales); +} +``` diff --git a/charts_flutter/docs/examples/interactions/selection_line_highlight_full.png b/charts_flutter/docs/examples/interactions/selection_line_highlight_full.png new file mode 100644 index 0000000000000000000000000000000000000000..69af545f8a86ddb78af941649ea4e545f14f2cb9 GIT binary patch literal 15543 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 literal 0 HcmV?d00001 diff --git a/charts_flutter/docs/examples/interactions/selection_line_highlight_thumb.png b/charts_flutter/docs/examples/interactions/selection_line_highlight_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..6f3aaeedb67f9369ca589320ef678e63eeff493d GIT binary patch literal 3857 zcmZ`+c|26#`@be)C=AkMEnC)%J!2P%3}fHPz88iuhAd?#WZ#z%MHsSw^Y_Q^+}FL&x#ynueV%jP&pGFL63_-Z7wI|Z0RXtDdq>L{l%?QpLw6p0 z9^|JSfr8py1Em1~gj5EKBMta|)%lJw3IOmz01z1s0KdVe$PEApLIA+#Jpe%F0>EXz z!VV*4@WXkhyE8w1LJg%|ADh6XFNfx0Md+U0W>m|^gtuF+ty z35xa8a0g{608l}JIr76i(8MiWEe%uL=kGP{H2F*a+6Li$eKb4|1W@uAr^qR_wt`J$k z|7Y>ui~*$$>*L_C5c-fjPw@-mj!WQH3NH*z8C%b}Gu7O5q_{www)g(tm7S?4cuOnV zP`HPdnb4F#4PO#_3h;*svfPWV*McPPX5EQ|bvHf(vJHO_}5Ic!bal!3zfc%0-P% zihT7noIsdzdD28O7xgdw9F!XW;CDh}NQMhET>n^%a3@Lrw&<5@OLE0kj@0_01J-Zf$RrXck|=sMGA>2T8F? zh=}?txgmI_aTM!fkA0A$TAk-hW6JJxHwOvj>E|1sELg$Lc52;ZrhycaQy>}?{}10}A3uH^7!)LtCpp|m;n{LFvhQ;yS(PrX1vOzLS>a1C?lN76(t;X z#yuIflRwO>>iN+~(qrY1Ej2ykT&{Gd;Tg<$k>T*i0Pb`#{(Yl!ra<)CDr!+B@3)NZ3GD zj3a&CeU3hYsH7PQay25~@cJ*Rm; z$4QL+(E3H%&FJ;dY&x8mh|7QTHpUqmj8P51Pe#hGkhqs{3R$-x_jAX8)#A5x2GHc) z!}ztiYDW!D0~a=MRv0It38XYK_8$!Gjk=Lj-qOa z%Br%{`%7eib09xT7lqQty)@gKyzdzN>o7VH8x1hTKtM}DKB4ErP8)~8j=XBFMkQ9jWeYzo0uZHc~_54CC-yW$3F}dM7Guy|YJuW`lC3 zG_%iWTFSh)N{hf8Rb+-BDCmQRR+Iib_N8wsiPycTZG7jn;_M@{8X?w@ z2MZIFVZogG!j^BInTcb@y?_2J>%U|8)~Qp(PUK9M30%rFuCmVJ;7}% ziKx4*u{|MUOAK$si|;=S%r5_6`Mv{K2^k12w{K9gL2%VtC{GIo%87b8ZOKf4juw9Y zSr*Q1TXG=?_qUWZw(SrBVwm@S1c-aU3->-m>^$Lk9hEU^-$3j#h_CPaXI%IYRThr( zcYW8&Zib<7__s7ODUpWJ!g2t^Xj^cgiL|&b7Xrn&Z*Gz){w-DeetoX{NCU>JWvms$<2 zXIKhl@SMeJM~2^&y~r&KkH7545pW#%*}=GAzExgH~n?v^vj)-!tAEBk)5HOsR~(c?dW%rUb1KtcaF=|kl#sJJ#oSO|1CgBXZqcC)Kk zso=O;-O1sl97&$mn;dCuHkHi(ewUqK2%T$l$F(o4PIritUsFqx))dMvFPi7w6GWuT zbOz2ZWzcrUN4Q|84L4}oF8QkqBCHT$E1km`#7iZcbPkEWM7l0Of!Ohw?yKJJhmf2< z#ON_>j2fvW3mgcLvf`6SH*A%XBZ;g3EuR zA!k80Kd0i?NFUjsybvDmv=T3h^|#BJwhw)hpU(jnI2V^d#ydaCv478-wrld6G&Yd> z3!dS);nkzDneA6kAfpBE(t+lwn<=+mm^%6Sr5zq(Rex{rbG_+n@nvUchqUu$GgYXj zfIA$9wLkay1agLxpzuTKN1q(tyl8W+Srkphhk z%Gxl4+-i!=k!+{*_rcYgb64rQ-mINt;(8Y`Lk~M(>Dp3BuOF-t_|+WDg|}fVQDGU8 zv`6E5scG$e#0cg;#UM>dRw<7?N%dTZja*A%qFEXnuM*=+C(Elua5TMVe;?hlgV=8n zvhRmz`*4F?TN@0}Ey9o2@7|!f9KIEenoAsP-@V6X)zdg)x*lD@>G-00@4#QLRKdy4j z?4<=yhpxrlq&RVMi}vLN3aG;N{-a@(qdjtGKcOqJghAs~cPT5LD!Yie4`FxE$fd&> zv(9wCliz4?2-KSu`Kq%R9ueGECPGuP(~|v}RqOa}^>7mufs~wkKeWM#nK&Q*Ga5CL z2pP@N6s8eg4(a$5a@=IWJttI9V1GA*Mu|uucx@hJd5iwVDSJ_V1KRR& zi*?i^hTwqMVb*y)g?xp{p_m`Hm$YsZ>J6$BLQ3rBVRKuVvWB8&ilg-WKTQ0E+UBT9 zi*lH572gfsY1<;%5lQ&rBwbaoSO;fJw$~o{yToCu-MjYq!-rXSwdv3jn5#nj#pfo} z>Oh(YGyQ}m!q(EBHO+f-znpy7*PhxY(m|2ccX=enYI_8SQ zIWqbQ$-6HYldgNkyd)WApBgCZ1u{__X6K$?b9(4g01Vd@P9e->!ARsFHS`S0ak#@0 zj<0`K)3?>_VKZ#reld4^waSqXX3k?H)VoS(Pd_(+i3NiRlKlV6~-bxaV&exsx7j@mGCQ9%IfP=G3(@| zj@4$AUr@s!?UDBYbymXzP9CpEO`pV1k9OQ~xLo5GTH@^dIm0wlnTja`BO}QR12}Qp z>5D!=*01DVn0mcSR85YfN95^C%ge`3am==euqTO&i>Db>owK+#9%L8L&V@puqCyk+ z`UeN8o12>jSQ6A#LSc?rY<8Hcp>&?D|28jc=~O8BVzy@7bBvk8s5($;%Isk}eZ`3*3uC zgwT?WrlNcA#p=hWrfwS=8kPq155aHPw)KAfDsX!EedX;_{-`TG@d#B_a&Ird*Z--> z-GTyn)%HTn5bNcY_=OnkY>FsXtL+w_PEN9soM6L^ z+1kdc(P>ybn%<-2x%V2$Rbsr|QCAL7s@f2;#dCR&&I`VA5M!?3bz|57Om zZ^V6aIK*DY3CsZn1GOy!T^s{lkb(;4c{SQ707!3db literal 0 HcmV?d00001 diff --git a/charts_flutter/docs/examples/legends/legend_custom_symbol.md b/charts_flutter/docs/examples/legends/legend_custom_symbol.md new file mode 100644 index 000000000..249ce0d5b --- /dev/null +++ b/charts_flutter/docs/examples/legends/legend_custom_symbol.md @@ -0,0 +1,125 @@ +# Legend Custom Symbol Legends Example + +![](legend_custom_symbol_full.png) + +Example: + +``` +/// Bar chart with custom symbol in legend example. +import 'package:flutter/material.dart'; +import 'package:charts_flutter/flutter.dart' as charts; + +/// Example custom renderer that renders [IconData]. +/// +/// This is used to show that legend symbols can be assigned a custom symbol. +class IconRenderer implements charts.SymbolRenderer { + final IconData iconData; + + IconRenderer(this.iconData); + + @override + Widget build(BuildContext context, + {Size size, Color color, bool isSelected}) { + return new SizedBox.fromSize( + size: size, child: new Icon(iconData, color: color, size: 12.0)); + } +} + +class LegendWithCustomSymbol extends StatelessWidget { + final List seriesList; + final bool animate; + + LegendWithCustomSymbol(this.seriesList, {this.animate}); + + factory LegendWithCustomSymbol.withSampleData() { + return new LegendWithCustomSymbol( + _createSampleData(), + // Disable animations for image tests. + animate: false, + ); + } + + @override + Widget build(BuildContext context) { + return new charts.BarChart( + seriesList, + animate: animate, + barGroupingType: charts.BarGroupingType.grouped, + // Add the legend behavior to the chart to turn on legends. + // By default the legend will display above the chart. + // + // To change the symbol used in the legend, set the renderer attribute of + // symbolRendererKey to a SymbolRenderer. + behaviors: [new charts.SeriesLegend()], + )..defaultRenderer + .rendererAttributes + .setAttr(charts.symbolRendererKey, new IconRenderer(Icons.cloud)); + } + + /// Create series list with multiple series + static List> _createSampleData() { + final desktopSalesData = [ + new OrdinalSales('2014', 5), + new OrdinalSales('2015', 25), + new OrdinalSales('2016', 100), + new OrdinalSales('2017', 75), + ]; + + final tabletSalesData = [ + new OrdinalSales('2014', 25), + new OrdinalSales('2015', 50), + new OrdinalSales('2016', 10), + new OrdinalSales('2017', 20), + ]; + + final mobileSalesData = [ + new OrdinalSales('2014', 10), + new OrdinalSales('2015', 15), + new OrdinalSales('2016', 50), + new OrdinalSales('2017', 45), + ]; + + final otherSalesData = [ + new OrdinalSales('2014', 20), + new OrdinalSales('2015', 35), + new OrdinalSales('2016', 15), + new OrdinalSales('2017', 10), + ]; + + return [ + new charts.Series( + id: 'Desktop', + domainFn: (OrdinalSales sales, _) => sales.year, + measureFn: (OrdinalSales sales, _) => sales.sales, + data: desktopSalesData, + ), + new charts.Series( + id: 'Tablet', + domainFn: (OrdinalSales sales, _) => sales.year, + measureFn: (OrdinalSales sales, _) => sales.sales, + data: tabletSalesData, + ), + new charts.Series( + id: 'Mobile', + domainFn: (OrdinalSales sales, _) => sales.year, + measureFn: (OrdinalSales sales, _) => sales.sales, + data: mobileSalesData, + ), + new charts.Series( + id: 'Other', + domainFn: (OrdinalSales sales, _) => sales.year, + measureFn: (OrdinalSales sales, _) => sales.sales, + data: otherSalesData, + ) + ]; + } +} + +/// Sample ordinal data type. +class OrdinalSales { + final String year; + final int sales; + + OrdinalSales(this.year, this.sales); +} +``` diff --git a/charts_flutter/docs/examples/legends/legend_custom_symbol_full.png b/charts_flutter/docs/examples/legends/legend_custom_symbol_full.png new file mode 100644 index 0000000000000000000000000000000000000000..22c5b1d088d662035b29a9006748a17626a23f9c GIT binary patch literal 18408 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 literal 0 HcmV?d00001 diff --git a/charts_flutter/docs/examples/legends/legend_custom_symbol_thumb.png b/charts_flutter/docs/examples/legends/legend_custom_symbol_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..4adf41ad74b7d92f5c6ca6ec534d8a15c7b83bdf GIT binary patch literal 5207 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 literal 0 HcmV?d00001 diff --git a/charts_flutter/docs/examples/legends/legend_options.md b/charts_flutter/docs/examples/legends/legend_options.md new file mode 100644 index 000000000..1cd8580e0 --- /dev/null +++ b/charts_flutter/docs/examples/legends/legend_options.md @@ -0,0 +1,131 @@ +# Legend Options Legends Example + +![](legend_options_full.png) + +Example: + +``` +/// Bar chart with example of a legend with customized position, justification, +/// desired max rows, and padding. These options are shown as an example of how +/// to use the customizations, they do not necessary have to be used together in +/// this way. Choosing [end] as the position does not require the justification +/// to also be [endDrawArea]. +import 'package:flutter/material.dart'; +import 'package:charts_flutter/flutter.dart' as charts; + +class LegendOptions extends StatelessWidget { + final List seriesList; + final bool animate; + + LegendOptions(this.seriesList, {this.animate}); + + factory LegendOptions.withSampleData() { + return new LegendOptions( + _createSampleData(), + // Disable animations for image tests. + animate: false, + ); + } + + @override + Widget build(BuildContext context) { + return new charts.BarChart( + seriesList, + animate: animate, + barGroupingType: charts.BarGroupingType.grouped, + // Add the legend behavior to the chart to turn on legends. + // This example shows how to change the position and justification of + // the legend, in addition to altering the max rows and padding. + behaviors: [ + new charts.SeriesLegend( + // Positions for "start" and "end" will be left and right respectively + // for widgets with a build context that has directionality ltr. + // For rtl, "start" and "end" will be right and left respectively. + // Since this example has directionality of ltr, the legend is + // positioned on the right side of the chart. + position: charts.BuildablePosition.end, + // For a legend that is positioned on the left or right of the chart, + // setting the justification for [endDrawArea] is aligned to the + // bottom of the chart draw area. + outsideJustification: charts.OutsideJustification.endDrawArea, + // By default, if the position of the chart is on the left or right of + // the chart, [horizontalFirst] is set to false. This means that the + // legend entries will grow as new rows first instead of a new column. + horizontalFirst: false, + // By setting this value to 2, the legend entries will grow up to two + // rows before adding a new column. + desiredMaxRows: 2, + // This defines the padding around each legend entry. + cellPadding: new EdgeInsets.only(right: 4.0, bottom: 4.0), + ) + ], + ); + } + + /// Create series list with multiple series + static List> _createSampleData() { + final desktopSalesData = [ + new OrdinalSales('2014', 5), + new OrdinalSales('2015', 25), + new OrdinalSales('2016', 100), + new OrdinalSales('2017', 75), + ]; + + final tabletSalesData = [ + new OrdinalSales('2014', 25), + new OrdinalSales('2015', 50), + new OrdinalSales('2016', 10), + new OrdinalSales('2017', 20), + ]; + + final mobileSalesData = [ + new OrdinalSales('2014', 10), + new OrdinalSales('2015', 15), + new OrdinalSales('2016', 50), + new OrdinalSales('2017', 45), + ]; + + final otherSalesData = [ + new OrdinalSales('2014', 20), + new OrdinalSales('2015', 35), + new OrdinalSales('2016', 15), + new OrdinalSales('2017', 10), + ]; + + return [ + new charts.Series( + id: 'Desktop', + domainFn: (OrdinalSales sales, _) => sales.year, + measureFn: (OrdinalSales sales, _) => sales.sales, + data: desktopSalesData, + ), + new charts.Series( + id: 'Tablet', + domainFn: (OrdinalSales sales, _) => sales.year, + measureFn: (OrdinalSales sales, _) => sales.sales, + data: tabletSalesData, + ), + new charts.Series( + id: 'Mobile', + domainFn: (OrdinalSales sales, _) => sales.year, + measureFn: (OrdinalSales sales, _) => sales.sales, + data: mobileSalesData, + ), + new charts.Series( + id: 'Other', + domainFn: (OrdinalSales sales, _) => sales.year, + measureFn: (OrdinalSales sales, _) => sales.sales, + data: otherSalesData, + ), + ]; + } +} + +/// Sample ordinal data type. +class OrdinalSales { + final String year; + final int sales; + + OrdinalSales(this.year, this.sales); +} +``` diff --git a/charts_flutter/docs/examples/legends/legend_options_full.png b/charts_flutter/docs/examples/legends/legend_options_full.png new file mode 100644 index 0000000000000000000000000000000000000000..9be790f5452d83e409e95d22e2d6f5fc870c1100 GIT binary patch literal 17396 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 literal 0 HcmV?d00001 diff --git a/charts_flutter/docs/examples/legends/legend_options_thumb.png b/charts_flutter/docs/examples/legends/legend_options_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..693230f00f3345f40793849371bdb9254c0f7c83 GIT binary patch literal 5016 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 seriesList; + final bool animate; + + SimpleSeriesLegend(this.seriesList, {this.animate}); + + factory SimpleSeriesLegend.withSampleData() { + return new SimpleSeriesLegend( + _createSampleData(), + // Disable animations for image tests. + animate: false, + ); + } + + @override + Widget build(BuildContext context) { + return new charts.BarChart( + seriesList, + animate: animate, + barGroupingType: charts.BarGroupingType.grouped, + // Add the series legend behavior to the chart to turn on series legends. + // By default the legend will display above the chart. + behaviors: [new charts.SeriesLegend()], + ); + } + + /// Create series list with multiple series + static List> _createSampleData() { + final desktopSalesData = [ + new OrdinalSales('2014', 5), + new OrdinalSales('2015', 25), + new OrdinalSales('2016', 100), + new OrdinalSales('2017', 75), + ]; + + final tabletSalesData = [ + new OrdinalSales('2014', 25), + new OrdinalSales('2015', 50), + new OrdinalSales('2016', 10), + new OrdinalSales('2017', 20), + ]; + + final mobileSalesData = [ + new OrdinalSales('2014', 10), + new OrdinalSales('2015', 15), + new OrdinalSales('2016', 50), + new OrdinalSales('2017', 45), + ]; + + final otherSalesData = [ + new OrdinalSales('2014', 20), + new OrdinalSales('2015', 35), + new OrdinalSales('2016', 15), + new OrdinalSales('2017', 10), + ]; + + return [ + new charts.Series( + id: 'Desktop', + domainFn: (OrdinalSales sales, _) => sales.year, + measureFn: (OrdinalSales sales, _) => sales.sales, + data: desktopSalesData, + ), + new charts.Series( + id: 'Tablet', + domainFn: (OrdinalSales sales, _) => sales.year, + measureFn: (OrdinalSales sales, _) => sales.sales, + data: tabletSalesData, + ), + new charts.Series( + id: 'Mobile', + domainFn: (OrdinalSales sales, _) => sales.year, + measureFn: (OrdinalSales sales, _) => sales.sales, + data: mobileSalesData, + ), + new charts.Series( + id: 'Other', + domainFn: (OrdinalSales sales, _) => sales.year, + measureFn: (OrdinalSales sales, _) => sales.sales, + data: otherSalesData, + ), + ]; + } +} + +/// Sample ordinal data type. +class OrdinalSales { + final String year; + final int sales; + + OrdinalSales(this.year, this.sales); +} +``` diff --git a/charts_flutter/docs/examples/legends/simple_series_legend_full.png b/charts_flutter/docs/examples/legends/simple_series_legend_full.png new file mode 100644 index 0000000000000000000000000000000000000000..f8fe320485fc4a00f897c9fe53595bc9f91b7f82 GIT binary patch literal 17554 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 z

#VIyRVjzK&e12T=zzQI;m-pS?>Oe%9}4v93toad2=5x-&RPR`}tfE=3_edu!`C zcKDB_Cu=jUI{;gIAR`0nb*Z;F>U0H<$CuQ0`wLxF58s^cZs>b*I$(T!JmCfDQFPc! zt|#Q|oy(T3%}x6d(AHnjr{L`DOik_BKe%6XR%gH!>xOJlB#4X3==)OE% z-T0$b&`=@NP&($Wi7PT_jl3&-L3Dd6*v8SZ|NV8nopSxG>(@d0V`FnGJ!RH< z*e)nnz9VF3nG9n%^Z@7zJ^vB!usoar8<3&b5Ww%6SIoHs(9l!4# zTmf!ObiN-L`=zJs8FSSOQ*pt;mI4+9_Nl|rk_x&ipD?w}1(aKl_xUrFf}|q4xv8lO zdbaf;%i0X%?$i>U2}K=Q88|_V)2G^%)!sLL`_=*6i+MA`w}BqN!~x~7tuxyYr&#+5 z=VvA-lN?8#B%wTLK#j}^?(EIx_33|2&%nR{ZP!-CP&Je$2w_6WkVWB0NS=!F53&;{ zf*AqJwkqTZ95+1G3VjRrhec>GG%D;ek`ukwp@^P1Ro%x|93$*lQk>5r)f~oo4iL`! z_wO&8l1)xdnty6(8jSYpFqZ*@fqEkVf1mi6cVQ{aV;XZC2JbufWUK$I@m#a zf=;=O1dvhA@NG<3SQ+-B8QbOIayaC9W^`U%U0v(b;kqWDULM9hqlr780=QNf>%`xH zTGTgh-c&sQndq=MkWhQDw^E|sblgSb(zM71otS$SVm<`p_X=* z1!X?UTBxVe4GG~t2GRcOaaJ{7R4byfVx49#h(Kg)3zcXH7c7lbs#;rH^F+0J%Z=aP7h#XbFnXaPoJ(gvFEXHamfJ{C!e4nE9@u- zhpwx}Z5PfoXMpWlUGQ!mbm_&^nMuCJ-{dfq|+f zCYev+a&Ym1nj~~^i?+WKmya@aW~<*oHRHmC3kZS%i(o!xNwE9ju}9G5HR(xz8n|)j z{2iJ(n+XWslE~2L=xA5nEr9pNkovsIw)-H1xc&OsKrQT$4cRXZn86GPFDYs1LhX2Z zk6+g4cyGi4*(5#N7Sp{vQc3)FCGgwOkR}|e66;`6Qc@zcS5&5zK4f&6aLn0m-O>ua zD&Gen)Z|1JxybrE6zvEf#ChzOBbrOS&;Z-y5{7^!4q9?ZJB0 zEEQQ`3VVT%p@5cmczF0w;1mLjoH|tl8%CQZs8#U$wX2f_jFyy)Ob-wpyw(%LmhxvV|#nM z3W4_gc~qD>%g>YD@#K=suEQc0o`vNBqG&7Z<`aR1*D4j)f(19J10Pz|A{*S7i zi9Nu{6X&}nVXN9o-GLC|wH&>LTJOL9`pY*Upk#zaTwEOOF-7IkVyF|$GVdQp$+>hU zN|X$a0lZVo$jCtS9$G3>FC+We7)O(O-*c$J598FNprT4+mW@n@Vt@#}T$k?U-mGxg zoTPd`D#C1>M_6879x#8X@MRjd$F}V&joy@D4u)@uSIN;Z2A%{8)4N}Ld*`UBGoRGG z#_kmIyDBOwz8G(I-dN0lZbun9du1Sypd285VQ4I)Ea}>N8D{_U*Y848)&u+80&3_T2x+bO99KxB05&<$X&)@Li~|Z*qM_?)CUhgfO~wOSlOsKH^4hu%H#fIz z1W!Gm_bznL`uS==TEj0nqlWA-bMuGe$BuOZIhqUIDB>rt%Eu~0JR%Ua0L^D{v(btB zdEwt6wRB)Ff&S?r(bGegLx#+#M0FVFEoJ zV%(t0C&Kw6K%>zO_m7ai;BLn_vpyuB(A50?*JlN(&smIZykkG|oF$o=v>-h6VbXn8 z2tLG%kJGrQzYz+~lHZsf{4KVye#@`R{QSaQKHq5M*lyUiky5b9b?1IrriROO4+<=s zn{G4sEhuN)EOm-+QO=~Eqd%ox{L~YKq{Xuq7MoP#7Y-L?%_bt%hOJX{R{dSxpY7*{ zb9!Z+i!vypGXk;VA;X3Q?VaT+)EPQk|pe?(Rkn83Z8f_3IC7YHEOBE(Xp9F&rr$ zcYgl-sR8^_Vq#)QSXe4_E9pSm0B8En)y*x&jTV;M^J)I!Ip|;6;BZ4u00JVMu^7^2 z2fx0)zVYW*#~@3n0PBUq0{A)fYn2X5zq2$2#WPJY=zIXzJ<`yKL<#|9bqPtyfAaA_ zUt9u))sO*6(BEGVGtL79?e^oYVZlNh69aj*80yXCF^a$bN|>87A}$T70+cAK9?ej? zT21WJL@dwf^T|^~gtggrR1?1jGUNfk9Mp*eWh;zBJrVduD)nx3TtcpL;ii_Ba)3FS z14!5#!m5P$0YXh9b?(tq)FCTG;LtNc69DGKhfBAH0}DMlN-V&H_oPUNyAsIHU%QPf z(r>0TWI)Fm4$^xH`tE`(F8y@{bp>Nftf&g4;l!BJ5jY(Q3-=Lp^sh7AwbIk z%RC4Ca#L$-sNV@UY7mwcYA(oSM?^%x>Z(F3dR!Y4j6GISN=mBcU}t;#TtyAwA)o{y z4NNTRAtieF-8jaaFNz79o15#+CG@3>(wAi!~3bLfWd&~iCTy|z5g#>OT+|A;4#4O2t1hoov}z&&y%gR-#9 z>;-zt5gid}y+~b^y-dNjQC`fsdlnYCh5VNo>PQCb>ckaC)jGTz+uGVnV~MqW{du9m z0L!Z^<<9DHm=S7y-p` z{N%}=pevF^mSdtwY!z`{x7x6Vt6_Xo?vV@vVY^bb7JwLIV5v-@-mVgfkDvz!gkxb^ z^W+gy8lwf3;BLDBg`ERl2yWL1v~22I&p#xPp-ky{BcjECI)MapJUo(hWIIRi^{JS# z25mZ0sUF;EOtddM75vh_tbO6XF+2XtSu_6a+4v1DVFx}EpG`|$z~kx_S9!FwlG!Y9 zS&euXuP74aD+!S{HZcC&$B`ozWLnB2Sz_J$-r);F2$`$^RKoI`=JF-lb%l&>C1R4A z2OlgW(p`~5C0=XLnWy2>^u9wZ#=q+lI9NPwSm%B9n*8M*H)0bKul##8sx9EvND14iV6f% zNsp2#Lluqww+hT^?b+7Uq-bMP07$qOsO3Y=G*F{g4rW1{f!eeXrfKmIdiT(X2qdGT zs!R>-ZH2?q!oO7ug*T+@(6TThm8k<-zr0Ed=wncJ8M3I91*$d}vLvJNM^6&x{q5O* zvU*{ltrP~LVrQkzWI<|fUhxo^bDG>r0Mytnpk~d+)p5Y~Cjnu@#>6B6J)aFq(-@3J z`WKR&iF&`^vhk?Z2yjE#E@1vN9^*lWX2uGEVqX}DoMu+yDHflDVq$X6v8%9%it5nQ z)0=cAdIKuHNEI$tSk7w(U0lv>!M=Xqg}1-6?bQ^rjyPz5YWnLwe?|(KY_vdUpVk%7 zPHR?Kx+0&FE4xO(Ac2Ygqrh6M&_;P?&1x^2ZHPs18o=nX}Dp&ns42VOSq*uDaY% z={haH{#3=c%SvyWuVGiM8beD>OSF`Ixlj38O&TOJL2s6joNQ;fLVGeDXf62(pPx5ou_7(Yx4pm>Nz6*) zdKPv|Mk~vhNb6sdv?U*|u&>s#A#|D;zGrSo@t(UYI+`oEpd%(; zW6@)x@(1+upcYwg7<}}cm}%r0qIaP>4{bM4eGABx0tyfmSaVsyg2EGh_tm4GqVFCb zzeG+>Zb*0Id+Pd1629W`Y_CflLl^~)Ztflv6Km}f^p;TZQAvJi2s$&0d-wT=^xD$=zfR8 zre|gbUndv7o`A;m0S@#JjmLWcF0qQBdB(VLcuFn#dPTAucAcc2mI?FPiI18eB2%Vj zI^F@dtprEW?)yg)x?9h$jTId1Z`PuPfcBAFS63I?1s1C-!HvluK3oIPg)gxHAI0ao zx<^U(PkFz3C9tc8B7&@ux$838jDq0)1WubYKAbNFcr8&kxsQdv)gM8~}QgzHD{GRBkMfWC7aG z08YpG`-`JDpM5)xOhaQk^0$7z0xXLTOpaRqT?-2f@G$g25Tg+KC#03)JuZ3sw&&LX zI?Zf*S>|Bp^|=I~4+LD|5UxC%Wjk z(=)0NwuZJo+O&(oSkbuzi!V=MZyu>nT%cEs50v0yHe9)Y`4|DE+CqvF+ewvd=I7RB zp^}TmUcd=TRd%yMd{udIY z7`Fes7ymj)XE?f=gk^5-uwQ^~2=0cBKC6V_qmh)_t+Kh?9eDmTQpW8OT1(PJb6U>x zZO3%UgDtYg6Md-HhAv<{ahGq0-*_TvyFPg!bv7tBG)eZVtn(h1s^JQ?)Lc?EerF<_ zRygc^l0+xhPHtdjq2nox=kYft={Ai0mxX<1Z*@{}_|`rMFyBF1M^(Q$d7{{}ecf!sk-= zohOG`0>8C;+Wz%l^mRXGTan`G$MI{b7?)Q*;F1YA{E^ItL-D@DeDhD6V6Ael1YF@a z(X%T*w3`Ak+SnBRh@zj*a^-XjbR#%Tu`vgq`A^<%1h?|O+cn9~*(HA22koz!MfzHL z@s&qH%BAtlF%N=T$~VfnDkZ>wrtrKPY7&i&DPNP%a!U1(;0#)#EVY%ZU%|2j3>N{ zlyL*PMj@!T|_nG50Z-Wz+4I>4{xC(05J^j-aj4h zcj-pMbrKC64;+3+c*HrOM|@| zJ0KkuJ!?FZqg$)9w?nku_zAy>$<2}(ylrS;fYfxj;sP)fHTpm*zhgAV7u4e$4#Dq~ zCGZ^U02ZzZ@cn}af6Ju)nxx;|-OZAV5fXC$Rc2!=Ehv5re((EZ{WI}Oii(U_cXxMh zuFbVIm|W-!Wmk=MLo*nj1h!z{gJxyVPXGd*vjG=P>HvV?f4^t!)w_Q6HIpnW_`-%| zeI0qbiooQrfJ%Xf9<^{P%y>3cA!RcC-tF%Il}MMtIPT}8^Y7XP0o*vmi5l;EP#qkx z$)NxKu6?lDrBu9$Q@*QEo2l690UoUBJbTvjnW}?AQ?_l~jf!|NWiul%xxsRd?48R+OZn?sd-Lfk|^vsVF&pCU8K&Y(kk zigvphU-}o+?&mu5$Uy&U<4YC{(eNi67z3@3>Olk zy;bA_Hk0kX${^U*(0YTh5HM`!)%lQTfeRJH#;`*EqoFNeO<@7s07xN1E=mfG$;ruc zU`138W|l?P0YghNwg~u$DfD>@eK}D88CMotGu|}~S+fW8b%40{juBY}JEmvb;}GWs zhMtARNyHUusYd)U2XruE(tOAnxUMOWl-tgRgoGr2|Ni|c|2X^#COSptP!Y6ycg4j+ z;Rio{{BUgs4+>=iy(@bn3#}K^_%|&Z4!Lm6l!A7a3cK(jvA=Q%4u?N9){JyxzAQmCj&eu zQnW#n1+UFqala0GUkS96b1C6EU0{4dlLkiMH)|8s`j7NK>9NUdoJ=FLvw3Rhy&|x6u)I3u<>>?Ef=s~4IH&VQH0KHVX^Ly zqYuE%BX+PY4;GY6(29|ch_njyyuhM513}wU>)|o<+sb_H$xCpc^`^?wc)xzV09Ik& zzyIz4LExtCj0~&@z7I{aAPYJy1)8nES==HuR#e1+(4)ae z5d*X@oLS)!m_>OzV;!8Y#)0me&ukzbqzq&RgFXsb!$Hf;1=eQHpMUflzhOP92X^y{ zBR0*P$n6P}8{ns8mVJNi4vZtT^WU>{a3}%Mg@T?w7sv&w_f(T6pFVv;jz~W(_qmQs z$XWnzpyj3nFAMrwQMU>RDP-LQ`DL`k4BA!nUd^vnX{2G6^h4a|_4M={((Qx1ZPbWk zLc9`$y`js**$aS%uUB-Eg-g8uUx6a`xQWYQy`;ZP-5EN^0MOSGijI( z>U?$VY_!{Rg(FRqf&$=RMl(}zX1mcO4U88E?Oyvtf}9#)6-1J8q=0o|RaF%u78$#B zTz^WKkJV^{@wylJ{;+V2yP=}m51E%5L*6MN9)-t)ZO{R3C}O#0*J9{hK1?EY!2M5y zffX!lx**PS6!2t%DuXgr(2$Tp%lSunI@-`$TW>tcDtf-G-Uds_fV6So|JS??u?t{q zg$!j6t`5!Tt^ckF9d|{mc@fPvN!Rp)ev}MHa~_l{1vuG$)#fmS0bT_hB-Ga@FH9_o zA3iz&j&q1aG-Lk<9?m3e#X4 zI?uorLZ#8IX_vq!9;t}721}S;phzkhr>N8ncp{W@Gy) z_s2(IZUgN&%x#25MVXpj-B~Pb4>KBqQ7?*f=Tg9+J1EM)9|*h-avz9_ih7H7m5Aon zR0wuJZk-0hKcoXnH8DoUdtk9aN=y#(G|XP`70E(2X=-Z&dqD9&&yrD$$Yw@b?B(p? zDai0C5Sg$V=^uFr<&H!rtXETH(h3vu<6&#?Kf}u(UHo%;O?>EylJF7b90y>}F#-h45c#^>A&NP|} zr4WorHC=R$!wEoy>Xa%`u`yFogkvJaYN;q};eHDsU{PylTi z1|2#0`T70nMFxNDE;+dgxol(uyVnb4^Kx88{37^jJt2DMP!a%zF&4Z@uFbjTn_3|g zxsEyO>vmw}$oj(1rECVL3Vc?Vd0BlIj6x68XtcV zO;#b-5irr9PtTx&Xfq>dl=EbrNbH5tgm^du;yOAy$B!TH0vie!@Q@G~QeX>(j0Quz zfLtJ3K6G`hf*H`>GmkFf*WN72i|r-D(Hz2%SaBV)6Lf@vgT`w!b!%%z!MJuP@OTa# zH4IapaPyFpldB=Vg~7jASdKJs_l1<5RF(m8wu8p9DgmBKHu7f1ZKY#`?RTM}kLGrB zW|Ob9(ZD(lm32V6wcAK|=_RmBTO|6r76g0qrHq{H;NoY7h6FIUw23NzC`7e(YupDx zn)`3hKb*6&?%TC~vZ+g`E@c$kI&M4P#e^ORfM$P8{9%0`zK-buShe*&O-lsl;P6Q$ z&>ewrzr?z7U+MjS2*$j>wvQb#N6?O;S`#t2#zB#^8Z4EWLAaEzIZ!a2@WN=pkD$8fobIG%ME_nun$o8?4TCAiuYoj&MLs9W(E{sCX>(O z)6zDIBkaCa8GZ_<_grjY!?;ukYMQy4!%;0%UXROWgbRlrbD2|Ji{C^D4zGV9l{j{K5%;LGJGO{>kgaUK$uj zaI0TiX>UEZstNE@eXI6ic!a%Ugi;{x(v+`I z*e!6kjzp!qFS^XJdYTwPt!xQ!tL-@rpCn>lBVT-RFpw+%RkVR{vzM)=`Z*4j7V zt&&2sQV@$-pwH`+uFgX&2Q@xZR8v!{X> z#5Z4ngo141fSnaU!dr)+T!0BJ&JQ|(bjYBibPA6z{4~mQusBpbW zlH`Uflx%;4%~nOT#OxuE2}smK_S}k5Z~;$GOeA)6C?MbjeE?V%Va6yYAnLS$?b&>6WB~#JLI`un?J% zRKOL{a1SM?M)F9dBRljG2t>fZ=gsFo9t#~L3}gq=ftQXK`nt>gg(b)A?CpDDG7yQN zCg8J2L&Ole$fyC+IpNN4XP~=ASP#ump$TMINMy!D?jrE>s~J_QDVt3%(S{^b>AF5d zv4Tc{hmzL8Qeg_COK-*9&*sbFfQt|H9{E@K|3&=raNja6JiX5^ z1~2p~ruG ez})hgv4PY7{sVl|M!fI=3|2z!Uhdt;FaHOq2K7V$ literal 0 HcmV?d00001 diff --git a/charts_flutter/docs/examples/legends/simple_series_legend_thumb.png b/charts_flutter/docs/examples/legends/simple_series_legend_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..d8ccebb73f4a863f8ca3153d68eeda06f5636182 GIT binary patch literal 5223 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 NAQPyi0bUP|`4`3g seriesList; + final bool animate; + + DashPatternLineChart(this.seriesList, {this.animate}); + + /// Creates a [LineChart] with sample data and no transition. + factory DashPatternLineChart.withSampleData() { + return new DashPatternLineChart( + _createSampleData(), + // Disable animations for image tests. + animate: false, + ); + } + + @override + Widget build(BuildContext context) { + return new charts.LineChart(seriesList, animate: animate); + } + + /// Create three series with sample hard coded data. + static List> _createSampleData() { + final myFakeDesktopData = [ + new LinearSales(0, 5), + new LinearSales(1, 25), + new LinearSales(2, 100), + new LinearSales(3, 75), + ]; + + var myFakeTabletData = [ + new LinearSales(0, 10), + new LinearSales(1, 50), + new LinearSales(2, 200), + new LinearSales(3, 150), + ]; + + var myFakeMobileData = [ + new LinearSales(0, 15), + new LinearSales(1, 75), + new LinearSales(2, 300), + new LinearSales(3, 225), + ]; + + return [ + new charts.Series( + id: 'Desktop', + colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault, + domainFn: (LinearSales sales, _) => sales.year, + measureFn: (LinearSales sales, _) => sales.sales, + data: myFakeDesktopData, + ), + new charts.Series( + id: 'Tablet', + colorFn: (_, __) => charts.MaterialPalette.red.shadeDefault, + dashPattern: [2, 2], + domainFn: (LinearSales sales, _) => sales.year, + measureFn: (LinearSales sales, _) => sales.sales, + data: myFakeTabletData, + ), + new charts.Series( + id: 'Mobile', + colorFn: (_, __) => charts.MaterialPalette.green.shadeDefault, + dashPattern: [8, 3, 2, 3], + domainFn: (LinearSales sales, _) => sales.year, + measureFn: (LinearSales sales, _) => sales.sales, + data: myFakeMobileData, + ) + ]; + } +} + +/// Sample linear data type. +class LinearSales { + final int year; + final int sales; + + LinearSales(this.year, this.sales); +} +``` diff --git a/charts_flutter/docs/examples/line_charts/dash_pattern_full.png b/charts_flutter/docs/examples/line_charts/dash_pattern_full.png new file mode 100644 index 0000000000000000000000000000000000000000..1321cef5b769d997ab81beac0b9844d1c826dc60 GIT binary patch literal 26452 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 LTF_c~tEm40yRxyC literal 0 HcmV?d00001 diff --git a/charts_flutter/docs/examples/line_charts/range_annotation.md b/charts_flutter/docs/examples/line_charts/range_annotation.md new file mode 100644 index 000000000..5bd35ad65 --- /dev/null +++ b/charts_flutter/docs/examples/line_charts/range_annotation.md @@ -0,0 +1,71 @@ +# Range Annotation Line Chart Example + +![](range_annotation_full.png) + +Example: + +``` +/// Line chart with range annotation example +import 'package:charts_flutter/flutter.dart' as charts; +import 'package:flutter/material.dart'; + +class LineRangeAnnotationChart extends StatelessWidget { + final List seriesList; + final bool animate; + + LineRangeAnnotationChart(this.seriesList, {this.animate}); + + /// Creates a [LineChart] with sample data and range annotations. + /// + /// The second series extends beyond the range of the series data, + /// demonstrating the effect of the [Charts.RangeAnnotation.extendAxis] flag. + /// This can be set to false to disable range extension. + factory LineRangeAnnotationChart.withSampleData() { + return new LineRangeAnnotationChart( + _createSampleData(), + // Disable animations for image tests. + animate: false, + ); + } + + @override + Widget build(BuildContext context) { + return new charts.LineChart(seriesList, animate: animate, behaviors: [ + new charts.RangeAnnotation([ + new charts.RangeAnnotationSegment( + 0.5, 1.0, charts.RangeAnnotationAxisType.domain), + new charts.RangeAnnotationSegment( + 2, 4, charts.RangeAnnotationAxisType.domain, + color: charts.MaterialPalette.gray.shade200), + ]), + ]); + } + + /// Create one series with sample hard coded data. + static List> _createSampleData() { + final data = [ + new LinearSales(0, 5), + new LinearSales(1, 25), + new LinearSales(2, 100), + new LinearSales(3, 75), + ]; + + return [ + new charts.Series( + id: 'Sales', + domainFn: (LinearSales sales, _) => sales.year, + measureFn: (LinearSales sales, _) => sales.sales, + data: data, + ) + ]; + } +} + +/// Sample linear data type. +class LinearSales { + final int year; + final int sales; + + LinearSales(this.year, this.sales); +} +``` diff --git a/charts_flutter/docs/examples/line_charts/range_annotation_full.png b/charts_flutter/docs/examples/line_charts/range_annotation_full.png new file mode 100644 index 0000000000000000000000000000000000000000..653b25c6bfbc6287d2388ec6e43514815b8d2529 GIT binary patch literal 16313 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 literal 0 HcmV?d00001 diff --git a/charts_flutter/docs/examples/line_charts/range_annotation_thumb.png b/charts_flutter/docs/examples/line_charts/range_annotation_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..9243e810a885610983e90d7b734a5a2834136fa0 GIT binary patch literal 3443 zcmZ`+c{mhW*dNn~8SA)`C1jK}%UH9NZH6LZM3}@xOoZXuLtN1?;mR%v*_RQG80#RE zeal{!VkFDBV_&9kdcMEDKfbg5&iS49J?DMSbI$v`C(hEsgbN}J0RRA8H*X+NOw40e zH2Ya*yOW)`&jgUWfw=(yP?N-Qf?;KjFS^`7nF9c!QUE~YGXUU-Nky�GJXz?w4v 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 seriesList; + final bool animate; + + SimpleLineChart(this.seriesList, {this.animate}); + + /// Creates a [LineChart] with sample data and no transition. + factory SimpleLineChart.withSampleData() { + return new SimpleLineChart( + _createSampleData(), + // Disable animations for image tests. + animate: false, + ); + } + + @override + Widget build(BuildContext context) { + return new charts.LineChart(seriesList, animate: animate); + } + + /// Create one series with sample hard coded data. + static List> _createSampleData() { + final data = [ + new LinearSales(0, 5), + new LinearSales(1, 25), + new LinearSales(2, 100), + new LinearSales(3, 75), + ]; + + return [ + new charts.Series( + id: 'Sales', + colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault, + domainFn: (LinearSales sales, _) => sales.year, + measureFn: (LinearSales sales, _) => sales.sales, + data: data, + ) + ]; + } +} + +/// Sample linear data type. +class LinearSales { + final int year; + final int sales; + + LinearSales(this.year, this.sales); +} +``` diff --git a/charts_flutter/docs/examples/line_charts/simple_full.png b/charts_flutter/docs/examples/line_charts/simple_full.png new file mode 100644 index 0000000000000000000000000000000000000000..0144012945666e73227ccda41cc77c90bef2131d GIT binary patch literal 14794 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 E2Me|?e*gdg literal 0 HcmV?d00001 diff --git a/charts_flutter/docs/examples/line_charts/simple_thumb.png b/charts_flutter/docs/examples/line_charts/simple_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..3d5d48262f3a515338275104ee7fbc2f18776e81 GIT binary patch literal 3484 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 literal 0 HcmV?d00001 diff --git a/charts_flutter/docs/examples/time_series_charts/range_annotation.md b/charts_flutter/docs/examples/time_series_charts/range_annotation.md new file mode 100644 index 000000000..992cfdf85 --- /dev/null +++ b/charts_flutter/docs/examples/time_series_charts/range_annotation.md @@ -0,0 +1,71 @@ +# Range Annotation Time Series Charts Example + +![](range_annotation_full.png) + +Example: + +``` +/// Time series chart with range annotation example +/// +/// The example future range annotation extends beyond the range of the series +/// data, demonstrating the effect of the [Charts.RangeAnnotation.extendAxis] +/// flag. This can be set to false to disable range extension. +/// +/// Additional annotations may be added simply by adding additional +/// [Charts.RangeAnnotationSegment] items to the list. +import 'package:charts_flutter/flutter.dart' as charts; +import 'package:flutter/material.dart'; + +class TimeSeriesRangeAnnotationChart extends StatelessWidget { + final List seriesList; + final bool animate; + + TimeSeriesRangeAnnotationChart(this.seriesList, {this.animate}); + + /// Creates a [TimeSeriesChart] with sample data and no transition. + factory TimeSeriesRangeAnnotationChart.withSampleData() { + return new TimeSeriesRangeAnnotationChart( + _createSampleData(), + // Disable animations for image tests. + animate: false, + ); + } + + @override + Widget build(BuildContext context) { + return new charts.TimeSeriesChart(seriesList, animate: animate, behaviors: [ + new charts.RangeAnnotation([ + new charts.RangeAnnotationSegment(new DateTime(2017, 10, 4), + new DateTime(2017, 10, 15), charts.RangeAnnotationAxisType.domain), + ]), + ]); + } + + /// Create one series with sample hard coded data. + static List> _createSampleData() { + final data = [ + new TimeSeriesSales(new DateTime(2017, 9, 19), 5), + new TimeSeriesSales(new DateTime(2017, 9, 26), 25), + new TimeSeriesSales(new DateTime(2017, 10, 3), 100), + new TimeSeriesSales(new DateTime(2017, 10, 10), 75), + ]; + + return [ + new charts.Series( + id: 'Sales', + domainFn: (TimeSeriesSales sales, _) => sales.time, + measureFn: (TimeSeriesSales sales, _) => sales.sales, + data: data, + ) + ]; + } +} + +/// Sample time series data type. +class TimeSeriesSales { + final DateTime time; + final int sales; + + TimeSeriesSales(this.time, this.sales); +} +``` diff --git a/charts_flutter/docs/examples/time_series_charts/range_annotation_full.png b/charts_flutter/docs/examples/time_series_charts/range_annotation_full.png new file mode 100644 index 0000000000000000000000000000000000000000..9a8401ce706ba90c410a8f9026aa7eebc659ae6e GIT binary patch literal 17074 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 literal 0 HcmV?d00001 diff --git a/charts_flutter/docs/examples/time_series_charts/range_annotation_thumb.png b/charts_flutter/docs/examples/time_series_charts/range_annotation_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..ce7ff99b4d8504314e3bfa49beb66614f1fa11fd GIT binary patch literal 3836 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 P00PL^z(T)8*DdLPXN4%C literal 0 HcmV?d00001 diff --git a/charts_flutter/docs/examples/time_series_charts/simple.md b/charts_flutter/docs/examples/time_series_charts/simple.md new file mode 100644 index 000000000..5f8626bdc --- /dev/null +++ b/charts_flutter/docs/examples/time_series_charts/simple.md @@ -0,0 +1,67 @@ +# Simple Time Series Charts Example + +![](simple_full.png) + +Example: + +``` +/// Timeseries chart example +import 'package:charts_flutter/flutter.dart' as charts; +import 'package:flutter/material.dart'; + +class SimpleTimeSeriesChart extends StatelessWidget { + final List seriesList; + final bool animate; + + SimpleTimeSeriesChart(this.seriesList, {this.animate}); + + /// Creates a [TimeSeriesChart] with sample data and no transition. + factory SimpleTimeSeriesChart.withSampleData() { + return new SimpleTimeSeriesChart( + _createSampleData(), + // Disable animations for image tests. + animate: false, + ); + } + + @override + Widget build(BuildContext context) { + return new charts.TimeSeriesChart( + seriesList, + animate: animate, + // Optionally pass in a [DateTimeFactory] used by the chart. The factory + // should create the same type of [DateTime] as the data provided. If none + // specified, the default creates local date time. + dateTimeFactory: const charts.LocalDateTimeFactory(), + ); + } + + /// Create one series with sample hard coded data. + static List> _createSampleData() { + final data = [ + new TimeSeriesSales(new DateTime(2017, 9, 19), 5), + new TimeSeriesSales(new DateTime(2017, 9, 26), 25), + new TimeSeriesSales(new DateTime(2017, 10, 3), 100), + new TimeSeriesSales(new DateTime(2017, 10, 10), 75), + ]; + + return [ + new charts.Series( + id: 'Sales', + colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault, + domainFn: (TimeSeriesSales sales, _) => sales.time, + measureFn: (TimeSeriesSales sales, _) => sales.sales, + data: data, + ) + ]; + } +} + +/// Sample time series data type. +class TimeSeriesSales { + final DateTime time; + final int sales; + + TimeSeriesSales(this.time, this.sales); +} +``` diff --git a/charts_flutter/docs/examples/time_series_charts/simple_full.png b/charts_flutter/docs/examples/time_series_charts/simple_full.png new file mode 100644 index 0000000000000000000000000000000000000000..27beaba5e277588dbf3b02c8edfa80aa3315f927 GIT binary patch literal 17255 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 X(Eq;xBR?(&2tfMU#xR_wW9[![](examples/bar_charts/simple_thumb.png)](examples/bar_charts/simple.md) | Stacked


[![](examples/bar_charts/stacked_thumb.png)](examples/bar_charts/stacked.md) | Grouped
[![](examples/bar_charts/grouped_thumb.png)](examples/bar_charts/grouped.md) | Grouped Stacked
[![](examples/bar_charts/grouped_stacked_thumb.png)](examples/bar_charts/grouped_stacked.md) | +| Grouped Target Line
[![](examples/bar_charts/grouped_target_line_thumb.png)](examples/bar_charts/grouped_target_line.md) | Stacked Horizontal
[![](examples/bar_charts/stacked_horizontal_thumb.png)](examples/bar_charts/stacked_horizontal.md) | Stacked Target Line
[![](examples/bar_charts/stacked_target_line_thumb.png)](examples/bar_charts/stacked_target_line.md) | Horizontal
[![](examples/bar_charts/horizontal_thumb.png)](examples/bar_charts/horizontal.md) | +| Horizontal Bar Label
[![](examples/bar_charts/horizontal_bar_label_thumb.png)](examples/bar_charts/horizontal_bar_label.md) | Spark Bar
[![](examples/bar_charts/spark_bar_thumb.png)](examples/bar_charts/spark_bar.md) | Pattern Forward Hatch
[![](examples/bar_charts/pattern_forward_hatch_thumb.png)](examples/bar_charts/pattern_forward_hatch.md) | Horizontal Pattern Forward Hatch
[![](examples/bar_charts/horizontal_pattern_forward_hatch_thumb.png)](examples/bar_charts/horizontal_pattern_forward_hatch.md) | + + +### Time Series Charts + +| | | | | +| --- | --- | --- | --- | +| Simple
[![](examples/time_series_charts/simple_thumb.png)](examples/time_series_charts/simple.md) | Range Annotation
[![](examples/time_series_charts/range_annotation_thumb.png)](examples/time_series_charts/range_annotation.md) | | | + + +### Line Charts + +| | | | | +| --- | --- | --- | --- | +| Simple
[![](examples/line_charts/simple_thumb.png)](examples/line_charts/simple.md) | Dash Pattern
[![](examples/line_charts/dash_pattern_thumb.png)](examples/line_charts/dash_pattern.md) | Range Annotation
[![](examples/line_charts/range_annotation_thumb.png)](examples/line_charts/range_annotation.md) | | + + +### Axes + +| | | | | +| --- | --- | --- | --- | +| Bar Secondary Axis
[![](examples/axes/bar_secondary_axis_thumb.png)](examples/axes/bar_secondary_axis.md) | Bar Secondary Axis Only
[![](examples/axes/bar_secondary_axis_only_thumb.png)](examples/axes/bar_secondary_axis_only.md) | Horizontal Bar Secondary Axis
[![](examples/axes/horizontal_bar_secondary_axis_thumb.png)](examples/axes/horizontal_bar_secondary_axis.md) | Short Tick Length Axis
[![](examples/axes/short_tick_length_axis_thumb.png)](examples/axes/short_tick_length_axis.md) | +| Custom Font Size And Color
[![](examples/axes/custom_font_size_and_color_thumb.png)](examples/axes/custom_font_size_and_color.md) | Measure Axis Label Alignment
[![](examples/axes/measure_axis_label_alignment_thumb.png)](examples/axes/measure_axis_label_alignment.md) | Hidden Ticks And Labels Axis
[![](examples/axes/hidden_ticks_and_labels_axis_thumb.png)](examples/axes/hidden_ticks_and_labels_axis.md) | Custom Axis Tick Formatters
[![](examples/axes/custom_axis_tick_formatters_thumb.png)](examples/axes/custom_axis_tick_formatters.md) | +| Custom Measure Tick Count
[![](examples/axes/custom_measure_tick_count_thumb.png)](examples/axes/custom_measure_tick_count.md) | Integer Only Measure Axis
[![](examples/axes/integer_only_measure_axis_thumb.png)](examples/axes/integer_only_measure_axis.md) | Nonzero Bound Measure Axis
[![](examples/axes/nonzero_bound_measure_axis_thumb.png)](examples/axes/nonzero_bound_measure_axis.md) | Nonzero Bound Measure Axis
[![](examples/axes/nonzero_bound_measure_axis_thumb.png)](examples/axes/nonzero_bound_measure_axis.md) | +| Statically Provided Ticks
[![](examples/axes/statically_provided_ticks_thumb.png)](examples/axes/statically_provided_ticks.md) | | | | + + +### Interactions + +| | | | | +| --- | --- | --- | --- | +| Selection Bar Highlight
[![](examples/interactions/selection_bar_highlight_thumb.png)](examples/interactions/selection_bar_highlight.md) | Selection Line Highlight
[![](examples/interactions/selection_line_highlight_thumb.png)](examples/interactions/selection_line_highlight.md) | Selection Callback Example
[![](examples/interactions/selection_callback_example_thumb.png)](examples/interactions/selection_callback_example.md) | | + + +### a11y + +| | | | | +| --- | --- | --- | --- | +| Domain A11y Explore Bar Chart
[![](examples/a11ys/domain_a11y_explore_bar_chart_thumb.png)](examples/a11ys/domain_a11y_explore_bar_chart.md) | | | | + + +### i18n + +| | | | | +| --- | --- | --- | --- | +| Rtl Bar Chart
[![](examples/i18ns/rtl_bar_chart_thumb.png)](examples/i18ns/rtl_bar_chart.md) | Rtl Line Chart
[![](examples/i18ns/rtl_line_chart_thumb.png)](examples/i18ns/rtl_line_chart.md) | Rtl Series Legend
[![](examples/i18ns/rtl_series_legend_thumb.png)](examples/i18ns/rtl_series_legend.md) | | + + +### Legends + +| | | | | +| --- | --- | --- | --- | +| Simple Series Legend
[![](examples/legends/simple_series_legend_thumb.png)](examples/legends/simple_series_legend.md) | Legend Options
[![](examples/legends/legend_options_thumb.png)](examples/legends/legend_options.md) | Legend Custom Symbol
[![](examples/legends/legend_custom_symbol_thumb.png)](examples/legends/legend_custom_symbol.md) | | + +[//]: (END_EXAMPLES) + +### Combo Charts + +### Sizing & Margins From ba9fd04477d5d0bc29abd34f99bf2125b266070a Mon Sep 17 00:00:00 2001 From: lorrainekan Date: Wed, 14 Mar 2018 14:40:40 -0700 Subject: [PATCH 4/9] Internal change. PiperOrigin-RevId: 189088345 --- charts_flutter/examples/lib/image_test_main.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/charts_flutter/examples/lib/image_test_main.dart b/charts_flutter/examples/lib/image_test_main.dart index 143999b4f..ec3684bfc 100644 --- a/charts_flutter/examples/lib/image_test_main.dart +++ b/charts_flutter/examples/lib/image_test_main.dart @@ -175,6 +175,6 @@ class Home extends StatelessWidget { Widget build(BuildContext context) { return new Scaffold( appBar: new AppBar(title: new Text(_appName)), - body: new ListView(children: _tests)); + body: new SingleChildScrollView(child: new Column(children: _tests))); } } From c93ef85a37cc87a4bab40a407cc2dbc6d4eba569 Mon Sep 17 00:00:00 2001 From: Michael Thomsen Date: Wed, 14 Mar 2018 16:19:19 -0700 Subject: [PATCH 5/9] Small tweak to Flutter description Closes #5 PiperOrigin-RevId: 189103894 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9345252a5..b209e1cb5 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ Charts is a general charting library, currently enabled for the -[Flutter mobile app toolkit](https://flutter.io). +[Flutter mobile UI framework](https://flutter.io). *Note*: This is not an official Google product. From 662b3a71df6d2dbb39d887bac853cc0506268d41 Mon Sep 17 00:00:00 2001 From: nshahan Date: Wed, 14 Mar 2018 16:20:28 -0700 Subject: [PATCH 6/9] Update internal syncing script. PiperOrigin-RevId: 189104045 --- .../examples/a11ys/domain_a11y_explore_bar_chart.md | 0 .../a11ys/domain_a11y_explore_bar_chart_full.png | Bin .../a11ys/domain_a11y_explore_bar_chart_thumb.png | Bin .../examples/axes/bar_secondary_axis.md | 0 .../examples/axes/bar_secondary_axis_full.png | Bin .../examples/axes/bar_secondary_axis_only.md | 0 .../examples/axes/bar_secondary_axis_only_full.png | Bin .../examples/axes/bar_secondary_axis_only_thumb.png | Bin .../examples/axes/bar_secondary_axis_thumb.png | Bin .../examples/axes/custom_axis_tick_formatters.md | 0 .../axes/custom_axis_tick_formatters_full.png | Bin .../axes/custom_axis_tick_formatters_thumb.png | Bin .../examples/axes/custom_font_size_and_color.md | 0 .../axes/custom_font_size_and_color_full.png | Bin .../axes/custom_font_size_and_color_thumb.png | Bin .../examples/axes/custom_measure_tick_count.md | 0 .../axes/custom_measure_tick_count_full.png | Bin .../axes/custom_measure_tick_count_thumb.png | Bin .../examples/axes/hidden_ticks_and_labels_axis.md | 0 .../axes/hidden_ticks_and_labels_axis_full.png | Bin .../axes/hidden_ticks_and_labels_axis_thumb.png | Bin .../examples/axes/horizontal_bar_secondary_axis.md | 0 .../axes/horizontal_bar_secondary_axis_full.png | Bin .../axes/horizontal_bar_secondary_axis_thumb.png | Bin .../examples/axes/integer_only_measure_axis.md | 0 .../axes/integer_only_measure_axis_full.png | Bin .../axes/integer_only_measure_axis_thumb.png | Bin .../examples/axes/measure_axis_label_alignment.md | 0 .../axes/measure_axis_label_alignment_full.png | Bin .../axes/measure_axis_label_alignment_thumb.png | Bin .../examples/axes/nonzero_bound_measure_axis.md | 0 .../axes/nonzero_bound_measure_axis_full.png | Bin .../axes/nonzero_bound_measure_axis_thumb.png | Bin .../examples/axes/short_tick_length_axis.md | 0 .../examples/axes/short_tick_length_axis_full.png | Bin .../examples/axes/short_tick_length_axis_thumb.png | Bin .../examples/axes/statically_provided_ticks.md | 0 .../axes/statically_provided_ticks_full.png | Bin .../axes/statically_provided_ticks_thumb.png | Bin .../docs => docs}/examples/bar_charts/grouped.md | 0 .../examples/bar_charts/grouped_full.png | Bin .../examples/bar_charts/grouped_stacked.md | 0 .../examples/bar_charts/grouped_stacked_full.png | Bin .../examples/bar_charts/grouped_stacked_thumb.png | Bin .../examples/bar_charts/grouped_target_line.md | 0 .../bar_charts/grouped_target_line_full.png | Bin .../bar_charts/grouped_target_line_thumb.png | Bin .../examples/bar_charts/grouped_thumb.png | Bin .../docs => docs}/examples/bar_charts/horizontal.md | 0 .../examples/bar_charts/horizontal_bar_label.md | 0 .../bar_charts/horizontal_bar_label_full.png | Bin .../bar_charts/horizontal_bar_label_thumb.png | Bin .../examples/bar_charts/horizontal_full.png | Bin .../bar_charts/horizontal_pattern_forward_hatch.md | 0 .../horizontal_pattern_forward_hatch_full.png | Bin .../horizontal_pattern_forward_hatch_thumb.png | Bin .../examples/bar_charts/horizontal_thumb.png | Bin .../examples/bar_charts/pattern_forward_hatch.md | 0 .../bar_charts/pattern_forward_hatch_full.png | Bin .../bar_charts/pattern_forward_hatch_thumb.png | Bin .../docs => docs}/examples/bar_charts/simple.md | 0 .../examples/bar_charts/simple_full.png | Bin .../examples/bar_charts/simple_thumb.png | Bin .../docs => docs}/examples/bar_charts/spark_bar.md | 0 .../examples/bar_charts/spark_bar_full.png | Bin .../examples/bar_charts/spark_bar_thumb.png | Bin .../docs => docs}/examples/bar_charts/stacked.md | 0 .../examples/bar_charts/stacked_full.png | Bin .../examples/bar_charts/stacked_horizontal.md | 0 .../examples/bar_charts/stacked_horizontal_full.png | Bin .../bar_charts/stacked_horizontal_thumb.png | Bin .../examples/bar_charts/stacked_target_line.md | 0 .../bar_charts/stacked_target_line_full.png | Bin .../bar_charts/stacked_target_line_thumb.png | Bin .../examples/bar_charts/stacked_thumb.png | Bin .../docs => docs}/examples/i18ns/rtl_bar_chart.md | 0 .../examples/i18ns/rtl_bar_chart_full.png | Bin .../examples/i18ns/rtl_bar_chart_thumb.png | Bin .../docs => docs}/examples/i18ns/rtl_line_chart.md | 0 .../examples/i18ns/rtl_line_chart_full.png | Bin .../examples/i18ns/rtl_line_chart_thumb.png | Bin .../examples/i18ns/rtl_series_legend.md | 0 .../examples/i18ns/rtl_series_legend_full.png | Bin .../examples/i18ns/rtl_series_legend_thumb.png | Bin .../interactions/selection_bar_highlight.md | 0 .../interactions/selection_bar_highlight_full.png | Bin .../interactions/selection_bar_highlight_thumb.png | Bin .../interactions/selection_callback_example.md | 0 .../selection_callback_example_full.png | Bin .../selection_callback_example_thumb.png | Bin .../interactions/selection_line_highlight.md | 0 .../interactions/selection_line_highlight_full.png | Bin .../interactions/selection_line_highlight_thumb.png | Bin .../examples/legends/legend_custom_symbol.md | 0 .../examples/legends/legend_custom_symbol_full.png | Bin .../examples/legends/legend_custom_symbol_thumb.png | Bin .../examples/legends/legend_options.md | 0 .../examples/legends/legend_options_full.png | Bin .../examples/legends/legend_options_thumb.png | Bin .../examples/legends/simple_series_legend.md | 0 .../examples/legends/simple_series_legend_full.png | Bin .../examples/legends/simple_series_legend_thumb.png | Bin .../examples/line_charts/dash_pattern.md | 0 .../examples/line_charts/dash_pattern_full.png | Bin .../examples/line_charts/dash_pattern_thumb.png | Bin .../examples/line_charts/range_annotation.md | 0 .../examples/line_charts/range_annotation_full.png | Bin .../examples/line_charts/range_annotation_thumb.png | Bin .../docs => docs}/examples/line_charts/simple.md | 0 .../examples/line_charts/simple_full.png | Bin .../examples/line_charts/simple_thumb.png | Bin .../examples/time_series_charts/range_annotation.md | 0 .../time_series_charts/range_annotation_full.png | Bin .../time_series_charts/range_annotation_thumb.png | Bin .../examples/time_series_charts/simple.md | 0 .../examples/time_series_charts/simple_full.png | Bin .../examples/time_series_charts/simple_thumb.png | Bin {charts_flutter/docs => docs}/gallery.md | 0 118 files changed, 0 insertions(+), 0 deletions(-) rename {charts_flutter/docs => docs}/examples/a11ys/domain_a11y_explore_bar_chart.md (100%) rename {charts_flutter/docs => docs}/examples/a11ys/domain_a11y_explore_bar_chart_full.png (100%) rename {charts_flutter/docs => docs}/examples/a11ys/domain_a11y_explore_bar_chart_thumb.png (100%) rename {charts_flutter/docs => docs}/examples/axes/bar_secondary_axis.md (100%) rename {charts_flutter/docs => docs}/examples/axes/bar_secondary_axis_full.png (100%) rename {charts_flutter/docs => docs}/examples/axes/bar_secondary_axis_only.md (100%) rename {charts_flutter/docs => docs}/examples/axes/bar_secondary_axis_only_full.png (100%) rename {charts_flutter/docs => docs}/examples/axes/bar_secondary_axis_only_thumb.png (100%) rename {charts_flutter/docs => docs}/examples/axes/bar_secondary_axis_thumb.png (100%) rename {charts_flutter/docs => docs}/examples/axes/custom_axis_tick_formatters.md (100%) rename {charts_flutter/docs => docs}/examples/axes/custom_axis_tick_formatters_full.png (100%) rename {charts_flutter/docs => docs}/examples/axes/custom_axis_tick_formatters_thumb.png (100%) rename {charts_flutter/docs => docs}/examples/axes/custom_font_size_and_color.md (100%) rename {charts_flutter/docs => docs}/examples/axes/custom_font_size_and_color_full.png (100%) rename {charts_flutter/docs => docs}/examples/axes/custom_font_size_and_color_thumb.png (100%) rename {charts_flutter/docs => docs}/examples/axes/custom_measure_tick_count.md (100%) rename {charts_flutter/docs => docs}/examples/axes/custom_measure_tick_count_full.png (100%) rename {charts_flutter/docs => docs}/examples/axes/custom_measure_tick_count_thumb.png (100%) rename {charts_flutter/docs => docs}/examples/axes/hidden_ticks_and_labels_axis.md (100%) rename {charts_flutter/docs => docs}/examples/axes/hidden_ticks_and_labels_axis_full.png (100%) rename {charts_flutter/docs => docs}/examples/axes/hidden_ticks_and_labels_axis_thumb.png (100%) rename {charts_flutter/docs => docs}/examples/axes/horizontal_bar_secondary_axis.md (100%) rename {charts_flutter/docs => docs}/examples/axes/horizontal_bar_secondary_axis_full.png (100%) rename {charts_flutter/docs => docs}/examples/axes/horizontal_bar_secondary_axis_thumb.png (100%) rename {charts_flutter/docs => docs}/examples/axes/integer_only_measure_axis.md (100%) rename {charts_flutter/docs => docs}/examples/axes/integer_only_measure_axis_full.png (100%) rename {charts_flutter/docs => docs}/examples/axes/integer_only_measure_axis_thumb.png (100%) rename {charts_flutter/docs => docs}/examples/axes/measure_axis_label_alignment.md (100%) rename {charts_flutter/docs => docs}/examples/axes/measure_axis_label_alignment_full.png (100%) rename {charts_flutter/docs => docs}/examples/axes/measure_axis_label_alignment_thumb.png (100%) rename {charts_flutter/docs => docs}/examples/axes/nonzero_bound_measure_axis.md (100%) rename {charts_flutter/docs => docs}/examples/axes/nonzero_bound_measure_axis_full.png (100%) rename {charts_flutter/docs => docs}/examples/axes/nonzero_bound_measure_axis_thumb.png (100%) rename {charts_flutter/docs => docs}/examples/axes/short_tick_length_axis.md (100%) rename {charts_flutter/docs => docs}/examples/axes/short_tick_length_axis_full.png (100%) rename {charts_flutter/docs => docs}/examples/axes/short_tick_length_axis_thumb.png (100%) rename {charts_flutter/docs => docs}/examples/axes/statically_provided_ticks.md (100%) rename {charts_flutter/docs => docs}/examples/axes/statically_provided_ticks_full.png (100%) rename {charts_flutter/docs => docs}/examples/axes/statically_provided_ticks_thumb.png (100%) rename {charts_flutter/docs => docs}/examples/bar_charts/grouped.md (100%) rename {charts_flutter/docs => docs}/examples/bar_charts/grouped_full.png (100%) rename {charts_flutter/docs => docs}/examples/bar_charts/grouped_stacked.md (100%) rename {charts_flutter/docs => docs}/examples/bar_charts/grouped_stacked_full.png (100%) rename {charts_flutter/docs => docs}/examples/bar_charts/grouped_stacked_thumb.png (100%) rename {charts_flutter/docs => docs}/examples/bar_charts/grouped_target_line.md (100%) rename {charts_flutter/docs => docs}/examples/bar_charts/grouped_target_line_full.png (100%) rename {charts_flutter/docs => docs}/examples/bar_charts/grouped_target_line_thumb.png (100%) rename {charts_flutter/docs => docs}/examples/bar_charts/grouped_thumb.png (100%) rename {charts_flutter/docs => docs}/examples/bar_charts/horizontal.md (100%) rename {charts_flutter/docs => docs}/examples/bar_charts/horizontal_bar_label.md (100%) rename {charts_flutter/docs => docs}/examples/bar_charts/horizontal_bar_label_full.png (100%) rename {charts_flutter/docs => docs}/examples/bar_charts/horizontal_bar_label_thumb.png (100%) rename {charts_flutter/docs => docs}/examples/bar_charts/horizontal_full.png (100%) rename {charts_flutter/docs => docs}/examples/bar_charts/horizontal_pattern_forward_hatch.md (100%) rename {charts_flutter/docs => docs}/examples/bar_charts/horizontal_pattern_forward_hatch_full.png (100%) rename {charts_flutter/docs => docs}/examples/bar_charts/horizontal_pattern_forward_hatch_thumb.png (100%) rename {charts_flutter/docs => docs}/examples/bar_charts/horizontal_thumb.png (100%) rename {charts_flutter/docs => docs}/examples/bar_charts/pattern_forward_hatch.md (100%) rename {charts_flutter/docs => docs}/examples/bar_charts/pattern_forward_hatch_full.png (100%) rename {charts_flutter/docs => docs}/examples/bar_charts/pattern_forward_hatch_thumb.png (100%) rename {charts_flutter/docs => docs}/examples/bar_charts/simple.md (100%) rename {charts_flutter/docs => docs}/examples/bar_charts/simple_full.png (100%) rename {charts_flutter/docs => docs}/examples/bar_charts/simple_thumb.png (100%) rename {charts_flutter/docs => docs}/examples/bar_charts/spark_bar.md (100%) rename {charts_flutter/docs => docs}/examples/bar_charts/spark_bar_full.png (100%) rename {charts_flutter/docs => docs}/examples/bar_charts/spark_bar_thumb.png (100%) rename {charts_flutter/docs => docs}/examples/bar_charts/stacked.md (100%) rename {charts_flutter/docs => docs}/examples/bar_charts/stacked_full.png (100%) rename {charts_flutter/docs => docs}/examples/bar_charts/stacked_horizontal.md (100%) rename {charts_flutter/docs => docs}/examples/bar_charts/stacked_horizontal_full.png (100%) rename {charts_flutter/docs => docs}/examples/bar_charts/stacked_horizontal_thumb.png (100%) rename {charts_flutter/docs => docs}/examples/bar_charts/stacked_target_line.md (100%) rename {charts_flutter/docs => docs}/examples/bar_charts/stacked_target_line_full.png (100%) rename {charts_flutter/docs => docs}/examples/bar_charts/stacked_target_line_thumb.png (100%) rename {charts_flutter/docs => docs}/examples/bar_charts/stacked_thumb.png (100%) rename {charts_flutter/docs => docs}/examples/i18ns/rtl_bar_chart.md (100%) rename {charts_flutter/docs => docs}/examples/i18ns/rtl_bar_chart_full.png (100%) rename {charts_flutter/docs => docs}/examples/i18ns/rtl_bar_chart_thumb.png (100%) rename {charts_flutter/docs => docs}/examples/i18ns/rtl_line_chart.md (100%) rename {charts_flutter/docs => docs}/examples/i18ns/rtl_line_chart_full.png (100%) rename {charts_flutter/docs => docs}/examples/i18ns/rtl_line_chart_thumb.png (100%) rename {charts_flutter/docs => docs}/examples/i18ns/rtl_series_legend.md (100%) rename {charts_flutter/docs => docs}/examples/i18ns/rtl_series_legend_full.png (100%) rename {charts_flutter/docs => docs}/examples/i18ns/rtl_series_legend_thumb.png (100%) rename {charts_flutter/docs => docs}/examples/interactions/selection_bar_highlight.md (100%) rename {charts_flutter/docs => docs}/examples/interactions/selection_bar_highlight_full.png (100%) rename {charts_flutter/docs => docs}/examples/interactions/selection_bar_highlight_thumb.png (100%) rename {charts_flutter/docs => docs}/examples/interactions/selection_callback_example.md (100%) rename {charts_flutter/docs => docs}/examples/interactions/selection_callback_example_full.png (100%) rename {charts_flutter/docs => docs}/examples/interactions/selection_callback_example_thumb.png (100%) rename {charts_flutter/docs => docs}/examples/interactions/selection_line_highlight.md (100%) rename {charts_flutter/docs => docs}/examples/interactions/selection_line_highlight_full.png (100%) rename {charts_flutter/docs => docs}/examples/interactions/selection_line_highlight_thumb.png (100%) rename {charts_flutter/docs => docs}/examples/legends/legend_custom_symbol.md (100%) rename {charts_flutter/docs => docs}/examples/legends/legend_custom_symbol_full.png (100%) rename {charts_flutter/docs => docs}/examples/legends/legend_custom_symbol_thumb.png (100%) rename {charts_flutter/docs => docs}/examples/legends/legend_options.md (100%) rename {charts_flutter/docs => docs}/examples/legends/legend_options_full.png (100%) rename {charts_flutter/docs => docs}/examples/legends/legend_options_thumb.png (100%) rename {charts_flutter/docs => docs}/examples/legends/simple_series_legend.md (100%) rename {charts_flutter/docs => docs}/examples/legends/simple_series_legend_full.png (100%) rename {charts_flutter/docs => docs}/examples/legends/simple_series_legend_thumb.png (100%) rename {charts_flutter/docs => docs}/examples/line_charts/dash_pattern.md (100%) rename {charts_flutter/docs => docs}/examples/line_charts/dash_pattern_full.png (100%) rename {charts_flutter/docs => docs}/examples/line_charts/dash_pattern_thumb.png (100%) rename {charts_flutter/docs => docs}/examples/line_charts/range_annotation.md (100%) rename {charts_flutter/docs => docs}/examples/line_charts/range_annotation_full.png (100%) rename {charts_flutter/docs => docs}/examples/line_charts/range_annotation_thumb.png (100%) rename {charts_flutter/docs => docs}/examples/line_charts/simple.md (100%) rename {charts_flutter/docs => docs}/examples/line_charts/simple_full.png (100%) rename {charts_flutter/docs => docs}/examples/line_charts/simple_thumb.png (100%) rename {charts_flutter/docs => docs}/examples/time_series_charts/range_annotation.md (100%) rename {charts_flutter/docs => docs}/examples/time_series_charts/range_annotation_full.png (100%) rename {charts_flutter/docs => docs}/examples/time_series_charts/range_annotation_thumb.png (100%) rename {charts_flutter/docs => docs}/examples/time_series_charts/simple.md (100%) rename {charts_flutter/docs => docs}/examples/time_series_charts/simple_full.png (100%) rename {charts_flutter/docs => docs}/examples/time_series_charts/simple_thumb.png (100%) rename {charts_flutter/docs => docs}/gallery.md (100%) diff --git a/charts_flutter/docs/examples/a11ys/domain_a11y_explore_bar_chart.md b/docs/examples/a11ys/domain_a11y_explore_bar_chart.md similarity index 100% rename from charts_flutter/docs/examples/a11ys/domain_a11y_explore_bar_chart.md rename to docs/examples/a11ys/domain_a11y_explore_bar_chart.md diff --git a/charts_flutter/docs/examples/a11ys/domain_a11y_explore_bar_chart_full.png b/docs/examples/a11ys/domain_a11y_explore_bar_chart_full.png similarity index 100% rename from charts_flutter/docs/examples/a11ys/domain_a11y_explore_bar_chart_full.png rename to docs/examples/a11ys/domain_a11y_explore_bar_chart_full.png diff --git a/charts_flutter/docs/examples/a11ys/domain_a11y_explore_bar_chart_thumb.png b/docs/examples/a11ys/domain_a11y_explore_bar_chart_thumb.png similarity index 100% rename from charts_flutter/docs/examples/a11ys/domain_a11y_explore_bar_chart_thumb.png rename to docs/examples/a11ys/domain_a11y_explore_bar_chart_thumb.png diff --git a/charts_flutter/docs/examples/axes/bar_secondary_axis.md b/docs/examples/axes/bar_secondary_axis.md similarity index 100% rename from charts_flutter/docs/examples/axes/bar_secondary_axis.md rename to docs/examples/axes/bar_secondary_axis.md diff --git a/charts_flutter/docs/examples/axes/bar_secondary_axis_full.png b/docs/examples/axes/bar_secondary_axis_full.png similarity index 100% rename from charts_flutter/docs/examples/axes/bar_secondary_axis_full.png rename to docs/examples/axes/bar_secondary_axis_full.png diff --git a/charts_flutter/docs/examples/axes/bar_secondary_axis_only.md b/docs/examples/axes/bar_secondary_axis_only.md similarity index 100% rename from charts_flutter/docs/examples/axes/bar_secondary_axis_only.md rename to docs/examples/axes/bar_secondary_axis_only.md diff --git a/charts_flutter/docs/examples/axes/bar_secondary_axis_only_full.png b/docs/examples/axes/bar_secondary_axis_only_full.png similarity index 100% rename from charts_flutter/docs/examples/axes/bar_secondary_axis_only_full.png rename to docs/examples/axes/bar_secondary_axis_only_full.png diff --git a/charts_flutter/docs/examples/axes/bar_secondary_axis_only_thumb.png b/docs/examples/axes/bar_secondary_axis_only_thumb.png similarity index 100% rename from charts_flutter/docs/examples/axes/bar_secondary_axis_only_thumb.png rename to docs/examples/axes/bar_secondary_axis_only_thumb.png diff --git a/charts_flutter/docs/examples/axes/bar_secondary_axis_thumb.png b/docs/examples/axes/bar_secondary_axis_thumb.png similarity index 100% rename from charts_flutter/docs/examples/axes/bar_secondary_axis_thumb.png rename to docs/examples/axes/bar_secondary_axis_thumb.png diff --git a/charts_flutter/docs/examples/axes/custom_axis_tick_formatters.md b/docs/examples/axes/custom_axis_tick_formatters.md similarity index 100% rename from charts_flutter/docs/examples/axes/custom_axis_tick_formatters.md rename to docs/examples/axes/custom_axis_tick_formatters.md diff --git a/charts_flutter/docs/examples/axes/custom_axis_tick_formatters_full.png b/docs/examples/axes/custom_axis_tick_formatters_full.png similarity index 100% rename from charts_flutter/docs/examples/axes/custom_axis_tick_formatters_full.png rename to docs/examples/axes/custom_axis_tick_formatters_full.png diff --git a/charts_flutter/docs/examples/axes/custom_axis_tick_formatters_thumb.png b/docs/examples/axes/custom_axis_tick_formatters_thumb.png similarity index 100% rename from charts_flutter/docs/examples/axes/custom_axis_tick_formatters_thumb.png rename to docs/examples/axes/custom_axis_tick_formatters_thumb.png diff --git a/charts_flutter/docs/examples/axes/custom_font_size_and_color.md b/docs/examples/axes/custom_font_size_and_color.md similarity index 100% rename from charts_flutter/docs/examples/axes/custom_font_size_and_color.md rename to docs/examples/axes/custom_font_size_and_color.md diff --git a/charts_flutter/docs/examples/axes/custom_font_size_and_color_full.png b/docs/examples/axes/custom_font_size_and_color_full.png similarity index 100% rename from charts_flutter/docs/examples/axes/custom_font_size_and_color_full.png rename to docs/examples/axes/custom_font_size_and_color_full.png diff --git a/charts_flutter/docs/examples/axes/custom_font_size_and_color_thumb.png b/docs/examples/axes/custom_font_size_and_color_thumb.png similarity index 100% rename from charts_flutter/docs/examples/axes/custom_font_size_and_color_thumb.png rename to docs/examples/axes/custom_font_size_and_color_thumb.png diff --git a/charts_flutter/docs/examples/axes/custom_measure_tick_count.md b/docs/examples/axes/custom_measure_tick_count.md similarity index 100% rename from charts_flutter/docs/examples/axes/custom_measure_tick_count.md rename to docs/examples/axes/custom_measure_tick_count.md diff --git a/charts_flutter/docs/examples/axes/custom_measure_tick_count_full.png b/docs/examples/axes/custom_measure_tick_count_full.png similarity index 100% rename from charts_flutter/docs/examples/axes/custom_measure_tick_count_full.png rename to docs/examples/axes/custom_measure_tick_count_full.png diff --git a/charts_flutter/docs/examples/axes/custom_measure_tick_count_thumb.png b/docs/examples/axes/custom_measure_tick_count_thumb.png similarity index 100% rename from charts_flutter/docs/examples/axes/custom_measure_tick_count_thumb.png rename to docs/examples/axes/custom_measure_tick_count_thumb.png diff --git a/charts_flutter/docs/examples/axes/hidden_ticks_and_labels_axis.md b/docs/examples/axes/hidden_ticks_and_labels_axis.md similarity index 100% rename from charts_flutter/docs/examples/axes/hidden_ticks_and_labels_axis.md rename to docs/examples/axes/hidden_ticks_and_labels_axis.md diff --git a/charts_flutter/docs/examples/axes/hidden_ticks_and_labels_axis_full.png b/docs/examples/axes/hidden_ticks_and_labels_axis_full.png similarity index 100% rename from charts_flutter/docs/examples/axes/hidden_ticks_and_labels_axis_full.png rename to docs/examples/axes/hidden_ticks_and_labels_axis_full.png diff --git a/charts_flutter/docs/examples/axes/hidden_ticks_and_labels_axis_thumb.png b/docs/examples/axes/hidden_ticks_and_labels_axis_thumb.png similarity index 100% rename from charts_flutter/docs/examples/axes/hidden_ticks_and_labels_axis_thumb.png rename to docs/examples/axes/hidden_ticks_and_labels_axis_thumb.png diff --git a/charts_flutter/docs/examples/axes/horizontal_bar_secondary_axis.md b/docs/examples/axes/horizontal_bar_secondary_axis.md similarity index 100% rename from charts_flutter/docs/examples/axes/horizontal_bar_secondary_axis.md rename to docs/examples/axes/horizontal_bar_secondary_axis.md diff --git a/charts_flutter/docs/examples/axes/horizontal_bar_secondary_axis_full.png b/docs/examples/axes/horizontal_bar_secondary_axis_full.png similarity index 100% rename from charts_flutter/docs/examples/axes/horizontal_bar_secondary_axis_full.png rename to docs/examples/axes/horizontal_bar_secondary_axis_full.png diff --git a/charts_flutter/docs/examples/axes/horizontal_bar_secondary_axis_thumb.png b/docs/examples/axes/horizontal_bar_secondary_axis_thumb.png similarity index 100% rename from charts_flutter/docs/examples/axes/horizontal_bar_secondary_axis_thumb.png rename to docs/examples/axes/horizontal_bar_secondary_axis_thumb.png diff --git a/charts_flutter/docs/examples/axes/integer_only_measure_axis.md b/docs/examples/axes/integer_only_measure_axis.md similarity index 100% rename from charts_flutter/docs/examples/axes/integer_only_measure_axis.md rename to docs/examples/axes/integer_only_measure_axis.md diff --git a/charts_flutter/docs/examples/axes/integer_only_measure_axis_full.png b/docs/examples/axes/integer_only_measure_axis_full.png similarity index 100% rename from charts_flutter/docs/examples/axes/integer_only_measure_axis_full.png rename to docs/examples/axes/integer_only_measure_axis_full.png diff --git a/charts_flutter/docs/examples/axes/integer_only_measure_axis_thumb.png b/docs/examples/axes/integer_only_measure_axis_thumb.png similarity index 100% rename from charts_flutter/docs/examples/axes/integer_only_measure_axis_thumb.png rename to docs/examples/axes/integer_only_measure_axis_thumb.png diff --git a/charts_flutter/docs/examples/axes/measure_axis_label_alignment.md b/docs/examples/axes/measure_axis_label_alignment.md similarity index 100% rename from charts_flutter/docs/examples/axes/measure_axis_label_alignment.md rename to docs/examples/axes/measure_axis_label_alignment.md diff --git a/charts_flutter/docs/examples/axes/measure_axis_label_alignment_full.png b/docs/examples/axes/measure_axis_label_alignment_full.png similarity index 100% rename from charts_flutter/docs/examples/axes/measure_axis_label_alignment_full.png rename to docs/examples/axes/measure_axis_label_alignment_full.png diff --git a/charts_flutter/docs/examples/axes/measure_axis_label_alignment_thumb.png b/docs/examples/axes/measure_axis_label_alignment_thumb.png similarity index 100% rename from charts_flutter/docs/examples/axes/measure_axis_label_alignment_thumb.png rename to docs/examples/axes/measure_axis_label_alignment_thumb.png diff --git a/charts_flutter/docs/examples/axes/nonzero_bound_measure_axis.md b/docs/examples/axes/nonzero_bound_measure_axis.md similarity index 100% rename from charts_flutter/docs/examples/axes/nonzero_bound_measure_axis.md rename to docs/examples/axes/nonzero_bound_measure_axis.md diff --git a/charts_flutter/docs/examples/axes/nonzero_bound_measure_axis_full.png b/docs/examples/axes/nonzero_bound_measure_axis_full.png similarity index 100% rename from charts_flutter/docs/examples/axes/nonzero_bound_measure_axis_full.png rename to docs/examples/axes/nonzero_bound_measure_axis_full.png diff --git a/charts_flutter/docs/examples/axes/nonzero_bound_measure_axis_thumb.png b/docs/examples/axes/nonzero_bound_measure_axis_thumb.png similarity index 100% rename from charts_flutter/docs/examples/axes/nonzero_bound_measure_axis_thumb.png rename to docs/examples/axes/nonzero_bound_measure_axis_thumb.png diff --git a/charts_flutter/docs/examples/axes/short_tick_length_axis.md b/docs/examples/axes/short_tick_length_axis.md similarity index 100% rename from charts_flutter/docs/examples/axes/short_tick_length_axis.md rename to docs/examples/axes/short_tick_length_axis.md diff --git a/charts_flutter/docs/examples/axes/short_tick_length_axis_full.png b/docs/examples/axes/short_tick_length_axis_full.png similarity index 100% rename from charts_flutter/docs/examples/axes/short_tick_length_axis_full.png rename to docs/examples/axes/short_tick_length_axis_full.png diff --git a/charts_flutter/docs/examples/axes/short_tick_length_axis_thumb.png b/docs/examples/axes/short_tick_length_axis_thumb.png similarity index 100% rename from charts_flutter/docs/examples/axes/short_tick_length_axis_thumb.png rename to docs/examples/axes/short_tick_length_axis_thumb.png diff --git a/charts_flutter/docs/examples/axes/statically_provided_ticks.md b/docs/examples/axes/statically_provided_ticks.md similarity index 100% rename from charts_flutter/docs/examples/axes/statically_provided_ticks.md rename to docs/examples/axes/statically_provided_ticks.md diff --git a/charts_flutter/docs/examples/axes/statically_provided_ticks_full.png b/docs/examples/axes/statically_provided_ticks_full.png similarity index 100% rename from charts_flutter/docs/examples/axes/statically_provided_ticks_full.png rename to docs/examples/axes/statically_provided_ticks_full.png diff --git a/charts_flutter/docs/examples/axes/statically_provided_ticks_thumb.png b/docs/examples/axes/statically_provided_ticks_thumb.png similarity index 100% rename from charts_flutter/docs/examples/axes/statically_provided_ticks_thumb.png rename to docs/examples/axes/statically_provided_ticks_thumb.png diff --git a/charts_flutter/docs/examples/bar_charts/grouped.md b/docs/examples/bar_charts/grouped.md similarity index 100% rename from charts_flutter/docs/examples/bar_charts/grouped.md rename to docs/examples/bar_charts/grouped.md diff --git a/charts_flutter/docs/examples/bar_charts/grouped_full.png b/docs/examples/bar_charts/grouped_full.png similarity index 100% rename from charts_flutter/docs/examples/bar_charts/grouped_full.png rename to docs/examples/bar_charts/grouped_full.png diff --git a/charts_flutter/docs/examples/bar_charts/grouped_stacked.md b/docs/examples/bar_charts/grouped_stacked.md similarity index 100% rename from charts_flutter/docs/examples/bar_charts/grouped_stacked.md rename to docs/examples/bar_charts/grouped_stacked.md diff --git a/charts_flutter/docs/examples/bar_charts/grouped_stacked_full.png b/docs/examples/bar_charts/grouped_stacked_full.png similarity index 100% rename from charts_flutter/docs/examples/bar_charts/grouped_stacked_full.png rename to docs/examples/bar_charts/grouped_stacked_full.png diff --git a/charts_flutter/docs/examples/bar_charts/grouped_stacked_thumb.png b/docs/examples/bar_charts/grouped_stacked_thumb.png similarity index 100% rename from charts_flutter/docs/examples/bar_charts/grouped_stacked_thumb.png rename to docs/examples/bar_charts/grouped_stacked_thumb.png diff --git a/charts_flutter/docs/examples/bar_charts/grouped_target_line.md b/docs/examples/bar_charts/grouped_target_line.md similarity index 100% rename from charts_flutter/docs/examples/bar_charts/grouped_target_line.md rename to docs/examples/bar_charts/grouped_target_line.md diff --git a/charts_flutter/docs/examples/bar_charts/grouped_target_line_full.png b/docs/examples/bar_charts/grouped_target_line_full.png similarity index 100% rename from charts_flutter/docs/examples/bar_charts/grouped_target_line_full.png rename to docs/examples/bar_charts/grouped_target_line_full.png diff --git a/charts_flutter/docs/examples/bar_charts/grouped_target_line_thumb.png b/docs/examples/bar_charts/grouped_target_line_thumb.png similarity index 100% rename from charts_flutter/docs/examples/bar_charts/grouped_target_line_thumb.png rename to docs/examples/bar_charts/grouped_target_line_thumb.png diff --git a/charts_flutter/docs/examples/bar_charts/grouped_thumb.png b/docs/examples/bar_charts/grouped_thumb.png similarity index 100% rename from charts_flutter/docs/examples/bar_charts/grouped_thumb.png rename to docs/examples/bar_charts/grouped_thumb.png diff --git a/charts_flutter/docs/examples/bar_charts/horizontal.md b/docs/examples/bar_charts/horizontal.md similarity index 100% rename from charts_flutter/docs/examples/bar_charts/horizontal.md rename to docs/examples/bar_charts/horizontal.md diff --git a/charts_flutter/docs/examples/bar_charts/horizontal_bar_label.md b/docs/examples/bar_charts/horizontal_bar_label.md similarity index 100% rename from charts_flutter/docs/examples/bar_charts/horizontal_bar_label.md rename to docs/examples/bar_charts/horizontal_bar_label.md diff --git a/charts_flutter/docs/examples/bar_charts/horizontal_bar_label_full.png b/docs/examples/bar_charts/horizontal_bar_label_full.png similarity index 100% rename from charts_flutter/docs/examples/bar_charts/horizontal_bar_label_full.png rename to docs/examples/bar_charts/horizontal_bar_label_full.png diff --git a/charts_flutter/docs/examples/bar_charts/horizontal_bar_label_thumb.png b/docs/examples/bar_charts/horizontal_bar_label_thumb.png similarity index 100% rename from charts_flutter/docs/examples/bar_charts/horizontal_bar_label_thumb.png rename to docs/examples/bar_charts/horizontal_bar_label_thumb.png diff --git a/charts_flutter/docs/examples/bar_charts/horizontal_full.png b/docs/examples/bar_charts/horizontal_full.png similarity index 100% rename from charts_flutter/docs/examples/bar_charts/horizontal_full.png rename to docs/examples/bar_charts/horizontal_full.png diff --git a/charts_flutter/docs/examples/bar_charts/horizontal_pattern_forward_hatch.md b/docs/examples/bar_charts/horizontal_pattern_forward_hatch.md similarity index 100% rename from charts_flutter/docs/examples/bar_charts/horizontal_pattern_forward_hatch.md rename to docs/examples/bar_charts/horizontal_pattern_forward_hatch.md diff --git a/charts_flutter/docs/examples/bar_charts/horizontal_pattern_forward_hatch_full.png b/docs/examples/bar_charts/horizontal_pattern_forward_hatch_full.png similarity index 100% rename from charts_flutter/docs/examples/bar_charts/horizontal_pattern_forward_hatch_full.png rename to docs/examples/bar_charts/horizontal_pattern_forward_hatch_full.png diff --git a/charts_flutter/docs/examples/bar_charts/horizontal_pattern_forward_hatch_thumb.png b/docs/examples/bar_charts/horizontal_pattern_forward_hatch_thumb.png similarity index 100% rename from charts_flutter/docs/examples/bar_charts/horizontal_pattern_forward_hatch_thumb.png rename to docs/examples/bar_charts/horizontal_pattern_forward_hatch_thumb.png diff --git a/charts_flutter/docs/examples/bar_charts/horizontal_thumb.png b/docs/examples/bar_charts/horizontal_thumb.png similarity index 100% rename from charts_flutter/docs/examples/bar_charts/horizontal_thumb.png rename to docs/examples/bar_charts/horizontal_thumb.png diff --git a/charts_flutter/docs/examples/bar_charts/pattern_forward_hatch.md b/docs/examples/bar_charts/pattern_forward_hatch.md similarity index 100% rename from charts_flutter/docs/examples/bar_charts/pattern_forward_hatch.md rename to docs/examples/bar_charts/pattern_forward_hatch.md diff --git a/charts_flutter/docs/examples/bar_charts/pattern_forward_hatch_full.png b/docs/examples/bar_charts/pattern_forward_hatch_full.png similarity index 100% rename from charts_flutter/docs/examples/bar_charts/pattern_forward_hatch_full.png rename to docs/examples/bar_charts/pattern_forward_hatch_full.png diff --git a/charts_flutter/docs/examples/bar_charts/pattern_forward_hatch_thumb.png b/docs/examples/bar_charts/pattern_forward_hatch_thumb.png similarity index 100% rename from charts_flutter/docs/examples/bar_charts/pattern_forward_hatch_thumb.png rename to docs/examples/bar_charts/pattern_forward_hatch_thumb.png diff --git a/charts_flutter/docs/examples/bar_charts/simple.md b/docs/examples/bar_charts/simple.md similarity index 100% rename from charts_flutter/docs/examples/bar_charts/simple.md rename to docs/examples/bar_charts/simple.md diff --git a/charts_flutter/docs/examples/bar_charts/simple_full.png b/docs/examples/bar_charts/simple_full.png similarity index 100% rename from charts_flutter/docs/examples/bar_charts/simple_full.png rename to docs/examples/bar_charts/simple_full.png diff --git a/charts_flutter/docs/examples/bar_charts/simple_thumb.png b/docs/examples/bar_charts/simple_thumb.png similarity index 100% rename from charts_flutter/docs/examples/bar_charts/simple_thumb.png rename to docs/examples/bar_charts/simple_thumb.png diff --git a/charts_flutter/docs/examples/bar_charts/spark_bar.md b/docs/examples/bar_charts/spark_bar.md similarity index 100% rename from charts_flutter/docs/examples/bar_charts/spark_bar.md rename to docs/examples/bar_charts/spark_bar.md diff --git a/charts_flutter/docs/examples/bar_charts/spark_bar_full.png b/docs/examples/bar_charts/spark_bar_full.png similarity index 100% rename from charts_flutter/docs/examples/bar_charts/spark_bar_full.png rename to docs/examples/bar_charts/spark_bar_full.png diff --git a/charts_flutter/docs/examples/bar_charts/spark_bar_thumb.png b/docs/examples/bar_charts/spark_bar_thumb.png similarity index 100% rename from charts_flutter/docs/examples/bar_charts/spark_bar_thumb.png rename to docs/examples/bar_charts/spark_bar_thumb.png diff --git a/charts_flutter/docs/examples/bar_charts/stacked.md b/docs/examples/bar_charts/stacked.md similarity index 100% rename from charts_flutter/docs/examples/bar_charts/stacked.md rename to docs/examples/bar_charts/stacked.md diff --git a/charts_flutter/docs/examples/bar_charts/stacked_full.png b/docs/examples/bar_charts/stacked_full.png similarity index 100% rename from charts_flutter/docs/examples/bar_charts/stacked_full.png rename to docs/examples/bar_charts/stacked_full.png diff --git a/charts_flutter/docs/examples/bar_charts/stacked_horizontal.md b/docs/examples/bar_charts/stacked_horizontal.md similarity index 100% rename from charts_flutter/docs/examples/bar_charts/stacked_horizontal.md rename to docs/examples/bar_charts/stacked_horizontal.md diff --git a/charts_flutter/docs/examples/bar_charts/stacked_horizontal_full.png b/docs/examples/bar_charts/stacked_horizontal_full.png similarity index 100% rename from charts_flutter/docs/examples/bar_charts/stacked_horizontal_full.png rename to docs/examples/bar_charts/stacked_horizontal_full.png diff --git a/charts_flutter/docs/examples/bar_charts/stacked_horizontal_thumb.png b/docs/examples/bar_charts/stacked_horizontal_thumb.png similarity index 100% rename from charts_flutter/docs/examples/bar_charts/stacked_horizontal_thumb.png rename to docs/examples/bar_charts/stacked_horizontal_thumb.png diff --git a/charts_flutter/docs/examples/bar_charts/stacked_target_line.md b/docs/examples/bar_charts/stacked_target_line.md similarity index 100% rename from charts_flutter/docs/examples/bar_charts/stacked_target_line.md rename to docs/examples/bar_charts/stacked_target_line.md diff --git a/charts_flutter/docs/examples/bar_charts/stacked_target_line_full.png b/docs/examples/bar_charts/stacked_target_line_full.png similarity index 100% rename from charts_flutter/docs/examples/bar_charts/stacked_target_line_full.png rename to docs/examples/bar_charts/stacked_target_line_full.png diff --git a/charts_flutter/docs/examples/bar_charts/stacked_target_line_thumb.png b/docs/examples/bar_charts/stacked_target_line_thumb.png similarity index 100% rename from charts_flutter/docs/examples/bar_charts/stacked_target_line_thumb.png rename to docs/examples/bar_charts/stacked_target_line_thumb.png diff --git a/charts_flutter/docs/examples/bar_charts/stacked_thumb.png b/docs/examples/bar_charts/stacked_thumb.png similarity index 100% rename from charts_flutter/docs/examples/bar_charts/stacked_thumb.png rename to docs/examples/bar_charts/stacked_thumb.png diff --git a/charts_flutter/docs/examples/i18ns/rtl_bar_chart.md b/docs/examples/i18ns/rtl_bar_chart.md similarity index 100% rename from charts_flutter/docs/examples/i18ns/rtl_bar_chart.md rename to docs/examples/i18ns/rtl_bar_chart.md diff --git a/charts_flutter/docs/examples/i18ns/rtl_bar_chart_full.png b/docs/examples/i18ns/rtl_bar_chart_full.png similarity index 100% rename from charts_flutter/docs/examples/i18ns/rtl_bar_chart_full.png rename to docs/examples/i18ns/rtl_bar_chart_full.png diff --git a/charts_flutter/docs/examples/i18ns/rtl_bar_chart_thumb.png b/docs/examples/i18ns/rtl_bar_chart_thumb.png similarity index 100% rename from charts_flutter/docs/examples/i18ns/rtl_bar_chart_thumb.png rename to docs/examples/i18ns/rtl_bar_chart_thumb.png diff --git a/charts_flutter/docs/examples/i18ns/rtl_line_chart.md b/docs/examples/i18ns/rtl_line_chart.md similarity index 100% rename from charts_flutter/docs/examples/i18ns/rtl_line_chart.md rename to docs/examples/i18ns/rtl_line_chart.md diff --git a/charts_flutter/docs/examples/i18ns/rtl_line_chart_full.png b/docs/examples/i18ns/rtl_line_chart_full.png similarity index 100% rename from charts_flutter/docs/examples/i18ns/rtl_line_chart_full.png rename to docs/examples/i18ns/rtl_line_chart_full.png diff --git a/charts_flutter/docs/examples/i18ns/rtl_line_chart_thumb.png b/docs/examples/i18ns/rtl_line_chart_thumb.png similarity index 100% rename from charts_flutter/docs/examples/i18ns/rtl_line_chart_thumb.png rename to docs/examples/i18ns/rtl_line_chart_thumb.png diff --git a/charts_flutter/docs/examples/i18ns/rtl_series_legend.md b/docs/examples/i18ns/rtl_series_legend.md similarity index 100% rename from charts_flutter/docs/examples/i18ns/rtl_series_legend.md rename to docs/examples/i18ns/rtl_series_legend.md diff --git a/charts_flutter/docs/examples/i18ns/rtl_series_legend_full.png b/docs/examples/i18ns/rtl_series_legend_full.png similarity index 100% rename from charts_flutter/docs/examples/i18ns/rtl_series_legend_full.png rename to docs/examples/i18ns/rtl_series_legend_full.png diff --git a/charts_flutter/docs/examples/i18ns/rtl_series_legend_thumb.png b/docs/examples/i18ns/rtl_series_legend_thumb.png similarity index 100% rename from charts_flutter/docs/examples/i18ns/rtl_series_legend_thumb.png rename to docs/examples/i18ns/rtl_series_legend_thumb.png diff --git a/charts_flutter/docs/examples/interactions/selection_bar_highlight.md b/docs/examples/interactions/selection_bar_highlight.md similarity index 100% rename from charts_flutter/docs/examples/interactions/selection_bar_highlight.md rename to docs/examples/interactions/selection_bar_highlight.md diff --git a/charts_flutter/docs/examples/interactions/selection_bar_highlight_full.png b/docs/examples/interactions/selection_bar_highlight_full.png similarity index 100% rename from charts_flutter/docs/examples/interactions/selection_bar_highlight_full.png rename to docs/examples/interactions/selection_bar_highlight_full.png diff --git a/charts_flutter/docs/examples/interactions/selection_bar_highlight_thumb.png b/docs/examples/interactions/selection_bar_highlight_thumb.png similarity index 100% rename from charts_flutter/docs/examples/interactions/selection_bar_highlight_thumb.png rename to docs/examples/interactions/selection_bar_highlight_thumb.png diff --git a/charts_flutter/docs/examples/interactions/selection_callback_example.md b/docs/examples/interactions/selection_callback_example.md similarity index 100% rename from charts_flutter/docs/examples/interactions/selection_callback_example.md rename to docs/examples/interactions/selection_callback_example.md diff --git a/charts_flutter/docs/examples/interactions/selection_callback_example_full.png b/docs/examples/interactions/selection_callback_example_full.png similarity index 100% rename from charts_flutter/docs/examples/interactions/selection_callback_example_full.png rename to docs/examples/interactions/selection_callback_example_full.png diff --git a/charts_flutter/docs/examples/interactions/selection_callback_example_thumb.png b/docs/examples/interactions/selection_callback_example_thumb.png similarity index 100% rename from charts_flutter/docs/examples/interactions/selection_callback_example_thumb.png rename to docs/examples/interactions/selection_callback_example_thumb.png diff --git a/charts_flutter/docs/examples/interactions/selection_line_highlight.md b/docs/examples/interactions/selection_line_highlight.md similarity index 100% rename from charts_flutter/docs/examples/interactions/selection_line_highlight.md rename to docs/examples/interactions/selection_line_highlight.md diff --git a/charts_flutter/docs/examples/interactions/selection_line_highlight_full.png b/docs/examples/interactions/selection_line_highlight_full.png similarity index 100% rename from charts_flutter/docs/examples/interactions/selection_line_highlight_full.png rename to docs/examples/interactions/selection_line_highlight_full.png diff --git a/charts_flutter/docs/examples/interactions/selection_line_highlight_thumb.png b/docs/examples/interactions/selection_line_highlight_thumb.png similarity index 100% rename from charts_flutter/docs/examples/interactions/selection_line_highlight_thumb.png rename to docs/examples/interactions/selection_line_highlight_thumb.png diff --git a/charts_flutter/docs/examples/legends/legend_custom_symbol.md b/docs/examples/legends/legend_custom_symbol.md similarity index 100% rename from charts_flutter/docs/examples/legends/legend_custom_symbol.md rename to docs/examples/legends/legend_custom_symbol.md diff --git a/charts_flutter/docs/examples/legends/legend_custom_symbol_full.png b/docs/examples/legends/legend_custom_symbol_full.png similarity index 100% rename from charts_flutter/docs/examples/legends/legend_custom_symbol_full.png rename to docs/examples/legends/legend_custom_symbol_full.png diff --git a/charts_flutter/docs/examples/legends/legend_custom_symbol_thumb.png b/docs/examples/legends/legend_custom_symbol_thumb.png similarity index 100% rename from charts_flutter/docs/examples/legends/legend_custom_symbol_thumb.png rename to docs/examples/legends/legend_custom_symbol_thumb.png diff --git a/charts_flutter/docs/examples/legends/legend_options.md b/docs/examples/legends/legend_options.md similarity index 100% rename from charts_flutter/docs/examples/legends/legend_options.md rename to docs/examples/legends/legend_options.md diff --git a/charts_flutter/docs/examples/legends/legend_options_full.png b/docs/examples/legends/legend_options_full.png similarity index 100% rename from charts_flutter/docs/examples/legends/legend_options_full.png rename to docs/examples/legends/legend_options_full.png diff --git a/charts_flutter/docs/examples/legends/legend_options_thumb.png b/docs/examples/legends/legend_options_thumb.png similarity index 100% rename from charts_flutter/docs/examples/legends/legend_options_thumb.png rename to docs/examples/legends/legend_options_thumb.png diff --git a/charts_flutter/docs/examples/legends/simple_series_legend.md b/docs/examples/legends/simple_series_legend.md similarity index 100% rename from charts_flutter/docs/examples/legends/simple_series_legend.md rename to docs/examples/legends/simple_series_legend.md diff --git a/charts_flutter/docs/examples/legends/simple_series_legend_full.png b/docs/examples/legends/simple_series_legend_full.png similarity index 100% rename from charts_flutter/docs/examples/legends/simple_series_legend_full.png rename to docs/examples/legends/simple_series_legend_full.png diff --git a/charts_flutter/docs/examples/legends/simple_series_legend_thumb.png b/docs/examples/legends/simple_series_legend_thumb.png similarity index 100% rename from charts_flutter/docs/examples/legends/simple_series_legend_thumb.png rename to docs/examples/legends/simple_series_legend_thumb.png diff --git a/charts_flutter/docs/examples/line_charts/dash_pattern.md b/docs/examples/line_charts/dash_pattern.md similarity index 100% rename from charts_flutter/docs/examples/line_charts/dash_pattern.md rename to docs/examples/line_charts/dash_pattern.md diff --git a/charts_flutter/docs/examples/line_charts/dash_pattern_full.png b/docs/examples/line_charts/dash_pattern_full.png similarity index 100% rename from charts_flutter/docs/examples/line_charts/dash_pattern_full.png rename to docs/examples/line_charts/dash_pattern_full.png diff --git a/charts_flutter/docs/examples/line_charts/dash_pattern_thumb.png b/docs/examples/line_charts/dash_pattern_thumb.png similarity index 100% rename from charts_flutter/docs/examples/line_charts/dash_pattern_thumb.png rename to docs/examples/line_charts/dash_pattern_thumb.png diff --git a/charts_flutter/docs/examples/line_charts/range_annotation.md b/docs/examples/line_charts/range_annotation.md similarity index 100% rename from charts_flutter/docs/examples/line_charts/range_annotation.md rename to docs/examples/line_charts/range_annotation.md diff --git a/charts_flutter/docs/examples/line_charts/range_annotation_full.png b/docs/examples/line_charts/range_annotation_full.png similarity index 100% rename from charts_flutter/docs/examples/line_charts/range_annotation_full.png rename to docs/examples/line_charts/range_annotation_full.png diff --git a/charts_flutter/docs/examples/line_charts/range_annotation_thumb.png b/docs/examples/line_charts/range_annotation_thumb.png similarity index 100% rename from charts_flutter/docs/examples/line_charts/range_annotation_thumb.png rename to docs/examples/line_charts/range_annotation_thumb.png diff --git a/charts_flutter/docs/examples/line_charts/simple.md b/docs/examples/line_charts/simple.md similarity index 100% rename from charts_flutter/docs/examples/line_charts/simple.md rename to docs/examples/line_charts/simple.md diff --git a/charts_flutter/docs/examples/line_charts/simple_full.png b/docs/examples/line_charts/simple_full.png similarity index 100% rename from charts_flutter/docs/examples/line_charts/simple_full.png rename to docs/examples/line_charts/simple_full.png diff --git a/charts_flutter/docs/examples/line_charts/simple_thumb.png b/docs/examples/line_charts/simple_thumb.png similarity index 100% rename from charts_flutter/docs/examples/line_charts/simple_thumb.png rename to docs/examples/line_charts/simple_thumb.png diff --git a/charts_flutter/docs/examples/time_series_charts/range_annotation.md b/docs/examples/time_series_charts/range_annotation.md similarity index 100% rename from charts_flutter/docs/examples/time_series_charts/range_annotation.md rename to docs/examples/time_series_charts/range_annotation.md diff --git a/charts_flutter/docs/examples/time_series_charts/range_annotation_full.png b/docs/examples/time_series_charts/range_annotation_full.png similarity index 100% rename from charts_flutter/docs/examples/time_series_charts/range_annotation_full.png rename to docs/examples/time_series_charts/range_annotation_full.png diff --git a/charts_flutter/docs/examples/time_series_charts/range_annotation_thumb.png b/docs/examples/time_series_charts/range_annotation_thumb.png similarity index 100% rename from charts_flutter/docs/examples/time_series_charts/range_annotation_thumb.png rename to docs/examples/time_series_charts/range_annotation_thumb.png diff --git a/charts_flutter/docs/examples/time_series_charts/simple.md b/docs/examples/time_series_charts/simple.md similarity index 100% rename from charts_flutter/docs/examples/time_series_charts/simple.md rename to docs/examples/time_series_charts/simple.md diff --git a/charts_flutter/docs/examples/time_series_charts/simple_full.png b/docs/examples/time_series_charts/simple_full.png similarity index 100% rename from charts_flutter/docs/examples/time_series_charts/simple_full.png rename to docs/examples/time_series_charts/simple_full.png diff --git a/charts_flutter/docs/examples/time_series_charts/simple_thumb.png b/docs/examples/time_series_charts/simple_thumb.png similarity index 100% rename from charts_flutter/docs/examples/time_series_charts/simple_thumb.png rename to docs/examples/time_series_charts/simple_thumb.png diff --git a/charts_flutter/docs/gallery.md b/docs/gallery.md similarity index 100% rename from charts_flutter/docs/gallery.md rename to docs/gallery.md From 9f5eafab22b2c5932b12115a2b065627ba9f8cba Mon Sep 17 00:00:00 2001 From: nshahan Date: Thu, 15 Mar 2018 10:35:44 -0700 Subject: [PATCH 7/9] Rename subdirectory examples --> example Adhere to pub package conventions. Mirrored the change in docs/examples --> docs/example just to be consistent and avoid confusion going forward. PiperOrigin-RevId: 189208234 --- .../{examples => example}/android.iml | 0 .../{examples => example}/android/.gitignore | 0 .../android/app/build.gradle | 2 +- .../android/app/src/main/AndroidManifest.xml | 0 .../com/example/examples/MainActivity.java | 0 .../plugins/GeneratedPluginRegistrant.java | 0 .../main/res/drawable/launch_background.xml | 0 .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin .../app/src/main/res/values/styles.xml | 0 .../android/build.gradle | 0 .../android/gradle.properties | 0 .../android/gradle/wrapper/gradle-wrapper.jar | Bin .../gradle/wrapper/gradle-wrapper.properties | 0 .../{examples => example}/android/gradlew | 0 .../{examples => example}/android/gradlew.bat | 0 .../android/settings.gradle | 0 .../{examples => example}/examples.iml | 0 .../examples_android.iml | 0 .../ios/Flutter/AppFrameworkInfo.plist | 0 .../ios/Flutter/Debug.xcconfig | 0 .../ios/Flutter/Release.xcconfig | 0 .../ios/Runner.xcodeproj/project.pbxproj | 0 .../contents.xcworkspacedata | 0 .../xcshareddata/xcschemes/Runner.xcscheme | 0 .../ios/Runner/AppDelegate.h | 0 .../ios/Runner/AppDelegate.m | 0 .../AppIcon.appiconset/Contents.json | 0 .../AppIcon.appiconset/Icon-60@2x.png | Bin .../AppIcon.appiconset/Icon-60@3x.png | Bin .../AppIcon.appiconset/Icon-76.png | Bin .../AppIcon.appiconset/Icon-76@2x.png | Bin .../AppIcon.appiconset/Icon-83.5@2x.png | Bin .../AppIcon.appiconset/Icon-Small-40.png | Bin .../AppIcon.appiconset/Icon-Small-40@2x.png | Bin .../AppIcon.appiconset/Icon-Small-40@3x.png | Bin .../AppIcon.appiconset/Icon-Small.png | Bin .../AppIcon.appiconset/Icon-Small@2x.png | Bin .../AppIcon.appiconset/Icon-Small@3x.png | Bin .../Runner/Base.lproj/LaunchScreen.storyboard | 0 .../ios/Runner/Base.lproj/Main.storyboard | 0 .../ios/Runner/Info.plist | 0 .../{examples => example}/ios/Runner/main.m | 0 .../lib/a11y/a11y_gallery.dart | 0 .../a11y/domain_a11y_explore_bar_chart.dart | 0 .../{examples => example}/lib/app_config.dart | 0 .../lib/axes/axes_gallery.dart | 0 .../lib/axes/bar_secondary_axis.dart | 0 .../lib/axes/bar_secondary_axis_only.dart | 0 .../lib/axes/custom_axis_tick_formatters.dart | 0 .../lib/axes/custom_font_size_and_color.dart | 0 .../lib/axes/custom_measure_tick_count.dart | 0 .../axes/hidden_ticks_and_labels_axis.dart | 0 .../axes/horizontal_bar_secondary_axis.dart | 0 .../lib/axes/integer_only_measure_axis.dart | 0 .../axes/measure_axis_label_alignment.dart | 0 .../lib/axes/nonzero_bound_measure_axis.dart | 0 .../lib/axes/short_tick_length_axis.dart | 0 .../lib/axes/statically_provided_ticks.dart | 0 .../lib/bar_chart/bar_gallery.dart | 0 .../lib/bar_chart/grouped.dart | 0 .../bar_chart/grouped_single_target_line.dart | 0 .../lib/bar_chart/grouped_stacked.dart | 0 .../lib/bar_chart/grouped_target_line.dart | 0 .../lib/bar_chart/horizontal.dart | 0 .../lib/bar_chart/horizontal_bar_label.dart | 0 .../horizontal_pattern_forward_hatch.dart | 0 .../lib/bar_chart/pattern_forward_hatch.dart | 0 .../lib/bar_chart/simple.dart | 0 .../lib/bar_chart/spark_bar.dart | 0 .../lib/bar_chart/stacked.dart | 0 .../lib/bar_chart/stacked_horizontal.dart | 0 .../lib/bar_chart/stacked_target_line.dart | 0 .../{examples => example}/lib/drawer.dart | 0 .../lib/gallery_scaffold.dart | 0 .../{examples => example}/lib/home.dart | 0 .../lib/i18n/i18n_gallery.dart | 0 .../lib/i18n/rtl_bar_chart.dart | 0 .../lib/i18n/rtl_line_chart.dart | 0 .../lib/i18n/rtl_series_legend.dart | 0 .../lib/image_test_only/legend.dart | 0 .../lib/image_test_only/rtl_grouped.dart | 0 .../image_test_only/rtl_grouped_stacked.dart | 0 .../interactions/interactions_gallery.dart | 0 .../interactions/selection_bar_highlight.dart | 0 .../selection_callback_example.dart | 0 .../selection_line_highlight.dart | 0 .../lib/legends/legend_custom_symbol.dart | 0 .../lib/legends/legend_options.dart | 0 .../lib/legends/legends_gallery.dart | 0 .../lib/legends/simple_series_legend.dart | 0 .../lib/line_chart/animation_zoom.dart | 0 .../lib/line_chart/dash_pattern.dart | 0 .../lib/line_chart/line_gallery.dart | 0 .../lib/line_chart/range_annotation.dart | 0 .../lib/line_chart/simple.dart | 0 .../{examples => example}/lib/main.dart | 0 .../time_series_chart/range_annotation.dart | 0 .../lib/time_series_chart/simple.dart | 0 .../time_series_gallery.dart | 0 .../{examples => example}/pubspec.yaml | 0 .../examples/android/AndroidManifest.xml | 22 --- .../android/res/mipmap-hdpi/ic_launcher.png | Bin 2029 -> 0 bytes .../android/res/mipmap-mdpi/ic_launcher.png | Bin 1464 -> 0 bytes .../android/res/mipmap-xhdpi/ic_launcher.png | Bin 2810 -> 0 bytes .../android/res/mipmap-xxhdpi/ic_launcher.png | Bin 4094 -> 0 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 5502 -> 0 bytes charts_flutter/examples/lib/image_test.dart | 66 ------- .../examples/lib/image_test_main.dart | 180 ------------------ .../lib/internal/internal_scaffold.dart | 48 ----- .../lib/internal/time_series_performance.dart | 37 ---- .../examples/lib/internal_main.dart | 138 -------------- .../a11ys/domain_a11y_explore_bar_chart.md | 0 .../domain_a11y_explore_bar_chart_full.png | Bin .../domain_a11y_explore_bar_chart_thumb.png | Bin .../axes/bar_secondary_axis.md | 0 .../axes/bar_secondary_axis_full.png | Bin .../axes/bar_secondary_axis_only.md | 0 .../axes/bar_secondary_axis_only_full.png | Bin .../axes/bar_secondary_axis_only_thumb.png | Bin .../axes/bar_secondary_axis_thumb.png | Bin .../axes/custom_axis_tick_formatters.md | 0 .../axes/custom_axis_tick_formatters_full.png | Bin .../custom_axis_tick_formatters_thumb.png | Bin .../axes/custom_font_size_and_color.md | 0 .../axes/custom_font_size_and_color_full.png | Bin .../axes/custom_font_size_and_color_thumb.png | Bin .../axes/custom_measure_tick_count.md | 0 .../axes/custom_measure_tick_count_full.png | Bin .../axes/custom_measure_tick_count_thumb.png | Bin .../axes/hidden_ticks_and_labels_axis.md | 0 .../hidden_ticks_and_labels_axis_full.png | Bin .../hidden_ticks_and_labels_axis_thumb.png | Bin .../axes/horizontal_bar_secondary_axis.md | 0 .../horizontal_bar_secondary_axis_full.png | Bin .../horizontal_bar_secondary_axis_thumb.png | Bin .../axes/integer_only_measure_axis.md | 0 .../axes/integer_only_measure_axis_full.png | Bin .../axes/integer_only_measure_axis_thumb.png | Bin .../axes/measure_axis_label_alignment.md | 0 .../measure_axis_label_alignment_full.png | Bin .../measure_axis_label_alignment_thumb.png | Bin .../axes/nonzero_bound_measure_axis.md | 0 .../axes/nonzero_bound_measure_axis_full.png | Bin .../axes/nonzero_bound_measure_axis_thumb.png | Bin .../axes/short_tick_length_axis.md | 0 .../axes/short_tick_length_axis_full.png | Bin .../axes/short_tick_length_axis_thumb.png | Bin .../axes/statically_provided_ticks.md | 0 .../axes/statically_provided_ticks_full.png | Bin .../axes/statically_provided_ticks_thumb.png | Bin .../bar_charts/grouped.md | 0 .../bar_charts/grouped_full.png | Bin .../bar_charts/grouped_stacked.md | 0 .../bar_charts/grouped_stacked_full.png | Bin .../bar_charts/grouped_stacked_thumb.png | Bin .../bar_charts/grouped_target_line.md | 0 .../bar_charts/grouped_target_line_full.png | Bin .../bar_charts/grouped_target_line_thumb.png | Bin .../bar_charts/grouped_thumb.png | Bin .../bar_charts/horizontal.md | 0 .../bar_charts/horizontal_bar_label.md | 0 .../bar_charts/horizontal_bar_label_full.png | Bin .../bar_charts/horizontal_bar_label_thumb.png | Bin .../bar_charts/horizontal_full.png | Bin .../horizontal_pattern_forward_hatch.md | 0 .../horizontal_pattern_forward_hatch_full.png | Bin ...horizontal_pattern_forward_hatch_thumb.png | Bin .../bar_charts/horizontal_thumb.png | Bin .../bar_charts/pattern_forward_hatch.md | 0 .../bar_charts/pattern_forward_hatch_full.png | Bin .../pattern_forward_hatch_thumb.png | Bin .../bar_charts/simple.md | 0 .../bar_charts/simple_full.png | Bin .../bar_charts/simple_thumb.png | Bin .../bar_charts/spark_bar.md | 0 .../bar_charts/spark_bar_full.png | Bin .../bar_charts/spark_bar_thumb.png | Bin .../bar_charts/stacked.md | 0 .../bar_charts/stacked_full.png | Bin .../bar_charts/stacked_horizontal.md | 0 .../bar_charts/stacked_horizontal_full.png | Bin .../bar_charts/stacked_horizontal_thumb.png | Bin .../bar_charts/stacked_target_line.md | 0 .../bar_charts/stacked_target_line_full.png | Bin .../bar_charts/stacked_target_line_thumb.png | Bin .../bar_charts/stacked_thumb.png | Bin .../i18ns/rtl_bar_chart.md | 0 .../i18ns/rtl_bar_chart_full.png | Bin .../i18ns/rtl_bar_chart_thumb.png | Bin .../i18ns/rtl_line_chart.md | 0 .../i18ns/rtl_line_chart_full.png | Bin .../i18ns/rtl_line_chart_thumb.png | Bin .../i18ns/rtl_series_legend.md | 0 .../i18ns/rtl_series_legend_full.png | Bin .../i18ns/rtl_series_legend_thumb.png | Bin .../interactions/selection_bar_highlight.md | 0 .../selection_bar_highlight_full.png | Bin .../selection_bar_highlight_thumb.png | Bin .../selection_callback_example.md | 0 .../selection_callback_example_full.png | Bin .../selection_callback_example_thumb.png | Bin .../interactions/selection_line_highlight.md | 0 .../selection_line_highlight_full.png | Bin .../selection_line_highlight_thumb.png | Bin .../legends/legend_custom_symbol.md | 0 .../legends/legend_custom_symbol_full.png | Bin .../legends/legend_custom_symbol_thumb.png | Bin .../legends/legend_options.md | 0 .../legends/legend_options_full.png | Bin .../legends/legend_options_thumb.png | Bin .../legends/simple_series_legend.md | 0 .../legends/simple_series_legend_full.png | Bin .../legends/simple_series_legend_thumb.png | Bin .../line_charts/dash_pattern.md | 0 .../line_charts/dash_pattern_full.png | Bin .../line_charts/dash_pattern_thumb.png | Bin .../line_charts/range_annotation.md | 0 .../line_charts/range_annotation_full.png | Bin .../line_charts/range_annotation_thumb.png | Bin .../line_charts/simple.md | 0 .../line_charts/simple_full.png | Bin .../line_charts/simple_thumb.png | Bin .../time_series_charts/range_annotation.md | 0 .../range_annotation_full.png | Bin .../range_annotation_thumb.png | Bin .../time_series_charts/simple.md | 0 .../time_series_charts/simple_full.png | Bin .../time_series_charts/simple_thumb.png | Bin docs/gallery.md | 26 +-- 233 files changed, 14 insertions(+), 505 deletions(-) rename charts_flutter/{examples => example}/android.iml (100%) rename charts_flutter/{examples => example}/android/.gitignore (100%) rename charts_flutter/{examples => example}/android/app/build.gradle (96%) rename charts_flutter/{examples => example}/android/app/src/main/AndroidManifest.xml (100%) rename charts_flutter/{examples => example}/android/app/src/main/java/com/example/examples/MainActivity.java (100%) rename charts_flutter/{examples => example}/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java (100%) rename charts_flutter/{examples => example}/android/app/src/main/res/drawable/launch_background.xml (100%) rename charts_flutter/{examples => example}/android/app/src/main/res/mipmap-hdpi/ic_launcher.png (100%) rename charts_flutter/{examples => example}/android/app/src/main/res/mipmap-mdpi/ic_launcher.png (100%) rename charts_flutter/{examples => example}/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png (100%) rename charts_flutter/{examples => example}/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png (100%) rename charts_flutter/{examples => example}/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png (100%) rename charts_flutter/{examples => example}/android/app/src/main/res/values/styles.xml (100%) rename charts_flutter/{examples => example}/android/build.gradle (100%) rename charts_flutter/{examples => example}/android/gradle.properties (100%) rename charts_flutter/{examples => example}/android/gradle/wrapper/gradle-wrapper.jar (100%) rename charts_flutter/{examples => example}/android/gradle/wrapper/gradle-wrapper.properties (100%) rename charts_flutter/{examples => example}/android/gradlew (100%) rename charts_flutter/{examples => example}/android/gradlew.bat (100%) rename charts_flutter/{examples => example}/android/settings.gradle (100%) rename charts_flutter/{examples => example}/examples.iml (100%) rename charts_flutter/{examples => example}/examples_android.iml (100%) rename charts_flutter/{examples => example}/ios/Flutter/AppFrameworkInfo.plist (100%) rename charts_flutter/{examples => example}/ios/Flutter/Debug.xcconfig (100%) rename charts_flutter/{examples => example}/ios/Flutter/Release.xcconfig (100%) rename charts_flutter/{examples => example}/ios/Runner.xcodeproj/project.pbxproj (100%) rename charts_flutter/{examples => example}/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata (100%) rename charts_flutter/{examples => example}/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme (100%) rename charts_flutter/{examples => example}/ios/Runner/AppDelegate.h (100%) rename charts_flutter/{examples => example}/ios/Runner/AppDelegate.m (100%) rename charts_flutter/{examples => example}/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json (100%) rename charts_flutter/{examples => example}/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png (100%) rename charts_flutter/{examples => example}/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png (100%) rename charts_flutter/{examples => example}/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-76.png (100%) rename charts_flutter/{examples => example}/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-76@2x.png (100%) rename charts_flutter/{examples => example}/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-83.5@2x.png (100%) rename charts_flutter/{examples => example}/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-Small-40.png (100%) rename charts_flutter/{examples => example}/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-Small-40@2x.png (100%) rename charts_flutter/{examples => example}/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-Small-40@3x.png (100%) rename charts_flutter/{examples => example}/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-Small.png (100%) rename charts_flutter/{examples => example}/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-Small@2x.png (100%) rename charts_flutter/{examples => example}/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-Small@3x.png (100%) rename charts_flutter/{examples => example}/ios/Runner/Base.lproj/LaunchScreen.storyboard (100%) rename charts_flutter/{examples => example}/ios/Runner/Base.lproj/Main.storyboard (100%) rename charts_flutter/{examples => example}/ios/Runner/Info.plist (100%) rename charts_flutter/{examples => example}/ios/Runner/main.m (100%) rename charts_flutter/{examples => example}/lib/a11y/a11y_gallery.dart (100%) rename charts_flutter/{examples => example}/lib/a11y/domain_a11y_explore_bar_chart.dart (100%) rename charts_flutter/{examples => example}/lib/app_config.dart (100%) rename charts_flutter/{examples => example}/lib/axes/axes_gallery.dart (100%) rename charts_flutter/{examples => example}/lib/axes/bar_secondary_axis.dart (100%) rename charts_flutter/{examples => example}/lib/axes/bar_secondary_axis_only.dart (100%) rename charts_flutter/{examples => example}/lib/axes/custom_axis_tick_formatters.dart (100%) rename charts_flutter/{examples => example}/lib/axes/custom_font_size_and_color.dart (100%) rename charts_flutter/{examples => example}/lib/axes/custom_measure_tick_count.dart (100%) rename charts_flutter/{examples => example}/lib/axes/hidden_ticks_and_labels_axis.dart (100%) rename charts_flutter/{examples => example}/lib/axes/horizontal_bar_secondary_axis.dart (100%) rename charts_flutter/{examples => example}/lib/axes/integer_only_measure_axis.dart (100%) rename charts_flutter/{examples => example}/lib/axes/measure_axis_label_alignment.dart (100%) rename charts_flutter/{examples => example}/lib/axes/nonzero_bound_measure_axis.dart (100%) rename charts_flutter/{examples => example}/lib/axes/short_tick_length_axis.dart (100%) rename charts_flutter/{examples => example}/lib/axes/statically_provided_ticks.dart (100%) rename charts_flutter/{examples => example}/lib/bar_chart/bar_gallery.dart (100%) rename charts_flutter/{examples => example}/lib/bar_chart/grouped.dart (100%) rename charts_flutter/{examples => example}/lib/bar_chart/grouped_single_target_line.dart (100%) rename charts_flutter/{examples => example}/lib/bar_chart/grouped_stacked.dart (100%) rename charts_flutter/{examples => example}/lib/bar_chart/grouped_target_line.dart (100%) rename charts_flutter/{examples => example}/lib/bar_chart/horizontal.dart (100%) rename charts_flutter/{examples => example}/lib/bar_chart/horizontal_bar_label.dart (100%) rename charts_flutter/{examples => example}/lib/bar_chart/horizontal_pattern_forward_hatch.dart (100%) rename charts_flutter/{examples => example}/lib/bar_chart/pattern_forward_hatch.dart (100%) rename charts_flutter/{examples => example}/lib/bar_chart/simple.dart (100%) rename charts_flutter/{examples => example}/lib/bar_chart/spark_bar.dart (100%) rename charts_flutter/{examples => example}/lib/bar_chart/stacked.dart (100%) rename charts_flutter/{examples => example}/lib/bar_chart/stacked_horizontal.dart (100%) rename charts_flutter/{examples => example}/lib/bar_chart/stacked_target_line.dart (100%) rename charts_flutter/{examples => example}/lib/drawer.dart (100%) rename charts_flutter/{examples => example}/lib/gallery_scaffold.dart (100%) rename charts_flutter/{examples => example}/lib/home.dart (100%) rename charts_flutter/{examples => example}/lib/i18n/i18n_gallery.dart (100%) rename charts_flutter/{examples => example}/lib/i18n/rtl_bar_chart.dart (100%) rename charts_flutter/{examples => example}/lib/i18n/rtl_line_chart.dart (100%) rename charts_flutter/{examples => example}/lib/i18n/rtl_series_legend.dart (100%) rename charts_flutter/{examples => example}/lib/image_test_only/legend.dart (100%) rename charts_flutter/{examples => example}/lib/image_test_only/rtl_grouped.dart (100%) rename charts_flutter/{examples => example}/lib/image_test_only/rtl_grouped_stacked.dart (100%) rename charts_flutter/{examples => example}/lib/interactions/interactions_gallery.dart (100%) rename charts_flutter/{examples => example}/lib/interactions/selection_bar_highlight.dart (100%) rename charts_flutter/{examples => example}/lib/interactions/selection_callback_example.dart (100%) rename charts_flutter/{examples => example}/lib/interactions/selection_line_highlight.dart (100%) rename charts_flutter/{examples => example}/lib/legends/legend_custom_symbol.dart (100%) rename charts_flutter/{examples => example}/lib/legends/legend_options.dart (100%) rename charts_flutter/{examples => example}/lib/legends/legends_gallery.dart (100%) rename charts_flutter/{examples => example}/lib/legends/simple_series_legend.dart (100%) rename charts_flutter/{examples => example}/lib/line_chart/animation_zoom.dart (100%) rename charts_flutter/{examples => example}/lib/line_chart/dash_pattern.dart (100%) rename charts_flutter/{examples => example}/lib/line_chart/line_gallery.dart (100%) rename charts_flutter/{examples => example}/lib/line_chart/range_annotation.dart (100%) rename charts_flutter/{examples => example}/lib/line_chart/simple.dart (100%) rename charts_flutter/{examples => example}/lib/main.dart (100%) rename charts_flutter/{examples => example}/lib/time_series_chart/range_annotation.dart (100%) rename charts_flutter/{examples => example}/lib/time_series_chart/simple.dart (100%) rename charts_flutter/{examples => example}/lib/time_series_chart/time_series_gallery.dart (100%) rename charts_flutter/{examples => example}/pubspec.yaml (100%) delete mode 100644 charts_flutter/examples/android/AndroidManifest.xml delete mode 100644 charts_flutter/examples/android/res/mipmap-hdpi/ic_launcher.png delete mode 100644 charts_flutter/examples/android/res/mipmap-mdpi/ic_launcher.png delete mode 100644 charts_flutter/examples/android/res/mipmap-xhdpi/ic_launcher.png delete mode 100644 charts_flutter/examples/android/res/mipmap-xxhdpi/ic_launcher.png delete mode 100644 charts_flutter/examples/android/res/mipmap-xxxhdpi/ic_launcher.png delete mode 100644 charts_flutter/examples/lib/image_test.dart delete mode 100644 charts_flutter/examples/lib/image_test_main.dart delete mode 100644 charts_flutter/examples/lib/internal/internal_scaffold.dart delete mode 100644 charts_flutter/examples/lib/internal/time_series_performance.dart delete mode 100644 charts_flutter/examples/lib/internal_main.dart rename docs/{examples => example}/a11ys/domain_a11y_explore_bar_chart.md (100%) rename docs/{examples => example}/a11ys/domain_a11y_explore_bar_chart_full.png (100%) rename docs/{examples => example}/a11ys/domain_a11y_explore_bar_chart_thumb.png (100%) rename docs/{examples => example}/axes/bar_secondary_axis.md (100%) rename docs/{examples => example}/axes/bar_secondary_axis_full.png (100%) rename docs/{examples => example}/axes/bar_secondary_axis_only.md (100%) rename docs/{examples => example}/axes/bar_secondary_axis_only_full.png (100%) rename docs/{examples => example}/axes/bar_secondary_axis_only_thumb.png (100%) rename docs/{examples => example}/axes/bar_secondary_axis_thumb.png (100%) rename docs/{examples => example}/axes/custom_axis_tick_formatters.md (100%) rename docs/{examples => example}/axes/custom_axis_tick_formatters_full.png (100%) rename docs/{examples => example}/axes/custom_axis_tick_formatters_thumb.png (100%) rename docs/{examples => example}/axes/custom_font_size_and_color.md (100%) rename docs/{examples => example}/axes/custom_font_size_and_color_full.png (100%) rename docs/{examples => example}/axes/custom_font_size_and_color_thumb.png (100%) rename docs/{examples => example}/axes/custom_measure_tick_count.md (100%) rename docs/{examples => example}/axes/custom_measure_tick_count_full.png (100%) rename docs/{examples => example}/axes/custom_measure_tick_count_thumb.png (100%) rename docs/{examples => example}/axes/hidden_ticks_and_labels_axis.md (100%) rename docs/{examples => example}/axes/hidden_ticks_and_labels_axis_full.png (100%) rename docs/{examples => example}/axes/hidden_ticks_and_labels_axis_thumb.png (100%) rename docs/{examples => example}/axes/horizontal_bar_secondary_axis.md (100%) rename docs/{examples => example}/axes/horizontal_bar_secondary_axis_full.png (100%) rename docs/{examples => example}/axes/horizontal_bar_secondary_axis_thumb.png (100%) rename docs/{examples => example}/axes/integer_only_measure_axis.md (100%) rename docs/{examples => example}/axes/integer_only_measure_axis_full.png (100%) rename docs/{examples => example}/axes/integer_only_measure_axis_thumb.png (100%) rename docs/{examples => example}/axes/measure_axis_label_alignment.md (100%) rename docs/{examples => example}/axes/measure_axis_label_alignment_full.png (100%) rename docs/{examples => example}/axes/measure_axis_label_alignment_thumb.png (100%) rename docs/{examples => example}/axes/nonzero_bound_measure_axis.md (100%) rename docs/{examples => example}/axes/nonzero_bound_measure_axis_full.png (100%) rename docs/{examples => example}/axes/nonzero_bound_measure_axis_thumb.png (100%) rename docs/{examples => example}/axes/short_tick_length_axis.md (100%) rename docs/{examples => example}/axes/short_tick_length_axis_full.png (100%) rename docs/{examples => example}/axes/short_tick_length_axis_thumb.png (100%) rename docs/{examples => example}/axes/statically_provided_ticks.md (100%) rename docs/{examples => example}/axes/statically_provided_ticks_full.png (100%) rename docs/{examples => example}/axes/statically_provided_ticks_thumb.png (100%) rename docs/{examples => example}/bar_charts/grouped.md (100%) rename docs/{examples => example}/bar_charts/grouped_full.png (100%) rename docs/{examples => example}/bar_charts/grouped_stacked.md (100%) rename docs/{examples => example}/bar_charts/grouped_stacked_full.png (100%) rename docs/{examples => example}/bar_charts/grouped_stacked_thumb.png (100%) rename docs/{examples => example}/bar_charts/grouped_target_line.md (100%) rename docs/{examples => example}/bar_charts/grouped_target_line_full.png (100%) rename docs/{examples => example}/bar_charts/grouped_target_line_thumb.png (100%) rename docs/{examples => example}/bar_charts/grouped_thumb.png (100%) rename docs/{examples => example}/bar_charts/horizontal.md (100%) rename docs/{examples => example}/bar_charts/horizontal_bar_label.md (100%) rename docs/{examples => example}/bar_charts/horizontal_bar_label_full.png (100%) rename docs/{examples => example}/bar_charts/horizontal_bar_label_thumb.png (100%) rename docs/{examples => example}/bar_charts/horizontal_full.png (100%) rename docs/{examples => example}/bar_charts/horizontal_pattern_forward_hatch.md (100%) rename docs/{examples => example}/bar_charts/horizontal_pattern_forward_hatch_full.png (100%) rename docs/{examples => example}/bar_charts/horizontal_pattern_forward_hatch_thumb.png (100%) rename docs/{examples => example}/bar_charts/horizontal_thumb.png (100%) rename docs/{examples => example}/bar_charts/pattern_forward_hatch.md (100%) rename docs/{examples => example}/bar_charts/pattern_forward_hatch_full.png (100%) rename docs/{examples => example}/bar_charts/pattern_forward_hatch_thumb.png (100%) rename docs/{examples => example}/bar_charts/simple.md (100%) rename docs/{examples => example}/bar_charts/simple_full.png (100%) rename docs/{examples => example}/bar_charts/simple_thumb.png (100%) rename docs/{examples => example}/bar_charts/spark_bar.md (100%) rename docs/{examples => example}/bar_charts/spark_bar_full.png (100%) rename docs/{examples => example}/bar_charts/spark_bar_thumb.png (100%) rename docs/{examples => example}/bar_charts/stacked.md (100%) rename docs/{examples => example}/bar_charts/stacked_full.png (100%) rename docs/{examples => example}/bar_charts/stacked_horizontal.md (100%) rename docs/{examples => example}/bar_charts/stacked_horizontal_full.png (100%) rename docs/{examples => example}/bar_charts/stacked_horizontal_thumb.png (100%) rename docs/{examples => example}/bar_charts/stacked_target_line.md (100%) rename docs/{examples => example}/bar_charts/stacked_target_line_full.png (100%) rename docs/{examples => example}/bar_charts/stacked_target_line_thumb.png (100%) rename docs/{examples => example}/bar_charts/stacked_thumb.png (100%) rename docs/{examples => example}/i18ns/rtl_bar_chart.md (100%) rename docs/{examples => example}/i18ns/rtl_bar_chart_full.png (100%) rename docs/{examples => example}/i18ns/rtl_bar_chart_thumb.png (100%) rename docs/{examples => example}/i18ns/rtl_line_chart.md (100%) rename docs/{examples => example}/i18ns/rtl_line_chart_full.png (100%) rename docs/{examples => example}/i18ns/rtl_line_chart_thumb.png (100%) rename docs/{examples => example}/i18ns/rtl_series_legend.md (100%) rename docs/{examples => example}/i18ns/rtl_series_legend_full.png (100%) rename docs/{examples => example}/i18ns/rtl_series_legend_thumb.png (100%) rename docs/{examples => example}/interactions/selection_bar_highlight.md (100%) rename docs/{examples => example}/interactions/selection_bar_highlight_full.png (100%) rename docs/{examples => example}/interactions/selection_bar_highlight_thumb.png (100%) rename docs/{examples => example}/interactions/selection_callback_example.md (100%) rename docs/{examples => example}/interactions/selection_callback_example_full.png (100%) rename docs/{examples => example}/interactions/selection_callback_example_thumb.png (100%) rename docs/{examples => example}/interactions/selection_line_highlight.md (100%) rename docs/{examples => example}/interactions/selection_line_highlight_full.png (100%) rename docs/{examples => example}/interactions/selection_line_highlight_thumb.png (100%) rename docs/{examples => example}/legends/legend_custom_symbol.md (100%) rename docs/{examples => example}/legends/legend_custom_symbol_full.png (100%) rename docs/{examples => example}/legends/legend_custom_symbol_thumb.png (100%) rename docs/{examples => example}/legends/legend_options.md (100%) rename docs/{examples => example}/legends/legend_options_full.png (100%) rename docs/{examples => example}/legends/legend_options_thumb.png (100%) rename docs/{examples => example}/legends/simple_series_legend.md (100%) rename docs/{examples => example}/legends/simple_series_legend_full.png (100%) rename docs/{examples => example}/legends/simple_series_legend_thumb.png (100%) rename docs/{examples => example}/line_charts/dash_pattern.md (100%) rename docs/{examples => example}/line_charts/dash_pattern_full.png (100%) rename docs/{examples => example}/line_charts/dash_pattern_thumb.png (100%) rename docs/{examples => example}/line_charts/range_annotation.md (100%) rename docs/{examples => example}/line_charts/range_annotation_full.png (100%) rename docs/{examples => example}/line_charts/range_annotation_thumb.png (100%) rename docs/{examples => example}/line_charts/simple.md (100%) rename docs/{examples => example}/line_charts/simple_full.png (100%) rename docs/{examples => example}/line_charts/simple_thumb.png (100%) rename docs/{examples => example}/time_series_charts/range_annotation.md (100%) rename docs/{examples => example}/time_series_charts/range_annotation_full.png (100%) rename docs/{examples => example}/time_series_charts/range_annotation_thumb.png (100%) rename docs/{examples => example}/time_series_charts/simple.md (100%) rename docs/{examples => example}/time_series_charts/simple_full.png (100%) rename docs/{examples => example}/time_series_charts/simple_thumb.png (100%) diff --git a/charts_flutter/examples/android.iml b/charts_flutter/example/android.iml similarity index 100% rename from charts_flutter/examples/android.iml rename to charts_flutter/example/android.iml diff --git a/charts_flutter/examples/android/.gitignore b/charts_flutter/example/android/.gitignore similarity index 100% rename from charts_flutter/examples/android/.gitignore rename to charts_flutter/example/android/.gitignore diff --git a/charts_flutter/examples/android/app/build.gradle b/charts_flutter/example/android/app/build.gradle similarity index 96% rename from charts_flutter/examples/android/app/build.gradle rename to charts_flutter/example/android/app/build.gradle index e60adc3b9..0f614e71b 100644 --- a/charts_flutter/examples/android/app/build.gradle +++ b/charts_flutter/example/android/app/build.gradle @@ -1,4 +1,4 @@ -package third_party.dart.charts_flutter.examples.android.app +package third_party.dart.charts_flutter.example.android.app def localProperties = new Properties() def localPropertiesFile = rootProject.file('local.properties') diff --git a/charts_flutter/examples/android/app/src/main/AndroidManifest.xml b/charts_flutter/example/android/app/src/main/AndroidManifest.xml similarity index 100% rename from charts_flutter/examples/android/app/src/main/AndroidManifest.xml rename to charts_flutter/example/android/app/src/main/AndroidManifest.xml diff --git a/charts_flutter/examples/android/app/src/main/java/com/example/examples/MainActivity.java b/charts_flutter/example/android/app/src/main/java/com/example/examples/MainActivity.java similarity index 100% rename from charts_flutter/examples/android/app/src/main/java/com/example/examples/MainActivity.java rename to charts_flutter/example/android/app/src/main/java/com/example/examples/MainActivity.java diff --git a/charts_flutter/examples/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java b/charts_flutter/example/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java similarity index 100% rename from charts_flutter/examples/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java rename to charts_flutter/example/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java diff --git a/charts_flutter/examples/android/app/src/main/res/drawable/launch_background.xml b/charts_flutter/example/android/app/src/main/res/drawable/launch_background.xml similarity index 100% rename from charts_flutter/examples/android/app/src/main/res/drawable/launch_background.xml rename to charts_flutter/example/android/app/src/main/res/drawable/launch_background.xml diff --git a/charts_flutter/examples/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/charts_flutter/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png similarity index 100% rename from charts_flutter/examples/android/app/src/main/res/mipmap-hdpi/ic_launcher.png rename to charts_flutter/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png diff --git a/charts_flutter/examples/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/charts_flutter/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png similarity index 100% rename from charts_flutter/examples/android/app/src/main/res/mipmap-mdpi/ic_launcher.png rename to charts_flutter/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png diff --git a/charts_flutter/examples/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/charts_flutter/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png similarity index 100% rename from charts_flutter/examples/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png rename to charts_flutter/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png diff --git a/charts_flutter/examples/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/charts_flutter/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png similarity index 100% rename from charts_flutter/examples/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png rename to charts_flutter/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png diff --git a/charts_flutter/examples/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/charts_flutter/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png similarity index 100% rename from charts_flutter/examples/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png rename to charts_flutter/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png diff --git a/charts_flutter/examples/android/app/src/main/res/values/styles.xml b/charts_flutter/example/android/app/src/main/res/values/styles.xml similarity index 100% rename from charts_flutter/examples/android/app/src/main/res/values/styles.xml rename to charts_flutter/example/android/app/src/main/res/values/styles.xml diff --git a/charts_flutter/examples/android/build.gradle b/charts_flutter/example/android/build.gradle similarity index 100% rename from charts_flutter/examples/android/build.gradle rename to charts_flutter/example/android/build.gradle diff --git a/charts_flutter/examples/android/gradle.properties b/charts_flutter/example/android/gradle.properties similarity index 100% rename from charts_flutter/examples/android/gradle.properties rename to charts_flutter/example/android/gradle.properties diff --git a/charts_flutter/examples/android/gradle/wrapper/gradle-wrapper.jar b/charts_flutter/example/android/gradle/wrapper/gradle-wrapper.jar similarity index 100% rename from charts_flutter/examples/android/gradle/wrapper/gradle-wrapper.jar rename to charts_flutter/example/android/gradle/wrapper/gradle-wrapper.jar diff --git a/charts_flutter/examples/android/gradle/wrapper/gradle-wrapper.properties b/charts_flutter/example/android/gradle/wrapper/gradle-wrapper.properties similarity index 100% rename from charts_flutter/examples/android/gradle/wrapper/gradle-wrapper.properties rename to charts_flutter/example/android/gradle/wrapper/gradle-wrapper.properties diff --git a/charts_flutter/examples/android/gradlew b/charts_flutter/example/android/gradlew similarity index 100% rename from charts_flutter/examples/android/gradlew rename to charts_flutter/example/android/gradlew diff --git a/charts_flutter/examples/android/gradlew.bat b/charts_flutter/example/android/gradlew.bat similarity index 100% rename from charts_flutter/examples/android/gradlew.bat rename to charts_flutter/example/android/gradlew.bat diff --git a/charts_flutter/examples/android/settings.gradle b/charts_flutter/example/android/settings.gradle similarity index 100% rename from charts_flutter/examples/android/settings.gradle rename to charts_flutter/example/android/settings.gradle diff --git a/charts_flutter/examples/examples.iml b/charts_flutter/example/examples.iml similarity index 100% rename from charts_flutter/examples/examples.iml rename to charts_flutter/example/examples.iml diff --git a/charts_flutter/examples/examples_android.iml b/charts_flutter/example/examples_android.iml similarity index 100% rename from charts_flutter/examples/examples_android.iml rename to charts_flutter/example/examples_android.iml diff --git a/charts_flutter/examples/ios/Flutter/AppFrameworkInfo.plist b/charts_flutter/example/ios/Flutter/AppFrameworkInfo.plist similarity index 100% rename from charts_flutter/examples/ios/Flutter/AppFrameworkInfo.plist rename to charts_flutter/example/ios/Flutter/AppFrameworkInfo.plist diff --git a/charts_flutter/examples/ios/Flutter/Debug.xcconfig b/charts_flutter/example/ios/Flutter/Debug.xcconfig similarity index 100% rename from charts_flutter/examples/ios/Flutter/Debug.xcconfig rename to charts_flutter/example/ios/Flutter/Debug.xcconfig diff --git a/charts_flutter/examples/ios/Flutter/Release.xcconfig b/charts_flutter/example/ios/Flutter/Release.xcconfig similarity index 100% rename from charts_flutter/examples/ios/Flutter/Release.xcconfig rename to charts_flutter/example/ios/Flutter/Release.xcconfig diff --git a/charts_flutter/examples/ios/Runner.xcodeproj/project.pbxproj b/charts_flutter/example/ios/Runner.xcodeproj/project.pbxproj similarity index 100% rename from charts_flutter/examples/ios/Runner.xcodeproj/project.pbxproj rename to charts_flutter/example/ios/Runner.xcodeproj/project.pbxproj diff --git a/charts_flutter/examples/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/charts_flutter/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 100% rename from charts_flutter/examples/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to charts_flutter/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata diff --git a/charts_flutter/examples/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/charts_flutter/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme similarity index 100% rename from charts_flutter/examples/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme rename to charts_flutter/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme diff --git a/charts_flutter/examples/ios/Runner/AppDelegate.h b/charts_flutter/example/ios/Runner/AppDelegate.h similarity index 100% rename from charts_flutter/examples/ios/Runner/AppDelegate.h rename to charts_flutter/example/ios/Runner/AppDelegate.h diff --git a/charts_flutter/examples/ios/Runner/AppDelegate.m b/charts_flutter/example/ios/Runner/AppDelegate.m similarity index 100% rename from charts_flutter/examples/ios/Runner/AppDelegate.m rename to charts_flutter/example/ios/Runner/AppDelegate.m diff --git a/charts_flutter/examples/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/charts_flutter/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json similarity index 100% rename from charts_flutter/examples/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json rename to charts_flutter/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json diff --git a/charts_flutter/examples/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png b/charts_flutter/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png similarity index 100% rename from charts_flutter/examples/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png rename to charts_flutter/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png diff --git a/charts_flutter/examples/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png b/charts_flutter/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png similarity index 100% rename from charts_flutter/examples/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png rename to charts_flutter/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png diff --git a/charts_flutter/examples/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-76.png b/charts_flutter/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-76.png similarity index 100% rename from charts_flutter/examples/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-76.png rename to charts_flutter/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-76.png diff --git a/charts_flutter/examples/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-76@2x.png b/charts_flutter/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-76@2x.png similarity index 100% rename from charts_flutter/examples/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-76@2x.png rename to charts_flutter/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-76@2x.png diff --git a/charts_flutter/examples/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-83.5@2x.png b/charts_flutter/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-83.5@2x.png similarity index 100% rename from charts_flutter/examples/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-83.5@2x.png rename to charts_flutter/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-83.5@2x.png diff --git a/charts_flutter/examples/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-Small-40.png b/charts_flutter/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-Small-40.png similarity index 100% rename from charts_flutter/examples/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-Small-40.png rename to charts_flutter/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-Small-40.png diff --git a/charts_flutter/examples/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-Small-40@2x.png b/charts_flutter/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-Small-40@2x.png similarity index 100% rename from charts_flutter/examples/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-Small-40@2x.png rename to charts_flutter/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-Small-40@2x.png diff --git a/charts_flutter/examples/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-Small-40@3x.png b/charts_flutter/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-Small-40@3x.png similarity index 100% rename from charts_flutter/examples/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-Small-40@3x.png rename to charts_flutter/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-Small-40@3x.png diff --git a/charts_flutter/examples/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-Small.png b/charts_flutter/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-Small.png similarity index 100% rename from charts_flutter/examples/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-Small.png rename to charts_flutter/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-Small.png diff --git a/charts_flutter/examples/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-Small@2x.png b/charts_flutter/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-Small@2x.png similarity index 100% rename from charts_flutter/examples/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-Small@2x.png rename to charts_flutter/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-Small@2x.png diff --git a/charts_flutter/examples/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-Small@3x.png b/charts_flutter/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-Small@3x.png similarity index 100% rename from charts_flutter/examples/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-Small@3x.png rename to charts_flutter/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-Small@3x.png diff --git a/charts_flutter/examples/ios/Runner/Base.lproj/LaunchScreen.storyboard b/charts_flutter/example/ios/Runner/Base.lproj/LaunchScreen.storyboard similarity index 100% rename from charts_flutter/examples/ios/Runner/Base.lproj/LaunchScreen.storyboard rename to charts_flutter/example/ios/Runner/Base.lproj/LaunchScreen.storyboard diff --git a/charts_flutter/examples/ios/Runner/Base.lproj/Main.storyboard b/charts_flutter/example/ios/Runner/Base.lproj/Main.storyboard similarity index 100% rename from charts_flutter/examples/ios/Runner/Base.lproj/Main.storyboard rename to charts_flutter/example/ios/Runner/Base.lproj/Main.storyboard diff --git a/charts_flutter/examples/ios/Runner/Info.plist b/charts_flutter/example/ios/Runner/Info.plist similarity index 100% rename from charts_flutter/examples/ios/Runner/Info.plist rename to charts_flutter/example/ios/Runner/Info.plist diff --git a/charts_flutter/examples/ios/Runner/main.m b/charts_flutter/example/ios/Runner/main.m similarity index 100% rename from charts_flutter/examples/ios/Runner/main.m rename to charts_flutter/example/ios/Runner/main.m diff --git a/charts_flutter/examples/lib/a11y/a11y_gallery.dart b/charts_flutter/example/lib/a11y/a11y_gallery.dart similarity index 100% rename from charts_flutter/examples/lib/a11y/a11y_gallery.dart rename to charts_flutter/example/lib/a11y/a11y_gallery.dart diff --git a/charts_flutter/examples/lib/a11y/domain_a11y_explore_bar_chart.dart b/charts_flutter/example/lib/a11y/domain_a11y_explore_bar_chart.dart similarity index 100% rename from charts_flutter/examples/lib/a11y/domain_a11y_explore_bar_chart.dart rename to charts_flutter/example/lib/a11y/domain_a11y_explore_bar_chart.dart diff --git a/charts_flutter/examples/lib/app_config.dart b/charts_flutter/example/lib/app_config.dart similarity index 100% rename from charts_flutter/examples/lib/app_config.dart rename to charts_flutter/example/lib/app_config.dart diff --git a/charts_flutter/examples/lib/axes/axes_gallery.dart b/charts_flutter/example/lib/axes/axes_gallery.dart similarity index 100% rename from charts_flutter/examples/lib/axes/axes_gallery.dart rename to charts_flutter/example/lib/axes/axes_gallery.dart diff --git a/charts_flutter/examples/lib/axes/bar_secondary_axis.dart b/charts_flutter/example/lib/axes/bar_secondary_axis.dart similarity index 100% rename from charts_flutter/examples/lib/axes/bar_secondary_axis.dart rename to charts_flutter/example/lib/axes/bar_secondary_axis.dart diff --git a/charts_flutter/examples/lib/axes/bar_secondary_axis_only.dart b/charts_flutter/example/lib/axes/bar_secondary_axis_only.dart similarity index 100% rename from charts_flutter/examples/lib/axes/bar_secondary_axis_only.dart rename to charts_flutter/example/lib/axes/bar_secondary_axis_only.dart diff --git a/charts_flutter/examples/lib/axes/custom_axis_tick_formatters.dart b/charts_flutter/example/lib/axes/custom_axis_tick_formatters.dart similarity index 100% rename from charts_flutter/examples/lib/axes/custom_axis_tick_formatters.dart rename to charts_flutter/example/lib/axes/custom_axis_tick_formatters.dart diff --git a/charts_flutter/examples/lib/axes/custom_font_size_and_color.dart b/charts_flutter/example/lib/axes/custom_font_size_and_color.dart similarity index 100% rename from charts_flutter/examples/lib/axes/custom_font_size_and_color.dart rename to charts_flutter/example/lib/axes/custom_font_size_and_color.dart diff --git a/charts_flutter/examples/lib/axes/custom_measure_tick_count.dart b/charts_flutter/example/lib/axes/custom_measure_tick_count.dart similarity index 100% rename from charts_flutter/examples/lib/axes/custom_measure_tick_count.dart rename to charts_flutter/example/lib/axes/custom_measure_tick_count.dart diff --git a/charts_flutter/examples/lib/axes/hidden_ticks_and_labels_axis.dart b/charts_flutter/example/lib/axes/hidden_ticks_and_labels_axis.dart similarity index 100% rename from charts_flutter/examples/lib/axes/hidden_ticks_and_labels_axis.dart rename to charts_flutter/example/lib/axes/hidden_ticks_and_labels_axis.dart diff --git a/charts_flutter/examples/lib/axes/horizontal_bar_secondary_axis.dart b/charts_flutter/example/lib/axes/horizontal_bar_secondary_axis.dart similarity index 100% rename from charts_flutter/examples/lib/axes/horizontal_bar_secondary_axis.dart rename to charts_flutter/example/lib/axes/horizontal_bar_secondary_axis.dart diff --git a/charts_flutter/examples/lib/axes/integer_only_measure_axis.dart b/charts_flutter/example/lib/axes/integer_only_measure_axis.dart similarity index 100% rename from charts_flutter/examples/lib/axes/integer_only_measure_axis.dart rename to charts_flutter/example/lib/axes/integer_only_measure_axis.dart diff --git a/charts_flutter/examples/lib/axes/measure_axis_label_alignment.dart b/charts_flutter/example/lib/axes/measure_axis_label_alignment.dart similarity index 100% rename from charts_flutter/examples/lib/axes/measure_axis_label_alignment.dart rename to charts_flutter/example/lib/axes/measure_axis_label_alignment.dart diff --git a/charts_flutter/examples/lib/axes/nonzero_bound_measure_axis.dart b/charts_flutter/example/lib/axes/nonzero_bound_measure_axis.dart similarity index 100% rename from charts_flutter/examples/lib/axes/nonzero_bound_measure_axis.dart rename to charts_flutter/example/lib/axes/nonzero_bound_measure_axis.dart diff --git a/charts_flutter/examples/lib/axes/short_tick_length_axis.dart b/charts_flutter/example/lib/axes/short_tick_length_axis.dart similarity index 100% rename from charts_flutter/examples/lib/axes/short_tick_length_axis.dart rename to charts_flutter/example/lib/axes/short_tick_length_axis.dart diff --git a/charts_flutter/examples/lib/axes/statically_provided_ticks.dart b/charts_flutter/example/lib/axes/statically_provided_ticks.dart similarity index 100% rename from charts_flutter/examples/lib/axes/statically_provided_ticks.dart rename to charts_flutter/example/lib/axes/statically_provided_ticks.dart diff --git a/charts_flutter/examples/lib/bar_chart/bar_gallery.dart b/charts_flutter/example/lib/bar_chart/bar_gallery.dart similarity index 100% rename from charts_flutter/examples/lib/bar_chart/bar_gallery.dart rename to charts_flutter/example/lib/bar_chart/bar_gallery.dart diff --git a/charts_flutter/examples/lib/bar_chart/grouped.dart b/charts_flutter/example/lib/bar_chart/grouped.dart similarity index 100% rename from charts_flutter/examples/lib/bar_chart/grouped.dart rename to charts_flutter/example/lib/bar_chart/grouped.dart diff --git a/charts_flutter/examples/lib/bar_chart/grouped_single_target_line.dart b/charts_flutter/example/lib/bar_chart/grouped_single_target_line.dart similarity index 100% rename from charts_flutter/examples/lib/bar_chart/grouped_single_target_line.dart rename to charts_flutter/example/lib/bar_chart/grouped_single_target_line.dart diff --git a/charts_flutter/examples/lib/bar_chart/grouped_stacked.dart b/charts_flutter/example/lib/bar_chart/grouped_stacked.dart similarity index 100% rename from charts_flutter/examples/lib/bar_chart/grouped_stacked.dart rename to charts_flutter/example/lib/bar_chart/grouped_stacked.dart diff --git a/charts_flutter/examples/lib/bar_chart/grouped_target_line.dart b/charts_flutter/example/lib/bar_chart/grouped_target_line.dart similarity index 100% rename from charts_flutter/examples/lib/bar_chart/grouped_target_line.dart rename to charts_flutter/example/lib/bar_chart/grouped_target_line.dart diff --git a/charts_flutter/examples/lib/bar_chart/horizontal.dart b/charts_flutter/example/lib/bar_chart/horizontal.dart similarity index 100% rename from charts_flutter/examples/lib/bar_chart/horizontal.dart rename to charts_flutter/example/lib/bar_chart/horizontal.dart diff --git a/charts_flutter/examples/lib/bar_chart/horizontal_bar_label.dart b/charts_flutter/example/lib/bar_chart/horizontal_bar_label.dart similarity index 100% rename from charts_flutter/examples/lib/bar_chart/horizontal_bar_label.dart rename to charts_flutter/example/lib/bar_chart/horizontal_bar_label.dart diff --git a/charts_flutter/examples/lib/bar_chart/horizontal_pattern_forward_hatch.dart b/charts_flutter/example/lib/bar_chart/horizontal_pattern_forward_hatch.dart similarity index 100% rename from charts_flutter/examples/lib/bar_chart/horizontal_pattern_forward_hatch.dart rename to charts_flutter/example/lib/bar_chart/horizontal_pattern_forward_hatch.dart diff --git a/charts_flutter/examples/lib/bar_chart/pattern_forward_hatch.dart b/charts_flutter/example/lib/bar_chart/pattern_forward_hatch.dart similarity index 100% rename from charts_flutter/examples/lib/bar_chart/pattern_forward_hatch.dart rename to charts_flutter/example/lib/bar_chart/pattern_forward_hatch.dart diff --git a/charts_flutter/examples/lib/bar_chart/simple.dart b/charts_flutter/example/lib/bar_chart/simple.dart similarity index 100% rename from charts_flutter/examples/lib/bar_chart/simple.dart rename to charts_flutter/example/lib/bar_chart/simple.dart diff --git a/charts_flutter/examples/lib/bar_chart/spark_bar.dart b/charts_flutter/example/lib/bar_chart/spark_bar.dart similarity index 100% rename from charts_flutter/examples/lib/bar_chart/spark_bar.dart rename to charts_flutter/example/lib/bar_chart/spark_bar.dart diff --git a/charts_flutter/examples/lib/bar_chart/stacked.dart b/charts_flutter/example/lib/bar_chart/stacked.dart similarity index 100% rename from charts_flutter/examples/lib/bar_chart/stacked.dart rename to charts_flutter/example/lib/bar_chart/stacked.dart diff --git a/charts_flutter/examples/lib/bar_chart/stacked_horizontal.dart b/charts_flutter/example/lib/bar_chart/stacked_horizontal.dart similarity index 100% rename from charts_flutter/examples/lib/bar_chart/stacked_horizontal.dart rename to charts_flutter/example/lib/bar_chart/stacked_horizontal.dart diff --git a/charts_flutter/examples/lib/bar_chart/stacked_target_line.dart b/charts_flutter/example/lib/bar_chart/stacked_target_line.dart similarity index 100% rename from charts_flutter/examples/lib/bar_chart/stacked_target_line.dart rename to charts_flutter/example/lib/bar_chart/stacked_target_line.dart diff --git a/charts_flutter/examples/lib/drawer.dart b/charts_flutter/example/lib/drawer.dart similarity index 100% rename from charts_flutter/examples/lib/drawer.dart rename to charts_flutter/example/lib/drawer.dart diff --git a/charts_flutter/examples/lib/gallery_scaffold.dart b/charts_flutter/example/lib/gallery_scaffold.dart similarity index 100% rename from charts_flutter/examples/lib/gallery_scaffold.dart rename to charts_flutter/example/lib/gallery_scaffold.dart diff --git a/charts_flutter/examples/lib/home.dart b/charts_flutter/example/lib/home.dart similarity index 100% rename from charts_flutter/examples/lib/home.dart rename to charts_flutter/example/lib/home.dart diff --git a/charts_flutter/examples/lib/i18n/i18n_gallery.dart b/charts_flutter/example/lib/i18n/i18n_gallery.dart similarity index 100% rename from charts_flutter/examples/lib/i18n/i18n_gallery.dart rename to charts_flutter/example/lib/i18n/i18n_gallery.dart diff --git a/charts_flutter/examples/lib/i18n/rtl_bar_chart.dart b/charts_flutter/example/lib/i18n/rtl_bar_chart.dart similarity index 100% rename from charts_flutter/examples/lib/i18n/rtl_bar_chart.dart rename to charts_flutter/example/lib/i18n/rtl_bar_chart.dart diff --git a/charts_flutter/examples/lib/i18n/rtl_line_chart.dart b/charts_flutter/example/lib/i18n/rtl_line_chart.dart similarity index 100% rename from charts_flutter/examples/lib/i18n/rtl_line_chart.dart rename to charts_flutter/example/lib/i18n/rtl_line_chart.dart diff --git a/charts_flutter/examples/lib/i18n/rtl_series_legend.dart b/charts_flutter/example/lib/i18n/rtl_series_legend.dart similarity index 100% rename from charts_flutter/examples/lib/i18n/rtl_series_legend.dart rename to charts_flutter/example/lib/i18n/rtl_series_legend.dart diff --git a/charts_flutter/examples/lib/image_test_only/legend.dart b/charts_flutter/example/lib/image_test_only/legend.dart similarity index 100% rename from charts_flutter/examples/lib/image_test_only/legend.dart rename to charts_flutter/example/lib/image_test_only/legend.dart diff --git a/charts_flutter/examples/lib/image_test_only/rtl_grouped.dart b/charts_flutter/example/lib/image_test_only/rtl_grouped.dart similarity index 100% rename from charts_flutter/examples/lib/image_test_only/rtl_grouped.dart rename to charts_flutter/example/lib/image_test_only/rtl_grouped.dart diff --git a/charts_flutter/examples/lib/image_test_only/rtl_grouped_stacked.dart b/charts_flutter/example/lib/image_test_only/rtl_grouped_stacked.dart similarity index 100% rename from charts_flutter/examples/lib/image_test_only/rtl_grouped_stacked.dart rename to charts_flutter/example/lib/image_test_only/rtl_grouped_stacked.dart diff --git a/charts_flutter/examples/lib/interactions/interactions_gallery.dart b/charts_flutter/example/lib/interactions/interactions_gallery.dart similarity index 100% rename from charts_flutter/examples/lib/interactions/interactions_gallery.dart rename to charts_flutter/example/lib/interactions/interactions_gallery.dart diff --git a/charts_flutter/examples/lib/interactions/selection_bar_highlight.dart b/charts_flutter/example/lib/interactions/selection_bar_highlight.dart similarity index 100% rename from charts_flutter/examples/lib/interactions/selection_bar_highlight.dart rename to charts_flutter/example/lib/interactions/selection_bar_highlight.dart diff --git a/charts_flutter/examples/lib/interactions/selection_callback_example.dart b/charts_flutter/example/lib/interactions/selection_callback_example.dart similarity index 100% rename from charts_flutter/examples/lib/interactions/selection_callback_example.dart rename to charts_flutter/example/lib/interactions/selection_callback_example.dart diff --git a/charts_flutter/examples/lib/interactions/selection_line_highlight.dart b/charts_flutter/example/lib/interactions/selection_line_highlight.dart similarity index 100% rename from charts_flutter/examples/lib/interactions/selection_line_highlight.dart rename to charts_flutter/example/lib/interactions/selection_line_highlight.dart diff --git a/charts_flutter/examples/lib/legends/legend_custom_symbol.dart b/charts_flutter/example/lib/legends/legend_custom_symbol.dart similarity index 100% rename from charts_flutter/examples/lib/legends/legend_custom_symbol.dart rename to charts_flutter/example/lib/legends/legend_custom_symbol.dart diff --git a/charts_flutter/examples/lib/legends/legend_options.dart b/charts_flutter/example/lib/legends/legend_options.dart similarity index 100% rename from charts_flutter/examples/lib/legends/legend_options.dart rename to charts_flutter/example/lib/legends/legend_options.dart diff --git a/charts_flutter/examples/lib/legends/legends_gallery.dart b/charts_flutter/example/lib/legends/legends_gallery.dart similarity index 100% rename from charts_flutter/examples/lib/legends/legends_gallery.dart rename to charts_flutter/example/lib/legends/legends_gallery.dart diff --git a/charts_flutter/examples/lib/legends/simple_series_legend.dart b/charts_flutter/example/lib/legends/simple_series_legend.dart similarity index 100% rename from charts_flutter/examples/lib/legends/simple_series_legend.dart rename to charts_flutter/example/lib/legends/simple_series_legend.dart diff --git a/charts_flutter/examples/lib/line_chart/animation_zoom.dart b/charts_flutter/example/lib/line_chart/animation_zoom.dart similarity index 100% rename from charts_flutter/examples/lib/line_chart/animation_zoom.dart rename to charts_flutter/example/lib/line_chart/animation_zoom.dart diff --git a/charts_flutter/examples/lib/line_chart/dash_pattern.dart b/charts_flutter/example/lib/line_chart/dash_pattern.dart similarity index 100% rename from charts_flutter/examples/lib/line_chart/dash_pattern.dart rename to charts_flutter/example/lib/line_chart/dash_pattern.dart diff --git a/charts_flutter/examples/lib/line_chart/line_gallery.dart b/charts_flutter/example/lib/line_chart/line_gallery.dart similarity index 100% rename from charts_flutter/examples/lib/line_chart/line_gallery.dart rename to charts_flutter/example/lib/line_chart/line_gallery.dart diff --git a/charts_flutter/examples/lib/line_chart/range_annotation.dart b/charts_flutter/example/lib/line_chart/range_annotation.dart similarity index 100% rename from charts_flutter/examples/lib/line_chart/range_annotation.dart rename to charts_flutter/example/lib/line_chart/range_annotation.dart diff --git a/charts_flutter/examples/lib/line_chart/simple.dart b/charts_flutter/example/lib/line_chart/simple.dart similarity index 100% rename from charts_flutter/examples/lib/line_chart/simple.dart rename to charts_flutter/example/lib/line_chart/simple.dart diff --git a/charts_flutter/examples/lib/main.dart b/charts_flutter/example/lib/main.dart similarity index 100% rename from charts_flutter/examples/lib/main.dart rename to charts_flutter/example/lib/main.dart diff --git a/charts_flutter/examples/lib/time_series_chart/range_annotation.dart b/charts_flutter/example/lib/time_series_chart/range_annotation.dart similarity index 100% rename from charts_flutter/examples/lib/time_series_chart/range_annotation.dart rename to charts_flutter/example/lib/time_series_chart/range_annotation.dart diff --git a/charts_flutter/examples/lib/time_series_chart/simple.dart b/charts_flutter/example/lib/time_series_chart/simple.dart similarity index 100% rename from charts_flutter/examples/lib/time_series_chart/simple.dart rename to charts_flutter/example/lib/time_series_chart/simple.dart diff --git a/charts_flutter/examples/lib/time_series_chart/time_series_gallery.dart b/charts_flutter/example/lib/time_series_chart/time_series_gallery.dart similarity index 100% rename from charts_flutter/examples/lib/time_series_chart/time_series_gallery.dart rename to charts_flutter/example/lib/time_series_chart/time_series_gallery.dart diff --git a/charts_flutter/examples/pubspec.yaml b/charts_flutter/example/pubspec.yaml similarity index 100% rename from charts_flutter/examples/pubspec.yaml rename to charts_flutter/example/pubspec.yaml diff --git a/charts_flutter/examples/android/AndroidManifest.xml b/charts_flutter/examples/android/AndroidManifest.xml deleted file mode 100644 index 7f2c3be1a..000000000 --- a/charts_flutter/examples/android/AndroidManifest.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - diff --git a/charts_flutter/examples/android/res/mipmap-hdpi/ic_launcher.png b/charts_flutter/examples/android/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index 733717e47f2988a31abab9f7ceea6e3ff9ab1b7a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2029 zcmV!*FleL}fpgv?iein+<*K0kv>+v%WHgX- zJ|P?qf6qBD9k`&w=50J3#u$OA3WY+;Gcqzd)F8zLL^UVs&%VCCD#q9X&Ux5)D$b2y zjJX4WKy_AD7A?FIJLlM}69IBD#-yH}o~16A>&F2&Zo8+ea3HK%M&oBi6H5^iXDkRp zI2a7NFI~Fy+N@c#e&C!(=6rvI8X&o|vvaq{-Da+OF;zZpr7NfF5}9H*h+_TV#-7WP(wq*H$_E7q#$Pl zB3tcmwhaz(N*+K~Y$Y(@jVTO^Ch4+O>^_qmfUMYx;Jo=T!*kh&;UtHGtiT~8YaTHT z$N7K)5^%`R(a>$YAX~6ia#*Zex?7N&1LojZu$A)xk*)SLjW`@AL!m&p|(WTI{i|Mh|zGidEnV1S}drX(D z?BB(rzfsL@1ZVT~#J2k5Hpk~p3f%N;!{Cvf3hbCEU{b2Vz>#<_77vmhI3Lz32uK{c zX$%=|{g5ocvDad;YZv=jY^)2|G@T(oBmSgoIuvZL=jfL1?u0ZdCyim84oGAx+N}tZ z$z%Ap`9z7)r+K;sczH7LczS#|zui=@tzH2=#E(7nK(eSDdv~!!kVq4W%#sLB^jd0= zh6v8cSxigrRFL04Cl6B2{c-Ui4Ivz70@6}WJh+oR44Ek`a%a3_h5&Dh))MGGKXNrF zUW$L-=Gdr1Iq_oiJz*R!_6#K)=P8JGw@tN*;lCUUb>2eznQ|O^YXMe0Jx#YfbPRNs zf+*oTVU8_z3P??Qj!?&Sw4SLzSQ6oOxo~7n3Dzvg(-W#^jPn3d)^tO-;jFfj`fprA zYxyZiJQWb!0AmmZhJ$5uvG&=SdH`sRaV8+jTFY+z|6D=qsc#{%G{Efv1XlzQ9YYAo zxq#H{*4Ng8w(pKZ5;Fi#`T(H23W^>CY0s)+Y<&I+EtRO9cQ&A?-KZx0KJd`3?{X6^ zpV$jUd;l1q1EggFV(L9`{=1oEz!$6MS+Se*0mVY9K7SFHPacAtk_n7^2uPu(BK5O0<*2B;8CNZ8m@L>Wc>ocB-hK(M9{3rR4eeUO8FZe?(`PH@V9S!HjKn4v zAevcMFpL$4D(!-le1M{m%8vempX#p|QA1=bDe2Q!X5-@*3-rVe38151ua_DCTZj{dNT7i0r=^Q5Tu07e?> zYHMr1nm>R3MpJ;QtE*QP7Z;zT&X|FgMZ>GjrIQ8`D(^&wr_wV1oc*cww`5uoaRhDHgiuZm~g)GZV6vc?d=x6#j_W$&=o-wg7 z^^7+#h5!h`V6eZbsp}GOQc^Oerlw{bfOP7#PQq_o zxPR`nh#|T!&CSj2YHMqwzidiaJG1~rE?!z%>Iw#fX`FL+I2=xDkGb7$sx@Jc$J1L? zRW+z6-%nE)pqL<|2slxQ zY{(3WiOJ-{_yaP8m`PQp(`hW58QXA)(QOTEFlM3My{|dlZr$43-dlEW2{-$-ydTf= zoadar?|TSW_(xYbexxKIgph&MV=^FsAR;B%KDq>i5E4%yA~gd54Yx>zCxHMD)_@Bk zaxPrBFk1*A40o|%01=VP-*^(b1VW+EPDzq#E|c)O9b%Svy966PA;OZ4(NGx+F<* z3n9Xj5ty-s6aoBl78p0kDk5O{)qso32S6MFNs^pnV`IVY?(U^tuXj+x8Xcg~6+&bY z(RfEk$KvAR;vZ#Mo(q7pe`2W_d<=f)DHY#Got*kxS44Ouf0{8AB9hOaKRR7#G0DeJYNhNe!GKKT$|nU64>$VgwEyI#gCwRb`5R zB@tldKk8NS)37mkU!wBbq{~Af9p#_Ap779hNq5lwWK5AZ)*d82pDOm49{t z;U2eX@Eiqu30zcwZG8g2nXpZo%G+-tR(@-bK;W#g=PyBddkL6TUMAo<58zs%lZ;igivq?KnTUUk5+J=?a1HY$V;OimdYsG{4gr|yV>Pvz(7BWMC!9Tx9f_MJ^ z8mj{Mq+g&lXbya3k&VacR2E96{H{OEgO5|*`W)aD^^%yu*DRD!mNQ-X?R_fR3@$P} z!CPpS7w1K50bk_l%uROd|Z`>sju^i)6Um;}qYaLI`}P%8R8;)x za5!>QRkf_a!6XiL{Dp`?hl7Yvv8(`dT#jg-bAv;cW#{nl@ad+erWJK{b$!jv&9cwu zi(c;ZT1?K)&dxm^kH_b5IJmLK-AY5{>=>Z!9S(;P2n6oicYRxiMu2$Yg73dqyG=rKhLIUt3%IdV70&*W~~82}~i84Ir<) zynIn!ULLnuV-uK*okWNzc9bO|X>f3G?C{~koIKncyBOcQPTJ_Msi~108ylTg^vGsN zSgEeA4mUJ3a55*H7E`Lp$>Mfj`jgrWfk&qYgF&GstloOI+QA9}Mr&O01pWihrUiU- SV_J~_0000qX4uS-L1b`?j5arV+G9UpU$_hmJ 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 diff --git a/charts_flutter/examples/android/res/mipmap-xxxhdpi/ic_launcher.png b/charts_flutter/examples/android/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index 0f9552e270e6ccd4867e02f425244f6bace1a086..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5502 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 BP6_}3 diff --git a/charts_flutter/examples/lib/image_test.dart b/charts_flutter/examples/lib/image_test.dart deleted file mode 100644 index 510e31e1a..000000000 --- a/charts_flutter/examples/lib/image_test.dart +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed 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. - -import 'package:flutter/material.dart'; - -class ImageTest extends StatelessWidget { - static const _chartHeight = 220.0; - - /// The title for this chart used to navigate to the chart. - final String title; - - /// The chart widget. - final Widget child; - - ImageTest(this.title, this.child); - - @override - Widget build(BuildContext context) { - return new GestureDetector( - child: new Text(title), - onTap: () { - Navigator.push(context, - new _LowTransitionMaterialPageRouter(builder: (_) { - return new Scaffold( - appBar: new AppBar( - title: new Text(title, style: new TextStyle(fontSize: 14.0)), - elevation: 0.0, - backgroundColor: Colors.transparent, - ), - body: new ListView( - padding: kMaterialListPadding, - children: [ - new SizedBox( - height: _chartHeight, - child: child, - ), - ], - ), - ); - })); - }); - } -} - -/// Hack the existing [MaterialPageRoute] with low transition for image tests. -class _LowTransitionMaterialPageRouter extends MaterialPageRoute { - _LowTransitionMaterialPageRouter({WidgetBuilder builder}) - : super(builder: builder); - - /// Transition duration needs to be non zero or else the animation dismissed - /// is not set. - @override - Duration get transitionDuration => const Duration(milliseconds: 1); -} diff --git a/charts_flutter/examples/lib/image_test_main.dart b/charts_flutter/examples/lib/image_test_main.dart deleted file mode 100644 index ec3684bfc..000000000 --- a/charts_flutter/examples/lib/image_test_main.dart +++ /dev/null @@ -1,180 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed 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. - -import 'package:flutter/material.dart'; -import 'package:flutter_driver/driver_extension.dart'; -import 'bar_chart/horizontal.dart'; -import 'bar_chart/horizontal_bar_label.dart'; -import 'bar_chart/horizontal_pattern_forward_hatch.dart'; -import 'bar_chart/grouped.dart'; -import 'bar_chart/grouped_single_target_line.dart'; -import 'bar_chart/grouped_stacked.dart'; -import 'bar_chart/grouped_target_line.dart'; -import 'bar_chart/pattern_forward_hatch.dart'; -import 'bar_chart/simple.dart'; -import 'bar_chart/stacked.dart'; -import 'bar_chart/stacked_horizontal.dart'; -import 'bar_chart/stacked_target_line.dart'; -import 'bar_chart/spark_bar.dart'; -import 'line_chart/dash_pattern.dart'; -import 'line_chart/simple.dart'; -import 'line_chart/range_annotation.dart'; -import 'a11y/domain_a11y_explore_bar_chart.dart'; -import 'axes/bar_secondary_axis.dart'; -import 'axes/bar_secondary_axis_only.dart'; -import 'axes/horizontal_bar_secondary_axis.dart'; -import 'axes/short_tick_length_axis.dart'; -import 'axes/custom_font_size_and_color.dart'; -import 'axes/measure_axis_label_alignment.dart'; -import 'axes/hidden_ticks_and_labels_axis.dart'; -import 'axes/custom_axis_tick_formatters.dart'; -import 'axes/custom_measure_tick_count.dart'; -import 'axes/integer_only_measure_axis.dart'; -import 'axes/nonzero_bound_measure_axis.dart'; -import 'axes/statically_provided_ticks.dart'; -import 'interactions/selection_bar_highlight.dart'; -import 'interactions/selection_line_highlight.dart'; -import 'interactions/selection_callback_example.dart'; -import 'i18n/rtl_bar_chart.dart'; -import 'i18n/rtl_line_chart.dart'; -import 'i18n/rtl_series_legend.dart'; -import 'legends/simple_series_legend.dart'; -import 'legends/legend_options.dart'; -import 'legends/legend_custom_symbol.dart'; -import 'time_series_chart/range_annotation.dart'; -import 'time_series_chart/simple.dart'; -import 'image_test_only/legend.dart'; -import 'image_test_only/rtl_grouped.dart'; -import 'image_test_only/rtl_grouped_stacked.dart'; -import 'image_test.dart'; - -const _appName = 'Charts Flutter Image Test'; - -void main() { - enableFlutterDriverExtension(); - final app = new MaterialApp( - debugShowCheckedModeBanner: false, - title: _appName, - theme: new ThemeData( - brightness: Brightness.light, primarySwatch: Colors.lightBlue), - home: new Home(), - ); - runApp(app); -} - -/// Main entry point of the image test app. -class Home extends StatelessWidget { - /// List of test charts. - final _tests = [ - new ImageTest('bar_chart__simple', new SimpleBarChart.withSampleData()), - new ImageTest('bar_chart__stacked', new StackedBarChart.withSampleData()), - new ImageTest('bar_chart__grouped', new GroupedBarChart.withSampleData()), - new ImageTest('bar_chart__grouped_stacked', - new GroupedStackedBarChart.withSampleData()), - new ImageTest('bar_chart__grouped_target_line', - new GroupedBarTargetLineChart.withSampleData()), - new ImageTest('bar_chart__grouped_single_target_line', - new GroupedBarSingleTargetLineChart.withSampleData()), - new ImageTest('bar_chart__stacked_horizontal', - new StackedHorizontalBarChart.withSampleData()), - new ImageTest('bar_chart__stacked_target_line', - new StackedBarTargetLineChart.withSampleData()), - new ImageTest( - 'bar_chart__horizontal', new HorizontalBarChart.withSampleData()), - new ImageTest('bar_chart__horizontal_bar_label', - new HorizontalBarLabelChart.withSampleData()), - new ImageTest('bar_chart__spark_bar', new SparkBar.withSampleData()), - new ImageTest('bar_chart__pattern_forward_hatch', - new PatternForwardHatchBarChart.withSampleData()), - new ImageTest('bar_chart__horizontal_pattern_forward_hatch', - new HorizontalPatternForwardHatchBarChart.withSampleData()), - new ImageTest('line_chart__simple', new SimpleLineChart.withSampleData()), - new ImageTest( - 'line_chart__dash_pattern', new DashPatternLineChart.withSampleData()), - new ImageTest('line_chart__range_annotation', - new LineRangeAnnotationChart.withSampleData()), - new ImageTest('axes__bar_secondary_axis', - new BarChartWithSecondaryAxis.withSampleData()), - new ImageTest('axes__bar_secondary_axis_only', - new BarChartWithSecondaryAxisOnly.withSampleData()), - new ImageTest('axes__horizontal_bar_secondary_axis', - new HorizontalBarChartWithSecondaryAxis.withSampleData()), - new ImageTest('axes__short_tick_length_axis', - new ShortTickLengthAxis.withSampleData()), - new ImageTest('axes__custom_font_size_and_color', - new CustomFontSizeAndColor.withSampleData()), - new ImageTest('axes__measure_axis_label_alignment', - new MeasureAxisLabelAlignment.withSampleData()), - new ImageTest('axes__hidden_ticks_and_labels_axis', - new HiddenTicksAndLabelsAxis.withSampleData()), - new ImageTest('axes__custom_axis_tick_formatters', - new CustomAxisTickFormatters.withSampleData()), - new ImageTest('axes__custom_measure_tick_count', - new CustomMeasureTickCount.withSampleData()), - new ImageTest('axes__integer_only_measure_axis', - new IntegerOnlyMeasureAxis.withSampleData()), - new ImageTest('axes__nonzero_bound_measure_axis', - new NonzeroBoundMeasureAxis.withSampleData()), - new ImageTest('axes__statically_provided_ticks', - new StaticallyProvidedTicks.withSampleData()), - new ImageTest('interactions__selection_bar_highlight', - new SelectionBarHighlight.withSampleData()), - new ImageTest('interactions__selection_line_highlight', - new SelectionLineHighlight.withSampleData()), - new ImageTest('interactions__selection_callback_example', - new SelectionCallbackExample.withSampleData()), - new ImageTest('legends__simple_series_legend', - new SimpleSeriesLegend.withSampleData()), - new ImageTest( - 'legends__legend_options', new LegendOptions.withSampleData()), - new ImageTest('legends__legend_custom_symbol', - new LegendWithCustomSymbol.withSampleData()), - new ImageTest('time_series_chart__simple', - new SimpleTimeSeriesChart.withSampleData()), - new ImageTest('time_series_chart__range_annotation', - new TimeSeriesRangeAnnotationChart.withSampleData()), - new ImageTest('image_test_only__rtl_grouped', - new RTLGroupedBarChart.withSampleData()), - new ImageTest('image_test_only__rtl_grouped_stacked', - new RTLGroupedStackedBarChart.withSampleData()), - new ImageTest('image_test_only__legend_top', - new ImageTestLegend.top(TextDirection.ltr)), - new ImageTest('image_test_only__legend_bottom', - new ImageTestLegend.bottom(TextDirection.ltr)), - new ImageTest('image_test_only__legend_start_ltr', - new ImageTestLegend.start(TextDirection.ltr)), - new ImageTest('image_test_only__legend_end_ltr', - new ImageTestLegend.end(TextDirection.ltr)), - new ImageTest('image_test_only__legend_start_rtl', - new ImageTestLegend.start(TextDirection.rtl)), - new ImageTest('image_test_only__legend_end_rtl', - new ImageTestLegend.end(TextDirection.rtl)), - new ImageTest('i18n__rtl_bar_chart', new RTLBarChart.withSampleData()), - new ImageTest('i18n__rtl_line_chart', new RTLLineChart.withSampleData()), - new ImageTest( - 'i18n__rtl_series_legend', new RTLSeriesLegend.withSampleData()), - new ImageTest('a11y__domain_a11y_explore_bar_chart', - new DomainA11yExploreBarChart.withSampleData()), - ]; - - Home({Key key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return new Scaffold( - appBar: new AppBar(title: new Text(_appName)), - body: new SingleChildScrollView(child: new Column(children: _tests))); - } -} diff --git a/charts_flutter/examples/lib/internal/internal_scaffold.dart b/charts_flutter/examples/lib/internal/internal_scaffold.dart deleted file mode 100644 index f9a6cbced..000000000 --- a/charts_flutter/examples/lib/internal/internal_scaffold.dart +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed 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. - -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:flutter/material.dart'; - -typedef Widget GalleryWidgetBuilder(List seriesList); -typedef List SeriesListBuilder(); - -/// Helper to build gallery. -class InternalScaffold extends StatelessWidget { - /// The widget used for leading in a [ListTile]. - final String title; - final Widget child; - - InternalScaffold({this.title, this.child}); - - /// Gets the gallery - Widget buildGalleryListTile(BuildContext context) => new ListTile( - title: new Text(title), - onTap: () { - Navigator.push(context, new MaterialPageRoute(builder: (_) => this)); - }); - - @override - Widget build(BuildContext context) { - return new Scaffold( - appBar: new AppBar(title: new Text(title)), - body: new Padding( - padding: const EdgeInsets.all(8.0), - child: new ListView(children: [ - new SizedBox(height: 250.0, child: child), - ])), - ); - } -} diff --git a/charts_flutter/examples/lib/internal/time_series_performance.dart b/charts_flutter/examples/lib/internal/time_series_performance.dart deleted file mode 100644 index 61a022eed..000000000 --- a/charts_flutter/examples/lib/internal/time_series_performance.dart +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed 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. - -/// Timeseries chart example -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:flutter/material.dart'; - -class TimeSeriesPerformanceChart extends StatelessWidget { - final List seriesList; - final bool animate; - - TimeSeriesPerformanceChart(this.seriesList, {this.animate}); - - @override - Widget build(BuildContext context) { - return new charts.TimeSeriesChart( - seriesList, - animate: animate, - // Optionally pass in a [DateTimeFactory] used by the chart. The factory - // should create the same type of [DateTime] as the data provided. If none - // specified, the default creates local date time. - dateTimeFactory: const charts.LocalDateTimeFactory(), - ); - } -} diff --git a/charts_flutter/examples/lib/internal_main.dart b/charts_flutter/examples/lib/internal_main.dart deleted file mode 100644 index 07b4489df..000000000 --- a/charts_flutter/examples/lib/internal_main.dart +++ /dev/null @@ -1,138 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed 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. - -import 'dart:developer'; -import 'dart:math'; -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:flutter/material.dart'; -import 'drawer.dart'; -import 'internal/internal_scaffold.dart'; -import 'internal/time_series_performance.dart' show TimeSeriesPerformanceChart; - -void main() { - final app = new InternalApp(); - runApp(app); -} - -class InternalApp extends StatefulWidget { - @override - InternalAppState createState() => new InternalAppState(); -} - -class InternalAppState extends State { - // Initialize app settings from the default configuration. - bool _showPerformanceOverlay = false; - - final _timeSeriesData = _createSampleData(); - - @override - Widget build(BuildContext context) { - _setupPerformance(); - - return new MaterialApp( - title: 'Internal Testing App', - theme: new ThemeData( - brightness: Brightness.light, primarySwatch: Colors.amber), - showPerformanceOverlay: _showPerformanceOverlay, - home: new Scaffold( - drawer: new GalleryDrawer( - showPerformanceOverlay: _showPerformanceOverlay, - onShowPerformanceOverlayChanged: (bool value) { - setState(() { - _showPerformanceOverlay = value; - }); - }), - appBar: new AppBar(title: new Text('Internal')), - body: new _Gallery(_timeSeriesData)), - ); - } -} - -class _Gallery extends StatelessWidget { - final List> timeSeriesData; - - _Gallery(this.timeSeriesData); - - @override - Widget build(BuildContext context) { - return new ListView(children: [ - new InternalScaffold( - title: 'Lots of data time series chart', - child: new TimeSeriesPerformanceChart(timeSeriesData)) - .buildGalleryListTile(context) - ]); - } -} - -void _setupPerformance() { - // Change [printPerformance] to true and set the app to release mode to - // print performance numbers to console. By default, Flutter builds in debug - // mode and this mode is slow. To build in release mode, specify the flag - // blaze-run flag "--define flutter_build_mode=release". - // The build target must also be an actual device and not the emulator. - charts.Performance.time = (String tag) => Timeline.startSync(tag); - charts.Performance.timeEnd = (_) => Timeline.finishSync(); -} - -/// Create one series with sample hard coded data. -List> _createSampleData() { - const int numDataPointsToGenerate = 6000; - const int maxVariation = 10; - const Duration timeIncrements = const Duration(minutes: 15); - final random = new Random(); - var startTime = new DateTime(2017, 10, 20); - - final salesData = - new List<_TimeSeriesSales>.generate(numDataPointsToGenerate, (int index) { - final onePoint = - new _TimeSeriesSales(startTime, index + random.nextInt(maxVariation)); - startTime = startTime.add(timeIncrements); - return onePoint; - }); - - final seriesList = [ - new charts.Series<_TimeSeriesSales, DateTime>( - id: 'Sales', - colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault, - domainFn: (_TimeSeriesSales sales, _) => sales.time, - measureFn: (_TimeSeriesSales sales, _) => sales.sales, - data: salesData, - ), - ]; - - // Add 10 other lines with slight offset - for (var i = 1; i < 10; i++) { - seriesList.add(new charts.Series<_TimeSeriesSales, DateTime>( - id: 'Projection' + i.toString(), - colorFn: (_, __) => charts.MaterialPalette.red.shadeDefault, - domainFn: (_TimeSeriesSales sales, _) => sales.time, - measureFn: (_TimeSeriesSales sales, _) => sales.sales, - data: salesData - .map((sales) => - new _TimeSeriesSales(sales.time, sales.sales + 50 * (i))) - .toList(), - )); - } - - return seriesList; -} - -/// Sample time series data type. -class _TimeSeriesSales { - final DateTime time; - final int sales; - - _TimeSeriesSales(this.time, this.sales); -} diff --git a/docs/examples/a11ys/domain_a11y_explore_bar_chart.md b/docs/example/a11ys/domain_a11y_explore_bar_chart.md similarity index 100% rename from docs/examples/a11ys/domain_a11y_explore_bar_chart.md rename to docs/example/a11ys/domain_a11y_explore_bar_chart.md diff --git a/docs/examples/a11ys/domain_a11y_explore_bar_chart_full.png b/docs/example/a11ys/domain_a11y_explore_bar_chart_full.png similarity index 100% rename from docs/examples/a11ys/domain_a11y_explore_bar_chart_full.png rename to docs/example/a11ys/domain_a11y_explore_bar_chart_full.png diff --git a/docs/examples/a11ys/domain_a11y_explore_bar_chart_thumb.png b/docs/example/a11ys/domain_a11y_explore_bar_chart_thumb.png similarity index 100% rename from docs/examples/a11ys/domain_a11y_explore_bar_chart_thumb.png rename to docs/example/a11ys/domain_a11y_explore_bar_chart_thumb.png diff --git a/docs/examples/axes/bar_secondary_axis.md b/docs/example/axes/bar_secondary_axis.md similarity index 100% rename from docs/examples/axes/bar_secondary_axis.md rename to docs/example/axes/bar_secondary_axis.md diff --git a/docs/examples/axes/bar_secondary_axis_full.png b/docs/example/axes/bar_secondary_axis_full.png similarity index 100% rename from docs/examples/axes/bar_secondary_axis_full.png rename to docs/example/axes/bar_secondary_axis_full.png diff --git a/docs/examples/axes/bar_secondary_axis_only.md b/docs/example/axes/bar_secondary_axis_only.md similarity index 100% rename from docs/examples/axes/bar_secondary_axis_only.md rename to docs/example/axes/bar_secondary_axis_only.md diff --git a/docs/examples/axes/bar_secondary_axis_only_full.png b/docs/example/axes/bar_secondary_axis_only_full.png similarity index 100% rename from docs/examples/axes/bar_secondary_axis_only_full.png rename to docs/example/axes/bar_secondary_axis_only_full.png diff --git a/docs/examples/axes/bar_secondary_axis_only_thumb.png b/docs/example/axes/bar_secondary_axis_only_thumb.png similarity index 100% rename from docs/examples/axes/bar_secondary_axis_only_thumb.png rename to docs/example/axes/bar_secondary_axis_only_thumb.png diff --git a/docs/examples/axes/bar_secondary_axis_thumb.png b/docs/example/axes/bar_secondary_axis_thumb.png similarity index 100% rename from docs/examples/axes/bar_secondary_axis_thumb.png rename to docs/example/axes/bar_secondary_axis_thumb.png diff --git a/docs/examples/axes/custom_axis_tick_formatters.md b/docs/example/axes/custom_axis_tick_formatters.md similarity index 100% rename from docs/examples/axes/custom_axis_tick_formatters.md rename to docs/example/axes/custom_axis_tick_formatters.md diff --git a/docs/examples/axes/custom_axis_tick_formatters_full.png b/docs/example/axes/custom_axis_tick_formatters_full.png similarity index 100% rename from docs/examples/axes/custom_axis_tick_formatters_full.png rename to docs/example/axes/custom_axis_tick_formatters_full.png diff --git a/docs/examples/axes/custom_axis_tick_formatters_thumb.png b/docs/example/axes/custom_axis_tick_formatters_thumb.png similarity index 100% rename from docs/examples/axes/custom_axis_tick_formatters_thumb.png rename to docs/example/axes/custom_axis_tick_formatters_thumb.png diff --git a/docs/examples/axes/custom_font_size_and_color.md b/docs/example/axes/custom_font_size_and_color.md similarity index 100% rename from docs/examples/axes/custom_font_size_and_color.md rename to docs/example/axes/custom_font_size_and_color.md diff --git a/docs/examples/axes/custom_font_size_and_color_full.png b/docs/example/axes/custom_font_size_and_color_full.png similarity index 100% rename from docs/examples/axes/custom_font_size_and_color_full.png rename to docs/example/axes/custom_font_size_and_color_full.png diff --git a/docs/examples/axes/custom_font_size_and_color_thumb.png b/docs/example/axes/custom_font_size_and_color_thumb.png similarity index 100% rename from docs/examples/axes/custom_font_size_and_color_thumb.png rename to docs/example/axes/custom_font_size_and_color_thumb.png diff --git a/docs/examples/axes/custom_measure_tick_count.md b/docs/example/axes/custom_measure_tick_count.md similarity index 100% rename from docs/examples/axes/custom_measure_tick_count.md rename to docs/example/axes/custom_measure_tick_count.md diff --git a/docs/examples/axes/custom_measure_tick_count_full.png b/docs/example/axes/custom_measure_tick_count_full.png similarity index 100% rename from docs/examples/axes/custom_measure_tick_count_full.png rename to docs/example/axes/custom_measure_tick_count_full.png diff --git a/docs/examples/axes/custom_measure_tick_count_thumb.png b/docs/example/axes/custom_measure_tick_count_thumb.png similarity index 100% rename from docs/examples/axes/custom_measure_tick_count_thumb.png rename to docs/example/axes/custom_measure_tick_count_thumb.png diff --git a/docs/examples/axes/hidden_ticks_and_labels_axis.md b/docs/example/axes/hidden_ticks_and_labels_axis.md similarity index 100% rename from docs/examples/axes/hidden_ticks_and_labels_axis.md rename to docs/example/axes/hidden_ticks_and_labels_axis.md diff --git a/docs/examples/axes/hidden_ticks_and_labels_axis_full.png b/docs/example/axes/hidden_ticks_and_labels_axis_full.png similarity index 100% rename from docs/examples/axes/hidden_ticks_and_labels_axis_full.png rename to docs/example/axes/hidden_ticks_and_labels_axis_full.png diff --git a/docs/examples/axes/hidden_ticks_and_labels_axis_thumb.png b/docs/example/axes/hidden_ticks_and_labels_axis_thumb.png similarity index 100% rename from docs/examples/axes/hidden_ticks_and_labels_axis_thumb.png rename to docs/example/axes/hidden_ticks_and_labels_axis_thumb.png diff --git a/docs/examples/axes/horizontal_bar_secondary_axis.md b/docs/example/axes/horizontal_bar_secondary_axis.md similarity index 100% rename from docs/examples/axes/horizontal_bar_secondary_axis.md rename to docs/example/axes/horizontal_bar_secondary_axis.md diff --git a/docs/examples/axes/horizontal_bar_secondary_axis_full.png b/docs/example/axes/horizontal_bar_secondary_axis_full.png similarity index 100% rename from docs/examples/axes/horizontal_bar_secondary_axis_full.png rename to docs/example/axes/horizontal_bar_secondary_axis_full.png diff --git a/docs/examples/axes/horizontal_bar_secondary_axis_thumb.png b/docs/example/axes/horizontal_bar_secondary_axis_thumb.png similarity index 100% rename from docs/examples/axes/horizontal_bar_secondary_axis_thumb.png rename to docs/example/axes/horizontal_bar_secondary_axis_thumb.png diff --git a/docs/examples/axes/integer_only_measure_axis.md b/docs/example/axes/integer_only_measure_axis.md similarity index 100% rename from docs/examples/axes/integer_only_measure_axis.md rename to docs/example/axes/integer_only_measure_axis.md diff --git a/docs/examples/axes/integer_only_measure_axis_full.png b/docs/example/axes/integer_only_measure_axis_full.png similarity index 100% rename from docs/examples/axes/integer_only_measure_axis_full.png rename to docs/example/axes/integer_only_measure_axis_full.png diff --git a/docs/examples/axes/integer_only_measure_axis_thumb.png b/docs/example/axes/integer_only_measure_axis_thumb.png similarity index 100% rename from docs/examples/axes/integer_only_measure_axis_thumb.png rename to docs/example/axes/integer_only_measure_axis_thumb.png diff --git a/docs/examples/axes/measure_axis_label_alignment.md b/docs/example/axes/measure_axis_label_alignment.md similarity index 100% rename from docs/examples/axes/measure_axis_label_alignment.md rename to docs/example/axes/measure_axis_label_alignment.md diff --git a/docs/examples/axes/measure_axis_label_alignment_full.png b/docs/example/axes/measure_axis_label_alignment_full.png similarity index 100% rename from docs/examples/axes/measure_axis_label_alignment_full.png rename to docs/example/axes/measure_axis_label_alignment_full.png diff --git a/docs/examples/axes/measure_axis_label_alignment_thumb.png b/docs/example/axes/measure_axis_label_alignment_thumb.png similarity index 100% rename from docs/examples/axes/measure_axis_label_alignment_thumb.png rename to docs/example/axes/measure_axis_label_alignment_thumb.png diff --git a/docs/examples/axes/nonzero_bound_measure_axis.md b/docs/example/axes/nonzero_bound_measure_axis.md similarity index 100% rename from docs/examples/axes/nonzero_bound_measure_axis.md rename to docs/example/axes/nonzero_bound_measure_axis.md diff --git a/docs/examples/axes/nonzero_bound_measure_axis_full.png b/docs/example/axes/nonzero_bound_measure_axis_full.png similarity index 100% rename from docs/examples/axes/nonzero_bound_measure_axis_full.png rename to docs/example/axes/nonzero_bound_measure_axis_full.png diff --git a/docs/examples/axes/nonzero_bound_measure_axis_thumb.png b/docs/example/axes/nonzero_bound_measure_axis_thumb.png similarity index 100% rename from docs/examples/axes/nonzero_bound_measure_axis_thumb.png rename to docs/example/axes/nonzero_bound_measure_axis_thumb.png diff --git a/docs/examples/axes/short_tick_length_axis.md b/docs/example/axes/short_tick_length_axis.md similarity index 100% rename from docs/examples/axes/short_tick_length_axis.md rename to docs/example/axes/short_tick_length_axis.md diff --git a/docs/examples/axes/short_tick_length_axis_full.png b/docs/example/axes/short_tick_length_axis_full.png similarity index 100% rename from docs/examples/axes/short_tick_length_axis_full.png rename to docs/example/axes/short_tick_length_axis_full.png diff --git a/docs/examples/axes/short_tick_length_axis_thumb.png b/docs/example/axes/short_tick_length_axis_thumb.png similarity index 100% rename from docs/examples/axes/short_tick_length_axis_thumb.png rename to docs/example/axes/short_tick_length_axis_thumb.png diff --git a/docs/examples/axes/statically_provided_ticks.md b/docs/example/axes/statically_provided_ticks.md similarity index 100% rename from docs/examples/axes/statically_provided_ticks.md rename to docs/example/axes/statically_provided_ticks.md diff --git a/docs/examples/axes/statically_provided_ticks_full.png b/docs/example/axes/statically_provided_ticks_full.png similarity index 100% rename from docs/examples/axes/statically_provided_ticks_full.png rename to docs/example/axes/statically_provided_ticks_full.png diff --git a/docs/examples/axes/statically_provided_ticks_thumb.png b/docs/example/axes/statically_provided_ticks_thumb.png similarity index 100% rename from docs/examples/axes/statically_provided_ticks_thumb.png rename to docs/example/axes/statically_provided_ticks_thumb.png diff --git a/docs/examples/bar_charts/grouped.md b/docs/example/bar_charts/grouped.md similarity index 100% rename from docs/examples/bar_charts/grouped.md rename to docs/example/bar_charts/grouped.md diff --git a/docs/examples/bar_charts/grouped_full.png b/docs/example/bar_charts/grouped_full.png similarity index 100% rename from docs/examples/bar_charts/grouped_full.png rename to docs/example/bar_charts/grouped_full.png diff --git a/docs/examples/bar_charts/grouped_stacked.md b/docs/example/bar_charts/grouped_stacked.md similarity index 100% rename from docs/examples/bar_charts/grouped_stacked.md rename to docs/example/bar_charts/grouped_stacked.md diff --git a/docs/examples/bar_charts/grouped_stacked_full.png b/docs/example/bar_charts/grouped_stacked_full.png similarity index 100% rename from docs/examples/bar_charts/grouped_stacked_full.png rename to docs/example/bar_charts/grouped_stacked_full.png diff --git a/docs/examples/bar_charts/grouped_stacked_thumb.png b/docs/example/bar_charts/grouped_stacked_thumb.png similarity index 100% rename from docs/examples/bar_charts/grouped_stacked_thumb.png rename to docs/example/bar_charts/grouped_stacked_thumb.png diff --git a/docs/examples/bar_charts/grouped_target_line.md b/docs/example/bar_charts/grouped_target_line.md similarity index 100% rename from docs/examples/bar_charts/grouped_target_line.md rename to docs/example/bar_charts/grouped_target_line.md diff --git a/docs/examples/bar_charts/grouped_target_line_full.png b/docs/example/bar_charts/grouped_target_line_full.png similarity index 100% rename from docs/examples/bar_charts/grouped_target_line_full.png rename to docs/example/bar_charts/grouped_target_line_full.png diff --git a/docs/examples/bar_charts/grouped_target_line_thumb.png b/docs/example/bar_charts/grouped_target_line_thumb.png similarity index 100% rename from docs/examples/bar_charts/grouped_target_line_thumb.png rename to docs/example/bar_charts/grouped_target_line_thumb.png diff --git a/docs/examples/bar_charts/grouped_thumb.png b/docs/example/bar_charts/grouped_thumb.png similarity index 100% rename from docs/examples/bar_charts/grouped_thumb.png rename to docs/example/bar_charts/grouped_thumb.png diff --git a/docs/examples/bar_charts/horizontal.md b/docs/example/bar_charts/horizontal.md similarity index 100% rename from docs/examples/bar_charts/horizontal.md rename to docs/example/bar_charts/horizontal.md diff --git a/docs/examples/bar_charts/horizontal_bar_label.md b/docs/example/bar_charts/horizontal_bar_label.md similarity index 100% rename from docs/examples/bar_charts/horizontal_bar_label.md rename to docs/example/bar_charts/horizontal_bar_label.md diff --git a/docs/examples/bar_charts/horizontal_bar_label_full.png b/docs/example/bar_charts/horizontal_bar_label_full.png similarity index 100% rename from docs/examples/bar_charts/horizontal_bar_label_full.png rename to docs/example/bar_charts/horizontal_bar_label_full.png diff --git a/docs/examples/bar_charts/horizontal_bar_label_thumb.png b/docs/example/bar_charts/horizontal_bar_label_thumb.png similarity index 100% rename from docs/examples/bar_charts/horizontal_bar_label_thumb.png rename to docs/example/bar_charts/horizontal_bar_label_thumb.png diff --git a/docs/examples/bar_charts/horizontal_full.png b/docs/example/bar_charts/horizontal_full.png similarity index 100% rename from docs/examples/bar_charts/horizontal_full.png rename to docs/example/bar_charts/horizontal_full.png diff --git a/docs/examples/bar_charts/horizontal_pattern_forward_hatch.md b/docs/example/bar_charts/horizontal_pattern_forward_hatch.md similarity index 100% rename from docs/examples/bar_charts/horizontal_pattern_forward_hatch.md rename to docs/example/bar_charts/horizontal_pattern_forward_hatch.md diff --git a/docs/examples/bar_charts/horizontal_pattern_forward_hatch_full.png b/docs/example/bar_charts/horizontal_pattern_forward_hatch_full.png similarity index 100% rename from docs/examples/bar_charts/horizontal_pattern_forward_hatch_full.png rename to docs/example/bar_charts/horizontal_pattern_forward_hatch_full.png diff --git a/docs/examples/bar_charts/horizontal_pattern_forward_hatch_thumb.png b/docs/example/bar_charts/horizontal_pattern_forward_hatch_thumb.png similarity index 100% rename from docs/examples/bar_charts/horizontal_pattern_forward_hatch_thumb.png rename to docs/example/bar_charts/horizontal_pattern_forward_hatch_thumb.png diff --git a/docs/examples/bar_charts/horizontal_thumb.png b/docs/example/bar_charts/horizontal_thumb.png similarity index 100% rename from docs/examples/bar_charts/horizontal_thumb.png rename to docs/example/bar_charts/horizontal_thumb.png diff --git a/docs/examples/bar_charts/pattern_forward_hatch.md b/docs/example/bar_charts/pattern_forward_hatch.md similarity index 100% rename from docs/examples/bar_charts/pattern_forward_hatch.md rename to docs/example/bar_charts/pattern_forward_hatch.md diff --git a/docs/examples/bar_charts/pattern_forward_hatch_full.png b/docs/example/bar_charts/pattern_forward_hatch_full.png similarity index 100% rename from docs/examples/bar_charts/pattern_forward_hatch_full.png rename to docs/example/bar_charts/pattern_forward_hatch_full.png diff --git a/docs/examples/bar_charts/pattern_forward_hatch_thumb.png b/docs/example/bar_charts/pattern_forward_hatch_thumb.png similarity index 100% rename from docs/examples/bar_charts/pattern_forward_hatch_thumb.png rename to docs/example/bar_charts/pattern_forward_hatch_thumb.png diff --git a/docs/examples/bar_charts/simple.md b/docs/example/bar_charts/simple.md similarity index 100% rename from docs/examples/bar_charts/simple.md rename to docs/example/bar_charts/simple.md diff --git a/docs/examples/bar_charts/simple_full.png b/docs/example/bar_charts/simple_full.png similarity index 100% rename from docs/examples/bar_charts/simple_full.png rename to docs/example/bar_charts/simple_full.png diff --git a/docs/examples/bar_charts/simple_thumb.png b/docs/example/bar_charts/simple_thumb.png similarity index 100% rename from docs/examples/bar_charts/simple_thumb.png rename to docs/example/bar_charts/simple_thumb.png diff --git a/docs/examples/bar_charts/spark_bar.md b/docs/example/bar_charts/spark_bar.md similarity index 100% rename from docs/examples/bar_charts/spark_bar.md rename to docs/example/bar_charts/spark_bar.md diff --git a/docs/examples/bar_charts/spark_bar_full.png b/docs/example/bar_charts/spark_bar_full.png similarity index 100% rename from docs/examples/bar_charts/spark_bar_full.png rename to docs/example/bar_charts/spark_bar_full.png diff --git a/docs/examples/bar_charts/spark_bar_thumb.png b/docs/example/bar_charts/spark_bar_thumb.png similarity index 100% rename from docs/examples/bar_charts/spark_bar_thumb.png rename to docs/example/bar_charts/spark_bar_thumb.png diff --git a/docs/examples/bar_charts/stacked.md b/docs/example/bar_charts/stacked.md similarity index 100% rename from docs/examples/bar_charts/stacked.md rename to docs/example/bar_charts/stacked.md diff --git a/docs/examples/bar_charts/stacked_full.png b/docs/example/bar_charts/stacked_full.png similarity index 100% rename from docs/examples/bar_charts/stacked_full.png rename to docs/example/bar_charts/stacked_full.png diff --git a/docs/examples/bar_charts/stacked_horizontal.md b/docs/example/bar_charts/stacked_horizontal.md similarity index 100% rename from docs/examples/bar_charts/stacked_horizontal.md rename to docs/example/bar_charts/stacked_horizontal.md diff --git a/docs/examples/bar_charts/stacked_horizontal_full.png b/docs/example/bar_charts/stacked_horizontal_full.png similarity index 100% rename from docs/examples/bar_charts/stacked_horizontal_full.png rename to docs/example/bar_charts/stacked_horizontal_full.png diff --git a/docs/examples/bar_charts/stacked_horizontal_thumb.png b/docs/example/bar_charts/stacked_horizontal_thumb.png similarity index 100% rename from docs/examples/bar_charts/stacked_horizontal_thumb.png rename to docs/example/bar_charts/stacked_horizontal_thumb.png diff --git a/docs/examples/bar_charts/stacked_target_line.md b/docs/example/bar_charts/stacked_target_line.md similarity index 100% rename from docs/examples/bar_charts/stacked_target_line.md rename to docs/example/bar_charts/stacked_target_line.md diff --git a/docs/examples/bar_charts/stacked_target_line_full.png b/docs/example/bar_charts/stacked_target_line_full.png similarity index 100% rename from docs/examples/bar_charts/stacked_target_line_full.png rename to docs/example/bar_charts/stacked_target_line_full.png diff --git a/docs/examples/bar_charts/stacked_target_line_thumb.png b/docs/example/bar_charts/stacked_target_line_thumb.png similarity index 100% rename from docs/examples/bar_charts/stacked_target_line_thumb.png rename to docs/example/bar_charts/stacked_target_line_thumb.png diff --git a/docs/examples/bar_charts/stacked_thumb.png b/docs/example/bar_charts/stacked_thumb.png similarity index 100% rename from docs/examples/bar_charts/stacked_thumb.png rename to docs/example/bar_charts/stacked_thumb.png diff --git a/docs/examples/i18ns/rtl_bar_chart.md b/docs/example/i18ns/rtl_bar_chart.md similarity index 100% rename from docs/examples/i18ns/rtl_bar_chart.md rename to docs/example/i18ns/rtl_bar_chart.md diff --git a/docs/examples/i18ns/rtl_bar_chart_full.png b/docs/example/i18ns/rtl_bar_chart_full.png similarity index 100% rename from docs/examples/i18ns/rtl_bar_chart_full.png rename to docs/example/i18ns/rtl_bar_chart_full.png diff --git a/docs/examples/i18ns/rtl_bar_chart_thumb.png b/docs/example/i18ns/rtl_bar_chart_thumb.png similarity index 100% rename from docs/examples/i18ns/rtl_bar_chart_thumb.png rename to docs/example/i18ns/rtl_bar_chart_thumb.png diff --git a/docs/examples/i18ns/rtl_line_chart.md b/docs/example/i18ns/rtl_line_chart.md similarity index 100% rename from docs/examples/i18ns/rtl_line_chart.md rename to docs/example/i18ns/rtl_line_chart.md diff --git a/docs/examples/i18ns/rtl_line_chart_full.png b/docs/example/i18ns/rtl_line_chart_full.png similarity index 100% rename from docs/examples/i18ns/rtl_line_chart_full.png rename to docs/example/i18ns/rtl_line_chart_full.png diff --git a/docs/examples/i18ns/rtl_line_chart_thumb.png b/docs/example/i18ns/rtl_line_chart_thumb.png similarity index 100% rename from docs/examples/i18ns/rtl_line_chart_thumb.png rename to docs/example/i18ns/rtl_line_chart_thumb.png diff --git a/docs/examples/i18ns/rtl_series_legend.md b/docs/example/i18ns/rtl_series_legend.md similarity index 100% rename from docs/examples/i18ns/rtl_series_legend.md rename to docs/example/i18ns/rtl_series_legend.md diff --git a/docs/examples/i18ns/rtl_series_legend_full.png b/docs/example/i18ns/rtl_series_legend_full.png similarity index 100% rename from docs/examples/i18ns/rtl_series_legend_full.png rename to docs/example/i18ns/rtl_series_legend_full.png diff --git a/docs/examples/i18ns/rtl_series_legend_thumb.png b/docs/example/i18ns/rtl_series_legend_thumb.png similarity index 100% rename from docs/examples/i18ns/rtl_series_legend_thumb.png rename to docs/example/i18ns/rtl_series_legend_thumb.png diff --git a/docs/examples/interactions/selection_bar_highlight.md b/docs/example/interactions/selection_bar_highlight.md similarity index 100% rename from docs/examples/interactions/selection_bar_highlight.md rename to docs/example/interactions/selection_bar_highlight.md diff --git a/docs/examples/interactions/selection_bar_highlight_full.png b/docs/example/interactions/selection_bar_highlight_full.png similarity index 100% rename from docs/examples/interactions/selection_bar_highlight_full.png rename to docs/example/interactions/selection_bar_highlight_full.png diff --git a/docs/examples/interactions/selection_bar_highlight_thumb.png b/docs/example/interactions/selection_bar_highlight_thumb.png similarity index 100% rename from docs/examples/interactions/selection_bar_highlight_thumb.png rename to docs/example/interactions/selection_bar_highlight_thumb.png diff --git a/docs/examples/interactions/selection_callback_example.md b/docs/example/interactions/selection_callback_example.md similarity index 100% rename from docs/examples/interactions/selection_callback_example.md rename to docs/example/interactions/selection_callback_example.md diff --git a/docs/examples/interactions/selection_callback_example_full.png b/docs/example/interactions/selection_callback_example_full.png similarity index 100% rename from docs/examples/interactions/selection_callback_example_full.png rename to docs/example/interactions/selection_callback_example_full.png diff --git a/docs/examples/interactions/selection_callback_example_thumb.png b/docs/example/interactions/selection_callback_example_thumb.png similarity index 100% rename from docs/examples/interactions/selection_callback_example_thumb.png rename to docs/example/interactions/selection_callback_example_thumb.png diff --git a/docs/examples/interactions/selection_line_highlight.md b/docs/example/interactions/selection_line_highlight.md similarity index 100% rename from docs/examples/interactions/selection_line_highlight.md rename to docs/example/interactions/selection_line_highlight.md diff --git a/docs/examples/interactions/selection_line_highlight_full.png b/docs/example/interactions/selection_line_highlight_full.png similarity index 100% rename from docs/examples/interactions/selection_line_highlight_full.png rename to docs/example/interactions/selection_line_highlight_full.png diff --git a/docs/examples/interactions/selection_line_highlight_thumb.png b/docs/example/interactions/selection_line_highlight_thumb.png similarity index 100% rename from docs/examples/interactions/selection_line_highlight_thumb.png rename to docs/example/interactions/selection_line_highlight_thumb.png diff --git a/docs/examples/legends/legend_custom_symbol.md b/docs/example/legends/legend_custom_symbol.md similarity index 100% rename from docs/examples/legends/legend_custom_symbol.md rename to docs/example/legends/legend_custom_symbol.md diff --git a/docs/examples/legends/legend_custom_symbol_full.png b/docs/example/legends/legend_custom_symbol_full.png similarity index 100% rename from docs/examples/legends/legend_custom_symbol_full.png rename to docs/example/legends/legend_custom_symbol_full.png diff --git a/docs/examples/legends/legend_custom_symbol_thumb.png b/docs/example/legends/legend_custom_symbol_thumb.png similarity index 100% rename from docs/examples/legends/legend_custom_symbol_thumb.png rename to docs/example/legends/legend_custom_symbol_thumb.png diff --git a/docs/examples/legends/legend_options.md b/docs/example/legends/legend_options.md similarity index 100% rename from docs/examples/legends/legend_options.md rename to docs/example/legends/legend_options.md diff --git a/docs/examples/legends/legend_options_full.png b/docs/example/legends/legend_options_full.png similarity index 100% rename from docs/examples/legends/legend_options_full.png rename to docs/example/legends/legend_options_full.png diff --git a/docs/examples/legends/legend_options_thumb.png b/docs/example/legends/legend_options_thumb.png similarity index 100% rename from docs/examples/legends/legend_options_thumb.png rename to docs/example/legends/legend_options_thumb.png diff --git a/docs/examples/legends/simple_series_legend.md b/docs/example/legends/simple_series_legend.md similarity index 100% rename from docs/examples/legends/simple_series_legend.md rename to docs/example/legends/simple_series_legend.md diff --git a/docs/examples/legends/simple_series_legend_full.png b/docs/example/legends/simple_series_legend_full.png similarity index 100% rename from docs/examples/legends/simple_series_legend_full.png rename to docs/example/legends/simple_series_legend_full.png diff --git a/docs/examples/legends/simple_series_legend_thumb.png b/docs/example/legends/simple_series_legend_thumb.png similarity index 100% rename from docs/examples/legends/simple_series_legend_thumb.png rename to docs/example/legends/simple_series_legend_thumb.png diff --git a/docs/examples/line_charts/dash_pattern.md b/docs/example/line_charts/dash_pattern.md similarity index 100% rename from docs/examples/line_charts/dash_pattern.md rename to docs/example/line_charts/dash_pattern.md diff --git a/docs/examples/line_charts/dash_pattern_full.png b/docs/example/line_charts/dash_pattern_full.png similarity index 100% rename from docs/examples/line_charts/dash_pattern_full.png rename to docs/example/line_charts/dash_pattern_full.png diff --git a/docs/examples/line_charts/dash_pattern_thumb.png b/docs/example/line_charts/dash_pattern_thumb.png similarity index 100% rename from docs/examples/line_charts/dash_pattern_thumb.png rename to docs/example/line_charts/dash_pattern_thumb.png diff --git a/docs/examples/line_charts/range_annotation.md b/docs/example/line_charts/range_annotation.md similarity index 100% rename from docs/examples/line_charts/range_annotation.md rename to docs/example/line_charts/range_annotation.md diff --git a/docs/examples/line_charts/range_annotation_full.png b/docs/example/line_charts/range_annotation_full.png similarity index 100% rename from docs/examples/line_charts/range_annotation_full.png rename to docs/example/line_charts/range_annotation_full.png diff --git a/docs/examples/line_charts/range_annotation_thumb.png b/docs/example/line_charts/range_annotation_thumb.png similarity index 100% rename from docs/examples/line_charts/range_annotation_thumb.png rename to docs/example/line_charts/range_annotation_thumb.png diff --git a/docs/examples/line_charts/simple.md b/docs/example/line_charts/simple.md similarity index 100% rename from docs/examples/line_charts/simple.md rename to docs/example/line_charts/simple.md diff --git a/docs/examples/line_charts/simple_full.png b/docs/example/line_charts/simple_full.png similarity index 100% rename from docs/examples/line_charts/simple_full.png rename to docs/example/line_charts/simple_full.png diff --git a/docs/examples/line_charts/simple_thumb.png b/docs/example/line_charts/simple_thumb.png similarity index 100% rename from docs/examples/line_charts/simple_thumb.png rename to docs/example/line_charts/simple_thumb.png diff --git a/docs/examples/time_series_charts/range_annotation.md b/docs/example/time_series_charts/range_annotation.md similarity index 100% rename from docs/examples/time_series_charts/range_annotation.md rename to docs/example/time_series_charts/range_annotation.md diff --git a/docs/examples/time_series_charts/range_annotation_full.png b/docs/example/time_series_charts/range_annotation_full.png similarity index 100% rename from docs/examples/time_series_charts/range_annotation_full.png rename to docs/example/time_series_charts/range_annotation_full.png diff --git a/docs/examples/time_series_charts/range_annotation_thumb.png b/docs/example/time_series_charts/range_annotation_thumb.png similarity index 100% rename from docs/examples/time_series_charts/range_annotation_thumb.png rename to docs/example/time_series_charts/range_annotation_thumb.png diff --git a/docs/examples/time_series_charts/simple.md b/docs/example/time_series_charts/simple.md similarity index 100% rename from docs/examples/time_series_charts/simple.md rename to docs/example/time_series_charts/simple.md diff --git a/docs/examples/time_series_charts/simple_full.png b/docs/example/time_series_charts/simple_full.png similarity index 100% rename from docs/examples/time_series_charts/simple_full.png rename to docs/example/time_series_charts/simple_full.png diff --git a/docs/examples/time_series_charts/simple_thumb.png b/docs/example/time_series_charts/simple_thumb.png similarity index 100% rename from docs/examples/time_series_charts/simple_thumb.png rename to docs/example/time_series_charts/simple_thumb.png diff --git a/docs/gallery.md b/docs/gallery.md index 2d42bc4c3..e038ccb0a 100644 --- a/docs/gallery.md +++ b/docs/gallery.md @@ -7,61 +7,61 @@ | | | | | | --- | --- | --- | --- | -| Simple
[![](examples/bar_charts/simple_thumb.png)](examples/bar_charts/simple.md) | Stacked
[![](examples/bar_charts/stacked_thumb.png)](examples/bar_charts/stacked.md) | Grouped
[![](examples/bar_charts/grouped_thumb.png)](examples/bar_charts/grouped.md) | Grouped Stacked
[![](examples/bar_charts/grouped_stacked_thumb.png)](examples/bar_charts/grouped_stacked.md) | -| Grouped Target Line
[![](examples/bar_charts/grouped_target_line_thumb.png)](examples/bar_charts/grouped_target_line.md) | Stacked Horizontal
[![](examples/bar_charts/stacked_horizontal_thumb.png)](examples/bar_charts/stacked_horizontal.md) | Stacked Target Line
[![](examples/bar_charts/stacked_target_line_thumb.png)](examples/bar_charts/stacked_target_line.md) | Horizontal
[![](examples/bar_charts/horizontal_thumb.png)](examples/bar_charts/horizontal.md) | -| Horizontal Bar Label
[![](examples/bar_charts/horizontal_bar_label_thumb.png)](examples/bar_charts/horizontal_bar_label.md) | Spark Bar
[![](examples/bar_charts/spark_bar_thumb.png)](examples/bar_charts/spark_bar.md) | Pattern Forward Hatch
[![](examples/bar_charts/pattern_forward_hatch_thumb.png)](examples/bar_charts/pattern_forward_hatch.md) | Horizontal Pattern Forward Hatch
[![](examples/bar_charts/horizontal_pattern_forward_hatch_thumb.png)](examples/bar_charts/horizontal_pattern_forward_hatch.md) | +| Simple
[![](example/bar_charts/simple_thumb.png)](example/bar_charts/simple.md) | Stacked
[![](example/bar_charts/stacked_thumb.png)](example/bar_charts/stacked.md) | Grouped
[![](example/bar_charts/grouped_thumb.png)](example/bar_charts/grouped.md) | Grouped Stacked
[![](example/bar_charts/grouped_stacked_thumb.png)](example/bar_charts/grouped_stacked.md) | +| Grouped Target Line
[![](example/bar_charts/grouped_target_line_thumb.png)](example/bar_charts/grouped_target_line.md) | Stacked Horizontal
[![](example/bar_charts/stacked_horizontal_thumb.png)](example/bar_charts/stacked_horizontal.md) | Stacked Target Line
[![](example/bar_charts/stacked_target_line_thumb.png)](example/bar_charts/stacked_target_line.md) | Horizontal
[![](example/bar_charts/horizontal_thumb.png)](example/bar_charts/horizontal.md) | +| Horizontal Bar Label
[![](example/bar_charts/horizontal_bar_label_thumb.png)](example/bar_charts/horizontal_bar_label.md) | Spark Bar
[![](example/bar_charts/spark_bar_thumb.png)](example/bar_charts/spark_bar.md) | Pattern Forward Hatch
[![](example/bar_charts/pattern_forward_hatch_thumb.png)](example/bar_charts/pattern_forward_hatch.md) | Horizontal Pattern Forward Hatch
[![](example/bar_charts/horizontal_pattern_forward_hatch_thumb.png)](example/bar_charts/horizontal_pattern_forward_hatch.md) | ### Time Series Charts | | | | | | --- | --- | --- | --- | -| Simple
[![](examples/time_series_charts/simple_thumb.png)](examples/time_series_charts/simple.md) | Range Annotation
[![](examples/time_series_charts/range_annotation_thumb.png)](examples/time_series_charts/range_annotation.md) | | | +| Simple
[![](example/time_series_charts/simple_thumb.png)](example/time_series_charts/simple.md) | Range Annotation
[![](example/time_series_charts/range_annotation_thumb.png)](example/time_series_charts/range_annotation.md) | | | ### Line Charts | | | | | | --- | --- | --- | --- | -| Simple
[![](examples/line_charts/simple_thumb.png)](examples/line_charts/simple.md) | Dash Pattern
[![](examples/line_charts/dash_pattern_thumb.png)](examples/line_charts/dash_pattern.md) | Range Annotation
[![](examples/line_charts/range_annotation_thumb.png)](examples/line_charts/range_annotation.md) | | +| Simple
[![](example/line_charts/simple_thumb.png)](example/line_charts/simple.md) | Dash Pattern
[![](example/line_charts/dash_pattern_thumb.png)](example/line_charts/dash_pattern.md) | Range Annotation
[![](example/line_charts/range_annotation_thumb.png)](example/line_charts/range_annotation.md) | | ### Axes | | | | | | --- | --- | --- | --- | -| Bar Secondary Axis
[![](examples/axes/bar_secondary_axis_thumb.png)](examples/axes/bar_secondary_axis.md) | Bar Secondary Axis Only
[![](examples/axes/bar_secondary_axis_only_thumb.png)](examples/axes/bar_secondary_axis_only.md) | Horizontal Bar Secondary Axis
[![](examples/axes/horizontal_bar_secondary_axis_thumb.png)](examples/axes/horizontal_bar_secondary_axis.md) | Short Tick Length Axis
[![](examples/axes/short_tick_length_axis_thumb.png)](examples/axes/short_tick_length_axis.md) | -| Custom Font Size And Color
[![](examples/axes/custom_font_size_and_color_thumb.png)](examples/axes/custom_font_size_and_color.md) | Measure Axis Label Alignment
[![](examples/axes/measure_axis_label_alignment_thumb.png)](examples/axes/measure_axis_label_alignment.md) | Hidden Ticks And Labels Axis
[![](examples/axes/hidden_ticks_and_labels_axis_thumb.png)](examples/axes/hidden_ticks_and_labels_axis.md) | Custom Axis Tick Formatters
[![](examples/axes/custom_axis_tick_formatters_thumb.png)](examples/axes/custom_axis_tick_formatters.md) | -| Custom Measure Tick Count
[![](examples/axes/custom_measure_tick_count_thumb.png)](examples/axes/custom_measure_tick_count.md) | Integer Only Measure Axis
[![](examples/axes/integer_only_measure_axis_thumb.png)](examples/axes/integer_only_measure_axis.md) | Nonzero Bound Measure Axis
[![](examples/axes/nonzero_bound_measure_axis_thumb.png)](examples/axes/nonzero_bound_measure_axis.md) | Nonzero Bound Measure Axis
[![](examples/axes/nonzero_bound_measure_axis_thumb.png)](examples/axes/nonzero_bound_measure_axis.md) | -| Statically Provided Ticks
[![](examples/axes/statically_provided_ticks_thumb.png)](examples/axes/statically_provided_ticks.md) | | | | +| Bar Secondary Axis
[![](example/axes/bar_secondary_axis_thumb.png)](example/axes/bar_secondary_axis.md) | Bar Secondary Axis Only
[![](example/axes/bar_secondary_axis_only_thumb.png)](example/axes/bar_secondary_axis_only.md) | Horizontal Bar Secondary Axis
[![](example/axes/horizontal_bar_secondary_axis_thumb.png)](example/axes/horizontal_bar_secondary_axis.md) | Short Tick Length Axis
[![](example/axes/short_tick_length_axis_thumb.png)](example/axes/short_tick_length_axis.md) | +| Custom Font Size And Color
[![](example/axes/custom_font_size_and_color_thumb.png)](example/axes/custom_font_size_and_color.md) | Measure Axis Label Alignment
[![](example/axes/measure_axis_label_alignment_thumb.png)](example/axes/measure_axis_label_alignment.md) | Hidden Ticks And Labels Axis
[![](example/axes/hidden_ticks_and_labels_axis_thumb.png)](example/axes/hidden_ticks_and_labels_axis.md) | Custom Axis Tick Formatters
[![](example/axes/custom_axis_tick_formatters_thumb.png)](example/axes/custom_axis_tick_formatters.md) | +| Custom Measure Tick Count
[![](example/axes/custom_measure_tick_count_thumb.png)](example/axes/custom_measure_tick_count.md) | Integer Only Measure Axis
[![](example/axes/integer_only_measure_axis_thumb.png)](example/axes/integer_only_measure_axis.md) | Nonzero Bound Measure Axis
[![](example/axes/nonzero_bound_measure_axis_thumb.png)](example/axes/nonzero_bound_measure_axis.md) | Nonzero Bound Measure Axis
[![](example/axes/nonzero_bound_measure_axis_thumb.png)](example/axes/nonzero_bound_measure_axis.md) | +| Statically Provided Ticks
[![](example/axes/statically_provided_ticks_thumb.png)](example/axes/statically_provided_ticks.md) | | | | ### Interactions | | | | | | --- | --- | --- | --- | -| Selection Bar Highlight
[![](examples/interactions/selection_bar_highlight_thumb.png)](examples/interactions/selection_bar_highlight.md) | Selection Line Highlight
[![](examples/interactions/selection_line_highlight_thumb.png)](examples/interactions/selection_line_highlight.md) | Selection Callback Example
[![](examples/interactions/selection_callback_example_thumb.png)](examples/interactions/selection_callback_example.md) | | +| Selection Bar Highlight
[![](example/interactions/selection_bar_highlight_thumb.png)](example/interactions/selection_bar_highlight.md) | Selection Line Highlight
[![](example/interactions/selection_line_highlight_thumb.png)](example/interactions/selection_line_highlight.md) | Selection Callback Example
[![](example/interactions/selection_callback_example_thumb.png)](example/interactions/selection_callback_example.md) | | ### a11y | | | | | | --- | --- | --- | --- | -| Domain A11y Explore Bar Chart
[![](examples/a11ys/domain_a11y_explore_bar_chart_thumb.png)](examples/a11ys/domain_a11y_explore_bar_chart.md) | | | | +| Domain A11y Explore Bar Chart
[![](example/a11ys/domain_a11y_explore_bar_chart_thumb.png)](example/a11ys/domain_a11y_explore_bar_chart.md) | | | | ### i18n | | | | | | --- | --- | --- | --- | -| Rtl Bar Chart
[![](examples/i18ns/rtl_bar_chart_thumb.png)](examples/i18ns/rtl_bar_chart.md) | Rtl Line Chart
[![](examples/i18ns/rtl_line_chart_thumb.png)](examples/i18ns/rtl_line_chart.md) | Rtl Series Legend
[![](examples/i18ns/rtl_series_legend_thumb.png)](examples/i18ns/rtl_series_legend.md) | | +| Rtl Bar Chart
[![](example/i18ns/rtl_bar_chart_thumb.png)](example/i18ns/rtl_bar_chart.md) | Rtl Line Chart
[![](example/i18ns/rtl_line_chart_thumb.png)](example/i18ns/rtl_line_chart.md) | Rtl Series Legend
[![](example/i18ns/rtl_series_legend_thumb.png)](example/i18ns/rtl_series_legend.md) | | ### Legends | | | | | | --- | --- | --- | --- | -| Simple Series Legend
[![](examples/legends/simple_series_legend_thumb.png)](examples/legends/simple_series_legend.md) | Legend Options
[![](examples/legends/legend_options_thumb.png)](examples/legends/legend_options.md) | Legend Custom Symbol
[![](examples/legends/legend_custom_symbol_thumb.png)](examples/legends/legend_custom_symbol.md) | | +| Simple Series Legend
[![](example/legends/simple_series_legend_thumb.png)](example/legends/simple_series_legend.md) | Legend Options
[![](example/legends/legend_options_thumb.png)](example/legends/legend_options.md) | Legend Custom Symbol
[![](example/legends/legend_custom_symbol_thumb.png)](example/legends/legend_custom_symbol.md) | | [//]: (END_EXAMPLES) From 37bd941e730caf189e7448d1f76e9e2d41492e89 Mon Sep 17 00:00:00 2001 From: nshahan Date: Thu, 15 Mar 2018 15:07:29 -0700 Subject: [PATCH 8/9] Add new top level docs directory. PiperOrigin-RevId: 189252856 --- .../example/a11ys/domain_a11y_explore_bar_chart.md | 0 .../a11ys/domain_a11y_explore_bar_chart_full.png | Bin .../a11ys/domain_a11y_explore_bar_chart_thumb.png | Bin .../example/axes/bar_secondary_axis.md | 0 .../example/axes/bar_secondary_axis_full.png | Bin .../example/axes/bar_secondary_axis_only.md | 0 .../example/axes/bar_secondary_axis_only_full.png | Bin .../example/axes/bar_secondary_axis_only_thumb.png | Bin .../example/axes/bar_secondary_axis_thumb.png | Bin .../example/axes/custom_axis_tick_formatters.md | 0 .../axes/custom_axis_tick_formatters_full.png | Bin .../axes/custom_axis_tick_formatters_thumb.png | Bin .../example/axes/custom_font_size_and_color.md | 0 .../axes/custom_font_size_and_color_full.png | Bin .../axes/custom_font_size_and_color_thumb.png | Bin .../example/axes/custom_measure_tick_count.md | 0 .../example/axes/custom_measure_tick_count_full.png | Bin .../axes/custom_measure_tick_count_thumb.png | Bin .../example/axes/hidden_ticks_and_labels_axis.md | 0 .../axes/hidden_ticks_and_labels_axis_full.png | Bin .../axes/hidden_ticks_and_labels_axis_thumb.png | Bin .../example/axes/horizontal_bar_secondary_axis.md | 0 .../axes/horizontal_bar_secondary_axis_full.png | Bin .../axes/horizontal_bar_secondary_axis_thumb.png | Bin .../example/axes/integer_only_measure_axis.md | 0 .../example/axes/integer_only_measure_axis_full.png | Bin .../axes/integer_only_measure_axis_thumb.png | Bin .../example/axes/measure_axis_label_alignment.md | 0 .../axes/measure_axis_label_alignment_full.png | Bin .../axes/measure_axis_label_alignment_thumb.png | Bin .../example/axes/nonzero_bound_measure_axis.md | 0 .../axes/nonzero_bound_measure_axis_full.png | Bin .../axes/nonzero_bound_measure_axis_thumb.png | Bin .../example/axes/short_tick_length_axis.md | 0 .../example/axes/short_tick_length_axis_full.png | Bin .../example/axes/short_tick_length_axis_thumb.png | Bin .../example/axes/statically_provided_ticks.md | 0 .../example/axes/statically_provided_ticks_full.png | Bin .../axes/statically_provided_ticks_thumb.png | Bin docs/{ => flutter}/example/bar_charts/grouped.md | 0 .../example/bar_charts/grouped_full.png | Bin .../example/bar_charts/grouped_stacked.md | 0 .../example/bar_charts/grouped_stacked_full.png | Bin .../example/bar_charts/grouped_stacked_thumb.png | Bin .../example/bar_charts/grouped_target_line.md | 0 .../example/bar_charts/grouped_target_line_full.png | Bin .../bar_charts/grouped_target_line_thumb.png | Bin .../example/bar_charts/grouped_thumb.png | Bin docs/{ => flutter}/example/bar_charts/horizontal.md | 0 .../example/bar_charts/horizontal_bar_label.md | 0 .../bar_charts/horizontal_bar_label_full.png | Bin .../bar_charts/horizontal_bar_label_thumb.png | Bin .../example/bar_charts/horizontal_full.png | Bin .../bar_charts/horizontal_pattern_forward_hatch.md | 0 .../horizontal_pattern_forward_hatch_full.png | Bin .../horizontal_pattern_forward_hatch_thumb.png | Bin .../example/bar_charts/horizontal_thumb.png | Bin .../example/bar_charts/pattern_forward_hatch.md | 0 .../bar_charts/pattern_forward_hatch_full.png | Bin .../bar_charts/pattern_forward_hatch_thumb.png | Bin docs/{ => flutter}/example/bar_charts/simple.md | 0 .../example/bar_charts/simple_full.png | Bin .../example/bar_charts/simple_thumb.png | Bin docs/{ => flutter}/example/bar_charts/spark_bar.md | 0 .../example/bar_charts/spark_bar_full.png | Bin .../example/bar_charts/spark_bar_thumb.png | Bin docs/{ => flutter}/example/bar_charts/stacked.md | 0 .../example/bar_charts/stacked_full.png | Bin .../example/bar_charts/stacked_horizontal.md | 0 .../example/bar_charts/stacked_horizontal_full.png | Bin .../example/bar_charts/stacked_horizontal_thumb.png | Bin .../example/bar_charts/stacked_target_line.md | 0 .../example/bar_charts/stacked_target_line_full.png | Bin .../bar_charts/stacked_target_line_thumb.png | Bin .../example/bar_charts/stacked_thumb.png | Bin docs/{ => flutter}/example/i18ns/rtl_bar_chart.md | 0 .../example/i18ns/rtl_bar_chart_full.png | Bin .../example/i18ns/rtl_bar_chart_thumb.png | Bin docs/{ => flutter}/example/i18ns/rtl_line_chart.md | 0 .../example/i18ns/rtl_line_chart_full.png | Bin .../example/i18ns/rtl_line_chart_thumb.png | Bin .../example/i18ns/rtl_series_legend.md | 0 .../example/i18ns/rtl_series_legend_full.png | Bin .../example/i18ns/rtl_series_legend_thumb.png | Bin .../example/interactions/selection_bar_highlight.md | 0 .../interactions/selection_bar_highlight_full.png | Bin .../interactions/selection_bar_highlight_thumb.png | Bin .../interactions/selection_callback_example.md | 0 .../selection_callback_example_full.png | Bin .../selection_callback_example_thumb.png | Bin .../interactions/selection_line_highlight.md | 0 .../interactions/selection_line_highlight_full.png | Bin .../interactions/selection_line_highlight_thumb.png | Bin .../example/legends/legend_custom_symbol.md | 0 .../example/legends/legend_custom_symbol_full.png | Bin .../example/legends/legend_custom_symbol_thumb.png | Bin .../{ => flutter}/example/legends/legend_options.md | 0 .../example/legends/legend_options_full.png | Bin .../example/legends/legend_options_thumb.png | Bin .../example/legends/simple_series_legend.md | 0 .../example/legends/simple_series_legend_full.png | Bin .../example/legends/simple_series_legend_thumb.png | Bin .../example/line_charts/dash_pattern.md | 0 .../example/line_charts/dash_pattern_full.png | Bin .../example/line_charts/dash_pattern_thumb.png | Bin .../example/line_charts/range_annotation.md | 0 .../example/line_charts/range_annotation_full.png | Bin .../example/line_charts/range_annotation_thumb.png | Bin docs/{ => flutter}/example/line_charts/simple.md | 0 .../example/line_charts/simple_full.png | Bin .../example/line_charts/simple_thumb.png | Bin .../example/time_series_charts/range_annotation.md | 0 .../time_series_charts/range_annotation_full.png | Bin .../time_series_charts/range_annotation_thumb.png | Bin .../example/time_series_charts/simple.md | 0 .../example/time_series_charts/simple_full.png | Bin .../example/time_series_charts/simple_thumb.png | Bin docs/{ => flutter}/gallery.md | 0 118 files changed, 0 insertions(+), 0 deletions(-) rename docs/{ => flutter}/example/a11ys/domain_a11y_explore_bar_chart.md (100%) rename docs/{ => flutter}/example/a11ys/domain_a11y_explore_bar_chart_full.png (100%) rename docs/{ => flutter}/example/a11ys/domain_a11y_explore_bar_chart_thumb.png (100%) rename docs/{ => flutter}/example/axes/bar_secondary_axis.md (100%) rename docs/{ => flutter}/example/axes/bar_secondary_axis_full.png (100%) rename docs/{ => flutter}/example/axes/bar_secondary_axis_only.md (100%) rename docs/{ => flutter}/example/axes/bar_secondary_axis_only_full.png (100%) rename docs/{ => flutter}/example/axes/bar_secondary_axis_only_thumb.png (100%) rename docs/{ => flutter}/example/axes/bar_secondary_axis_thumb.png (100%) rename docs/{ => flutter}/example/axes/custom_axis_tick_formatters.md (100%) rename docs/{ => flutter}/example/axes/custom_axis_tick_formatters_full.png (100%) rename docs/{ => flutter}/example/axes/custom_axis_tick_formatters_thumb.png (100%) rename docs/{ => flutter}/example/axes/custom_font_size_and_color.md (100%) rename docs/{ => flutter}/example/axes/custom_font_size_and_color_full.png (100%) rename docs/{ => flutter}/example/axes/custom_font_size_and_color_thumb.png (100%) rename docs/{ => flutter}/example/axes/custom_measure_tick_count.md (100%) rename docs/{ => flutter}/example/axes/custom_measure_tick_count_full.png (100%) rename docs/{ => flutter}/example/axes/custom_measure_tick_count_thumb.png (100%) rename docs/{ => flutter}/example/axes/hidden_ticks_and_labels_axis.md (100%) rename docs/{ => flutter}/example/axes/hidden_ticks_and_labels_axis_full.png (100%) rename docs/{ => flutter}/example/axes/hidden_ticks_and_labels_axis_thumb.png (100%) rename docs/{ => flutter}/example/axes/horizontal_bar_secondary_axis.md (100%) rename docs/{ => flutter}/example/axes/horizontal_bar_secondary_axis_full.png (100%) rename docs/{ => flutter}/example/axes/horizontal_bar_secondary_axis_thumb.png (100%) rename docs/{ => flutter}/example/axes/integer_only_measure_axis.md (100%) rename docs/{ => flutter}/example/axes/integer_only_measure_axis_full.png (100%) rename docs/{ => flutter}/example/axes/integer_only_measure_axis_thumb.png (100%) rename docs/{ => flutter}/example/axes/measure_axis_label_alignment.md (100%) rename docs/{ => flutter}/example/axes/measure_axis_label_alignment_full.png (100%) rename docs/{ => flutter}/example/axes/measure_axis_label_alignment_thumb.png (100%) rename docs/{ => flutter}/example/axes/nonzero_bound_measure_axis.md (100%) rename docs/{ => flutter}/example/axes/nonzero_bound_measure_axis_full.png (100%) rename docs/{ => flutter}/example/axes/nonzero_bound_measure_axis_thumb.png (100%) rename docs/{ => flutter}/example/axes/short_tick_length_axis.md (100%) rename docs/{ => flutter}/example/axes/short_tick_length_axis_full.png (100%) rename docs/{ => flutter}/example/axes/short_tick_length_axis_thumb.png (100%) rename docs/{ => flutter}/example/axes/statically_provided_ticks.md (100%) rename docs/{ => flutter}/example/axes/statically_provided_ticks_full.png (100%) rename docs/{ => flutter}/example/axes/statically_provided_ticks_thumb.png (100%) rename docs/{ => flutter}/example/bar_charts/grouped.md (100%) rename docs/{ => flutter}/example/bar_charts/grouped_full.png (100%) rename docs/{ => flutter}/example/bar_charts/grouped_stacked.md (100%) rename docs/{ => flutter}/example/bar_charts/grouped_stacked_full.png (100%) rename docs/{ => flutter}/example/bar_charts/grouped_stacked_thumb.png (100%) rename docs/{ => flutter}/example/bar_charts/grouped_target_line.md (100%) rename docs/{ => flutter}/example/bar_charts/grouped_target_line_full.png (100%) rename docs/{ => flutter}/example/bar_charts/grouped_target_line_thumb.png (100%) rename docs/{ => flutter}/example/bar_charts/grouped_thumb.png (100%) rename docs/{ => flutter}/example/bar_charts/horizontal.md (100%) rename docs/{ => flutter}/example/bar_charts/horizontal_bar_label.md (100%) rename docs/{ => flutter}/example/bar_charts/horizontal_bar_label_full.png (100%) rename docs/{ => flutter}/example/bar_charts/horizontal_bar_label_thumb.png (100%) rename docs/{ => flutter}/example/bar_charts/horizontal_full.png (100%) rename docs/{ => flutter}/example/bar_charts/horizontal_pattern_forward_hatch.md (100%) rename docs/{ => flutter}/example/bar_charts/horizontal_pattern_forward_hatch_full.png (100%) rename docs/{ => flutter}/example/bar_charts/horizontal_pattern_forward_hatch_thumb.png (100%) rename docs/{ => flutter}/example/bar_charts/horizontal_thumb.png (100%) rename docs/{ => flutter}/example/bar_charts/pattern_forward_hatch.md (100%) rename docs/{ => flutter}/example/bar_charts/pattern_forward_hatch_full.png (100%) rename docs/{ => flutter}/example/bar_charts/pattern_forward_hatch_thumb.png (100%) rename docs/{ => flutter}/example/bar_charts/simple.md (100%) rename docs/{ => flutter}/example/bar_charts/simple_full.png (100%) rename docs/{ => flutter}/example/bar_charts/simple_thumb.png (100%) rename docs/{ => flutter}/example/bar_charts/spark_bar.md (100%) rename docs/{ => flutter}/example/bar_charts/spark_bar_full.png (100%) rename docs/{ => flutter}/example/bar_charts/spark_bar_thumb.png (100%) rename docs/{ => flutter}/example/bar_charts/stacked.md (100%) rename docs/{ => flutter}/example/bar_charts/stacked_full.png (100%) rename docs/{ => flutter}/example/bar_charts/stacked_horizontal.md (100%) rename docs/{ => flutter}/example/bar_charts/stacked_horizontal_full.png (100%) rename docs/{ => flutter}/example/bar_charts/stacked_horizontal_thumb.png (100%) rename docs/{ => flutter}/example/bar_charts/stacked_target_line.md (100%) rename docs/{ => flutter}/example/bar_charts/stacked_target_line_full.png (100%) rename docs/{ => flutter}/example/bar_charts/stacked_target_line_thumb.png (100%) rename docs/{ => flutter}/example/bar_charts/stacked_thumb.png (100%) rename docs/{ => flutter}/example/i18ns/rtl_bar_chart.md (100%) rename docs/{ => flutter}/example/i18ns/rtl_bar_chart_full.png (100%) rename docs/{ => flutter}/example/i18ns/rtl_bar_chart_thumb.png (100%) rename docs/{ => flutter}/example/i18ns/rtl_line_chart.md (100%) rename docs/{ => flutter}/example/i18ns/rtl_line_chart_full.png (100%) rename docs/{ => flutter}/example/i18ns/rtl_line_chart_thumb.png (100%) rename docs/{ => flutter}/example/i18ns/rtl_series_legend.md (100%) rename docs/{ => flutter}/example/i18ns/rtl_series_legend_full.png (100%) rename docs/{ => flutter}/example/i18ns/rtl_series_legend_thumb.png (100%) rename docs/{ => flutter}/example/interactions/selection_bar_highlight.md (100%) rename docs/{ => flutter}/example/interactions/selection_bar_highlight_full.png (100%) rename docs/{ => flutter}/example/interactions/selection_bar_highlight_thumb.png (100%) rename docs/{ => flutter}/example/interactions/selection_callback_example.md (100%) rename docs/{ => flutter}/example/interactions/selection_callback_example_full.png (100%) rename docs/{ => flutter}/example/interactions/selection_callback_example_thumb.png (100%) rename docs/{ => flutter}/example/interactions/selection_line_highlight.md (100%) rename docs/{ => flutter}/example/interactions/selection_line_highlight_full.png (100%) rename docs/{ => flutter}/example/interactions/selection_line_highlight_thumb.png (100%) rename docs/{ => flutter}/example/legends/legend_custom_symbol.md (100%) rename docs/{ => flutter}/example/legends/legend_custom_symbol_full.png (100%) rename docs/{ => flutter}/example/legends/legend_custom_symbol_thumb.png (100%) rename docs/{ => flutter}/example/legends/legend_options.md (100%) rename docs/{ => flutter}/example/legends/legend_options_full.png (100%) rename docs/{ => flutter}/example/legends/legend_options_thumb.png (100%) rename docs/{ => flutter}/example/legends/simple_series_legend.md (100%) rename docs/{ => flutter}/example/legends/simple_series_legend_full.png (100%) rename docs/{ => flutter}/example/legends/simple_series_legend_thumb.png (100%) rename docs/{ => flutter}/example/line_charts/dash_pattern.md (100%) rename docs/{ => flutter}/example/line_charts/dash_pattern_full.png (100%) rename docs/{ => flutter}/example/line_charts/dash_pattern_thumb.png (100%) rename docs/{ => flutter}/example/line_charts/range_annotation.md (100%) rename docs/{ => flutter}/example/line_charts/range_annotation_full.png (100%) rename docs/{ => flutter}/example/line_charts/range_annotation_thumb.png (100%) rename docs/{ => flutter}/example/line_charts/simple.md (100%) rename docs/{ => flutter}/example/line_charts/simple_full.png (100%) rename docs/{ => flutter}/example/line_charts/simple_thumb.png (100%) rename docs/{ => flutter}/example/time_series_charts/range_annotation.md (100%) rename docs/{ => flutter}/example/time_series_charts/range_annotation_full.png (100%) rename docs/{ => flutter}/example/time_series_charts/range_annotation_thumb.png (100%) rename docs/{ => flutter}/example/time_series_charts/simple.md (100%) rename docs/{ => flutter}/example/time_series_charts/simple_full.png (100%) rename docs/{ => flutter}/example/time_series_charts/simple_thumb.png (100%) rename docs/{ => flutter}/gallery.md (100%) diff --git a/docs/example/a11ys/domain_a11y_explore_bar_chart.md b/docs/flutter/example/a11ys/domain_a11y_explore_bar_chart.md similarity index 100% rename from docs/example/a11ys/domain_a11y_explore_bar_chart.md rename to docs/flutter/example/a11ys/domain_a11y_explore_bar_chart.md diff --git a/docs/example/a11ys/domain_a11y_explore_bar_chart_full.png b/docs/flutter/example/a11ys/domain_a11y_explore_bar_chart_full.png similarity index 100% rename from docs/example/a11ys/domain_a11y_explore_bar_chart_full.png rename to docs/flutter/example/a11ys/domain_a11y_explore_bar_chart_full.png diff --git a/docs/example/a11ys/domain_a11y_explore_bar_chart_thumb.png b/docs/flutter/example/a11ys/domain_a11y_explore_bar_chart_thumb.png similarity index 100% rename from docs/example/a11ys/domain_a11y_explore_bar_chart_thumb.png rename to docs/flutter/example/a11ys/domain_a11y_explore_bar_chart_thumb.png diff --git a/docs/example/axes/bar_secondary_axis.md b/docs/flutter/example/axes/bar_secondary_axis.md similarity index 100% rename from docs/example/axes/bar_secondary_axis.md rename to docs/flutter/example/axes/bar_secondary_axis.md diff --git a/docs/example/axes/bar_secondary_axis_full.png b/docs/flutter/example/axes/bar_secondary_axis_full.png similarity index 100% rename from docs/example/axes/bar_secondary_axis_full.png rename to docs/flutter/example/axes/bar_secondary_axis_full.png diff --git a/docs/example/axes/bar_secondary_axis_only.md b/docs/flutter/example/axes/bar_secondary_axis_only.md similarity index 100% rename from docs/example/axes/bar_secondary_axis_only.md rename to docs/flutter/example/axes/bar_secondary_axis_only.md diff --git a/docs/example/axes/bar_secondary_axis_only_full.png b/docs/flutter/example/axes/bar_secondary_axis_only_full.png similarity index 100% rename from docs/example/axes/bar_secondary_axis_only_full.png rename to docs/flutter/example/axes/bar_secondary_axis_only_full.png diff --git a/docs/example/axes/bar_secondary_axis_only_thumb.png b/docs/flutter/example/axes/bar_secondary_axis_only_thumb.png similarity index 100% rename from docs/example/axes/bar_secondary_axis_only_thumb.png rename to docs/flutter/example/axes/bar_secondary_axis_only_thumb.png diff --git a/docs/example/axes/bar_secondary_axis_thumb.png b/docs/flutter/example/axes/bar_secondary_axis_thumb.png similarity index 100% rename from docs/example/axes/bar_secondary_axis_thumb.png rename to docs/flutter/example/axes/bar_secondary_axis_thumb.png diff --git a/docs/example/axes/custom_axis_tick_formatters.md b/docs/flutter/example/axes/custom_axis_tick_formatters.md similarity index 100% rename from docs/example/axes/custom_axis_tick_formatters.md rename to docs/flutter/example/axes/custom_axis_tick_formatters.md diff --git a/docs/example/axes/custom_axis_tick_formatters_full.png b/docs/flutter/example/axes/custom_axis_tick_formatters_full.png similarity index 100% rename from docs/example/axes/custom_axis_tick_formatters_full.png rename to docs/flutter/example/axes/custom_axis_tick_formatters_full.png diff --git a/docs/example/axes/custom_axis_tick_formatters_thumb.png b/docs/flutter/example/axes/custom_axis_tick_formatters_thumb.png similarity index 100% rename from docs/example/axes/custom_axis_tick_formatters_thumb.png rename to docs/flutter/example/axes/custom_axis_tick_formatters_thumb.png diff --git a/docs/example/axes/custom_font_size_and_color.md b/docs/flutter/example/axes/custom_font_size_and_color.md similarity index 100% rename from docs/example/axes/custom_font_size_and_color.md rename to docs/flutter/example/axes/custom_font_size_and_color.md diff --git a/docs/example/axes/custom_font_size_and_color_full.png b/docs/flutter/example/axes/custom_font_size_and_color_full.png similarity index 100% rename from docs/example/axes/custom_font_size_and_color_full.png rename to docs/flutter/example/axes/custom_font_size_and_color_full.png diff --git a/docs/example/axes/custom_font_size_and_color_thumb.png b/docs/flutter/example/axes/custom_font_size_and_color_thumb.png similarity index 100% rename from docs/example/axes/custom_font_size_and_color_thumb.png rename to docs/flutter/example/axes/custom_font_size_and_color_thumb.png diff --git a/docs/example/axes/custom_measure_tick_count.md b/docs/flutter/example/axes/custom_measure_tick_count.md similarity index 100% rename from docs/example/axes/custom_measure_tick_count.md rename to docs/flutter/example/axes/custom_measure_tick_count.md diff --git a/docs/example/axes/custom_measure_tick_count_full.png b/docs/flutter/example/axes/custom_measure_tick_count_full.png similarity index 100% rename from docs/example/axes/custom_measure_tick_count_full.png rename to docs/flutter/example/axes/custom_measure_tick_count_full.png diff --git a/docs/example/axes/custom_measure_tick_count_thumb.png b/docs/flutter/example/axes/custom_measure_tick_count_thumb.png similarity index 100% rename from docs/example/axes/custom_measure_tick_count_thumb.png rename to docs/flutter/example/axes/custom_measure_tick_count_thumb.png diff --git a/docs/example/axes/hidden_ticks_and_labels_axis.md b/docs/flutter/example/axes/hidden_ticks_and_labels_axis.md similarity index 100% rename from docs/example/axes/hidden_ticks_and_labels_axis.md rename to docs/flutter/example/axes/hidden_ticks_and_labels_axis.md diff --git a/docs/example/axes/hidden_ticks_and_labels_axis_full.png b/docs/flutter/example/axes/hidden_ticks_and_labels_axis_full.png similarity index 100% rename from docs/example/axes/hidden_ticks_and_labels_axis_full.png rename to docs/flutter/example/axes/hidden_ticks_and_labels_axis_full.png diff --git a/docs/example/axes/hidden_ticks_and_labels_axis_thumb.png b/docs/flutter/example/axes/hidden_ticks_and_labels_axis_thumb.png similarity index 100% rename from docs/example/axes/hidden_ticks_and_labels_axis_thumb.png rename to docs/flutter/example/axes/hidden_ticks_and_labels_axis_thumb.png diff --git a/docs/example/axes/horizontal_bar_secondary_axis.md b/docs/flutter/example/axes/horizontal_bar_secondary_axis.md similarity index 100% rename from docs/example/axes/horizontal_bar_secondary_axis.md rename to docs/flutter/example/axes/horizontal_bar_secondary_axis.md diff --git a/docs/example/axes/horizontal_bar_secondary_axis_full.png b/docs/flutter/example/axes/horizontal_bar_secondary_axis_full.png similarity index 100% rename from docs/example/axes/horizontal_bar_secondary_axis_full.png rename to docs/flutter/example/axes/horizontal_bar_secondary_axis_full.png diff --git a/docs/example/axes/horizontal_bar_secondary_axis_thumb.png b/docs/flutter/example/axes/horizontal_bar_secondary_axis_thumb.png similarity index 100% rename from docs/example/axes/horizontal_bar_secondary_axis_thumb.png rename to docs/flutter/example/axes/horizontal_bar_secondary_axis_thumb.png diff --git a/docs/example/axes/integer_only_measure_axis.md b/docs/flutter/example/axes/integer_only_measure_axis.md similarity index 100% rename from docs/example/axes/integer_only_measure_axis.md rename to docs/flutter/example/axes/integer_only_measure_axis.md diff --git a/docs/example/axes/integer_only_measure_axis_full.png b/docs/flutter/example/axes/integer_only_measure_axis_full.png similarity index 100% rename from docs/example/axes/integer_only_measure_axis_full.png rename to docs/flutter/example/axes/integer_only_measure_axis_full.png diff --git a/docs/example/axes/integer_only_measure_axis_thumb.png b/docs/flutter/example/axes/integer_only_measure_axis_thumb.png similarity index 100% rename from docs/example/axes/integer_only_measure_axis_thumb.png rename to docs/flutter/example/axes/integer_only_measure_axis_thumb.png diff --git a/docs/example/axes/measure_axis_label_alignment.md b/docs/flutter/example/axes/measure_axis_label_alignment.md similarity index 100% rename from docs/example/axes/measure_axis_label_alignment.md rename to docs/flutter/example/axes/measure_axis_label_alignment.md diff --git a/docs/example/axes/measure_axis_label_alignment_full.png b/docs/flutter/example/axes/measure_axis_label_alignment_full.png similarity index 100% rename from docs/example/axes/measure_axis_label_alignment_full.png rename to docs/flutter/example/axes/measure_axis_label_alignment_full.png diff --git a/docs/example/axes/measure_axis_label_alignment_thumb.png b/docs/flutter/example/axes/measure_axis_label_alignment_thumb.png similarity index 100% rename from docs/example/axes/measure_axis_label_alignment_thumb.png rename to docs/flutter/example/axes/measure_axis_label_alignment_thumb.png diff --git a/docs/example/axes/nonzero_bound_measure_axis.md b/docs/flutter/example/axes/nonzero_bound_measure_axis.md similarity index 100% rename from docs/example/axes/nonzero_bound_measure_axis.md rename to docs/flutter/example/axes/nonzero_bound_measure_axis.md diff --git a/docs/example/axes/nonzero_bound_measure_axis_full.png b/docs/flutter/example/axes/nonzero_bound_measure_axis_full.png similarity index 100% rename from docs/example/axes/nonzero_bound_measure_axis_full.png rename to docs/flutter/example/axes/nonzero_bound_measure_axis_full.png diff --git a/docs/example/axes/nonzero_bound_measure_axis_thumb.png b/docs/flutter/example/axes/nonzero_bound_measure_axis_thumb.png similarity index 100% rename from docs/example/axes/nonzero_bound_measure_axis_thumb.png rename to docs/flutter/example/axes/nonzero_bound_measure_axis_thumb.png diff --git a/docs/example/axes/short_tick_length_axis.md b/docs/flutter/example/axes/short_tick_length_axis.md similarity index 100% rename from docs/example/axes/short_tick_length_axis.md rename to docs/flutter/example/axes/short_tick_length_axis.md diff --git a/docs/example/axes/short_tick_length_axis_full.png b/docs/flutter/example/axes/short_tick_length_axis_full.png similarity index 100% rename from docs/example/axes/short_tick_length_axis_full.png rename to docs/flutter/example/axes/short_tick_length_axis_full.png diff --git a/docs/example/axes/short_tick_length_axis_thumb.png b/docs/flutter/example/axes/short_tick_length_axis_thumb.png similarity index 100% rename from docs/example/axes/short_tick_length_axis_thumb.png rename to docs/flutter/example/axes/short_tick_length_axis_thumb.png diff --git a/docs/example/axes/statically_provided_ticks.md b/docs/flutter/example/axes/statically_provided_ticks.md similarity index 100% rename from docs/example/axes/statically_provided_ticks.md rename to docs/flutter/example/axes/statically_provided_ticks.md diff --git a/docs/example/axes/statically_provided_ticks_full.png b/docs/flutter/example/axes/statically_provided_ticks_full.png similarity index 100% rename from docs/example/axes/statically_provided_ticks_full.png rename to docs/flutter/example/axes/statically_provided_ticks_full.png diff --git a/docs/example/axes/statically_provided_ticks_thumb.png b/docs/flutter/example/axes/statically_provided_ticks_thumb.png similarity index 100% rename from docs/example/axes/statically_provided_ticks_thumb.png rename to docs/flutter/example/axes/statically_provided_ticks_thumb.png diff --git a/docs/example/bar_charts/grouped.md b/docs/flutter/example/bar_charts/grouped.md similarity index 100% rename from docs/example/bar_charts/grouped.md rename to docs/flutter/example/bar_charts/grouped.md diff --git a/docs/example/bar_charts/grouped_full.png b/docs/flutter/example/bar_charts/grouped_full.png similarity index 100% rename from docs/example/bar_charts/grouped_full.png rename to docs/flutter/example/bar_charts/grouped_full.png diff --git a/docs/example/bar_charts/grouped_stacked.md b/docs/flutter/example/bar_charts/grouped_stacked.md similarity index 100% rename from docs/example/bar_charts/grouped_stacked.md rename to docs/flutter/example/bar_charts/grouped_stacked.md diff --git a/docs/example/bar_charts/grouped_stacked_full.png b/docs/flutter/example/bar_charts/grouped_stacked_full.png similarity index 100% rename from docs/example/bar_charts/grouped_stacked_full.png rename to docs/flutter/example/bar_charts/grouped_stacked_full.png diff --git a/docs/example/bar_charts/grouped_stacked_thumb.png b/docs/flutter/example/bar_charts/grouped_stacked_thumb.png similarity index 100% rename from docs/example/bar_charts/grouped_stacked_thumb.png rename to docs/flutter/example/bar_charts/grouped_stacked_thumb.png diff --git a/docs/example/bar_charts/grouped_target_line.md b/docs/flutter/example/bar_charts/grouped_target_line.md similarity index 100% rename from docs/example/bar_charts/grouped_target_line.md rename to docs/flutter/example/bar_charts/grouped_target_line.md diff --git a/docs/example/bar_charts/grouped_target_line_full.png b/docs/flutter/example/bar_charts/grouped_target_line_full.png similarity index 100% rename from docs/example/bar_charts/grouped_target_line_full.png rename to docs/flutter/example/bar_charts/grouped_target_line_full.png diff --git a/docs/example/bar_charts/grouped_target_line_thumb.png b/docs/flutter/example/bar_charts/grouped_target_line_thumb.png similarity index 100% rename from docs/example/bar_charts/grouped_target_line_thumb.png rename to docs/flutter/example/bar_charts/grouped_target_line_thumb.png diff --git a/docs/example/bar_charts/grouped_thumb.png b/docs/flutter/example/bar_charts/grouped_thumb.png similarity index 100% rename from docs/example/bar_charts/grouped_thumb.png rename to docs/flutter/example/bar_charts/grouped_thumb.png diff --git a/docs/example/bar_charts/horizontal.md b/docs/flutter/example/bar_charts/horizontal.md similarity index 100% rename from docs/example/bar_charts/horizontal.md rename to docs/flutter/example/bar_charts/horizontal.md diff --git a/docs/example/bar_charts/horizontal_bar_label.md b/docs/flutter/example/bar_charts/horizontal_bar_label.md similarity index 100% rename from docs/example/bar_charts/horizontal_bar_label.md rename to docs/flutter/example/bar_charts/horizontal_bar_label.md diff --git a/docs/example/bar_charts/horizontal_bar_label_full.png b/docs/flutter/example/bar_charts/horizontal_bar_label_full.png similarity index 100% rename from docs/example/bar_charts/horizontal_bar_label_full.png rename to docs/flutter/example/bar_charts/horizontal_bar_label_full.png diff --git a/docs/example/bar_charts/horizontal_bar_label_thumb.png b/docs/flutter/example/bar_charts/horizontal_bar_label_thumb.png similarity index 100% rename from docs/example/bar_charts/horizontal_bar_label_thumb.png rename to docs/flutter/example/bar_charts/horizontal_bar_label_thumb.png diff --git a/docs/example/bar_charts/horizontal_full.png b/docs/flutter/example/bar_charts/horizontal_full.png similarity index 100% rename from docs/example/bar_charts/horizontal_full.png rename to docs/flutter/example/bar_charts/horizontal_full.png diff --git a/docs/example/bar_charts/horizontal_pattern_forward_hatch.md b/docs/flutter/example/bar_charts/horizontal_pattern_forward_hatch.md similarity index 100% rename from docs/example/bar_charts/horizontal_pattern_forward_hatch.md rename to docs/flutter/example/bar_charts/horizontal_pattern_forward_hatch.md diff --git a/docs/example/bar_charts/horizontal_pattern_forward_hatch_full.png b/docs/flutter/example/bar_charts/horizontal_pattern_forward_hatch_full.png similarity index 100% rename from docs/example/bar_charts/horizontal_pattern_forward_hatch_full.png rename to docs/flutter/example/bar_charts/horizontal_pattern_forward_hatch_full.png diff --git a/docs/example/bar_charts/horizontal_pattern_forward_hatch_thumb.png b/docs/flutter/example/bar_charts/horizontal_pattern_forward_hatch_thumb.png similarity index 100% rename from docs/example/bar_charts/horizontal_pattern_forward_hatch_thumb.png rename to docs/flutter/example/bar_charts/horizontal_pattern_forward_hatch_thumb.png diff --git a/docs/example/bar_charts/horizontal_thumb.png b/docs/flutter/example/bar_charts/horizontal_thumb.png similarity index 100% rename from docs/example/bar_charts/horizontal_thumb.png rename to docs/flutter/example/bar_charts/horizontal_thumb.png diff --git a/docs/example/bar_charts/pattern_forward_hatch.md b/docs/flutter/example/bar_charts/pattern_forward_hatch.md similarity index 100% rename from docs/example/bar_charts/pattern_forward_hatch.md rename to docs/flutter/example/bar_charts/pattern_forward_hatch.md diff --git a/docs/example/bar_charts/pattern_forward_hatch_full.png b/docs/flutter/example/bar_charts/pattern_forward_hatch_full.png similarity index 100% rename from docs/example/bar_charts/pattern_forward_hatch_full.png rename to docs/flutter/example/bar_charts/pattern_forward_hatch_full.png diff --git a/docs/example/bar_charts/pattern_forward_hatch_thumb.png b/docs/flutter/example/bar_charts/pattern_forward_hatch_thumb.png similarity index 100% rename from docs/example/bar_charts/pattern_forward_hatch_thumb.png rename to docs/flutter/example/bar_charts/pattern_forward_hatch_thumb.png diff --git a/docs/example/bar_charts/simple.md b/docs/flutter/example/bar_charts/simple.md similarity index 100% rename from docs/example/bar_charts/simple.md rename to docs/flutter/example/bar_charts/simple.md diff --git a/docs/example/bar_charts/simple_full.png b/docs/flutter/example/bar_charts/simple_full.png similarity index 100% rename from docs/example/bar_charts/simple_full.png rename to docs/flutter/example/bar_charts/simple_full.png diff --git a/docs/example/bar_charts/simple_thumb.png b/docs/flutter/example/bar_charts/simple_thumb.png similarity index 100% rename from docs/example/bar_charts/simple_thumb.png rename to docs/flutter/example/bar_charts/simple_thumb.png diff --git a/docs/example/bar_charts/spark_bar.md b/docs/flutter/example/bar_charts/spark_bar.md similarity index 100% rename from docs/example/bar_charts/spark_bar.md rename to docs/flutter/example/bar_charts/spark_bar.md diff --git a/docs/example/bar_charts/spark_bar_full.png b/docs/flutter/example/bar_charts/spark_bar_full.png similarity index 100% rename from docs/example/bar_charts/spark_bar_full.png rename to docs/flutter/example/bar_charts/spark_bar_full.png diff --git a/docs/example/bar_charts/spark_bar_thumb.png b/docs/flutter/example/bar_charts/spark_bar_thumb.png similarity index 100% rename from docs/example/bar_charts/spark_bar_thumb.png rename to docs/flutter/example/bar_charts/spark_bar_thumb.png diff --git a/docs/example/bar_charts/stacked.md b/docs/flutter/example/bar_charts/stacked.md similarity index 100% rename from docs/example/bar_charts/stacked.md rename to docs/flutter/example/bar_charts/stacked.md diff --git a/docs/example/bar_charts/stacked_full.png b/docs/flutter/example/bar_charts/stacked_full.png similarity index 100% rename from docs/example/bar_charts/stacked_full.png rename to docs/flutter/example/bar_charts/stacked_full.png diff --git a/docs/example/bar_charts/stacked_horizontal.md b/docs/flutter/example/bar_charts/stacked_horizontal.md similarity index 100% rename from docs/example/bar_charts/stacked_horizontal.md rename to docs/flutter/example/bar_charts/stacked_horizontal.md diff --git a/docs/example/bar_charts/stacked_horizontal_full.png b/docs/flutter/example/bar_charts/stacked_horizontal_full.png similarity index 100% rename from docs/example/bar_charts/stacked_horizontal_full.png rename to docs/flutter/example/bar_charts/stacked_horizontal_full.png diff --git a/docs/example/bar_charts/stacked_horizontal_thumb.png b/docs/flutter/example/bar_charts/stacked_horizontal_thumb.png similarity index 100% rename from docs/example/bar_charts/stacked_horizontal_thumb.png rename to docs/flutter/example/bar_charts/stacked_horizontal_thumb.png diff --git a/docs/example/bar_charts/stacked_target_line.md b/docs/flutter/example/bar_charts/stacked_target_line.md similarity index 100% rename from docs/example/bar_charts/stacked_target_line.md rename to docs/flutter/example/bar_charts/stacked_target_line.md diff --git a/docs/example/bar_charts/stacked_target_line_full.png b/docs/flutter/example/bar_charts/stacked_target_line_full.png similarity index 100% rename from docs/example/bar_charts/stacked_target_line_full.png rename to docs/flutter/example/bar_charts/stacked_target_line_full.png diff --git a/docs/example/bar_charts/stacked_target_line_thumb.png b/docs/flutter/example/bar_charts/stacked_target_line_thumb.png similarity index 100% rename from docs/example/bar_charts/stacked_target_line_thumb.png rename to docs/flutter/example/bar_charts/stacked_target_line_thumb.png diff --git a/docs/example/bar_charts/stacked_thumb.png b/docs/flutter/example/bar_charts/stacked_thumb.png similarity index 100% rename from docs/example/bar_charts/stacked_thumb.png rename to docs/flutter/example/bar_charts/stacked_thumb.png diff --git a/docs/example/i18ns/rtl_bar_chart.md b/docs/flutter/example/i18ns/rtl_bar_chart.md similarity index 100% rename from docs/example/i18ns/rtl_bar_chart.md rename to docs/flutter/example/i18ns/rtl_bar_chart.md diff --git a/docs/example/i18ns/rtl_bar_chart_full.png b/docs/flutter/example/i18ns/rtl_bar_chart_full.png similarity index 100% rename from docs/example/i18ns/rtl_bar_chart_full.png rename to docs/flutter/example/i18ns/rtl_bar_chart_full.png diff --git a/docs/example/i18ns/rtl_bar_chart_thumb.png b/docs/flutter/example/i18ns/rtl_bar_chart_thumb.png similarity index 100% rename from docs/example/i18ns/rtl_bar_chart_thumb.png rename to docs/flutter/example/i18ns/rtl_bar_chart_thumb.png diff --git a/docs/example/i18ns/rtl_line_chart.md b/docs/flutter/example/i18ns/rtl_line_chart.md similarity index 100% rename from docs/example/i18ns/rtl_line_chart.md rename to docs/flutter/example/i18ns/rtl_line_chart.md diff --git a/docs/example/i18ns/rtl_line_chart_full.png b/docs/flutter/example/i18ns/rtl_line_chart_full.png similarity index 100% rename from docs/example/i18ns/rtl_line_chart_full.png rename to docs/flutter/example/i18ns/rtl_line_chart_full.png diff --git a/docs/example/i18ns/rtl_line_chart_thumb.png b/docs/flutter/example/i18ns/rtl_line_chart_thumb.png similarity index 100% rename from docs/example/i18ns/rtl_line_chart_thumb.png rename to docs/flutter/example/i18ns/rtl_line_chart_thumb.png diff --git a/docs/example/i18ns/rtl_series_legend.md b/docs/flutter/example/i18ns/rtl_series_legend.md similarity index 100% rename from docs/example/i18ns/rtl_series_legend.md rename to docs/flutter/example/i18ns/rtl_series_legend.md diff --git a/docs/example/i18ns/rtl_series_legend_full.png b/docs/flutter/example/i18ns/rtl_series_legend_full.png similarity index 100% rename from docs/example/i18ns/rtl_series_legend_full.png rename to docs/flutter/example/i18ns/rtl_series_legend_full.png diff --git a/docs/example/i18ns/rtl_series_legend_thumb.png b/docs/flutter/example/i18ns/rtl_series_legend_thumb.png similarity index 100% rename from docs/example/i18ns/rtl_series_legend_thumb.png rename to docs/flutter/example/i18ns/rtl_series_legend_thumb.png diff --git a/docs/example/interactions/selection_bar_highlight.md b/docs/flutter/example/interactions/selection_bar_highlight.md similarity index 100% rename from docs/example/interactions/selection_bar_highlight.md rename to docs/flutter/example/interactions/selection_bar_highlight.md diff --git a/docs/example/interactions/selection_bar_highlight_full.png b/docs/flutter/example/interactions/selection_bar_highlight_full.png similarity index 100% rename from docs/example/interactions/selection_bar_highlight_full.png rename to docs/flutter/example/interactions/selection_bar_highlight_full.png diff --git a/docs/example/interactions/selection_bar_highlight_thumb.png b/docs/flutter/example/interactions/selection_bar_highlight_thumb.png similarity index 100% rename from docs/example/interactions/selection_bar_highlight_thumb.png rename to docs/flutter/example/interactions/selection_bar_highlight_thumb.png diff --git a/docs/example/interactions/selection_callback_example.md b/docs/flutter/example/interactions/selection_callback_example.md similarity index 100% rename from docs/example/interactions/selection_callback_example.md rename to docs/flutter/example/interactions/selection_callback_example.md diff --git a/docs/example/interactions/selection_callback_example_full.png b/docs/flutter/example/interactions/selection_callback_example_full.png similarity index 100% rename from docs/example/interactions/selection_callback_example_full.png rename to docs/flutter/example/interactions/selection_callback_example_full.png diff --git a/docs/example/interactions/selection_callback_example_thumb.png b/docs/flutter/example/interactions/selection_callback_example_thumb.png similarity index 100% rename from docs/example/interactions/selection_callback_example_thumb.png rename to docs/flutter/example/interactions/selection_callback_example_thumb.png diff --git a/docs/example/interactions/selection_line_highlight.md b/docs/flutter/example/interactions/selection_line_highlight.md similarity index 100% rename from docs/example/interactions/selection_line_highlight.md rename to docs/flutter/example/interactions/selection_line_highlight.md diff --git a/docs/example/interactions/selection_line_highlight_full.png b/docs/flutter/example/interactions/selection_line_highlight_full.png similarity index 100% rename from docs/example/interactions/selection_line_highlight_full.png rename to docs/flutter/example/interactions/selection_line_highlight_full.png diff --git a/docs/example/interactions/selection_line_highlight_thumb.png b/docs/flutter/example/interactions/selection_line_highlight_thumb.png similarity index 100% rename from docs/example/interactions/selection_line_highlight_thumb.png rename to docs/flutter/example/interactions/selection_line_highlight_thumb.png diff --git a/docs/example/legends/legend_custom_symbol.md b/docs/flutter/example/legends/legend_custom_symbol.md similarity index 100% rename from docs/example/legends/legend_custom_symbol.md rename to docs/flutter/example/legends/legend_custom_symbol.md diff --git a/docs/example/legends/legend_custom_symbol_full.png b/docs/flutter/example/legends/legend_custom_symbol_full.png similarity index 100% rename from docs/example/legends/legend_custom_symbol_full.png rename to docs/flutter/example/legends/legend_custom_symbol_full.png diff --git a/docs/example/legends/legend_custom_symbol_thumb.png b/docs/flutter/example/legends/legend_custom_symbol_thumb.png similarity index 100% rename from docs/example/legends/legend_custom_symbol_thumb.png rename to docs/flutter/example/legends/legend_custom_symbol_thumb.png diff --git a/docs/example/legends/legend_options.md b/docs/flutter/example/legends/legend_options.md similarity index 100% rename from docs/example/legends/legend_options.md rename to docs/flutter/example/legends/legend_options.md diff --git a/docs/example/legends/legend_options_full.png b/docs/flutter/example/legends/legend_options_full.png similarity index 100% rename from docs/example/legends/legend_options_full.png rename to docs/flutter/example/legends/legend_options_full.png diff --git a/docs/example/legends/legend_options_thumb.png b/docs/flutter/example/legends/legend_options_thumb.png similarity index 100% rename from docs/example/legends/legend_options_thumb.png rename to docs/flutter/example/legends/legend_options_thumb.png diff --git a/docs/example/legends/simple_series_legend.md b/docs/flutter/example/legends/simple_series_legend.md similarity index 100% rename from docs/example/legends/simple_series_legend.md rename to docs/flutter/example/legends/simple_series_legend.md diff --git a/docs/example/legends/simple_series_legend_full.png b/docs/flutter/example/legends/simple_series_legend_full.png similarity index 100% rename from docs/example/legends/simple_series_legend_full.png rename to docs/flutter/example/legends/simple_series_legend_full.png diff --git a/docs/example/legends/simple_series_legend_thumb.png b/docs/flutter/example/legends/simple_series_legend_thumb.png similarity index 100% rename from docs/example/legends/simple_series_legend_thumb.png rename to docs/flutter/example/legends/simple_series_legend_thumb.png diff --git a/docs/example/line_charts/dash_pattern.md b/docs/flutter/example/line_charts/dash_pattern.md similarity index 100% rename from docs/example/line_charts/dash_pattern.md rename to docs/flutter/example/line_charts/dash_pattern.md diff --git a/docs/example/line_charts/dash_pattern_full.png b/docs/flutter/example/line_charts/dash_pattern_full.png similarity index 100% rename from docs/example/line_charts/dash_pattern_full.png rename to docs/flutter/example/line_charts/dash_pattern_full.png diff --git a/docs/example/line_charts/dash_pattern_thumb.png b/docs/flutter/example/line_charts/dash_pattern_thumb.png similarity index 100% rename from docs/example/line_charts/dash_pattern_thumb.png rename to docs/flutter/example/line_charts/dash_pattern_thumb.png diff --git a/docs/example/line_charts/range_annotation.md b/docs/flutter/example/line_charts/range_annotation.md similarity index 100% rename from docs/example/line_charts/range_annotation.md rename to docs/flutter/example/line_charts/range_annotation.md diff --git a/docs/example/line_charts/range_annotation_full.png b/docs/flutter/example/line_charts/range_annotation_full.png similarity index 100% rename from docs/example/line_charts/range_annotation_full.png rename to docs/flutter/example/line_charts/range_annotation_full.png diff --git a/docs/example/line_charts/range_annotation_thumb.png b/docs/flutter/example/line_charts/range_annotation_thumb.png similarity index 100% rename from docs/example/line_charts/range_annotation_thumb.png rename to docs/flutter/example/line_charts/range_annotation_thumb.png diff --git a/docs/example/line_charts/simple.md b/docs/flutter/example/line_charts/simple.md similarity index 100% rename from docs/example/line_charts/simple.md rename to docs/flutter/example/line_charts/simple.md diff --git a/docs/example/line_charts/simple_full.png b/docs/flutter/example/line_charts/simple_full.png similarity index 100% rename from docs/example/line_charts/simple_full.png rename to docs/flutter/example/line_charts/simple_full.png diff --git a/docs/example/line_charts/simple_thumb.png b/docs/flutter/example/line_charts/simple_thumb.png similarity index 100% rename from docs/example/line_charts/simple_thumb.png rename to docs/flutter/example/line_charts/simple_thumb.png diff --git a/docs/example/time_series_charts/range_annotation.md b/docs/flutter/example/time_series_charts/range_annotation.md similarity index 100% rename from docs/example/time_series_charts/range_annotation.md rename to docs/flutter/example/time_series_charts/range_annotation.md diff --git a/docs/example/time_series_charts/range_annotation_full.png b/docs/flutter/example/time_series_charts/range_annotation_full.png similarity index 100% rename from docs/example/time_series_charts/range_annotation_full.png rename to docs/flutter/example/time_series_charts/range_annotation_full.png diff --git a/docs/example/time_series_charts/range_annotation_thumb.png b/docs/flutter/example/time_series_charts/range_annotation_thumb.png similarity index 100% rename from docs/example/time_series_charts/range_annotation_thumb.png rename to docs/flutter/example/time_series_charts/range_annotation_thumb.png diff --git a/docs/example/time_series_charts/simple.md b/docs/flutter/example/time_series_charts/simple.md similarity index 100% rename from docs/example/time_series_charts/simple.md rename to docs/flutter/example/time_series_charts/simple.md diff --git a/docs/example/time_series_charts/simple_full.png b/docs/flutter/example/time_series_charts/simple_full.png similarity index 100% rename from docs/example/time_series_charts/simple_full.png rename to docs/flutter/example/time_series_charts/simple_full.png diff --git a/docs/example/time_series_charts/simple_thumb.png b/docs/flutter/example/time_series_charts/simple_thumb.png similarity index 100% rename from docs/example/time_series_charts/simple_thumb.png rename to docs/flutter/example/time_series_charts/simple_thumb.png diff --git a/docs/gallery.md b/docs/flutter/gallery.md similarity index 100% rename from docs/gallery.md rename to docs/flutter/gallery.md From 5a8bdd5609f6545766147270f95543cadb9f06de Mon Sep 17 00:00:00 2001 From: nshahan Date: Thu, 15 Mar 2018 16:46:14 -0700 Subject: [PATCH 9/9] Update docs directory location and add a top level common doc. PiperOrigin-RevId: 189267468 --- docs/index.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 docs/index.md diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 000000000..e5b39d04f --- /dev/null +++ b/docs/index.md @@ -0,0 +1,3 @@ +# Coming soon + +Stay tuned.