apexcharts 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +20 -0
  3. data/README.md +132 -0
  4. data/lib/apexcharts/charts/area.rb +7 -0
  5. data/lib/apexcharts/charts/bar.rb +11 -0
  6. data/lib/apexcharts/charts/capabilities/annotations.rb +75 -0
  7. data/lib/apexcharts/charts/cartesian.rb +60 -0
  8. data/lib/apexcharts/charts/column.rb +7 -0
  9. data/lib/apexcharts/charts/line.rb +7 -0
  10. data/lib/apexcharts/charts/mixed.rb +72 -0
  11. data/lib/apexcharts/charts/scatter.rb +7 -0
  12. data/lib/apexcharts/charts/syncing.rb +61 -0
  13. data/lib/apexcharts/charts.rb +8 -0
  14. data/lib/apexcharts/helper.rb +66 -0
  15. data/lib/apexcharts/options/annotations.rb +10 -0
  16. data/lib/apexcharts/options/axis.rb +17 -0
  17. data/lib/apexcharts/options/chart.rb +24 -0
  18. data/lib/apexcharts/options/data_labels.rb +12 -0
  19. data/lib/apexcharts/options/div_attributes.rb +10 -0
  20. data/lib/apexcharts/options/fill.rb +12 -0
  21. data/lib/apexcharts/options/grid.rb +15 -0
  22. data/lib/apexcharts/options/legend.rb +24 -0
  23. data/lib/apexcharts/options/markers.rb +18 -0
  24. data/lib/apexcharts/options/no_data.rb +12 -0
  25. data/lib/apexcharts/options/plot_options.rb +11 -0
  26. data/lib/apexcharts/options/root.rb +41 -0
  27. data/lib/apexcharts/options/states.rb +9 -0
  28. data/lib/apexcharts/options/stroke.rb +12 -0
  29. data/lib/apexcharts/options/subtitle.rb +7 -0
  30. data/lib/apexcharts/options/theme.rb +8 -0
  31. data/lib/apexcharts/options/title.rb +13 -0
  32. data/lib/apexcharts/options/tooltip.rb +22 -0
  33. data/lib/apexcharts/options/x_axis.rb +12 -0
  34. data/lib/apexcharts/options/y_axis.rb +15 -0
  35. data/lib/apexcharts/options_builder.rb +320 -0
  36. data/lib/apexcharts/series/cartesian.rb +24 -0
  37. data/lib/apexcharts/series.rb +1 -0
  38. data/lib/apexcharts/support/rails.rb +9 -0
  39. data/lib/apexcharts/utils/date_time.rb +60 -0
  40. data/lib/apexcharts/utils/hash.rb +31 -0
  41. data/lib/apexcharts/utils.rb +2 -0
  42. data/lib/apexcharts/version.rb +3 -0
  43. data/lib/apexcharts.rb +2 -0
  44. data/vendor/assets/javascripts/apexcharts.js +6 -0
  45. metadata +157 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: e6b3b98ec99c06971c628785c5cad67c383761d510143618f44eb35d66b14b64
4
+ data.tar.gz: 5529e49eb4a68568e307d811405252b7edb9917e9d2f1f0d3747974cb4846490
5
+ SHA512:
6
+ metadata.gz: 27524883c3b7bc5fd74d61dce05996807e891b6a8162ba3443618060a60ccdbf211b47d1f8bccd6d23f3f724247bbf9ccb3035b2366d62ac66dd504f4088c23e
7
+ data.tar.gz: 8be3f7162a6df1afdd91178f12576594932755e11152ab7b4d1f2a8b7ffd15d17d7ca01ccb62e96de3c10b0217df29fb9f68ad82bda2004b97ae642bac195c9b
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2019 Adrian Setyadi
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,132 @@
1
+ <p align="center">
2
+ <img src="https://apexcharts.com/media/apexcharts-logo.png" height="90">
3
+ <span style="font-size: 40px; vertical-align: top; margin-right: 10px;">+</span>
4
+ <img src="https://www.ruby-lang.org/images/header-ruby-logo.png">
5
+ </p>
6
+
7
+ <p align="center">
8
+ <a href="https://github.com/styd/apexcharts.rb/blob/master/LICENSE"><img src="https://img.shields.io/badge/License-MIT-brightgreen.svg" alt="License"></a>
9
+ <a href="https://travis-ci.com/styd/apexcharts.rb"><img src="https://api.travis-ci.com/styd/apexcharts.rb.svg?branch=master" alt="build" /></a>
10
+ </p>
11
+
12
+
13
+ <p align="center">
14
+ <a href="https://twitter.com/intent/tweet?text=Create%20visualizations%20with%20this%20free%20and%20open-source%20JavaScript%20Chart%20library&url=https://www.apexcharts.com&hashtags=javascript,charts,visualizations,developers,apexcharts"><img src="https://img.shields.io/twitter/url/http/shields.io.svg?style=social"> </a>
15
+ </p>
16
+
17
+ <p align="center">Beautiful and interactive web charts for rubyist.</p>
18
+
19
+
20
+ <p align="center"><img src="https://apexcharts.com/media/apexcharts-banner.png"></p>
21
+
22
+ ## Installation
23
+ Add this line to your application's Gemfile:
24
+
25
+ ```ruby
26
+ gem 'apexcharts'
27
+ ```
28
+
29
+ And then execute:
30
+ ```bash
31
+ $ bundle
32
+ ```
33
+
34
+ ## Usage
35
+
36
+ ### Cartesian Charts
37
+
38
+ Example series used for mixable charts:
39
+
40
+ ```ruby
41
+ series = [
42
+ {name: "Total", data: @total_users},
43
+ {name: "Verified", data: @verified_users},
44
+ {name: "Unverified", data: @unverified_users}
45
+ ]
46
+ ```
47
+ To build the data, you can use gem [groupdate](https://github.com/ankane/groupdate).
48
+
49
+ Example options used for mixable charts:
50
+
51
+ ```ruby
52
+ options = {
53
+ title: 'Users Growth',
54
+ subtitle: 'Grouped Per Week',
55
+ xtitle: 'Week', ytitle: 'Users'
56
+ }
57
+ ```
58
+
59
+ #### Line Chart
60
+
61
+ ```ruby
62
+ <%= line_chart(series, options) %>
63
+ ```
64
+
65
+ #### Area Chart
66
+
67
+ ```ruby
68
+ <%= area_chart(series, options) %>
69
+ ```
70
+
71
+ #### Column Chart
72
+
73
+ ```ruby
74
+ <%= column_chart(series, options) %>
75
+ ```
76
+
77
+ #### Bar Chart
78
+
79
+ ```ruby
80
+ <%= bar_chart(series, options) %>
81
+ ```
82
+
83
+ #### Scatter Chart
84
+
85
+ ```ruby
86
+ <%= scatter_chart(series, options) %>
87
+ ```
88
+
89
+ All charts can have annotations, for example:
90
+
91
+ ```ruby
92
+ <%= line_chart(series, options) do %>
93
+ <% x_annotation(value: ('2018-11-18'..'2018-12-02'),
94
+ text: "Busy Time", color: 'green') %>
95
+ <% y_annotation(value: 59, text: "Max Users", color: 'blue') %>
96
+ <% point_annotation(value: ['2018-07-22', 12],
97
+ text: "First Peak", color: 'magenta') %>
98
+ <% end %>
99
+ ```
100
+
101
+ ![Example Line Chart with Annotations](images/example-annotations.png)
102
+
103
+ ## Web Framework
104
+
105
+ ### Rails
106
+
107
+ After installing the gem, require it in your `app/assets/javascripts/application.js`.
108
+ ```js
109
+ //= require 'apexcharts'
110
+ ```
111
+
112
+ Or, if you use `webpacker`, you can run:
113
+ ```bash
114
+ yarn add apexcharts
115
+ ```
116
+ and then require it in your `app/javascript/packs/application.js`.
117
+ ```js
118
+ require("apexcharts")
119
+ ```
120
+
121
+ ## Objective
122
+ - To bring out as much apexcharts.js capabilities as possible but in ruby ways.
123
+
124
+ ## Roadmap
125
+ - Other charts (pie, donut, radar, heatmap, etc.)
126
+ - Support other ruby frameworks (sinatra, hanami, etc.)
127
+
128
+ ## Contributing
129
+ Contribution directions go here.
130
+
131
+ ## License
132
+ The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
@@ -0,0 +1,7 @@
1
+ module Apexcharts
2
+ class AreaChart < CartesianChart
3
+ def chart_type
4
+ 'area'
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,11 @@
1
+ module Apexcharts
2
+ class BarChart < CartesianChart
3
+ def chart_type
4
+ 'bar'
5
+ end
6
+
7
+ def plot_options
8
+ {plot_options: {bar: {horizontal: true}}}
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,75 @@
1
+ module Apexcharts
2
+ module Annotations
3
+ def annotation(position, value:, text:, color: nil, **options)
4
+ @annotations ||= {}
5
+
6
+ unless [:xaxis, :yaxis, :points].include? position
7
+ raise "unrecognized position: #{position}"
8
+ end
9
+ @annotations[position] ||= []
10
+ @annotations[position] << annotation_value(position, value).merge(
11
+ if position == :points
12
+ {marker: {size: 8, fillColor: 'white', strokeColor: color, radius: 2}, **options}
13
+ else
14
+ {borderColor: color, fillColor: color, opacity: 0.2}
15
+ end
16
+ ).merge(
17
+ annotation_label(text, color, **options)
18
+ )
19
+ end
20
+
21
+ def x_annotation **args
22
+ annotation :xaxis, **args
23
+ end
24
+
25
+ def y_annotation **args
26
+ annotation :yaxis, **args
27
+ end
28
+
29
+ def point_annotation **args
30
+ annotation :points, **args
31
+ end
32
+
33
+ private
34
+
35
+ def annotation_value position, value
36
+ position = position.to_s.delete_suffix('axis').to_sym
37
+ case value
38
+ when Range
39
+ value = Utils::DateTime.convert_range(value)
40
+
41
+ case position
42
+ when :x
43
+ {x: value.first, x2: value.last}
44
+ when :y
45
+ {y: value.first, y2: value.last}
46
+ else
47
+ raise "position :points doesn't accept value of type Range"
48
+ end
49
+ else
50
+ if position == :points
51
+ value.map!{ |x| Utils::DateTime.convert(x) }
52
+ {x: value.first, y: value.last}
53
+ else
54
+ value = Utils::DateTime.convert(value)
55
+ {position => value}
56
+ end
57
+ end
58
+ end
59
+
60
+ def annotation_label text, color, **options
61
+ {
62
+ label: {
63
+ borderColor: color,
64
+ style: {
65
+ color: 'white',
66
+ background: color
67
+ },
68
+ text: text
69
+ }, **options
70
+ }
71
+ end
72
+
73
+ include Utils::Hash
74
+ end
75
+ end
@@ -0,0 +1,60 @@
1
+ require_relative 'capabilities/annotations'
2
+
3
+ module Apexcharts
4
+ class CartesianChart
5
+ include Annotations
6
+
7
+ def initialize data, options={}, &block
8
+ options = {**options, **plot_options}
9
+ instance_eval &block if block_given?
10
+
11
+ options[:annotations] = @annotations if @annotations
12
+ @data = sanitize_data(data)
13
+ @options = Utils::Hash.camelize_keys(
14
+ Utils::Hash.deep_merge(
15
+ build_options(@data[0][:data][0][:x], options),
16
+ {series: @data, chart: {type: chart_type}}.compact
17
+ )
18
+ )
19
+ end
20
+
21
+ def chart_type
22
+ end
23
+
24
+ def plot_options
25
+ {}
26
+ end
27
+
28
+ def mixed_series
29
+ @data.each{|d| d.merge!(type: chart_type) }
30
+ @data
31
+ end
32
+
33
+ def render
34
+ attributes = @options.delete(:div)
35
+ variable = attributes.delete(:var) || "chart#{attributes[:id][/\d+/]}"
36
+ element_id = attributes.delete(:id)
37
+ css_class = attributes.delete(:class)
38
+ height = "#{@options[:chart][:height].to_i}px"
39
+ style = "height: #{height}; #{attributes.delete(:style)}"
40
+ html =<<~HTML
41
+ <div id="#{element_id}" class="#{css_class}" style="#{style}"></div>
42
+ <script type="text/javascript">
43
+ var #{variable} = new ApexCharts(document.querySelector("##{element_id}"), #{@options.to_json});
44
+ #{variable}.render();
45
+ </script>
46
+ HTML
47
+ end
48
+
49
+ private
50
+
51
+ def sanitize_data(data)
52
+ Apexcharts::CartesianSeries.new(data).sanitized
53
+ end
54
+
55
+ def build_options(x_sample, options)
56
+ Apexcharts::OptionsBuilder.new(x_sample, options).built
57
+ end
58
+ end
59
+ end
60
+
@@ -0,0 +1,7 @@
1
+ module Apexcharts
2
+ class ColumnChart < BarChart
3
+ def plot_options
4
+ {plot_options: {bar: {horizontal: false}}}
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module Apexcharts
2
+ class LineChart < CartesianChart
3
+ def chart_type
4
+ 'line'
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,72 @@
1
+ module Apexcharts
2
+ class MixedChart
3
+ include Annotations
4
+
5
+ def initialize options={}, bindings, &block
6
+ @bindings = bindings
7
+ @mixed_series = []
8
+ build_instance_variables
9
+ instance_eval &block
10
+
11
+ options[:annotations] = @annotations if @annotations
12
+ @options = Utils::Hash.camelize_keys(
13
+ Utils::Hash.deep_merge(
14
+ build_options(@mixed_series[0][:data][0][:x], options),
15
+ {chart: {type: 'area'}, series: @mixed_series}
16
+ )
17
+ )
18
+ end
19
+
20
+ def line_chart data, options={}, &block
21
+ @mixed_series += LineChart.new(data, options, &block).mixed_series
22
+ end
23
+
24
+ def area_chart data, options={}, &block
25
+ @mixed_series += AreaChart.new(data, options, &block).mixed_series
26
+ end
27
+
28
+ def bar_chart data, options={}, &block
29
+ @mixed_series += BarChart.new(data, options, &block).mixed_series
30
+ end
31
+
32
+ def column_chart data, options={}, &block
33
+ @mixed_series += ColumnChart.new(data, options, &block).mixed_series
34
+ end
35
+
36
+ def scatter_chart data, options={}, &block
37
+ @mixed_series += ScatterChart.new(data, options, &block).mixed_series
38
+ end
39
+
40
+ def render
41
+ attributes = @options.delete(:div)
42
+ variable = attributes.delete(:var) || "chart#{attributes[:id][/\d+/]}"
43
+ element_id = attributes.delete(:id)
44
+ css_class = attributes.delete(:class)
45
+ height = "#{@options[:chart][:height].to_i}px"
46
+ style = "height: #{height};#{attributes.delete(:style)}"
47
+ html =<<~HTML
48
+ <div id="#{element_id}" class="#{css_class}" style="#{style}"></div>
49
+ <script type="text/javascript">
50
+ var #{variable} = new ApexCharts(document.querySelector("##{element_id}"), #{@options.to_json});
51
+ #{variable}.render();
52
+ </script>
53
+ HTML
54
+ end
55
+
56
+ def method_missing method, *args, &block
57
+ @bindings.send method, *args, &block
58
+ end
59
+
60
+ private
61
+
62
+ def build_instance_variables
63
+ (@bindings.instance_variables - instance_variables).each do |i|
64
+ instance_variable_set(i, @bindings.instance_variable_get(i))
65
+ end
66
+ end
67
+
68
+ def build_options(x_sample, options)
69
+ Apexcharts::OptionsBuilder.new(x_sample, options).built
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,7 @@
1
+ module Apexcharts
2
+ class ScatterChart < CartesianChart
3
+ def chart_type
4
+ 'scatter'
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,61 @@
1
+ module Apexcharts
2
+ class SyncingChart
3
+ def initialize options={}, bindings, &block
4
+ @bindings = bindings
5
+ @html = ""
6
+ build_instance_variables
7
+ @options = options
8
+ instance_eval &block
9
+
10
+ @options[:annotations] = @_annotations if @_annotations
11
+ end
12
+
13
+ def line_chart data, options={}, &block
14
+ options[:id] = apexcharts_id
15
+ @html += LineChart.new(data, @options.merge(options), &block).render
16
+ end
17
+
18
+ def area_chart data, options={}, &block
19
+ options[:id] = apexcharts_id
20
+ @html += AreaChart.new(data, @options.merge(options), &block).render
21
+ end
22
+
23
+ def bar_chart data, options={}, &block
24
+ options[:id] = apexcharts_id
25
+ @html += BarChart.new(data, @options.merge(options), &block).render
26
+ end
27
+
28
+ def column_chart data, options={}, &block
29
+ options[:id] = apexcharts_id
30
+ @html += ColumnChart.new(data, @options.merge(options), &block).render
31
+ end
32
+
33
+ def scatter_chart data, options={}, &block
34
+ options[:id] = apexcharts_id
35
+ @html += ScatterChart.new(data, @options.merge(options), &block).render
36
+ end
37
+
38
+ def mixed_chart options={}, &block
39
+ options[:id] = apexcharts_id
40
+ bindings = eval "self", block.binding
41
+ @html += MixedChart.new(@options.merge(options), bindings, &block).render
42
+ end
43
+ alias_method :combo_chart, :mixed_chart
44
+
45
+ def render
46
+ @html
47
+ end
48
+
49
+ def method_missing method, *args, &block
50
+ @bindings.send method, *args, &block
51
+ end
52
+
53
+ private
54
+
55
+ def build_instance_variables
56
+ (@bindings.instance_variables - instance_variables).each do |i|
57
+ instance_variable_set(i, @bindings.instance_variable_get(i))
58
+ end
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,8 @@
1
+ require_relative 'charts/cartesian'
2
+ require_relative 'charts/line'
3
+ require_relative 'charts/area'
4
+ require_relative 'charts/bar'
5
+ require_relative 'charts/column'
6
+ require_relative 'charts/scatter'
7
+ require_relative 'charts/mixed'
8
+ require_relative 'charts/syncing'
@@ -0,0 +1,66 @@
1
+ require_relative 'series'
2
+ require_relative 'options_builder'
3
+ require_relative 'utils'
4
+ require_relative 'charts'
5
+
6
+ module Apexcharts
7
+ module Helper
8
+ def line_chart data, options={}, &block
9
+ options[:id] ||= apexcharts_id
10
+ draw_chart(LineChart.new(data, options, &block))
11
+ end
12
+
13
+ def area_chart data, options={}, &block
14
+ options[:id] ||= apexcharts_id
15
+ draw_chart(AreaChart.new(data, options, &block))
16
+ end
17
+
18
+ def column_chart data, options={}, &block
19
+ options[:id] ||= apexcharts_id
20
+ draw_chart(ColumnChart.new(data, options, &block))
21
+ end
22
+
23
+ def bar_chart data, options={}, &block
24
+ options[:id] ||= apexcharts_id
25
+ draw_chart(BarChart.new(data, options, &block))
26
+ end
27
+
28
+ def scatter_chart data, options={}, &block
29
+ options[:id] ||= apexcharts_id
30
+ draw_chart(ScatterChart.new(data, options, &block))
31
+ end
32
+
33
+ def mixed_chart options={}, &block
34
+ options[:id] ||= apexcharts_id
35
+ bindings = eval "self", block.binding
36
+ draw_chart(MixedChart.new(options, bindings, &block))
37
+ end
38
+ alias_method :combo_chart, :mixed_chart
39
+
40
+ def syncing_chart options={}, &block
41
+ options[:group] ||= apexcharts_group
42
+ bindings = eval "self", block.binding
43
+ draw_chart(SyncingChart.new(options, bindings, &block))
44
+ end
45
+ alias_method :synchronized_chart, :syncing_chart
46
+
47
+ private
48
+
49
+ def draw_chart chart
50
+ chart = chart.render
51
+ chart.respond_to?(:html_safe) ? chart.html_safe : chart
52
+ end
53
+
54
+ def apexcharts_id
55
+ @_apexcharts_id ||= 0
56
+ @_apexcharts_id += 1
57
+ "chart-#{@_apexcharts_id}"
58
+ end
59
+
60
+ def apexcharts_group
61
+ @_apexcharts_group ||= 0
62
+ @_apexcharts_group += 1
63
+ "chart-group-#{@_apexcharts_group}"
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,10 @@
1
+ module Apexcharts
2
+ class AnnotationsOptions < ::SmartKv
3
+ optional *%i[
4
+ points
5
+ position
6
+ xaxis
7
+ yaxis
8
+ ]
9
+ end
10
+ end
@@ -0,0 +1,17 @@
1
+ module Apexcharts
2
+ class AxisOptions < ::SmartKv
3
+ optional *%i[
4
+ axis_border axisBorder
5
+ axis_ticks axisTicks
6
+ crosshairs
7
+ floating
8
+ labels
9
+ max
10
+ min
11
+ tick_amount tickAmount
12
+ title
13
+ tooltip
14
+ type
15
+ ]
16
+ end
17
+ end
@@ -0,0 +1,24 @@
1
+ module Apexcharts
2
+ class ChartOptions < ::SmartKv
3
+ optional *%i[ animations
4
+ background
5
+ brush
6
+ default_locale defaultLocale
7
+ drop_shadow dropShadow
8
+ events
9
+ font_family fontFamily
10
+ fore_color foreColor
11
+ height
12
+ id
13
+ locales
14
+ selection
15
+ sparkline
16
+ stack_type stackType
17
+ stacked
18
+ toolbar
19
+ type
20
+ width
21
+ zoom
22
+ ]
23
+ end
24
+ end
@@ -0,0 +1,12 @@
1
+ module Apexcharts
2
+ class DataLabelsOptions < ::SmartKv
3
+ optional *%i[
4
+ drop_shadow dropShadow
5
+ enabled
6
+ offset_x offsetX
7
+ offset_y offsetY
8
+ style
9
+ text_anchor textAnchor
10
+ ]
11
+ end
12
+ end
@@ -0,0 +1,10 @@
1
+ module Apexcharts
2
+ class DivAttributes < ::SmartKv
3
+ optional *%i[
4
+ class
5
+ id
6
+ style
7
+ ]
8
+ end
9
+ end
10
+
@@ -0,0 +1,12 @@
1
+ module Apexcharts
2
+ class FillOptions < ::SmartKv
3
+ optional *%i[
4
+ colors
5
+ gradient
6
+ image
7
+ opacity
8
+ pattern
9
+ type
10
+ ]
11
+ end
12
+ end
@@ -0,0 +1,15 @@
1
+ module Apexcharts
2
+ class GridOptions < ::SmartKv
3
+ optional *%i[
4
+ border_color borderColor
5
+ column
6
+ padding
7
+ position
8
+ row
9
+ show
10
+ stroke_dash_array strokeDashArray
11
+ xaxis
12
+ yaxis
13
+ ]
14
+ end
15
+ end