package {$package_name};
use Moose;
use MooseX::ExtraArgs;
use Moose::Util::TypeConstraints qw(enum union);
if (!defined Moose::Util::TypeConstraints::find_type_constraint('PDL')) \{
    Moose::Util::TypeConstraints::type('PDL');
\}

{$used_modules}

# VERSION

# ABSTRACT: {$description}

=encoding utf-8

=head1 SYNOPSIS

# EXAMPLE: examples/traces/{$trace_name}.pl

=head1 DESCRIPTION

{$description}

Screenshot of the above example:

=begin HTML

<p>
<img src="https://raw.githubusercontent.com/pablrod/p5-Chart-Plotly/master/examples/traces/{$trace_name}.png" alt="Screenshot of the above example">
</p>

=end HTML

=begin markdown

![Screenshot of the above example](https://raw.githubusercontent.com/pablrod/p5-Chart-Plotly/master/examples/traces/{$trace_name}.png)

=end markdown

=begin HTML

<p>
<iframe src="https://raw.githubusercontent.com/pablrod/p5-Chart-Plotly/master/examples/traces/{$trace_name}.html" style="border:none;" width="80%" height="520"></iframe>
</p>

=end HTML

This file has been autogenerated from the official plotly.js source.

If you like Plotly, please support them: L<https://plot.ly/> 
Open source announcement: L<https://plot.ly/javascript/open-source-announcement/>

Full reference: L<https://plot.ly/javascript/reference/#{$trace_name}>

=head1 DISCLAIMER

This is an unofficial Plotly Perl module. Currently I'm not affiliated in any way with Plotly. 
But I think plotly.js is a great library and I want to use it with perl.

=head1 METHODS

=cut

=head2 TO_JSON

Serialize the trace to JSON. This method should be called only by L<JSON> serializer.

=cut

sub TO_JSON \{
    my $self = shift; 
    my $extra_args = $self->extra_args // \{\};
    my $meta = $self->meta;
    my %hash = %$self;
    for my $name (sort keys %hash) \{
        my $attr = $meta->get_attribute($name);
        if (defined $attr) \{
            my $value = $hash\{$name\};
            my $type = $attr->type_constraint;
            if ($type && $type->equals('Bool')) \{
                $hash\{$name\} = $value ? \1 : \ 0;
            \}
        \}
    \}
    my $plotly_meta = delete $hash\{'pmeta'\};
    if (defined $plotly_meta) \{
        $hash\{'meta'\} = $plotly_meta;
    \}
    %hash = (%hash, %$extra_args);
    delete $hash\{'extra_args'\};
    if ($self->can('type') && (!defined $hash\{'type'\})) \{
        $hash\{type\} = $self->type();
    \}
    return \%hash;
\}

=head2 type

Trace type.

=cut

sub type \{
	my @components = split(/::/, __PACKAGE__);
	return lc($components[-1]);
\}

=head1 ATTRIBUTES

=over

=cut