supercharts-bullet_train 1.3.0 → 1.3.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4e811c023b43cfac138f37ad0cab28985d10a22732cb31222d64ada7566f7e2f
4
- data.tar.gz: 129ebeb5e7114f83260850f5575292ca36fa93c4b8ae12af58c088a4245fdf47
3
+ metadata.gz: 52befa1216e7b527c464f2e21fa5e8c10f42703f64282d5277b9b2ae40c890fd
4
+ data.tar.gz: f4949e46bdb9b43a27b098b81afb725f27f6915a22521b86d56cbf99fc7bda05
5
5
  SHA512:
6
- metadata.gz: b0e757aa845f016496c787282abfee6ae47792de9d6bbca3b3c4b1b4b6495228423215614e5596652589c752b1a7a8b976efa22f6257eb02ae175b81ff4ede2b
7
- data.tar.gz: 3de0a84b61460b609434a1cca51016fc303943d4cefd0f49140e6b9fb225c473b45214d2f886823a33b1748a3195d2d58c8cc90a624d9faf99b2911be1c64b53
6
+ metadata.gz: ae2f208f61aa560202402b91350826eea940fb0ea2c9ffc80b52e4c0dd24a5cd293fe936970fca8f9b0c2b55e014f8ae5c677c39351a3a67ecad9fec9debd445
7
+ data.tar.gz: bea6b6562b908ff2186a683b7197a60dc55b08efa53ac2de251a61ced1642a4773d3f5a9a2a46bd1a7fb5a013906a65163c039570b9fd33de6cc47a1ec2e8896
data/README.md CHANGED
@@ -1,241 +1,85 @@
1
- # Supercharts for Bullet Train
1
+ # DEPRECATED: Supercharts for Bullet Train
2
2
 
3
3
  Add charts to a [Bullet Train Rails app][bullet-train] the same way you super-scaffold a resource.
4
4
 
5
- ## Installation
5
+ ## Removing This Dependency, Run it Locally
6
6
 
7
- ### Start a Bullet Train app
7
+ This package is no longer maintained, but you can still continue to drive the charts you currently have locally.
8
8
 
9
- First, you'll need to use the [Bullet Train Starter Kit][bullet-train], which is free, to build your app. It makes for a great sidecar analytics app with OAuth logins to another app of yours, easy configuration of roles and permissions, and a really quick way to build apps. You'll love it.
9
+ To run everything locally and remove the dependency, eject the view partials and JavaScript components with this command:
10
10
 
11
- #### Using it in a non-Bullet Train Rails app
11
+ bin/rails supercharts:eject_all
12
12
 
13
- If you have a non-Bullet Train app, you can still use Bullet Train to scaffold the chart to display information on the right model, and use that as inspiration on how to include that into your own app.
13
+ ## CHANGELOG
14
14
 
15
- #### Using it in an older version of Bullet Train
15
+ ### v1.3.1
16
16
 
17
- Supercharts only supports the [Bullet Train Starter Kit][bullet-train] split up into multiple gems and which uses Tailwind CSS. It's also optimized for the Light theme.
17
+ **Deprecate the package.**
18
18
 
19
- If you use an older version of Bullet Train for your app, you'll be pretty close. Your best bet is to still create a Bullet Train app using the [newer starter kit][bullet-train] (a prototype), re-create some of your real app's models and re-scaffold some of its controllers, and use Supercharts to scaffold a chart for you. It will be close to everything you need, and with some tweaks you'll be able to copy over the modified files into your older Bullet Train app.
19
+ ### v1.3.0
20
20
 
21
- ### Add the gem
21
+ **Support for Bullet Train's new theme colors, removes `darkPrimary` color**
22
22
 
23
- Add this line to your application's `Gemfile`:
23
+ Impact on your previously charts: the files within `views/shared` (skeleton, filters) will look different after upgrade and might generate Tailwind errors.
24
24
 
25
- ```ruby
26
- gem "supercharts-bullet_train"
27
- ```
25
+ Recommendation: Upgrade to this version at the same time you upgrade to the latest version of Bullet Train's light theme. Otherwise, your charts will look off or you might have Tailwind build errors. See the [PR in `bullet_train-core` for the changes and rationale](https://github.com/bullet-train-co/bullet_train-core/pull/106).
28
26
 
29
- And then execute:
30
- ```bash
31
- $ bundle
32
- ```
27
+ Alternative: make local copies of the partials in `views/shared/` before you upgrade.
33
28
 
34
- Or install it yourself as:
35
- ```bash
36
- $ gem install supercharts-bullet_train
37
- ```
29
+ Look for:
38
30
 
39
- ### Add the `groupdate` gem
31
+ * Replacing of `darkPrimary` with `slate`
32
+ * A darker background color in dark mode. That's because Bullet Train uses `bg-opacity-50` to get a half-way background Tailwind color increment, which doesn't work with the point border color.
40
33
 
41
- You'll also need the `groupdate` gem.
34
+ Also included:
42
35
 
43
- Add this line to your application's `Gemfile`:
36
+ * New recommended approach for seeding test data using a `db/seeds/` file. See the "Generate some test data" above.
44
37
 
45
- ```ruby
46
- gem "groupdate"
47
- ```
38
+ ### v1.2.0
48
39
 
49
- And then execute:
50
- ```bash
51
- $ bundle
52
- ```
40
+ **Locale strings**
53
41
 
54
- Or install it yourself as:
55
- ```bash
56
- $ gem install groupdate
57
- ```
42
+ No impact to your previously-scaffolded charts by applying this update, but the next charts you scaffold will have the changes.
58
43
 
59
- ### Add the npm package
44
+ Recommendation: Re-run the scaffold command or compare the diff against your chart to apply the changes.
60
45
 
61
- The gem gives you all the Ruby- and Rails-specific parts, but you'll also need some JavaScript (Stimulus) components to display the chart. That's done by adding an npm package.
46
+ Look for:
62
47
 
63
- ```bash
64
- yarn add @supercharts/supercharts-bullet-train
65
- ```
48
+ * new strings added to your resource's `en.yml` file. A new one is created if not already present.
49
+ * the scaffolded ERB now references all those new locale strings for a cleaner code.
66
50
 
67
- In your `app/javascript/controllers/index.js`, add the following lines:
51
+ ### v1.1.0
68
52
 
69
- ```js
70
- // near the top
71
- import { controllerDefinitions as superchartsControllers } from "@supercharts/supercharts-bullet-train"
53
+ **Fixes to time ranges and code optimizations.**
72
54
 
73
- // after application = Application.start()
74
- application.load(superchartsControllers)
75
- ```
55
+ No impact to your previously-scaffolded charts by applying this update, but the next charts you scaffold will have the new changes.
76
56
 
77
- You're all set.
57
+ Recommendation: Re-run the scaffold command or compare the diff against your chart to apply the changes.
78
58
 
79
- ## Usage
59
+ Look for:
80
60
 
81
- Let's say you already have a ClickThrough model, storing click-throughs from campaigns. For now we'll just say it click_throughs have a `team_id` (in Bullet Train apps, your account is associated with a team).
61
+ * changes in the time ranges
62
+ * the variable no longer called `data`, but instead called `series`. There's a couple places where that's changed.
82
63
 
83
- You'd like a chart to appear in your Dashboard, showing how many click-throughs per day (so we'll group by day), associated with your Team.
64
+ ### v1.0.3
84
65
 
85
- ```bash
86
- bin/super-scaffold supercharts:chart ClickThrough Team
87
- ```
66
+ **Bug fixes and small visual tweaks.**
88
67
 
89
- This will generated some new files and modify some files like inserting a `turbo_frame` in your `team#show` file, modifying your `roles.yml` file, etc. Look over the changes and commit when satisfied.
68
+ No impact to your previously-scaffolded charts by applying this update, but the next charts you scaffold will have the bug fixes.
90
69
 
91
- ### Generate some test data
70
+ Recommendation: Re-run the scaffold command or compare the diff against your chart to apply the bug fixes.
92
71
 
93
- We'll use a new seed file create `click_throughs` with random-looking `created_at` properties (in this case creating a log normal spike and long-tail curve typical of a launch).
72
+ Look for:
94
73
 
95
- ```ruby
96
- # db/seeds/click_throughs.rb
97
- team = Team.first
74
+ * there's now a nowrap on the date when the daily summary is shown
75
+ * `first: true` being removed from the second filter
76
+ * `var(--chart-height)""` (I mean)
77
+ * correctly use `value_formatted` instead of `value` for the formatted value column
78
+ * look for "Week of" in the formatted date when the weekly view is shown
98
79
 
99
- if team.present?
100
- ClickThrough.delete_all # start fresh
101
-
102
- # Rubystats::LognormalDistribution.new(1, 4.0)
103
- sample_logn_days_since_launch = [0.374752478249304,2.573715367349214,8.205364533794372,0.018758139772852223,0.007503724554433451,9.795277947976652,8.920746829981699,0.10551189188869997,1.764721845714895,0.16013475895174034,0.09656162234229956,1.051545673721908,3.4605465909422444,0.5284662248320162,12.552059342378902,0.802742590175781,0.02109366834525422,0.02664778128443366,4.390318514353362,0.09774971155444112,1.2046433918447472,6.842861969154294,0.011979372791258703,0.064030764714403,0.254580889613002,0.8375254371675241,6.645595256049555,0.004578324225909655,7.645897327323974,3.8198662350854358,2.5433159804484093,12.23258356052949,8.590508575839966,0.36652090412334615,0.11151312341555021,0.17233489061676868,0.2146532779238352,0.14245752689762017,0.19342953572076568,0.1529907988439447,0.00750514011797885,0.4518938917044475,2.824609604776437,0.9950891711469877,1.0656326056125578,0.1261305417548888,0.009966388079746133,11.001041702449946,0.0013675811570916427,0.02367451456093704,0.01894224395588477,4.440315660471336,0.09493622122995193,0.07657312652331208,1.4874835063144172,0.13842079252030612,2.1017802510726815,4.196227775076141,0.054093691138304485,0.0051252791552137186,3.0245345093639773,0.00032997376067659843,0.006931535931463956,1.78040031800141,1.2156342429038396,1.7978965235819222,0.818322573101528,0.08369936871534746,0.16412718021762976,9.844260419603875,5.14537997872604,10.644277259959916,2.516432067417657,0.02670462498452867,0.009043612354757327,2.481241138462057,1.9882680498827123,0.11922535105626798,0.20284489863820995,0.1274031773301022,0.35779282006366203,1.0571276594384351,1.0249771657735456,0.6552185634235514,0.7524783523736271,0.2539575382334551,0.5439132099545871]
104
-
105
- sample_logn_days_since_launch.each do |days_offset|
106
- created_at = 2.weeks.ago + days_offset.days
107
-
108
- team.click_throughs.create!(created_at: created_at)
109
- end
110
- end
111
- ```
80
+ ### v1.0.0
112
81
 
113
- Then run:
114
-
115
- ```sh
116
- bin/rails r db/seeds/click_throughs.rb
117
- ```
118
-
119
- Visit your app in `localhost:3000` and you should see your new chart.
120
-
121
- ![Example chart inside a Bullet Train app showing Click Throughs in the last 30 days](https://user-images.githubusercontent.com/104179/222187945-1ff4a8c5-96d1-40e8-b421-d48c6cc4425d.gif)
122
-
123
- ## Modifying the chart
124
-
125
- ### The smallest change: switching to a bar chart
126
-
127
- Changing to a bar chart is super easy: just change the following line in your `show.html.erb`
128
-
129
- From:
130
-
131
- ```html
132
- data-superchart-type-value="line"
133
- ```
134
-
135
- To:
136
-
137
- ```html
138
- data-superchart-type-value="bar"
139
- ```
140
-
141
- ### Other chart types: new Stimulus controller
142
-
143
- Under the hood, the default Superchart is built using a chart.js instance wrapped inside a Stimulus controller.
144
-
145
- For the following types of changes, you'll need to create your own Stimulus controller, duplicating the main `superchart_controller.js` found in this repo.
146
-
147
- * Changing to a multi-line, stacked area or stacked bar chart
148
- * Changing to a radial chart, a scattered plot, a box plot or any other chart
149
-
150
- ### Any other change: it depends
151
-
152
- If you just want to make aesthetic changes, you can change the following css variables found at the top of your scaffolded `show.html.erb`. In this case, these are all TailwindCSS classes that set the appropriate custom CSS properties scoped to just that chart.
153
-
154
- ```html
155
- [--axis-color:theme('colors.gray.300')] dark:[--axis-color:theme('colors.slate.500')]
156
- [--grid-color:theme('colors.gray.100')] dark:[--grid-color:theme('colors.slate.800')]
157
- [--line-color:#a86fe7]
158
- [--point-color:theme('colors.gray.800')] dark:[--point-color:theme('colors.white')]
159
- [--point-stroke-color:theme('colors.white')] dark:[--point-stroke-color:theme('colors.slate.700')]
160
- [--point-stroke-color-hover:theme('colors.gray.100')] dark:[--point-stroke-color-hover:theme('colors.slate.800')]
161
- [--bar-fill-color:var(--line-color)]
162
- [--bar-hover-fill-color:var(--point-color)]
163
- [--point-radius:4] md:[--point-radius:6]
164
- [--point-hover-radius:6] md:[--point-hover-radius:10]
165
- [--point-border-width:3] md:[--point-border-width:4]
166
- [--point-hover-border-width:2] md:[--point-hover-border-width:3]
167
- ```
168
-
169
- If you'd like to override some chart.js options, you can do so in the `chartjsOptions` element:
170
-
171
- ```html
172
- <!-- This can only include valid JSON, but no functions. This is not code that will be evaluated -->
173
- <template data-superchart-target="chartjsOptions">
174
- {
175
- "borderColor": "#000"
176
- }
177
- </template>
178
- ```
179
-
180
- Note that to make this work with both light and dark mode, you might as well use a custom CSS property, which Supercharts lets you do (but chart.js does not support by default):
181
-
182
- ```html
183
- <!-- cssVar is a special sub-property which Supercharts will properly interpret as the value of the custom CSS property you set it to -->
184
- <template data-superchart-target="chartjsOptions">
185
- {
186
- "borderColor": {
187
- "cssVar": "--my-custom-accent-color"
188
- }
189
- }
190
- </template>
191
- ```
192
-
193
- But if the changes you'd like to make is in the list below, you'll need to make your own custom Stimulus controller:
194
-
195
- * The chart.js options you'd like to override includes JavaScript code (e.g. callback functions on properties)
196
- * Including more than one series (multi-line chart, etc)
197
- * Including annotations
198
- * Including a custom hover overlay
199
- * You need to change a chart.js option that's deeply nested (e.g. `scales.x.grid: false`) because it'll override all options in the top option
200
-
201
- ## Contributing
202
-
203
- ### Local development
204
-
205
- * Create a Bullet Train app
206
- * Use the instructions above to include the required gems and the npm package
207
- * Create a `local/` directory into which you'll clone a copy of this repo:
208
-
209
- ```bash
210
- mkdir local
211
- cd local/
212
- git clone <this REPO URL>
213
- ```
214
-
215
- * In your Gemfile, change the gem to use the local path:
216
-
217
- ```ruby
218
- gem "supercharts-bullet_train", path: "local/supercharts-bullet_train"
219
- ```
220
-
221
- Then do
222
-
223
- ```bash
224
- bundle install
225
- ```
226
-
227
- * For modifying the JavaScript, Stimulus Controllers, you'll need to install `yalc` and use it to point to your local copy of the npm package:
228
-
229
- ```bash
230
- yarn global add yalc
231
- cd local/supercharts-bullet_train
232
- yarn build # build the local changes
233
- yalc push # publish the npm package locally on your own computer
234
- cd ../../ # go back to the bullet-train project
235
- yalc link @supercharts/supercharts-bullet-train
236
- cd local/supercharts-bullet_train
237
- yarn watch # continually watch for JavaScript changes, re-build the npm package and push to the Bullet Train app
238
- ```
82
+ **Initial launch**
239
83
 
240
84
  ## License
241
85
  The gem and npm package are available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
@@ -1,5 +1,5 @@
1
1
  module BulletTrain
2
2
  module Supercharts
3
- VERSION = "1.3.0"
3
+ VERSION = "1.3.1"
4
4
  end
5
5
  end
@@ -1,13 +1,21 @@
1
- require "bullet_train/supercharts/version"
2
- require "bullet_train/supercharts/engine"
3
- require "scaffolding"
4
- require "scaffolding/transformer"
5
- require "scaffolding/block_manipulator"
6
- require "scaffolding/routes_file_manipulator"
7
- require "bullet_train/supercharts/scaffolders/chart_scaffolder"
1
+ # Issue deprecation warning when this gem is loaded
2
+ unless defined?(BulletTrain::Supercharts::DEPRECATION_WARNING_SHOWN)
3
+ warn "⚠️ DEPRECATION WARNING: The supercharts-bullet_train gem is deprecated. Please eject the files locally using `bin/rails supercharts:eject_all`. See README for details."
4
+ end
5
+
6
+ # This gem is deprecated. All scaffolders are disabled.
7
+ # require "bullet_train/supercharts/version"
8
+ # require "bullet_train/supercharts/engine"
9
+ # require "scaffolding"
10
+ # require "scaffolding/transformer"
11
+ # require "scaffolding/block_manipulator"
12
+ # require "scaffolding/routes_file_manipulator"
13
+ # require "bullet_train/supercharts/scaffolders/chart_scaffolder"
8
14
 
9
15
  module BulletTrain
10
16
  module Supercharts
17
+ # Mark that the deprecation warning has been shown
18
+ DEPRECATION_WARNING_SHOWN = true
11
19
  # Your code goes here...
12
20
  end
13
21
  end
@@ -1,4 +1,449 @@
1
- # desc "Explaining what the task does"
2
- # task :bullet_train_start do
3
- # # Task goes here
4
- # end
1
+ # frozen_string_literal: true
2
+
3
+ # Rake task to remove supercharts dependencies from a Bullet Train application.
4
+ #
5
+ # This task:
6
+ # 1. Ejects all view partials from supercharts gems to local app/views/ unless
7
+ # a local variant already exists using the shared/path abstraction for Bullet Train
8
+ # 2. Ejects the @supercharts/supercharts-bullet-train npm package, then inventories
9
+ # which files require @supercharts/stimulus-base and ejects those dependencies
10
+ # 3. Includes any missing npm dependencies that these packages require by merging
11
+ # their dependencies from their package.json files
12
+ # 4. Removes the supercharts gem and npm packages from Gemfile and package.json
13
+ #
14
+ # Usage: bundle exec rake supercharts:eject_all
15
+ #
16
+ # After running this task:
17
+ # - Run `bundle install` to update Gemfile.lock
18
+ # - Run `yarn install` to update yarn.lock
19
+ # - Test your application thoroughly
20
+ # - Commit your changes
21
+
22
+ require 'json'
23
+ require 'fileutils'
24
+
25
+ namespace :supercharts do
26
+ desc "Remove supercharts dependencies by ejecting views and npm packages"
27
+ task eject_all: :environment do
28
+ puts "🚀 Starting removal of supercharts dependencies...".blue
29
+
30
+ # Step 1: Eject view partials that don't have local variants
31
+ eject_supercharts_view_partials
32
+
33
+ # Step 2: Eject JavaScript packages and update imports
34
+ eject_supercharts_js_packages
35
+
36
+ # Step 3: Remove gem and npm dependencies
37
+ remove_supercharts_from_dependencies
38
+
39
+ puts "✅ Supercharts dependency removal completed successfully!".green
40
+ puts ""
41
+ puts "Next steps:".yellow
42
+ puts "1. Run 'bundle install' to update Gemfile.lock"
43
+ puts "2. Run 'yarn install' to update yarn.lock"
44
+ puts "3. Test your application to ensure everything works correctly"
45
+ puts "4. Commit your changes"
46
+ end
47
+
48
+ private
49
+
50
+ def eject_supercharts_view_partials
51
+ puts "\n📂 Ejecting supercharts view partials...".blue
52
+
53
+ # Find the installed supercharts gem path
54
+ supercharts_gem_path = find_supercharts_gem_path
55
+
56
+ if supercharts_gem_path
57
+ puts " Found supercharts gem at: #{supercharts_gem_path}"
58
+
59
+ # Discover all view partials in the gem
60
+ supercharts_partials = discover_supercharts_partials(supercharts_gem_path)
61
+
62
+ if supercharts_partials.any?
63
+ puts " Found #{supercharts_partials.size} view partials to eject"
64
+
65
+ supercharts_partials.each do |partial_info|
66
+ partial_path = partial_info[:resolve_path]
67
+ gem_file_path = partial_info[:gem_file_path]
68
+ relative_path = partial_info[:relative_path]
69
+ local_path = Rails.root.join("app/views/#{relative_path}")
70
+
71
+ unless File.exist?(local_path)
72
+ puts " Ejecting #{relative_path}..."
73
+
74
+ # Create the local directory structure
75
+ FileUtils.mkdir_p(File.dirname(local_path))
76
+
77
+ # Copy the file from gem to local app
78
+ if File.exist?(gem_file_path)
79
+ # Add ejection comment to the top of the file
80
+ original_content = File.read(gem_file_path)
81
+ ejected_content = "<% # Ejected from supercharts-bullet_train gem %>\n\n#{original_content}"
82
+
83
+ File.write(local_path, ejected_content)
84
+ puts " ✅ Successfully ejected #{relative_path}".green
85
+ else
86
+ puts " ❌ Could not find source file: #{gem_file_path}".red
87
+ end
88
+ else
89
+ puts " ✅ #{relative_path} already exists locally, skipping".green
90
+ end
91
+ end
92
+ else
93
+ puts " ℹ️ No view partials found in supercharts gem".blue
94
+ end
95
+ else
96
+ puts " ⚠️ supercharts-bullet_train gem not found - skipping view partial ejection".yellow
97
+ end
98
+ end
99
+
100
+ def eject_supercharts_js_packages
101
+ puts "\n📦 Ejecting supercharts JavaScript packages...".blue
102
+
103
+ # Check if @supercharts/supercharts-bullet-train is imported
104
+ js_files = Dir.glob(Rails.root.join("app/javascript/**/*.js"))
105
+ supercharts_imported = js_files.any? do |file|
106
+ File.read(file).include?("@supercharts/supercharts-bullet-train")
107
+ end
108
+
109
+ if supercharts_imported
110
+ eject_supercharts_bullet_train_package
111
+ eject_stimulus_base_package
112
+ else
113
+ puts " ℹ️ No @supercharts imports found in JavaScript files".blue
114
+ end
115
+ end
116
+
117
+ def eject_supercharts_bullet_train_package
118
+ puts " Ejecting @supercharts/supercharts-bullet-train package..."
119
+
120
+ # Find the installed supercharts gem path
121
+ supercharts_gem_path = find_supercharts_gem_path
122
+
123
+ if supercharts_gem_path
124
+ # Create local directory for the ejected package
125
+ local_js_dir = Rails.root.join("app/javascript/supercharts")
126
+ FileUtils.mkdir_p(local_js_dir)
127
+
128
+ # Copy JavaScript files from the gem's JavaScript directory
129
+ source_js_dir = File.join(supercharts_gem_path, "app/javascript")
130
+
131
+ if Dir.exist?(source_js_dir)
132
+ FileUtils.cp_r("#{source_js_dir}/.", local_js_dir)
133
+ puts " ✅ Copied JavaScript files to app/javascript/supercharts/".green
134
+
135
+ # Update the import in app/javascript/controllers/index.js
136
+ update_supercharts_import
137
+
138
+ # Copy package.json dependencies from gem
139
+ merge_supercharts_dependencies(supercharts_gem_path)
140
+ else
141
+ puts " ❌ Could not find JavaScript files in supercharts gem".red
142
+ end
143
+ else
144
+ puts " ❌ Could not find supercharts-bullet_train gem".red
145
+ end
146
+ end
147
+
148
+ def eject_stimulus_base_package
149
+ puts " Inventorying files that require @supercharts/stimulus-base..."
150
+
151
+ # Find all files that import from @supercharts/stimulus-base
152
+ all_js_files = Dir.glob(Rails.root.join("app/javascript/**/*.js"))
153
+ files_requiring_stimulus_base = []
154
+
155
+ all_js_files.each do |file|
156
+ content = File.read(file)
157
+ if content.include?("@supercharts/stimulus-base")
158
+ files_requiring_stimulus_base << file
159
+ puts " 📋 Found dependency: #{File.basename(file)}"
160
+ end
161
+ end
162
+
163
+ if files_requiring_stimulus_base.any?
164
+ puts " Ejecting @supercharts/stimulus-base controllers..."
165
+
166
+ # Find the actual stimulus-base package
167
+ stimulus_base_path = find_stimulus_base_package
168
+
169
+ if stimulus_base_path
170
+ copy_stimulus_base_controllers(stimulus_base_path)
171
+ update_stimulus_base_imports(files_requiring_stimulus_base)
172
+ else
173
+ puts " ❌ Could not find @supercharts/stimulus-base package".red
174
+ puts " Please install it first: yarn add @supercharts/stimulus-base"
175
+ end
176
+ else
177
+ puts " ℹ️ No files require @supercharts/stimulus-base, skipping".blue
178
+ end
179
+ end
180
+
181
+ def find_stimulus_base_package
182
+ # Look for the package in node_modules
183
+ node_modules_path = Rails.root.join("node_modules/@supercharts/stimulus-base")
184
+ return node_modules_path if Dir.exist?(node_modules_path)
185
+
186
+ # Look for it in yarn cache or other locations
187
+ yarn_cache_output = `yarn cache dir 2>/dev/null`.chomp rescue nil
188
+ if yarn_cache_output && !yarn_cache_output.empty?
189
+ cached_package = Dir.glob("#{yarn_cache_output}/**/stimulus-base*").first
190
+ return cached_package if cached_package && Dir.exist?(cached_package)
191
+ end
192
+
193
+ nil
194
+ end
195
+
196
+ def copy_stimulus_base_controllers(source_path)
197
+ target_dir = Rails.root.join("app/javascript/stimulus-base")
198
+ FileUtils.mkdir_p(target_dir)
199
+
200
+ puts " Copying stimulus-base controllers from #{source_path}..."
201
+
202
+ # Look for src directory first, fall back to root level JS files
203
+ src_path = File.join(source_path, "src")
204
+
205
+ if Dir.exist?(src_path)
206
+ # Copy only the src files, but flatten them to the target directory
207
+ js_files = Dir.glob("#{src_path}/**/*.js")
208
+
209
+ if js_files.any?
210
+ js_files.each do |source_file|
211
+ # Calculate relative path within src directory
212
+ relative_path = source_file.sub("#{src_path}/", "")
213
+ target_file = File.join(target_dir, relative_path)
214
+
215
+ # Create target directory if needed
216
+ FileUtils.mkdir_p(File.dirname(target_file))
217
+
218
+ # Copy the file
219
+ FileUtils.cp(source_file, target_file)
220
+
221
+ # Fix common JavaScript syntax issues in ejected files
222
+ fix_javascript_syntax(target_file)
223
+
224
+ puts " ✅ Copied #{relative_path}".green
225
+ end
226
+ else
227
+ puts " ⚠️ No JavaScript files found in src directory".yellow
228
+ end
229
+ else
230
+ # Fall back to copying root level JS files (excluding dist)
231
+ js_files = Dir.glob("#{source_path}/*.js").reject { |f| f.include?('/dist/') }
232
+
233
+ if js_files.any?
234
+ js_files.each do |source_file|
235
+ filename = File.basename(source_file)
236
+ target_file = File.join(target_dir, filename)
237
+
238
+ # Copy the file
239
+ FileUtils.cp(source_file, target_file)
240
+
241
+ # Fix common JavaScript syntax issues in ejected files
242
+ fix_javascript_syntax(target_file)
243
+
244
+ puts " ✅ Copied #{filename}".green
245
+ end
246
+ else
247
+ puts " ⚠️ No JavaScript files found in stimulus-base package".yellow
248
+ end
249
+ end
250
+ end
251
+
252
+ def find_supercharts_gem_path
253
+ # Use bundler to find the gem path
254
+ begin
255
+ gem_path = `bundle show supercharts-bullet_train 2>/dev/null`.chomp
256
+ return gem_path if $?.success? && !gem_path.empty? && Dir.exist?(gem_path)
257
+ rescue
258
+ # Fall back to trying with gem command
259
+ end
260
+
261
+ # Fall back to using gem command
262
+ begin
263
+ gem_path = `gem which supercharts-bullet_train 2>/dev/null`.chomp
264
+ if !gem_path.empty?
265
+ # gem which returns path to a file, we want the gem root
266
+ gem_root = gem_path.split('/lib/').first
267
+ return gem_root if Dir.exist?(gem_root)
268
+ end
269
+ rescue
270
+ # Ignore errors
271
+ end
272
+
273
+ nil
274
+ end
275
+
276
+ def discover_supercharts_partials(gem_path)
277
+ partials = []
278
+
279
+ # Look for view files in the gem
280
+ views_path = File.join(gem_path, "app/views")
281
+
282
+ if Dir.exist?(views_path)
283
+ # Find all .erb files (both partials and regular views)
284
+ Dir.glob("#{views_path}/**/*.html.erb").each do |view_file|
285
+ # Convert absolute path to relative path
286
+ relative_path = view_file.sub("#{views_path}/", "")
287
+
288
+ # Skip super scaffolding partials - these are templates for code generation
289
+ next if relative_path.include?('/scaffolding/')
290
+
291
+ # For partials (files starting with _), remove the underscore for the resolve path
292
+ # For regular views, keep the name as is
293
+ if File.basename(view_file).start_with?('_')
294
+ # e.g., "shared/supercharts/_chart_skeleton.html.erb" becomes "shared/supercharts/chart_skeleton"
295
+ resolve_path = relative_path.gsub(/\/_([^\/]+)\.html\.erb$/, '/\1')
296
+ else
297
+ # e.g., "shared/supercharts/show.html.erb" becomes "shared/supercharts/show"
298
+ resolve_path = relative_path.gsub(/\.html\.erb$/, '')
299
+ end
300
+
301
+ partials << {
302
+ resolve_path: resolve_path,
303
+ gem_file_path: view_file,
304
+ relative_path: relative_path
305
+ }
306
+ end
307
+ end
308
+
309
+ partials.sort_by { |p| p[:resolve_path] }
310
+ end
311
+
312
+ def fix_javascript_syntax(file_path)
313
+
314
+ return unless File.extname(file_path) == '.js'
315
+
316
+ content = File.read(file_path)
317
+
318
+ # Fix incorrect export syntax like "export Chartjs from" to "export { default as Chartjs } from"
319
+ updated_content = content.gsub(
320
+ /^export\s+([A-Z][a-zA-Z0-9]*)\s+from\s+/,
321
+ 'export { default as \1 } from '
322
+ )
323
+
324
+ # Only write if content changed
325
+ if content != updated_content
326
+ File.write(file_path, updated_content)
327
+ end
328
+ end
329
+
330
+ def update_supercharts_import
331
+ index_file = Rails.root.join("app/javascript/controllers/index.js")
332
+ return unless File.exist?(index_file)
333
+
334
+ content = File.read(index_file)
335
+ updated_content = content.gsub(
336
+ 'import { controllerDefinitions as superchartsControllers } from "@supercharts/supercharts-bullet-train"',
337
+ 'import { controllerDefinitions as superchartsControllers } from "../supercharts"'
338
+ )
339
+
340
+ if content != updated_content
341
+ File.write(index_file, updated_content)
342
+ puts " ✅ Updated import in app/javascript/controllers/index.js".green
343
+ end
344
+ end
345
+
346
+ def update_stimulus_base_imports(files_requiring_stimulus_base)
347
+ files_requiring_stimulus_base.each do |controller_file|
348
+ content = File.read(controller_file)
349
+
350
+ # Calculate relative path from this file to the stimulus-base directory
351
+ file_dir = File.dirname(controller_file)
352
+ relative_path = Pathname.new(Rails.root.join("app/javascript/stimulus-base")).relative_path_from(Pathname.new(file_dir))
353
+
354
+ # Replace the npm package import with local relative path
355
+ updated_content = content.gsub(
356
+ '@supercharts/stimulus-base',
357
+ relative_path.to_s
358
+ )
359
+
360
+ if content != updated_content
361
+ File.write(controller_file, updated_content)
362
+ puts " ✅ Updated stimulus-base import to local path in #{File.basename(controller_file)}".green
363
+ end
364
+ end
365
+ end
366
+
367
+ def merge_supercharts_dependencies(gem_path)
368
+ # Use gem path if provided, otherwise fall back to local directory for backward compatibility
369
+ supercharts_package_json = File.join(gem_path, "package.json")
370
+
371
+ app_package_json = Rails.root.join("package.json")
372
+
373
+ return unless File.exist?(supercharts_package_json) && File.exist?(app_package_json)
374
+
375
+ supercharts_deps = JSON.parse(File.read(supercharts_package_json))
376
+ app_deps = JSON.parse(File.read(app_package_json))
377
+
378
+ # Merge dependencies from supercharts package, excluding @supercharts packages
379
+ deps_to_merge = supercharts_deps["dependencies"]&.reject { |name, _| name.start_with?("@supercharts") } || {}
380
+
381
+ # Add Chart.js if we're creating stubs that need it
382
+ unless app_deps["dependencies"]&.key?("chart.js")
383
+ deps_to_merge["chart.js"] = "^4.0.0"
384
+ end
385
+
386
+ deps_to_merge.each do |dep_name, version|
387
+ unless app_deps["dependencies"]&.key?(dep_name)
388
+ app_deps["dependencies"] ||= {}
389
+ app_deps["dependencies"][dep_name] = version
390
+ puts " ✅ Added dependency: #{dep_name}@#{version}".green
391
+ end
392
+ end
393
+
394
+ File.write(app_package_json, JSON.pretty_generate(app_deps))
395
+ puts " ✅ Updated package.json with supercharts dependencies".green
396
+ end
397
+
398
+ def remove_supercharts_from_dependencies
399
+ puts "\n🗑️ Removing supercharts from dependencies...".blue
400
+
401
+ # Remove from Gemfile
402
+ remove_supercharts_gem
403
+
404
+ # Remove from package.json
405
+ remove_supercharts_npm_packages
406
+ end
407
+
408
+ def remove_supercharts_gem
409
+ gemfile_path = Rails.root.join("Gemfile")
410
+ return unless File.exist?(gemfile_path)
411
+
412
+ lines = File.readlines(gemfile_path)
413
+ updated_lines = lines.reject { |line| line.match?(/gem\s+["']supercharts-bullet_train["']/) }
414
+
415
+ if lines.size != updated_lines.size
416
+ File.write(gemfile_path, updated_lines.join)
417
+ puts " ✅ Removed supercharts-bullet_train gem from Gemfile".green
418
+ else
419
+ puts " ℹ️ supercharts-bullet_train gem not found in Gemfile".blue
420
+ end
421
+ end
422
+
423
+ def remove_supercharts_npm_packages
424
+ package_json_path = Rails.root.join("package.json")
425
+ return unless File.exist?(package_json_path)
426
+
427
+ package_data = JSON.parse(File.read(package_json_path))
428
+
429
+ # Remove @supercharts packages
430
+ supercharts_packages = ["@supercharts/supercharts-bullet-train", "@supercharts/stimulus-base"]
431
+ removed_packages = []
432
+
433
+ supercharts_packages.each do |package|
434
+ if package_data["dependencies"]&.delete(package)
435
+ removed_packages << package
436
+ end
437
+ if package_data["devDependencies"]&.delete(package)
438
+ removed_packages << package
439
+ end
440
+ end
441
+
442
+ if removed_packages.any?
443
+ File.write(package_json_path, JSON.pretty_generate(package_data))
444
+ puts " ✅ Removed npm packages: #{removed_packages.join(', ')}".green
445
+ else
446
+ puts " ℹ️ No @supercharts npm packages found to remove".blue
447
+ end
448
+ end
449
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: supercharts-bullet_train
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 1.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pascal Laliberté
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-03-01 00:00:00.000000000 Z
11
+ date: 2025-09-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -36,14 +36,6 @@ files:
36
36
  - README.md
37
37
  - Rakefile
38
38
  - app/assets/config/bullet_train_supercharts_manifest.js
39
- - app/assets/javascripts/supercharts-bullet-train.esm.js
40
- - app/assets/javascripts/supercharts-bullet-train.esm.js.map
41
- - app/assets/javascripts/supercharts-bullet-train.js
42
- - app/assets/javascripts/supercharts-bullet-train.js.map
43
- - app/assets/javascripts/supercharts-bullet-train.modern.mjs
44
- - app/assets/javascripts/supercharts-bullet-train.modern.mjs.map
45
- - app/assets/javascripts/supercharts-bullet-train.umd.js
46
- - app/assets/javascripts/supercharts-bullet-train.umd.js.map
47
39
  - app/javascript/controllers/index.js
48
40
  - app/javascript/controllers/superchart_controller.js
49
41
  - app/javascript/controllers/supercharts/describable_controller.js
@@ -71,7 +63,8 @@ licenses:
71
63
  metadata:
72
64
  homepage_uri: https://github.com/supercharts-dev/supercharts-bullet_train
73
65
  source_code_uri: https://github.com/supercharts-dev/supercharts-bullet_train
74
- post_install_message:
66
+ post_install_message: "⚠️ DEPRECATED: This package is retired. Eject files locally.
67
+ See README."
75
68
  rdoc_options: []
76
69
  require_paths:
77
70
  - lib
@@ -1,2 +0,0 @@
1
- import{SuperchartChartjsController as t,parseContentsAsCsv as e,parseContentsAsJSON as r}from"@supercharts/stimulus-base";import{Controller as a}from"@hotwired/stimulus";function s(t){const e=(t.match(/^(?:\.\/)?(.+)(?:[_-]controller\..+?)$/)||[])[1];if(e)return e.replace(/_/g,"-").replace(/\//g,"--")}class i extends t{connect(){super.connect()}updateChart(){super.updateChart()}describeDataForX(t){var e,r;const a=(null==t||null==(e=t.tooltip)?void 0:e.dataPoints[0]).dataIndex;this.dispatch("description-requested",{detail:{label:this.csvData[a][this.csvData.columns[1]],value:this.csvData[a][this.csvData.columns[3]],show:!(null==t||null==(r=t.tooltip)||!r.opacity)}})}parseCsvData(){this.csvData=e(this.csvDataTarget)}get chartjsData(){return this.hasChartJsDataTarget?super.chartjsData():this.hasCsvDataTarget?(this.parseCsvData(),{labels:this.csvData.map(t=>t[this.csvData.columns[0]]),datasets:[{type:this.typeValue,label:"Value",data:this.csvData.map(t=>t[this.csvData.columns[2]])}]}):(console.warn("The chart needs data in a in a csv target or in a chartjsData target (in chart.js JSON)"),[])}get chartjsOptions(){let t={...this.defaultOptions};return this.hasChartjsOptionsTarget&&(t={...t,...r(this.chartjsOptionsTarget)}),this.parseForCssVars(t)}get animationOptions(){return!1!==this.runAnimations&&{x:{type:"number",easing:"linear",duration:this.delayBetweenPoints,from:NaN,delay:t=>"data"!==t.type||t.xStarted?0:(t.xStarted=!0,t.index*this.delayBetweenPoints)},y:{type:"number",easing:"linear",duration:this.delayBetweenPoints,from:o,delay:t=>"data"!==t.type||t.yStarted?0:(t.yStarted=!0,t.index*this.delayBetweenPoints)}}}get defaultOptions(){const t=this.cssPropertyValue("--axis-color");return{maintainAspectRatio:!1,animation:this.animationOptions,interaction:{mode:"index",intersect:!1},resizeDelay:200,onResize:this.handleResize.bind(this),plugins:{legend:{display:!1},tooltip:{enabled:!1,position:"nearest",external:this.describeDataForX.bind(this)}},color:t,fill:!1,lineTension:.3,borderColor:this.cssPropertyValue("--line-color"),borderCapStyle:"butt",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",pointBorderColor:this.cssPropertyValue("--point-stroke-color"),pointBackgroundColor:this.cssPropertyValue("--point-color"),pointHoverBackgroundColor:this.cssPropertyValue("--point-color"),pointHoverBorderColor:this.cssPropertyValue("--point-stroke-color-hover"),pointRadius:Number(this.cssPropertyValue("--point-radius")),pointHoverRadius:Number(this.cssPropertyValue("--point-hover-radius")),pointBorderWidth:Number(this.cssPropertyValue("--point-border-width")),pointHoverBorderWidth:Number(this.cssPropertyValue("--point-hover-border-width")),pointHitRadius:10,backgroundColor:this.cssPropertyValue("--bar-fill-color"),hoverBackgroundColor:this.cssPropertyValue("--bar-hover-fill-color"),spanGaps:!1,scales:{x:{grid:{color:this.cssPropertyValue("--grid-color"),borderColor:t,tickColor:t},ticks:{color:t,tickColor:t}},y:{grid:{color:this.cssPropertyValue("--grid-color"),borderColor:t,tickColor:t},ticks:{color:t,tickColor:t},suggestedMin:0,suggestedMax:10}}}}get delayBetweenPoints(){var t,e,r;return this.cssPropertyValue("--animation-duration")/(null==(t=this.chartjsData)||null==(e=t.datasets[0])||null==(r=e.data)?void 0:r.length)}}function o(t){return 0===t.index?t.chart.scales.y.getPixelForValue(100):t.chart.getDatasetMeta(t.datasetIndex).data[t.index-1].getProps(["y"],!0).y}i.targets=["chartjsOptions","chartjsData","chartjsCanvas","csvData"],i.values={type:{type:String,default:"line"}},i.defaultCssProperties={"--animation-duration":200,"--axis-color":"#999","--grid-color":"#eee","--line-color":"#aaa","--point-color":"#333","--point-stroke-color":"#fff","--point-stroke-color-hover":"#eee","--bar-fill-color":"#999","--bar-hover-fill-color":"#333","--point-radius":6,"--point-hover-radius":10,"--point-border-width":4,"--point-hover-border-width":3};class l extends a{showDescriptionWith(t){var e,r,a;if(null==t||null==(e=t.detail)||!e.show)return this.hideContextualDescription(),void this.showOverallDescription();this.hideOverallDescription();const s=null==t||null==(r=t.detail)?void 0:r.value,i=null==t||null==(a=t.detail)?void 0:a.label;this.contextualDescriptionTarget.innerHTML=this.contextualDescriptionTemplateTarget.innerHTML.replaceAll("%value%",s).replaceAll("%label%",i),this.showContextualDescription()}hideOverallDescription(){this.overallDescriptionTarget.classList.add(...this.hideOverallDescriptionClasses)}showOverallDescription(){this.overallDescriptionTarget.classList.remove(...this.hideOverallDescriptionClasses)}hideContextualDescription(){this.contextualDescriptionTarget.classList.add(...this.hideContextualDescriptionClasses)}showContextualDescription(){this.contextualDescriptionTarget.classList.remove(...this.hideContextualDescriptionClasses)}}l.targets=["overallDescription","contextualDescription","contextualDescriptionTemplate"],l.classes=["hideOverallDescription","hideContextualDescription"];class n extends a{updateChart(t){this.chartSourceDataTarget.innerHTML=t.detail.dataElement.innerHTML,t.detail.dataElement.remove(),this.chartTarget.dispatchEvent(new CustomEvent(this.eventNameValue))}}n.targets=["chartSourceData","chart"],n.values={eventName:{type:String,default:"update-chart"}};class c extends a{connect(){this.element.dispatchEvent(new CustomEvent(this.eventNameValue,{detail:{dataElement:this.dataTarget},bubbles:!0,cancelable:!0}))}}c.targets=["data"],c.values={eventName:{type:String,default:"superchart:update-chart"}};const h=[[i,"superchart_controller.js"],[l,"supercharts/describable_controller.js"],[n,"supercharts/filterable_controller.js"],[c,"supercharts/filters_controller.js"]].map(function(t){const e=t[0];return{identifier:s(t[1]),controllerConstructor:e}});export{l as DescribableController,n as FilterableController,c as FiltersController,i as SuperchartController,h as controllerDefinitions};
2
- //# sourceMappingURL=supercharts-bullet-train.esm.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"supercharts-bullet-train.esm.js","sources":["../../../node_modules/@hotwired/stimulus-webpack-helpers/dist/stimulus-webpack-helpers.js","../../javascript/controllers/superchart_controller.js","../../javascript/controllers/supercharts/describable_controller.js","../../javascript/controllers/supercharts/filterable_controller.js","../../javascript/controllers/supercharts/filters_controller.js","../../javascript/controllers/index.js"],"sourcesContent":["/*\nStimulus Webpack Helpers 1.0.0\nCopyright © 2021 Basecamp, LLC\n */\nfunction definitionsFromContext(context) {\n return context.keys()\n .map((key) => definitionForModuleWithContextAndKey(context, key))\n .filter((value) => value);\n}\nfunction definitionForModuleWithContextAndKey(context, key) {\n const identifier = identifierForContextKey(key);\n if (identifier) {\n return definitionForModuleAndIdentifier(context(key), identifier);\n }\n}\nfunction definitionForModuleAndIdentifier(module, identifier) {\n const controllerConstructor = module.default;\n if (typeof controllerConstructor == \"function\") {\n return { identifier, controllerConstructor };\n }\n}\nfunction identifierForContextKey(key) {\n const logicalName = (key.match(/^(?:\\.\\/)?(.+)(?:[_-]controller\\..+?)$/) || [])[1];\n if (logicalName) {\n return logicalName.replace(/_/g, \"-\").replace(/\\//g, \"--\");\n }\n}\n\nexport { definitionForModuleAndIdentifier, definitionForModuleWithContextAndKey, definitionsFromContext, identifierForContextKey };\n","import { SuperchartChartjsController, parseContentsAsJSON, parseContentsAsCsv } from '@supercharts/stimulus-base'\n\nexport default class extends SuperchartChartjsController {\n static targets = [ \"chartjsOptions\", \"chartjsData\", \"chartjsCanvas\", \"csvData\" ]\n static values = {\n type: { \n type: String,\n default: \"line\"\n }\n }\n \n static defaultCssProperties = {\n '--animation-duration': 200, // milliseconds\n '--axis-color': '#999',\n '--grid-color': '#eee',\n '--line-color': '#aaa',\n '--point-color': '#333',\n '--point-stroke-color': '#fff',\n '--point-stroke-color-hover': '#eee',\n '--bar-fill-color': '#999',\n '--bar-hover-fill-color': '#333',\n '--point-radius': 6,\n '--point-hover-radius': 10,\n '--point-border-width': 4,\n '--point-hover-border-width': 3,\n }\n \n connect() {\n super.connect()\n }\n \n updateChart() {\n super.updateChart()\n }\n \n describeDataForX(event) {\n const point = event?.tooltip?.dataPoints[0]\n const dataIndex = point.dataIndex\n this.dispatch(\"description-requested\", { detail: {\n label: this.csvData[dataIndex][this.csvData.columns[1]],\n value: this.csvData[dataIndex][this.csvData.columns[3]],\n show: !!event?.tooltip?.opacity\n } })\n }\n \n parseCsvData() {\n this.csvData = parseContentsAsCsv(this.csvDataTarget)\n }\n \n get chartjsData() {\n if (this.hasChartJsDataTarget) {\n return super.chartjsData()\n }\n if (!this.hasCsvDataTarget) {\n console.warn(`The chart needs data in a in a csv target or in a chartjsData target (in chart.js JSON)`)\n return []\n }\n \n this.parseCsvData()\n \n return {\n labels: this.csvData.map(d => d[this.csvData.columns[0]]),\n datasets: [{\n type: this.typeValue,\n label: \"Value\",\n data: this.csvData.map(d => d[this.csvData.columns[2]])\n }]\n }\n }\n \n get chartjsOptions() {\n let options = {\n ...this.defaultOptions\n }\n \n if (this.hasChartjsOptionsTarget) {\n options = {\n ...options,\n ...parseContentsAsJSON(this.chartjsOptionsTarget)\n }\n }\n \n return this.parseForCssVars(options)\n }\n \n get animationOptions() {\n if (this.runAnimations === false) { return false }\n return {\n x: {\n type: 'number',\n easing: 'linear',\n duration: this.delayBetweenPoints,\n from: NaN, // the point is initially skipped\n delay: (ctx) => {\n if (ctx.type !== 'data' || ctx.xStarted) {\n return 0;\n }\n ctx.xStarted = true;\n return ctx.index * this.delayBetweenPoints;\n }\n },\n y: {\n type: 'number',\n easing: 'linear',\n duration: this.delayBetweenPoints,\n from: previousY,\n delay: (ctx) => {\n if (ctx.type !== 'data' || ctx.yStarted) {\n return 0;\n }\n ctx.yStarted = true;\n return ctx.index * this.delayBetweenPoints;\n }\n }\n }\n }\n\n // You can set default options in this getter for all your charts.\n get defaultOptions() {\n const axisColor = this.cssPropertyValue('--axis-color')\n return {\n maintainAspectRatio: false,\n animation: this.animationOptions,\n interaction: {\n mode: 'index',\n intersect: false,\n },\n resizeDelay: 200, // milliseconds\n onResize: this.handleResize.bind(this),\n plugins: {\n legend: {\n display: false,\n },\n tooltip: {\n enabled: false,\n position: 'nearest',\n external: this.describeDataForX.bind(this)\n }\n },\n color: axisColor,\n fill: false,\n lineTension: 0.3,\n borderColor: this.cssPropertyValue('--line-color'),\n borderCapStyle: \"butt\",\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: \"miter\",\n pointBorderColor: this.cssPropertyValue('--point-stroke-color'),\n pointBackgroundColor: this.cssPropertyValue('--point-color'),\n pointHoverBackgroundColor: this.cssPropertyValue('--point-color'),\n pointHoverBorderColor: this.cssPropertyValue('--point-stroke-color-hover'),\n pointRadius: Number(this.cssPropertyValue('--point-radius')),\n pointHoverRadius: Number(this.cssPropertyValue('--point-hover-radius')),\n pointBorderWidth: Number(this.cssPropertyValue('--point-border-width')),\n pointHoverBorderWidth: Number(this.cssPropertyValue('--point-hover-border-width')),\n pointHitRadius: 10,\n backgroundColor: this.cssPropertyValue('--bar-fill-color'),\n hoverBackgroundColor: this.cssPropertyValue('--bar-hover-fill-color'),\n spanGaps: false,\n scales: {\n x: {\n grid: {\n color: this.cssPropertyValue('--grid-color'),\n borderColor: axisColor,\n tickColor: axisColor,\n },\n ticks: {\n color: axisColor,\n tickColor: axisColor\n }\n },\n y: {\n grid: {\n color: this.cssPropertyValue('--grid-color'),\n borderColor: axisColor,\n tickColor: axisColor,\n },\n ticks: {\n color: axisColor,\n tickColor: axisColor\n },\n suggestedMin: 0,\n suggestedMax: 10\n }\n }\n }\n }\n \n get delayBetweenPoints() {\n return this.cssPropertyValue('--animation-duration') / this.chartjsData?.datasets[0]?.data?.length\n }\n}\n\nfunction previousY (ctx) {\n return ctx.index === 0 ? ctx.chart.scales.y.getPixelForValue(100) : ctx.chart.getDatasetMeta(ctx.datasetIndex).data[ctx.index - 1].getProps(['y'], true).y;\n}","import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n static targets = [ \"overallDescription\", \"contextualDescription\", \"contextualDescriptionTemplate\" ]\n static classes = [ \"hideOverallDescription\", \"hideContextualDescription\" ]\n \n showDescriptionWith(event) {\n if (!event?.detail?.show) {\n this.hideContextualDescription()\n this.showOverallDescription()\n return\n }\n \n this.hideOverallDescription()\n const value = event?.detail?.value\n const label = event?.detail?.label\n let newHTML = this.contextualDescriptionTemplateTarget.innerHTML\n this.contextualDescriptionTarget.innerHTML = newHTML\n .replaceAll(\"%value%\", value)\n .replaceAll(\"%label%\", label)\n this.showContextualDescription()\n }\n \n hideOverallDescription() {\n this.overallDescriptionTarget.classList.add(...this.hideOverallDescriptionClasses)\n }\n \n showOverallDescription() {\n this.overallDescriptionTarget.classList.remove(...this.hideOverallDescriptionClasses)\n }\n \n hideContextualDescription() {\n this.contextualDescriptionTarget.classList.add(...this.hideContextualDescriptionClasses)\n }\n \n showContextualDescription() {\n this.contextualDescriptionTarget.classList.remove(...this.hideContextualDescriptionClasses)\n }\n}","import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n static targets = [ \"chartSourceData\", \"chart\" ]\n static values = {\n eventName: {\n type: String,\n default: \"update-chart\"\n }\n }\n \n updateChart(event) {\n this.chartSourceDataTarget.innerHTML = event.detail.dataElement.innerHTML\n event.detail.dataElement.remove()\n this.chartTarget.dispatchEvent(new CustomEvent(this.eventNameValue))\n }\n}","import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n static targets = [ \"data\" ]\n static values = {\n eventName: {\n type: String,\n default: \"superchart:update-chart\"\n }\n }\n \n connect() {\n this.element.dispatchEvent(\n new CustomEvent(this.eventNameValue, {\n detail: { dataElement: this.dataTarget },\n bubbles: true,\n cancelable: true\n })\n )\n }\n}","import { identifierForContextKey } from \"@hotwired/stimulus-webpack-helpers\"\n\nimport SuperchartController from \"./superchart_controller\"\nimport DescribableController from \"./supercharts/describable_controller\"\nimport FilterableController from \"./supercharts/filterable_controller\"\nimport FiltersController from \"./supercharts/filters_controller\"\n\nexport const controllerDefinitions = [\n [SuperchartController, \"superchart_controller.js\"],\n [DescribableController, \"supercharts/describable_controller.js\"],\n [FilterableController, \"supercharts/filterable_controller.js\"],\n [FiltersController, \"supercharts/filters_controller.js\"],\n].map(function(d) {\n const key = d[1]\n const controller = d[0]\n return {\n identifier: identifierForContextKey(key),\n controllerConstructor: controller\n }\n})\n\nexport {\n SuperchartController,\n DescribableController,\n FilterableController,\n FiltersController,\n}\n"],"names":["identifierForContextKey","key","logicalName","match","replace","SuperchartChartjsController","connect","super","updateChart","describeDataForX","event","dataIndex","tooltip","_event$tooltip","dataPoints","this","dispatch","detail","label","csvData","columns","value","show","_event$tooltip2","opacity","parseCsvData","parseContentsAsCsv","csvDataTarget","chartjsData","hasChartJsDataTarget","hasCsvDataTarget","labels","map","d","datasets","type","typeValue","data","console","warn","chartjsOptions","options","defaultOptions","hasChartjsOptionsTarget","parseContentsAsJSON","chartjsOptionsTarget","parseForCssVars","animationOptions","runAnimations","x","easing","duration","delayBetweenPoints","from","NaN","delay","ctx","xStarted","index","y","previousY","yStarted","axisColor","cssPropertyValue","maintainAspectRatio","animation","interaction","mode","intersect","resizeDelay","onResize","handleResize","bind","plugins","legend","display","enabled","position","external","color","fill","lineTension","borderColor","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","pointBorderColor","pointBackgroundColor","pointHoverBackgroundColor","pointHoverBorderColor","pointRadius","Number","pointHoverRadius","pointBorderWidth","pointHoverBorderWidth","pointHitRadius","backgroundColor","hoverBackgroundColor","spanGaps","scales","grid","tickColor","ticks","suggestedMin","suggestedMax","_this$chartjsData","_this$chartjsData$dat","_this$chartjsData$dat2","length","chart","getPixelForValue","getDatasetMeta","datasetIndex","getProps","targets","values","String","default","defaultCssProperties","Controller","showDescriptionWith","_event$detail","_event$detail2","_event$detail3","hideContextualDescription","showOverallDescription","hideOverallDescription","contextualDescriptionTarget","innerHTML","contextualDescriptionTemplateTarget","replaceAll","showContextualDescription","overallDescriptionTarget","classList","add","hideOverallDescriptionClasses","remove","hideContextualDescriptionClasses","classes","chartSourceDataTarget","dataElement","chartTarget","dispatchEvent","CustomEvent","eventNameValue","eventName","_class","element","dataTarget","bubbles","cancelable","controllerDefinitions","SuperchartController","DescribableController","FilterableController","FiltersController","controller","identifier","controllerConstructor"],"mappings":"0KAqBA,SAASA,EAAwBC,GAC7B,MAAMC,GAAeD,EAAIE,MAAM,2CAA6C,IAAI,GAChF,GAAID,EACA,OAAOA,EAAYE,QAAQ,KAAM,KAAKA,QAAQ,MAAO,KAE7D,CCxB6BC,MAAAA,UAAAA,EAyB3BC,UACEC,MAAMD,SACP,CAEDE,cACED,MAAMC,aACP,CAEDC,iBAAiBC,WACf,MACMC,GADQD,MAAAA,GAAH,OAAGA,EAAAA,EAAOE,cAAPF,EAAAG,EAAgBC,WAAW,IACjBH,UACxBI,KAAKC,SAAS,wBAAyB,CAAEC,OAAQ,CAC/CC,MAAOH,KAAKI,QAAQR,GAAWI,KAAKI,QAAQC,QAAQ,IACpDC,MAAON,KAAKI,QAAQR,GAAWI,KAAKI,QAAQC,QAAQ,IACpDE,OAAQZ,MAAAA,UAAAA,EAAAA,EAAOE,WAAPW,EAAgBC,WAE3B,CAEDC,eACEV,KAAKI,QAAUO,EAAmBX,KAAKY,cACxC,CAEGC,kBACF,OAAIb,KAAKc,qBACMD,MAAAA,cAEVb,KAAKe,kBAKVf,KAAKU,eAEE,CACLM,OAAQhB,KAAKI,QAAQa,IAAIC,GAAKA,EAAElB,KAAKI,QAAQC,QAAQ,KACrDc,SAAU,CAAC,CACTC,KAAMpB,KAAKqB,UACXlB,MAAO,QACPmB,KAAMtB,KAAKI,QAAQa,IAAIC,GAAKA,EAAElB,KAAKI,QAAQC,QAAQ,UAXrDkB,QAAQC,KAAM,2FACP,GAaV,CAEGC,qBACF,IAAIC,EAAU,IACT1B,KAAK2B,gBAUV,OAPI3B,KAAK4B,0BACPF,EAAU,IACLA,KACAG,EAAoB7B,KAAK8B,wBAIpBC,KAAAA,gBAAgBL,EAC7B,CAEGM,uBACF,OAA2B,IAAvBhC,KAAKiC,eACF,CACLC,EAAG,CACDd,KAAM,SACNe,OAAQ,SACRC,SAAUpC,KAAKqC,mBACfC,KAAMC,IACNC,MAAQC,GACW,SAAbA,EAAIrB,MAAmBqB,EAAIC,SACtB,GAETD,EAAIC,UAAW,EACLD,EAACE,MAAQ3C,KAAKqC,qBAG5BO,EAAG,CACDxB,KAAM,SACNe,OAAQ,SACRC,SAAUpC,KAAKqC,mBACfC,KAAMO,EACNL,MAAQC,GACW,SAAbA,EAAIrB,MAAmBqB,EAAIK,SAE9B,GACDL,EAAIK,UAAW,EACLL,EAACE,MAAQ3C,KAAKqC,qBAI/B,CAGGV,qBACF,MAAeoB,EAAG/C,KAAKgD,iBAAiB,gBACxC,MAAO,CACLC,qBAAqB,EACrBC,UAAWlD,KAAKgC,iBAChBmB,YAAa,CACXC,KAAM,QACNC,WAAW,GAEbC,YAAa,IACbC,SAAUvD,KAAKwD,aAAaC,KAAKzD,MACjC0D,QAAS,CACPC,OAAQ,CACNC,SAAS,GAEX/D,QAAS,CACPgE,SAAS,EACTC,SAAU,UACVC,SAAU/D,KAAKN,iBAAiB+D,KAAKzD,QAGzCgE,MAAOjB,EACPkB,MAAM,EACNC,YAAa,GACbC,YAAanE,KAAKgD,iBAAiB,gBACnCoB,eAAgB,OAChBC,WAAY,GACZC,iBAAkB,EAClBC,gBAAiB,QACjBC,iBAAkBxE,KAAKgD,iBAAiB,wBACxCyB,qBAAsBzE,KAAKgD,iBAAiB,iBAC5C0B,0BAA2B1E,KAAKgD,iBAAiB,iBACjD2B,sBAAuB3E,KAAKgD,iBAAiB,8BAC7C4B,YAAaC,OAAO7E,KAAKgD,iBAAiB,mBAC1C8B,iBAAkBD,OAAO7E,KAAKgD,iBAAiB,yBAC/C+B,iBAAkBF,OAAO7E,KAAKgD,iBAAiB,yBAC/CgC,sBAAuBH,OAAO7E,KAAKgD,iBAAiB,+BACpDiC,eAAgB,GAChBC,gBAAiBlF,KAAKgD,iBAAiB,oBACvCmC,qBAAsBnF,KAAKgD,iBAAiB,0BAC5CoC,UAAU,EACVC,OAAQ,CACNnD,EAAG,CACDoD,KAAM,CACJtB,MAAOhE,KAAKgD,iBAAiB,gBAC7BmB,YAAapB,EACbwC,UAAWxC,GAEbyC,MAAO,CACLxB,MAAOjB,EACPwC,UAAWxC,IAGfH,EAAG,CACD0C,KAAM,CACJtB,MAAOhE,KAAKgD,iBAAiB,gBAC7BmB,YAAapB,EACbwC,UAAWxC,GAEbyC,MAAO,CACLxB,MAAOjB,EACPwC,UAAWxC,GAEb0C,aAAc,EACdC,aAAc,KAIrB,CAEqBrD,yBACpB,IAAAsD,EAAAC,EAAAC,EAAA,OAAY7C,KAAAA,iBAAiB,yBAAtB,OAAA2C,EAAgD3F,KAAKa,cAAL,OAAhD+E,EAAgDD,EAAkBxE,SAAS,KAA3B,OAAA0E,EAAAD,EAA+BtE,WAA/E,EAAgDuE,EAAqCC,OAC7F,EAGH,WAAoBrD,GAClB,OAAqB,MAAVE,MAAcF,EAAIsD,MAAMV,OAAOzC,EAAEoD,iBAAiB,KAAOvD,EAAIsD,MAAME,eAAexD,EAAIyD,cAAc5E,KAAKmB,EAAIE,MAAQ,GAAGwD,SAAS,CAAC,MAAM,GAAMvD,CAC1J,GAhMQwD,QAAU,CAAE,iBAAkB,cAAe,gBAAiB,aAC9DC,OAAS,CACdjF,KAAM,CACJA,KAAMkF,OACNC,QAAS,WAINC,qBAAuB,CAC5B,uBAAwB,IACxB,eAAgB,OAChB,eAAgB,OAChB,eAAgB,OAChB,gBAAiB,OACjB,uBAAwB,OACxB,6BAA8B,OAC9B,mBAAoB,OACpB,yBAA0B,OAC1B,iBAAkB,EAClB,uBAAwB,GACxB,uBAAwB,EACxB,6BAA8B,mBCtBMC,EAItCC,oBAAoB/G,GAAO,IAAAgH,EAAAC,EAAAC,EACzB,SAAKlH,GAAD,SAACA,EAAOO,UAAPyG,EAAepG,KAGlB,OAFAP,KAAK8G,iCACL9G,KAAK+G,yBAIP/G,KAAKgH,yBACL,QAAcrH,MAAAA,GAAH,OAAGA,EAAAA,EAAOO,aAAPP,EAAAiH,EAAetG,MAClBH,EAAA,MAAGR,UAAHkH,EAAGlH,EAAOO,aAAV,EAAG2G,EAAe1G,MAE7BH,KAAKiH,4BAA4BC,UADnBlH,KAAKmH,oCAAoCD,UAEpDE,WAAW,UAAW9G,GACtB8G,WAAW,UAAWjH,GACzBH,KAAKqH,2BACN,CAEDL,yBACEhH,KAAKsH,yBAAyBC,UAAUC,OAAOxH,KAAKyH,8BACrD,CAEDV,yBACE/G,KAAKsH,yBAAyBC,UAAUG,UAAU1H,KAAKyH,8BACxD,CAEDX,4BACE9G,KAAKiH,4BAA4BM,UAAUC,OAAOxH,KAAK2H,iCACxD,CAEDN,4BACErH,KAAKiH,4BAA4BM,UAAUG,UAAU1H,KAAK2H,iCAC3D,IAlCMvB,QAAU,CAAE,qBAAsB,wBAAyB,mCAC3DwB,QAAU,CAAE,yBAA0B,6BCFlBnB,MAAAA,UAAAA,EAS3BhH,YAAYE,GACVK,KAAK6H,sBAAsBX,UAAYvH,EAAMO,OAAO4H,YAAYZ,UAChEvH,EAAMO,OAAO4H,YAAYJ,SACzB1H,KAAK+H,YAAYC,cAAc,IAAIC,YAAYjI,KAAKkI,gBACrD,IAZM9B,QAAU,CAAE,kBAAmB,SAC/BC,EAAAA,OAAS,CACd8B,UAAW,CACT/G,KAAMkF,OACNC,QAAS,iBCLA,MAAA6B,UAAyB3B,EAStClH,UACES,KAAKqI,QAAQL,cACX,IAAAC,YAAgBjI,KAAKkI,eAAgB,CACnChI,OAAQ,CAAE4H,YAAa9H,KAAKsI,YAC5BC,SAAS,EACTC,YAAY,IAGjB,IAhBMpC,QAAU,CAAE,UACZC,OAAS,CACd8B,UAAW,CACT/G,KAAMkF,OACNC,QAAS,4BCAFkC,QAAwB,CACnC,CAACC,EAAsB,4BACvB,CAACC,EAAuB,yCACxB,CAACC,EAAsB,wCACvB,CAACC,EAAmB,sCACpB5H,IAAI,SAASC,GACb,MACgB4H,EAAG5H,EAAE,GACrB,MAAO,CACL6H,WAAY9J,EAHFiC,EAAE,IAIZ8H,sBAAuBF,EAE1B"}
@@ -1,2 +0,0 @@
1
- var t=require("@supercharts/stimulus-base"),e=require("@hotwired/stimulus");function r(t){const e=(t.match(/^(?:\.\/)?(.+)(?:[_-]controller\..+?)$/)||[])[1];if(e)return e.replace(/_/g,"-").replace(/\//g,"--")}class s extends t.SuperchartChartjsController{connect(){super.connect()}updateChart(){super.updateChart()}describeDataForX(t){var e,r;const s=(null==t||null==(e=t.tooltip)?void 0:e.dataPoints[0]).dataIndex;this.dispatch("description-requested",{detail:{label:this.csvData[s][this.csvData.columns[1]],value:this.csvData[s][this.csvData.columns[3]],show:!(null==t||null==(r=t.tooltip)||!r.opacity)}})}parseCsvData(){this.csvData=t.parseContentsAsCsv(this.csvDataTarget)}get chartjsData(){return this.hasChartJsDataTarget?super.chartjsData():this.hasCsvDataTarget?(this.parseCsvData(),{labels:this.csvData.map(t=>t[this.csvData.columns[0]]),datasets:[{type:this.typeValue,label:"Value",data:this.csvData.map(t=>t[this.csvData.columns[2]])}]}):(console.warn("The chart needs data in a in a csv target or in a chartjsData target (in chart.js JSON)"),[])}get chartjsOptions(){let e={...this.defaultOptions};return this.hasChartjsOptionsTarget&&(e={...e,...t.parseContentsAsJSON(this.chartjsOptionsTarget)}),this.parseForCssVars(e)}get animationOptions(){return!1!==this.runAnimations&&{x:{type:"number",easing:"linear",duration:this.delayBetweenPoints,from:NaN,delay:t=>"data"!==t.type||t.xStarted?0:(t.xStarted=!0,t.index*this.delayBetweenPoints)},y:{type:"number",easing:"linear",duration:this.delayBetweenPoints,from:a,delay:t=>"data"!==t.type||t.yStarted?0:(t.yStarted=!0,t.index*this.delayBetweenPoints)}}}get defaultOptions(){const t=this.cssPropertyValue("--axis-color");return{maintainAspectRatio:!1,animation:this.animationOptions,interaction:{mode:"index",intersect:!1},resizeDelay:200,onResize:this.handleResize.bind(this),plugins:{legend:{display:!1},tooltip:{enabled:!1,position:"nearest",external:this.describeDataForX.bind(this)}},color:t,fill:!1,lineTension:.3,borderColor:this.cssPropertyValue("--line-color"),borderCapStyle:"butt",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",pointBorderColor:this.cssPropertyValue("--point-stroke-color"),pointBackgroundColor:this.cssPropertyValue("--point-color"),pointHoverBackgroundColor:this.cssPropertyValue("--point-color"),pointHoverBorderColor:this.cssPropertyValue("--point-stroke-color-hover"),pointRadius:Number(this.cssPropertyValue("--point-radius")),pointHoverRadius:Number(this.cssPropertyValue("--point-hover-radius")),pointBorderWidth:Number(this.cssPropertyValue("--point-border-width")),pointHoverBorderWidth:Number(this.cssPropertyValue("--point-hover-border-width")),pointHitRadius:10,backgroundColor:this.cssPropertyValue("--bar-fill-color"),hoverBackgroundColor:this.cssPropertyValue("--bar-hover-fill-color"),spanGaps:!1,scales:{x:{grid:{color:this.cssPropertyValue("--grid-color"),borderColor:t,tickColor:t},ticks:{color:t,tickColor:t}},y:{grid:{color:this.cssPropertyValue("--grid-color"),borderColor:t,tickColor:t},ticks:{color:t,tickColor:t},suggestedMin:0,suggestedMax:10}}}}get delayBetweenPoints(){var t,e,r;return this.cssPropertyValue("--animation-duration")/(null==(t=this.chartjsData)||null==(e=t.datasets[0])||null==(r=e.data)?void 0:r.length)}}function a(t){return 0===t.index?t.chart.scales.y.getPixelForValue(100):t.chart.getDatasetMeta(t.datasetIndex).data[t.index-1].getProps(["y"],!0).y}s.targets=["chartjsOptions","chartjsData","chartjsCanvas","csvData"],s.values={type:{type:String,default:"line"}},s.defaultCssProperties={"--animation-duration":200,"--axis-color":"#999","--grid-color":"#eee","--line-color":"#aaa","--point-color":"#333","--point-stroke-color":"#fff","--point-stroke-color-hover":"#eee","--bar-fill-color":"#999","--bar-hover-fill-color":"#333","--point-radius":6,"--point-hover-radius":10,"--point-border-width":4,"--point-hover-border-width":3};class o extends e.Controller{showDescriptionWith(t){var e,r,s;if(null==t||null==(e=t.detail)||!e.show)return this.hideContextualDescription(),void this.showOverallDescription();this.hideOverallDescription();const a=null==t||null==(r=t.detail)?void 0:r.value,o=null==t||null==(s=t.detail)?void 0:s.label;this.contextualDescriptionTarget.innerHTML=this.contextualDescriptionTemplateTarget.innerHTML.replaceAll("%value%",a).replaceAll("%label%",o),this.showContextualDescription()}hideOverallDescription(){this.overallDescriptionTarget.classList.add(...this.hideOverallDescriptionClasses)}showOverallDescription(){this.overallDescriptionTarget.classList.remove(...this.hideOverallDescriptionClasses)}hideContextualDescription(){this.contextualDescriptionTarget.classList.add(...this.hideContextualDescriptionClasses)}showContextualDescription(){this.contextualDescriptionTarget.classList.remove(...this.hideContextualDescriptionClasses)}}o.targets=["overallDescription","contextualDescription","contextualDescriptionTemplate"],o.classes=["hideOverallDescription","hideContextualDescription"];class i extends e.Controller{updateChart(t){this.chartSourceDataTarget.innerHTML=t.detail.dataElement.innerHTML,t.detail.dataElement.remove(),this.chartTarget.dispatchEvent(new CustomEvent(this.eventNameValue))}}i.targets=["chartSourceData","chart"],i.values={eventName:{type:String,default:"update-chart"}};class l extends e.Controller{connect(){this.element.dispatchEvent(new CustomEvent(this.eventNameValue,{detail:{dataElement:this.dataTarget},bubbles:!0,cancelable:!0}))}}l.targets=["data"],l.values={eventName:{type:String,default:"superchart:update-chart"}};const n=[[s,"superchart_controller.js"],[o,"supercharts/describable_controller.js"],[i,"supercharts/filterable_controller.js"],[l,"supercharts/filters_controller.js"]].map(function(t){const e=t[0];return{identifier:r(t[1]),controllerConstructor:e}});exports.DescribableController=o,exports.FilterableController=i,exports.FiltersController=l,exports.SuperchartController=s,exports.controllerDefinitions=n;
2
- //# sourceMappingURL=supercharts-bullet-train.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"supercharts-bullet-train.js","sources":["../../../node_modules/@hotwired/stimulus-webpack-helpers/dist/stimulus-webpack-helpers.js","../../javascript/controllers/superchart_controller.js","../../javascript/controllers/supercharts/describable_controller.js","../../javascript/controllers/supercharts/filterable_controller.js","../../javascript/controllers/supercharts/filters_controller.js","../../javascript/controllers/index.js"],"sourcesContent":["/*\nStimulus Webpack Helpers 1.0.0\nCopyright © 2021 Basecamp, LLC\n */\nfunction definitionsFromContext(context) {\n return context.keys()\n .map((key) => definitionForModuleWithContextAndKey(context, key))\n .filter((value) => value);\n}\nfunction definitionForModuleWithContextAndKey(context, key) {\n const identifier = identifierForContextKey(key);\n if (identifier) {\n return definitionForModuleAndIdentifier(context(key), identifier);\n }\n}\nfunction definitionForModuleAndIdentifier(module, identifier) {\n const controllerConstructor = module.default;\n if (typeof controllerConstructor == \"function\") {\n return { identifier, controllerConstructor };\n }\n}\nfunction identifierForContextKey(key) {\n const logicalName = (key.match(/^(?:\\.\\/)?(.+)(?:[_-]controller\\..+?)$/) || [])[1];\n if (logicalName) {\n return logicalName.replace(/_/g, \"-\").replace(/\\//g, \"--\");\n }\n}\n\nexport { definitionForModuleAndIdentifier, definitionForModuleWithContextAndKey, definitionsFromContext, identifierForContextKey };\n","import { SuperchartChartjsController, parseContentsAsJSON, parseContentsAsCsv } from '@supercharts/stimulus-base'\n\nexport default class extends SuperchartChartjsController {\n static targets = [ \"chartjsOptions\", \"chartjsData\", \"chartjsCanvas\", \"csvData\" ]\n static values = {\n type: { \n type: String,\n default: \"line\"\n }\n }\n \n static defaultCssProperties = {\n '--animation-duration': 200, // milliseconds\n '--axis-color': '#999',\n '--grid-color': '#eee',\n '--line-color': '#aaa',\n '--point-color': '#333',\n '--point-stroke-color': '#fff',\n '--point-stroke-color-hover': '#eee',\n '--bar-fill-color': '#999',\n '--bar-hover-fill-color': '#333',\n '--point-radius': 6,\n '--point-hover-radius': 10,\n '--point-border-width': 4,\n '--point-hover-border-width': 3,\n }\n \n connect() {\n super.connect()\n }\n \n updateChart() {\n super.updateChart()\n }\n \n describeDataForX(event) {\n const point = event?.tooltip?.dataPoints[0]\n const dataIndex = point.dataIndex\n this.dispatch(\"description-requested\", { detail: {\n label: this.csvData[dataIndex][this.csvData.columns[1]],\n value: this.csvData[dataIndex][this.csvData.columns[3]],\n show: !!event?.tooltip?.opacity\n } })\n }\n \n parseCsvData() {\n this.csvData = parseContentsAsCsv(this.csvDataTarget)\n }\n \n get chartjsData() {\n if (this.hasChartJsDataTarget) {\n return super.chartjsData()\n }\n if (!this.hasCsvDataTarget) {\n console.warn(`The chart needs data in a in a csv target or in a chartjsData target (in chart.js JSON)`)\n return []\n }\n \n this.parseCsvData()\n \n return {\n labels: this.csvData.map(d => d[this.csvData.columns[0]]),\n datasets: [{\n type: this.typeValue,\n label: \"Value\",\n data: this.csvData.map(d => d[this.csvData.columns[2]])\n }]\n }\n }\n \n get chartjsOptions() {\n let options = {\n ...this.defaultOptions\n }\n \n if (this.hasChartjsOptionsTarget) {\n options = {\n ...options,\n ...parseContentsAsJSON(this.chartjsOptionsTarget)\n }\n }\n \n return this.parseForCssVars(options)\n }\n \n get animationOptions() {\n if (this.runAnimations === false) { return false }\n return {\n x: {\n type: 'number',\n easing: 'linear',\n duration: this.delayBetweenPoints,\n from: NaN, // the point is initially skipped\n delay: (ctx) => {\n if (ctx.type !== 'data' || ctx.xStarted) {\n return 0;\n }\n ctx.xStarted = true;\n return ctx.index * this.delayBetweenPoints;\n }\n },\n y: {\n type: 'number',\n easing: 'linear',\n duration: this.delayBetweenPoints,\n from: previousY,\n delay: (ctx) => {\n if (ctx.type !== 'data' || ctx.yStarted) {\n return 0;\n }\n ctx.yStarted = true;\n return ctx.index * this.delayBetweenPoints;\n }\n }\n }\n }\n\n // You can set default options in this getter for all your charts.\n get defaultOptions() {\n const axisColor = this.cssPropertyValue('--axis-color')\n return {\n maintainAspectRatio: false,\n animation: this.animationOptions,\n interaction: {\n mode: 'index',\n intersect: false,\n },\n resizeDelay: 200, // milliseconds\n onResize: this.handleResize.bind(this),\n plugins: {\n legend: {\n display: false,\n },\n tooltip: {\n enabled: false,\n position: 'nearest',\n external: this.describeDataForX.bind(this)\n }\n },\n color: axisColor,\n fill: false,\n lineTension: 0.3,\n borderColor: this.cssPropertyValue('--line-color'),\n borderCapStyle: \"butt\",\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: \"miter\",\n pointBorderColor: this.cssPropertyValue('--point-stroke-color'),\n pointBackgroundColor: this.cssPropertyValue('--point-color'),\n pointHoverBackgroundColor: this.cssPropertyValue('--point-color'),\n pointHoverBorderColor: this.cssPropertyValue('--point-stroke-color-hover'),\n pointRadius: Number(this.cssPropertyValue('--point-radius')),\n pointHoverRadius: Number(this.cssPropertyValue('--point-hover-radius')),\n pointBorderWidth: Number(this.cssPropertyValue('--point-border-width')),\n pointHoverBorderWidth: Number(this.cssPropertyValue('--point-hover-border-width')),\n pointHitRadius: 10,\n backgroundColor: this.cssPropertyValue('--bar-fill-color'),\n hoverBackgroundColor: this.cssPropertyValue('--bar-hover-fill-color'),\n spanGaps: false,\n scales: {\n x: {\n grid: {\n color: this.cssPropertyValue('--grid-color'),\n borderColor: axisColor,\n tickColor: axisColor,\n },\n ticks: {\n color: axisColor,\n tickColor: axisColor\n }\n },\n y: {\n grid: {\n color: this.cssPropertyValue('--grid-color'),\n borderColor: axisColor,\n tickColor: axisColor,\n },\n ticks: {\n color: axisColor,\n tickColor: axisColor\n },\n suggestedMin: 0,\n suggestedMax: 10\n }\n }\n }\n }\n \n get delayBetweenPoints() {\n return this.cssPropertyValue('--animation-duration') / this.chartjsData?.datasets[0]?.data?.length\n }\n}\n\nfunction previousY (ctx) {\n return ctx.index === 0 ? ctx.chart.scales.y.getPixelForValue(100) : ctx.chart.getDatasetMeta(ctx.datasetIndex).data[ctx.index - 1].getProps(['y'], true).y;\n}","import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n static targets = [ \"overallDescription\", \"contextualDescription\", \"contextualDescriptionTemplate\" ]\n static classes = [ \"hideOverallDescription\", \"hideContextualDescription\" ]\n \n showDescriptionWith(event) {\n if (!event?.detail?.show) {\n this.hideContextualDescription()\n this.showOverallDescription()\n return\n }\n \n this.hideOverallDescription()\n const value = event?.detail?.value\n const label = event?.detail?.label\n let newHTML = this.contextualDescriptionTemplateTarget.innerHTML\n this.contextualDescriptionTarget.innerHTML = newHTML\n .replaceAll(\"%value%\", value)\n .replaceAll(\"%label%\", label)\n this.showContextualDescription()\n }\n \n hideOverallDescription() {\n this.overallDescriptionTarget.classList.add(...this.hideOverallDescriptionClasses)\n }\n \n showOverallDescription() {\n this.overallDescriptionTarget.classList.remove(...this.hideOverallDescriptionClasses)\n }\n \n hideContextualDescription() {\n this.contextualDescriptionTarget.classList.add(...this.hideContextualDescriptionClasses)\n }\n \n showContextualDescription() {\n this.contextualDescriptionTarget.classList.remove(...this.hideContextualDescriptionClasses)\n }\n}","import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n static targets = [ \"chartSourceData\", \"chart\" ]\n static values = {\n eventName: {\n type: String,\n default: \"update-chart\"\n }\n }\n \n updateChart(event) {\n this.chartSourceDataTarget.innerHTML = event.detail.dataElement.innerHTML\n event.detail.dataElement.remove()\n this.chartTarget.dispatchEvent(new CustomEvent(this.eventNameValue))\n }\n}","import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n static targets = [ \"data\" ]\n static values = {\n eventName: {\n type: String,\n default: \"superchart:update-chart\"\n }\n }\n \n connect() {\n this.element.dispatchEvent(\n new CustomEvent(this.eventNameValue, {\n detail: { dataElement: this.dataTarget },\n bubbles: true,\n cancelable: true\n })\n )\n }\n}","import { identifierForContextKey } from \"@hotwired/stimulus-webpack-helpers\"\n\nimport SuperchartController from \"./superchart_controller\"\nimport DescribableController from \"./supercharts/describable_controller\"\nimport FilterableController from \"./supercharts/filterable_controller\"\nimport FiltersController from \"./supercharts/filters_controller\"\n\nexport const controllerDefinitions = [\n [SuperchartController, \"superchart_controller.js\"],\n [DescribableController, \"supercharts/describable_controller.js\"],\n [FilterableController, \"supercharts/filterable_controller.js\"],\n [FiltersController, \"supercharts/filters_controller.js\"],\n].map(function(d) {\n const key = d[1]\n const controller = d[0]\n return {\n identifier: identifierForContextKey(key),\n controllerConstructor: controller\n }\n})\n\nexport {\n SuperchartController,\n DescribableController,\n FilterableController,\n FiltersController,\n}\n"],"names":["identifierForContextKey","key","logicalName","match","replace","SuperchartChartjsController","connect","super","updateChart","describeDataForX","event","dataIndex","tooltip","_event$tooltip","dataPoints","this","dispatch","detail","label","csvData","columns","value","show","_event$tooltip2","opacity","parseCsvData","parseContentsAsCsv","csvDataTarget","chartjsData","hasChartJsDataTarget","hasCsvDataTarget","labels","map","d","datasets","type","typeValue","data","console","warn","chartjsOptions","options","defaultOptions","hasChartjsOptionsTarget","parseContentsAsJSON","chartjsOptionsTarget","parseForCssVars","animationOptions","runAnimations","x","easing","duration","delayBetweenPoints","from","NaN","delay","ctx","xStarted","index","y","previousY","yStarted","axisColor","cssPropertyValue","maintainAspectRatio","animation","interaction","mode","intersect","resizeDelay","onResize","handleResize","bind","plugins","legend","display","enabled","position","external","color","fill","lineTension","borderColor","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","pointBorderColor","pointBackgroundColor","pointHoverBackgroundColor","pointHoverBorderColor","pointRadius","Number","pointHoverRadius","pointBorderWidth","pointHoverBorderWidth","pointHitRadius","backgroundColor","hoverBackgroundColor","spanGaps","scales","grid","tickColor","ticks","suggestedMin","suggestedMax","_this$chartjsData","_this$chartjsData$dat","_this$chartjsData$dat2","length","chart","getPixelForValue","getDatasetMeta","datasetIndex","getProps","targets","values","String","default","defaultCssProperties","Controller","showDescriptionWith","_event$detail","_event$detail2","_event$detail3","hideContextualDescription","showOverallDescription","hideOverallDescription","contextualDescriptionTarget","innerHTML","contextualDescriptionTemplateTarget","replaceAll","showContextualDescription","overallDescriptionTarget","classList","add","hideOverallDescriptionClasses","remove","hideContextualDescriptionClasses","classes","chartSourceDataTarget","dataElement","chartTarget","dispatchEvent","CustomEvent","eventNameValue","eventName","_class","element","dataTarget","bubbles","cancelable","controllerDefinitions","SuperchartController","DescribableController","FilterableController","FiltersController","controller","identifier","controllerConstructor"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import{SuperchartChartjsController as t,parseContentsAsCsv as e,parseContentsAsJSON as r}from"@supercharts/stimulus-base";import{Controller as a}from"@hotwired/stimulus";function s(t){const e=(t.match(/^(?:\.\/)?(.+)(?:[_-]controller\..+?)$/)||[])[1];if(e)return e.replace(/_/g,"-").replace(/\//g,"--")}function i(){return i=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var r=arguments[e];for(var a in r)Object.prototype.hasOwnProperty.call(r,a)&&(t[a]=r[a])}return t},i.apply(this,arguments)}class o extends t{connect(){super.connect()}updateChart(){super.updateChart()}describeDataForX(t){var e,r;const a=(null==t||null==(e=t.tooltip)?void 0:e.dataPoints[0]).dataIndex;this.dispatch("description-requested",{detail:{label:this.csvData[a][this.csvData.columns[1]],value:this.csvData[a][this.csvData.columns[3]],show:!(null==t||null==(r=t.tooltip)||!r.opacity)}})}parseCsvData(){this.csvData=e(this.csvDataTarget)}get chartjsData(){return this.hasChartJsDataTarget?super.chartjsData():this.hasCsvDataTarget?(this.parseCsvData(),{labels:this.csvData.map(t=>t[this.csvData.columns[0]]),datasets:[{type:this.typeValue,label:"Value",data:this.csvData.map(t=>t[this.csvData.columns[2]])}]}):(console.warn("The chart needs data in a in a csv target or in a chartjsData target (in chart.js JSON)"),[])}get chartjsOptions(){let t=i({},this.defaultOptions);return this.hasChartjsOptionsTarget&&(t=i({},t,r(this.chartjsOptionsTarget))),this.parseForCssVars(t)}get animationOptions(){return!1!==this.runAnimations&&{x:{type:"number",easing:"linear",duration:this.delayBetweenPoints,from:NaN,delay:t=>"data"!==t.type||t.xStarted?0:(t.xStarted=!0,t.index*this.delayBetweenPoints)},y:{type:"number",easing:"linear",duration:this.delayBetweenPoints,from:l,delay:t=>"data"!==t.type||t.yStarted?0:(t.yStarted=!0,t.index*this.delayBetweenPoints)}}}get defaultOptions(){const t=this.cssPropertyValue("--axis-color");return{maintainAspectRatio:!1,animation:this.animationOptions,interaction:{mode:"index",intersect:!1},resizeDelay:200,onResize:this.handleResize.bind(this),plugins:{legend:{display:!1},tooltip:{enabled:!1,position:"nearest",external:this.describeDataForX.bind(this)}},color:t,fill:!1,lineTension:.3,borderColor:this.cssPropertyValue("--line-color"),borderCapStyle:"butt",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",pointBorderColor:this.cssPropertyValue("--point-stroke-color"),pointBackgroundColor:this.cssPropertyValue("--point-color"),pointHoverBackgroundColor:this.cssPropertyValue("--point-color"),pointHoverBorderColor:this.cssPropertyValue("--point-stroke-color-hover"),pointRadius:Number(this.cssPropertyValue("--point-radius")),pointHoverRadius:Number(this.cssPropertyValue("--point-hover-radius")),pointBorderWidth:Number(this.cssPropertyValue("--point-border-width")),pointHoverBorderWidth:Number(this.cssPropertyValue("--point-hover-border-width")),pointHitRadius:10,backgroundColor:this.cssPropertyValue("--bar-fill-color"),hoverBackgroundColor:this.cssPropertyValue("--bar-hover-fill-color"),spanGaps:!1,scales:{x:{grid:{color:this.cssPropertyValue("--grid-color"),borderColor:t,tickColor:t},ticks:{color:t,tickColor:t}},y:{grid:{color:this.cssPropertyValue("--grid-color"),borderColor:t,tickColor:t},ticks:{color:t,tickColor:t},suggestedMin:0,suggestedMax:10}}}}get delayBetweenPoints(){var t,e,r;return this.cssPropertyValue("--animation-duration")/(null==(t=this.chartjsData)||null==(e=t.datasets[0])||null==(r=e.data)?void 0:r.length)}}function l(t){return 0===t.index?t.chart.scales.y.getPixelForValue(100):t.chart.getDatasetMeta(t.datasetIndex).data[t.index-1].getProps(["y"],!0).y}o.targets=["chartjsOptions","chartjsData","chartjsCanvas","csvData"],o.values={type:{type:String,default:"line"}},o.defaultCssProperties={"--animation-duration":200,"--axis-color":"#999","--grid-color":"#eee","--line-color":"#aaa","--point-color":"#333","--point-stroke-color":"#fff","--point-stroke-color-hover":"#eee","--bar-fill-color":"#999","--bar-hover-fill-color":"#333","--point-radius":6,"--point-hover-radius":10,"--point-border-width":4,"--point-hover-border-width":3};class n extends a{showDescriptionWith(t){var e,r,a;if(null==t||null==(e=t.detail)||!e.show)return this.hideContextualDescription(),void this.showOverallDescription();this.hideOverallDescription();const s=null==t||null==(r=t.detail)?void 0:r.value,i=null==t||null==(a=t.detail)?void 0:a.label;this.contextualDescriptionTarget.innerHTML=this.contextualDescriptionTemplateTarget.innerHTML.replaceAll("%value%",s).replaceAll("%label%",i),this.showContextualDescription()}hideOverallDescription(){this.overallDescriptionTarget.classList.add(...this.hideOverallDescriptionClasses)}showOverallDescription(){this.overallDescriptionTarget.classList.remove(...this.hideOverallDescriptionClasses)}hideContextualDescription(){this.contextualDescriptionTarget.classList.add(...this.hideContextualDescriptionClasses)}showContextualDescription(){this.contextualDescriptionTarget.classList.remove(...this.hideContextualDescriptionClasses)}}n.targets=["overallDescription","contextualDescription","contextualDescriptionTemplate"],n.classes=["hideOverallDescription","hideContextualDescription"];class c extends a{updateChart(t){this.chartSourceDataTarget.innerHTML=t.detail.dataElement.innerHTML,t.detail.dataElement.remove(),this.chartTarget.dispatchEvent(new CustomEvent(this.eventNameValue))}}c.targets=["chartSourceData","chart"],c.values={eventName:{type:String,default:"update-chart"}};class h extends a{connect(){this.element.dispatchEvent(new CustomEvent(this.eventNameValue,{detail:{dataElement:this.dataTarget},bubbles:!0,cancelable:!0}))}}h.targets=["data"],h.values={eventName:{type:String,default:"superchart:update-chart"}};const d=[[o,"superchart_controller.js"],[n,"supercharts/describable_controller.js"],[c,"supercharts/filterable_controller.js"],[h,"supercharts/filters_controller.js"]].map(function(t){const e=t[0];return{identifier:s(t[1]),controllerConstructor:e}});export{n as DescribableController,c as FilterableController,h as FiltersController,o as SuperchartController,d as controllerDefinitions};
2
- //# sourceMappingURL=supercharts-bullet-train.modern.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"supercharts-bullet-train.modern.mjs","sources":["../../../node_modules/@hotwired/stimulus-webpack-helpers/dist/stimulus-webpack-helpers.js","../../javascript/controllers/superchart_controller.js","../../javascript/controllers/supercharts/describable_controller.js","../../javascript/controllers/supercharts/filterable_controller.js","../../javascript/controllers/supercharts/filters_controller.js","../../javascript/controllers/index.js"],"sourcesContent":["/*\nStimulus Webpack Helpers 1.0.0\nCopyright © 2021 Basecamp, LLC\n */\nfunction definitionsFromContext(context) {\n return context.keys()\n .map((key) => definitionForModuleWithContextAndKey(context, key))\n .filter((value) => value);\n}\nfunction definitionForModuleWithContextAndKey(context, key) {\n const identifier = identifierForContextKey(key);\n if (identifier) {\n return definitionForModuleAndIdentifier(context(key), identifier);\n }\n}\nfunction definitionForModuleAndIdentifier(module, identifier) {\n const controllerConstructor = module.default;\n if (typeof controllerConstructor == \"function\") {\n return { identifier, controllerConstructor };\n }\n}\nfunction identifierForContextKey(key) {\n const logicalName = (key.match(/^(?:\\.\\/)?(.+)(?:[_-]controller\\..+?)$/) || [])[1];\n if (logicalName) {\n return logicalName.replace(/_/g, \"-\").replace(/\\//g, \"--\");\n }\n}\n\nexport { definitionForModuleAndIdentifier, definitionForModuleWithContextAndKey, definitionsFromContext, identifierForContextKey };\n","import { SuperchartChartjsController, parseContentsAsJSON, parseContentsAsCsv } from '@supercharts/stimulus-base'\n\nexport default class extends SuperchartChartjsController {\n static targets = [ \"chartjsOptions\", \"chartjsData\", \"chartjsCanvas\", \"csvData\" ]\n static values = {\n type: { \n type: String,\n default: \"line\"\n }\n }\n \n static defaultCssProperties = {\n '--animation-duration': 200, // milliseconds\n '--axis-color': '#999',\n '--grid-color': '#eee',\n '--line-color': '#aaa',\n '--point-color': '#333',\n '--point-stroke-color': '#fff',\n '--point-stroke-color-hover': '#eee',\n '--bar-fill-color': '#999',\n '--bar-hover-fill-color': '#333',\n '--point-radius': 6,\n '--point-hover-radius': 10,\n '--point-border-width': 4,\n '--point-hover-border-width': 3,\n }\n \n connect() {\n super.connect()\n }\n \n updateChart() {\n super.updateChart()\n }\n \n describeDataForX(event) {\n const point = event?.tooltip?.dataPoints[0]\n const dataIndex = point.dataIndex\n this.dispatch(\"description-requested\", { detail: {\n label: this.csvData[dataIndex][this.csvData.columns[1]],\n value: this.csvData[dataIndex][this.csvData.columns[3]],\n show: !!event?.tooltip?.opacity\n } })\n }\n \n parseCsvData() {\n this.csvData = parseContentsAsCsv(this.csvDataTarget)\n }\n \n get chartjsData() {\n if (this.hasChartJsDataTarget) {\n return super.chartjsData()\n }\n if (!this.hasCsvDataTarget) {\n console.warn(`The chart needs data in a in a csv target or in a chartjsData target (in chart.js JSON)`)\n return []\n }\n \n this.parseCsvData()\n \n return {\n labels: this.csvData.map(d => d[this.csvData.columns[0]]),\n datasets: [{\n type: this.typeValue,\n label: \"Value\",\n data: this.csvData.map(d => d[this.csvData.columns[2]])\n }]\n }\n }\n \n get chartjsOptions() {\n let options = {\n ...this.defaultOptions\n }\n \n if (this.hasChartjsOptionsTarget) {\n options = {\n ...options,\n ...parseContentsAsJSON(this.chartjsOptionsTarget)\n }\n }\n \n return this.parseForCssVars(options)\n }\n \n get animationOptions() {\n if (this.runAnimations === false) { return false }\n return {\n x: {\n type: 'number',\n easing: 'linear',\n duration: this.delayBetweenPoints,\n from: NaN, // the point is initially skipped\n delay: (ctx) => {\n if (ctx.type !== 'data' || ctx.xStarted) {\n return 0;\n }\n ctx.xStarted = true;\n return ctx.index * this.delayBetweenPoints;\n }\n },\n y: {\n type: 'number',\n easing: 'linear',\n duration: this.delayBetweenPoints,\n from: previousY,\n delay: (ctx) => {\n if (ctx.type !== 'data' || ctx.yStarted) {\n return 0;\n }\n ctx.yStarted = true;\n return ctx.index * this.delayBetweenPoints;\n }\n }\n }\n }\n\n // You can set default options in this getter for all your charts.\n get defaultOptions() {\n const axisColor = this.cssPropertyValue('--axis-color')\n return {\n maintainAspectRatio: false,\n animation: this.animationOptions,\n interaction: {\n mode: 'index',\n intersect: false,\n },\n resizeDelay: 200, // milliseconds\n onResize: this.handleResize.bind(this),\n plugins: {\n legend: {\n display: false,\n },\n tooltip: {\n enabled: false,\n position: 'nearest',\n external: this.describeDataForX.bind(this)\n }\n },\n color: axisColor,\n fill: false,\n lineTension: 0.3,\n borderColor: this.cssPropertyValue('--line-color'),\n borderCapStyle: \"butt\",\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: \"miter\",\n pointBorderColor: this.cssPropertyValue('--point-stroke-color'),\n pointBackgroundColor: this.cssPropertyValue('--point-color'),\n pointHoverBackgroundColor: this.cssPropertyValue('--point-color'),\n pointHoverBorderColor: this.cssPropertyValue('--point-stroke-color-hover'),\n pointRadius: Number(this.cssPropertyValue('--point-radius')),\n pointHoverRadius: Number(this.cssPropertyValue('--point-hover-radius')),\n pointBorderWidth: Number(this.cssPropertyValue('--point-border-width')),\n pointHoverBorderWidth: Number(this.cssPropertyValue('--point-hover-border-width')),\n pointHitRadius: 10,\n backgroundColor: this.cssPropertyValue('--bar-fill-color'),\n hoverBackgroundColor: this.cssPropertyValue('--bar-hover-fill-color'),\n spanGaps: false,\n scales: {\n x: {\n grid: {\n color: this.cssPropertyValue('--grid-color'),\n borderColor: axisColor,\n tickColor: axisColor,\n },\n ticks: {\n color: axisColor,\n tickColor: axisColor\n }\n },\n y: {\n grid: {\n color: this.cssPropertyValue('--grid-color'),\n borderColor: axisColor,\n tickColor: axisColor,\n },\n ticks: {\n color: axisColor,\n tickColor: axisColor\n },\n suggestedMin: 0,\n suggestedMax: 10\n }\n }\n }\n }\n \n get delayBetweenPoints() {\n return this.cssPropertyValue('--animation-duration') / this.chartjsData?.datasets[0]?.data?.length\n }\n}\n\nfunction previousY (ctx) {\n return ctx.index === 0 ? ctx.chart.scales.y.getPixelForValue(100) : ctx.chart.getDatasetMeta(ctx.datasetIndex).data[ctx.index - 1].getProps(['y'], true).y;\n}","import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n static targets = [ \"overallDescription\", \"contextualDescription\", \"contextualDescriptionTemplate\" ]\n static classes = [ \"hideOverallDescription\", \"hideContextualDescription\" ]\n \n showDescriptionWith(event) {\n if (!event?.detail?.show) {\n this.hideContextualDescription()\n this.showOverallDescription()\n return\n }\n \n this.hideOverallDescription()\n const value = event?.detail?.value\n const label = event?.detail?.label\n let newHTML = this.contextualDescriptionTemplateTarget.innerHTML\n this.contextualDescriptionTarget.innerHTML = newHTML\n .replaceAll(\"%value%\", value)\n .replaceAll(\"%label%\", label)\n this.showContextualDescription()\n }\n \n hideOverallDescription() {\n this.overallDescriptionTarget.classList.add(...this.hideOverallDescriptionClasses)\n }\n \n showOverallDescription() {\n this.overallDescriptionTarget.classList.remove(...this.hideOverallDescriptionClasses)\n }\n \n hideContextualDescription() {\n this.contextualDescriptionTarget.classList.add(...this.hideContextualDescriptionClasses)\n }\n \n showContextualDescription() {\n this.contextualDescriptionTarget.classList.remove(...this.hideContextualDescriptionClasses)\n }\n}","import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n static targets = [ \"chartSourceData\", \"chart\" ]\n static values = {\n eventName: {\n type: String,\n default: \"update-chart\"\n }\n }\n \n updateChart(event) {\n this.chartSourceDataTarget.innerHTML = event.detail.dataElement.innerHTML\n event.detail.dataElement.remove()\n this.chartTarget.dispatchEvent(new CustomEvent(this.eventNameValue))\n }\n}","import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n static targets = [ \"data\" ]\n static values = {\n eventName: {\n type: String,\n default: \"superchart:update-chart\"\n }\n }\n \n connect() {\n this.element.dispatchEvent(\n new CustomEvent(this.eventNameValue, {\n detail: { dataElement: this.dataTarget },\n bubbles: true,\n cancelable: true\n })\n )\n }\n}","import { identifierForContextKey } from \"@hotwired/stimulus-webpack-helpers\"\n\nimport SuperchartController from \"./superchart_controller\"\nimport DescribableController from \"./supercharts/describable_controller\"\nimport FilterableController from \"./supercharts/filterable_controller\"\nimport FiltersController from \"./supercharts/filters_controller\"\n\nexport const controllerDefinitions = [\n [SuperchartController, \"superchart_controller.js\"],\n [DescribableController, \"supercharts/describable_controller.js\"],\n [FilterableController, \"supercharts/filterable_controller.js\"],\n [FiltersController, \"supercharts/filters_controller.js\"],\n].map(function(d) {\n const key = d[1]\n const controller = d[0]\n return {\n identifier: identifierForContextKey(key),\n controllerConstructor: controller\n }\n})\n\nexport {\n SuperchartController,\n DescribableController,\n FilterableController,\n FiltersController,\n}\n"],"names":["identifierForContextKey","key","logicalName","match","replace","SuperchartChartjsController","connect","super","updateChart","describeDataForX","event","dataIndex","tooltip","_event$tooltip","dataPoints","this","dispatch","detail","label","csvData","columns","value","show","_event$tooltip2","opacity","parseCsvData","parseContentsAsCsv","csvDataTarget","chartjsData","hasChartJsDataTarget","hasCsvDataTarget","labels","map","d","datasets","type","typeValue","data","console","warn","chartjsOptions","_extends","defaultOptions","hasChartjsOptionsTarget","options","parseContentsAsJSON","chartjsOptionsTarget","parseForCssVars","animationOptions","runAnimations","x","easing","duration","delayBetweenPoints","from","NaN","delay","ctx","xStarted","index","y","previousY","yStarted","cssPropertyValue","maintainAspectRatio","animation","interaction","mode","intersect","resizeDelay","onResize","handleResize","bind","plugins","legend","display","enabled","position","external","color","axisColor","fill","lineTension","borderColor","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","pointBorderColor","pointBackgroundColor","pointHoverBackgroundColor","pointHoverBorderColor","pointRadius","Number","pointHoverRadius","pointBorderWidth","pointHoverBorderWidth","pointHitRadius","backgroundColor","hoverBackgroundColor","spanGaps","scales","grid","tickColor","ticks","suggestedMin","suggestedMax","_this$chartjsData","_this$chartjsData$dat","_this$chartjsData$dat2","length","chart","getPixelForValue","getDatasetMeta","datasetIndex","getProps","targets","values","String","default","defaultCssProperties","Controller","showDescriptionWith","_event$detail","_event$detail2","_event$detail3","hideContextualDescription","showOverallDescription","hideOverallDescription","contextualDescriptionTarget","innerHTML","contextualDescriptionTemplateTarget","replaceAll","showContextualDescription","overallDescriptionTarget","classList","add","hideOverallDescriptionClasses","remove","hideContextualDescriptionClasses","classes","chartSourceDataTarget","dataElement","chartTarget","dispatchEvent","CustomEvent","eventNameValue","eventName","_class","element","dataTarget","bubbles","cancelable","controllerDefinitions","SuperchartController","DescribableController","FilterableController","FiltersController","controller","identifier","controllerConstructor"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("@supercharts/stimulus-base"),require("@hotwired/stimulus")):"function"==typeof define&&define.amd?define(["exports","@supercharts/stimulus-base","@hotwired/stimulus"],e):e((t||self).superchartsBulletTrain={},t.stimulusBase,t.stimulus)}(this,function(t,e,r){function s(t){const e=(t.match(/^(?:\.\/)?(.+)(?:[_-]controller\..+?)$/)||[])[1];if(e)return e.replace(/_/g,"-").replace(/\//g,"--")}class a extends e.SuperchartChartjsController{connect(){super.connect()}updateChart(){super.updateChart()}describeDataForX(t){var e,r;const s=(null==t||null==(e=t.tooltip)?void 0:e.dataPoints[0]).dataIndex;this.dispatch("description-requested",{detail:{label:this.csvData[s][this.csvData.columns[1]],value:this.csvData[s][this.csvData.columns[3]],show:!(null==t||null==(r=t.tooltip)||!r.opacity)}})}parseCsvData(){this.csvData=e.parseContentsAsCsv(this.csvDataTarget)}get chartjsData(){return this.hasChartJsDataTarget?super.chartjsData():this.hasCsvDataTarget?(this.parseCsvData(),{labels:this.csvData.map(t=>t[this.csvData.columns[0]]),datasets:[{type:this.typeValue,label:"Value",data:this.csvData.map(t=>t[this.csvData.columns[2]])}]}):(console.warn("The chart needs data in a in a csv target or in a chartjsData target (in chart.js JSON)"),[])}get chartjsOptions(){let t={...this.defaultOptions};return this.hasChartjsOptionsTarget&&(t={...t,...e.parseContentsAsJSON(this.chartjsOptionsTarget)}),this.parseForCssVars(t)}get animationOptions(){return!1!==this.runAnimations&&{x:{type:"number",easing:"linear",duration:this.delayBetweenPoints,from:NaN,delay:t=>"data"!==t.type||t.xStarted?0:(t.xStarted=!0,t.index*this.delayBetweenPoints)},y:{type:"number",easing:"linear",duration:this.delayBetweenPoints,from:o,delay:t=>"data"!==t.type||t.yStarted?0:(t.yStarted=!0,t.index*this.delayBetweenPoints)}}}get defaultOptions(){const t=this.cssPropertyValue("--axis-color");return{maintainAspectRatio:!1,animation:this.animationOptions,interaction:{mode:"index",intersect:!1},resizeDelay:200,onResize:this.handleResize.bind(this),plugins:{legend:{display:!1},tooltip:{enabled:!1,position:"nearest",external:this.describeDataForX.bind(this)}},color:t,fill:!1,lineTension:.3,borderColor:this.cssPropertyValue("--line-color"),borderCapStyle:"butt",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",pointBorderColor:this.cssPropertyValue("--point-stroke-color"),pointBackgroundColor:this.cssPropertyValue("--point-color"),pointHoverBackgroundColor:this.cssPropertyValue("--point-color"),pointHoverBorderColor:this.cssPropertyValue("--point-stroke-color-hover"),pointRadius:Number(this.cssPropertyValue("--point-radius")),pointHoverRadius:Number(this.cssPropertyValue("--point-hover-radius")),pointBorderWidth:Number(this.cssPropertyValue("--point-border-width")),pointHoverBorderWidth:Number(this.cssPropertyValue("--point-hover-border-width")),pointHitRadius:10,backgroundColor:this.cssPropertyValue("--bar-fill-color"),hoverBackgroundColor:this.cssPropertyValue("--bar-hover-fill-color"),spanGaps:!1,scales:{x:{grid:{color:this.cssPropertyValue("--grid-color"),borderColor:t,tickColor:t},ticks:{color:t,tickColor:t}},y:{grid:{color:this.cssPropertyValue("--grid-color"),borderColor:t,tickColor:t},ticks:{color:t,tickColor:t},suggestedMin:0,suggestedMax:10}}}}get delayBetweenPoints(){var t,e,r;return this.cssPropertyValue("--animation-duration")/(null==(t=this.chartjsData)||null==(e=t.datasets[0])||null==(r=e.data)?void 0:r.length)}}function o(t){return 0===t.index?t.chart.scales.y.getPixelForValue(100):t.chart.getDatasetMeta(t.datasetIndex).data[t.index-1].getProps(["y"],!0).y}a.targets=["chartjsOptions","chartjsData","chartjsCanvas","csvData"],a.values={type:{type:String,default:"line"}},a.defaultCssProperties={"--animation-duration":200,"--axis-color":"#999","--grid-color":"#eee","--line-color":"#aaa","--point-color":"#333","--point-stroke-color":"#fff","--point-stroke-color-hover":"#eee","--bar-fill-color":"#999","--bar-hover-fill-color":"#333","--point-radius":6,"--point-hover-radius":10,"--point-border-width":4,"--point-hover-border-width":3};class i extends r.Controller{showDescriptionWith(t){var e,r,s;if(null==t||null==(e=t.detail)||!e.show)return this.hideContextualDescription(),void this.showOverallDescription();this.hideOverallDescription();const a=null==t||null==(r=t.detail)?void 0:r.value,o=null==t||null==(s=t.detail)?void 0:s.label;this.contextualDescriptionTarget.innerHTML=this.contextualDescriptionTemplateTarget.innerHTML.replaceAll("%value%",a).replaceAll("%label%",o),this.showContextualDescription()}hideOverallDescription(){this.overallDescriptionTarget.classList.add(...this.hideOverallDescriptionClasses)}showOverallDescription(){this.overallDescriptionTarget.classList.remove(...this.hideOverallDescriptionClasses)}hideContextualDescription(){this.contextualDescriptionTarget.classList.add(...this.hideContextualDescriptionClasses)}showContextualDescription(){this.contextualDescriptionTarget.classList.remove(...this.hideContextualDescriptionClasses)}}i.targets=["overallDescription","contextualDescription","contextualDescriptionTemplate"],i.classes=["hideOverallDescription","hideContextualDescription"];class l extends r.Controller{updateChart(t){this.chartSourceDataTarget.innerHTML=t.detail.dataElement.innerHTML,t.detail.dataElement.remove(),this.chartTarget.dispatchEvent(new CustomEvent(this.eventNameValue))}}l.targets=["chartSourceData","chart"],l.values={eventName:{type:String,default:"update-chart"}};class n extends r.Controller{connect(){this.element.dispatchEvent(new CustomEvent(this.eventNameValue,{detail:{dataElement:this.dataTarget},bubbles:!0,cancelable:!0}))}}n.targets=["data"],n.values={eventName:{type:String,default:"superchart:update-chart"}};const c=[[a,"superchart_controller.js"],[i,"supercharts/describable_controller.js"],[l,"supercharts/filterable_controller.js"],[n,"supercharts/filters_controller.js"]].map(function(t){const e=t[0];return{identifier:s(t[1]),controllerConstructor:e}});t.DescribableController=i,t.FilterableController=l,t.FiltersController=n,t.SuperchartController=a,t.controllerDefinitions=c});
2
- //# sourceMappingURL=supercharts-bullet-train.umd.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"supercharts-bullet-train.umd.js","sources":["../../../node_modules/@hotwired/stimulus-webpack-helpers/dist/stimulus-webpack-helpers.js","../../javascript/controllers/superchart_controller.js","../../javascript/controllers/supercharts/describable_controller.js","../../javascript/controllers/supercharts/filterable_controller.js","../../javascript/controllers/supercharts/filters_controller.js","../../javascript/controllers/index.js"],"sourcesContent":["/*\nStimulus Webpack Helpers 1.0.0\nCopyright © 2021 Basecamp, LLC\n */\nfunction definitionsFromContext(context) {\n return context.keys()\n .map((key) => definitionForModuleWithContextAndKey(context, key))\n .filter((value) => value);\n}\nfunction definitionForModuleWithContextAndKey(context, key) {\n const identifier = identifierForContextKey(key);\n if (identifier) {\n return definitionForModuleAndIdentifier(context(key), identifier);\n }\n}\nfunction definitionForModuleAndIdentifier(module, identifier) {\n const controllerConstructor = module.default;\n if (typeof controllerConstructor == \"function\") {\n return { identifier, controllerConstructor };\n }\n}\nfunction identifierForContextKey(key) {\n const logicalName = (key.match(/^(?:\\.\\/)?(.+)(?:[_-]controller\\..+?)$/) || [])[1];\n if (logicalName) {\n return logicalName.replace(/_/g, \"-\").replace(/\\//g, \"--\");\n }\n}\n\nexport { definitionForModuleAndIdentifier, definitionForModuleWithContextAndKey, definitionsFromContext, identifierForContextKey };\n","import { SuperchartChartjsController, parseContentsAsJSON, parseContentsAsCsv } from '@supercharts/stimulus-base'\n\nexport default class extends SuperchartChartjsController {\n static targets = [ \"chartjsOptions\", \"chartjsData\", \"chartjsCanvas\", \"csvData\" ]\n static values = {\n type: { \n type: String,\n default: \"line\"\n }\n }\n \n static defaultCssProperties = {\n '--animation-duration': 200, // milliseconds\n '--axis-color': '#999',\n '--grid-color': '#eee',\n '--line-color': '#aaa',\n '--point-color': '#333',\n '--point-stroke-color': '#fff',\n '--point-stroke-color-hover': '#eee',\n '--bar-fill-color': '#999',\n '--bar-hover-fill-color': '#333',\n '--point-radius': 6,\n '--point-hover-radius': 10,\n '--point-border-width': 4,\n '--point-hover-border-width': 3,\n }\n \n connect() {\n super.connect()\n }\n \n updateChart() {\n super.updateChart()\n }\n \n describeDataForX(event) {\n const point = event?.tooltip?.dataPoints[0]\n const dataIndex = point.dataIndex\n this.dispatch(\"description-requested\", { detail: {\n label: this.csvData[dataIndex][this.csvData.columns[1]],\n value: this.csvData[dataIndex][this.csvData.columns[3]],\n show: !!event?.tooltip?.opacity\n } })\n }\n \n parseCsvData() {\n this.csvData = parseContentsAsCsv(this.csvDataTarget)\n }\n \n get chartjsData() {\n if (this.hasChartJsDataTarget) {\n return super.chartjsData()\n }\n if (!this.hasCsvDataTarget) {\n console.warn(`The chart needs data in a in a csv target or in a chartjsData target (in chart.js JSON)`)\n return []\n }\n \n this.parseCsvData()\n \n return {\n labels: this.csvData.map(d => d[this.csvData.columns[0]]),\n datasets: [{\n type: this.typeValue,\n label: \"Value\",\n data: this.csvData.map(d => d[this.csvData.columns[2]])\n }]\n }\n }\n \n get chartjsOptions() {\n let options = {\n ...this.defaultOptions\n }\n \n if (this.hasChartjsOptionsTarget) {\n options = {\n ...options,\n ...parseContentsAsJSON(this.chartjsOptionsTarget)\n }\n }\n \n return this.parseForCssVars(options)\n }\n \n get animationOptions() {\n if (this.runAnimations === false) { return false }\n return {\n x: {\n type: 'number',\n easing: 'linear',\n duration: this.delayBetweenPoints,\n from: NaN, // the point is initially skipped\n delay: (ctx) => {\n if (ctx.type !== 'data' || ctx.xStarted) {\n return 0;\n }\n ctx.xStarted = true;\n return ctx.index * this.delayBetweenPoints;\n }\n },\n y: {\n type: 'number',\n easing: 'linear',\n duration: this.delayBetweenPoints,\n from: previousY,\n delay: (ctx) => {\n if (ctx.type !== 'data' || ctx.yStarted) {\n return 0;\n }\n ctx.yStarted = true;\n return ctx.index * this.delayBetweenPoints;\n }\n }\n }\n }\n\n // You can set default options in this getter for all your charts.\n get defaultOptions() {\n const axisColor = this.cssPropertyValue('--axis-color')\n return {\n maintainAspectRatio: false,\n animation: this.animationOptions,\n interaction: {\n mode: 'index',\n intersect: false,\n },\n resizeDelay: 200, // milliseconds\n onResize: this.handleResize.bind(this),\n plugins: {\n legend: {\n display: false,\n },\n tooltip: {\n enabled: false,\n position: 'nearest',\n external: this.describeDataForX.bind(this)\n }\n },\n color: axisColor,\n fill: false,\n lineTension: 0.3,\n borderColor: this.cssPropertyValue('--line-color'),\n borderCapStyle: \"butt\",\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: \"miter\",\n pointBorderColor: this.cssPropertyValue('--point-stroke-color'),\n pointBackgroundColor: this.cssPropertyValue('--point-color'),\n pointHoverBackgroundColor: this.cssPropertyValue('--point-color'),\n pointHoverBorderColor: this.cssPropertyValue('--point-stroke-color-hover'),\n pointRadius: Number(this.cssPropertyValue('--point-radius')),\n pointHoverRadius: Number(this.cssPropertyValue('--point-hover-radius')),\n pointBorderWidth: Number(this.cssPropertyValue('--point-border-width')),\n pointHoverBorderWidth: Number(this.cssPropertyValue('--point-hover-border-width')),\n pointHitRadius: 10,\n backgroundColor: this.cssPropertyValue('--bar-fill-color'),\n hoverBackgroundColor: this.cssPropertyValue('--bar-hover-fill-color'),\n spanGaps: false,\n scales: {\n x: {\n grid: {\n color: this.cssPropertyValue('--grid-color'),\n borderColor: axisColor,\n tickColor: axisColor,\n },\n ticks: {\n color: axisColor,\n tickColor: axisColor\n }\n },\n y: {\n grid: {\n color: this.cssPropertyValue('--grid-color'),\n borderColor: axisColor,\n tickColor: axisColor,\n },\n ticks: {\n color: axisColor,\n tickColor: axisColor\n },\n suggestedMin: 0,\n suggestedMax: 10\n }\n }\n }\n }\n \n get delayBetweenPoints() {\n return this.cssPropertyValue('--animation-duration') / this.chartjsData?.datasets[0]?.data?.length\n }\n}\n\nfunction previousY (ctx) {\n return ctx.index === 0 ? ctx.chart.scales.y.getPixelForValue(100) : ctx.chart.getDatasetMeta(ctx.datasetIndex).data[ctx.index - 1].getProps(['y'], true).y;\n}","import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n static targets = [ \"overallDescription\", \"contextualDescription\", \"contextualDescriptionTemplate\" ]\n static classes = [ \"hideOverallDescription\", \"hideContextualDescription\" ]\n \n showDescriptionWith(event) {\n if (!event?.detail?.show) {\n this.hideContextualDescription()\n this.showOverallDescription()\n return\n }\n \n this.hideOverallDescription()\n const value = event?.detail?.value\n const label = event?.detail?.label\n let newHTML = this.contextualDescriptionTemplateTarget.innerHTML\n this.contextualDescriptionTarget.innerHTML = newHTML\n .replaceAll(\"%value%\", value)\n .replaceAll(\"%label%\", label)\n this.showContextualDescription()\n }\n \n hideOverallDescription() {\n this.overallDescriptionTarget.classList.add(...this.hideOverallDescriptionClasses)\n }\n \n showOverallDescription() {\n this.overallDescriptionTarget.classList.remove(...this.hideOverallDescriptionClasses)\n }\n \n hideContextualDescription() {\n this.contextualDescriptionTarget.classList.add(...this.hideContextualDescriptionClasses)\n }\n \n showContextualDescription() {\n this.contextualDescriptionTarget.classList.remove(...this.hideContextualDescriptionClasses)\n }\n}","import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n static targets = [ \"chartSourceData\", \"chart\" ]\n static values = {\n eventName: {\n type: String,\n default: \"update-chart\"\n }\n }\n \n updateChart(event) {\n this.chartSourceDataTarget.innerHTML = event.detail.dataElement.innerHTML\n event.detail.dataElement.remove()\n this.chartTarget.dispatchEvent(new CustomEvent(this.eventNameValue))\n }\n}","import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n static targets = [ \"data\" ]\n static values = {\n eventName: {\n type: String,\n default: \"superchart:update-chart\"\n }\n }\n \n connect() {\n this.element.dispatchEvent(\n new CustomEvent(this.eventNameValue, {\n detail: { dataElement: this.dataTarget },\n bubbles: true,\n cancelable: true\n })\n )\n }\n}","import { identifierForContextKey } from \"@hotwired/stimulus-webpack-helpers\"\n\nimport SuperchartController from \"./superchart_controller\"\nimport DescribableController from \"./supercharts/describable_controller\"\nimport FilterableController from \"./supercharts/filterable_controller\"\nimport FiltersController from \"./supercharts/filters_controller\"\n\nexport const controllerDefinitions = [\n [SuperchartController, \"superchart_controller.js\"],\n [DescribableController, \"supercharts/describable_controller.js\"],\n [FilterableController, \"supercharts/filterable_controller.js\"],\n [FiltersController, \"supercharts/filters_controller.js\"],\n].map(function(d) {\n const key = d[1]\n const controller = d[0]\n return {\n identifier: identifierForContextKey(key),\n controllerConstructor: controller\n }\n})\n\nexport {\n SuperchartController,\n DescribableController,\n FilterableController,\n FiltersController,\n}\n"],"names":["identifierForContextKey","key","logicalName","match","replace","SuperchartChartjsController","connect","super","updateChart","describeDataForX","event","dataIndex","tooltip","_event$tooltip","dataPoints","this","dispatch","detail","label","csvData","columns","value","show","_event$tooltip2","opacity","parseCsvData","parseContentsAsCsv","csvDataTarget","chartjsData","hasChartJsDataTarget","hasCsvDataTarget","labels","map","d","datasets","type","typeValue","data","console","warn","chartjsOptions","options","defaultOptions","hasChartjsOptionsTarget","parseContentsAsJSON","chartjsOptionsTarget","parseForCssVars","animationOptions","runAnimations","x","easing","duration","delayBetweenPoints","from","NaN","delay","ctx","xStarted","index","y","previousY","yStarted","axisColor","cssPropertyValue","maintainAspectRatio","animation","interaction","mode","intersect","resizeDelay","onResize","handleResize","bind","plugins","legend","display","enabled","position","external","color","fill","lineTension","borderColor","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","pointBorderColor","pointBackgroundColor","pointHoverBackgroundColor","pointHoverBorderColor","pointRadius","Number","pointHoverRadius","pointBorderWidth","pointHoverBorderWidth","pointHitRadius","backgroundColor","hoverBackgroundColor","spanGaps","scales","grid","tickColor","ticks","suggestedMin","suggestedMax","_this$chartjsData","_this$chartjsData$dat","_this$chartjsData$dat2","length","chart","getPixelForValue","getDatasetMeta","datasetIndex","getProps","targets","values","String","default","defaultCssProperties","Controller","showDescriptionWith","_event$detail","_event$detail2","_event$detail3","hideContextualDescription","showOverallDescription","hideOverallDescription","contextualDescriptionTarget","innerHTML","contextualDescriptionTemplateTarget","replaceAll","showContextualDescription","overallDescriptionTarget","classList","add","hideOverallDescriptionClasses","remove","hideContextualDescriptionClasses","classes","chartSourceDataTarget","dataElement","chartTarget","dispatchEvent","CustomEvent","eventNameValue","eventName","_class","element","dataTarget","bubbles","cancelable","controllerDefinitions","SuperchartController","DescribableController","FilterableController","FiltersController","controller","identifier","controllerConstructor"],"mappings":"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"}