supercharts-bullet_train 0.1.8 → 0.1.10

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: 7d0ed49f3fda3d5ca8d3f23fc427ba369afd68514aeeafa0401a443770fbbe09
4
- data.tar.gz: 43fc5ca38b33d958edeb1b1b583d8569b2a6feb03953a5a8ee6841c3c5f48065
3
+ metadata.gz: ccbb6f14b547f76aca5280feadf624e38d431ff2bb7ef02ac25ad5c5f6bc6d01
4
+ data.tar.gz: 4d9b1283c5c269ceb9bb8f3ed81bee6cd91ee466ed0e12349fe270896a9caee0
5
5
  SHA512:
6
- metadata.gz: c600af705946b06d0b21d3df54b3f681a64d180c9a606a00e33a2e61751bac5078fa2700efcd7fef1902543c367333f6caf4711a6afacd0bf583e7c4cbb3f2b2
7
- data.tar.gz: 572397ddc9223d19564a5a9ff4856979e8c8906a019859905b2cb160b6f8be9c5875b20317145e1971fb2c9def61f13359b8a36e456e2865803ab43c8e6cb057
6
+ metadata.gz: 2142b4b2a98043da078170a8571917e2e71b9a57a0766231c497ff6c9042f3d0aa8057fb9278cb6b22f66294873011cd005e8155d2e54367a5dbaf7fd0e89c91
7
+ data.tar.gz: fabab436ce65fc506383b7333e9d54efdf6756e795847c56981eb79be318daff64eef0a85cc3ba299f3a9bf5de95bafbb6c23929ed5ad39cbe47f560806f0e1a
data/README.md CHANGED
@@ -1,12 +1,26 @@
1
1
  # Supercharts for Bullet Train
2
2
 
3
- Add charts to a [Bullet Train Rails app](https://bullettrain.co) the same way you super-scaffold a resource.
4
-
5
- ## Usage
6
- How to use my plugin.
3
+ Add charts to a [Bullet Train Rails app][bullet-train] the same way you super-scaffold a resource.
7
4
 
8
5
  ## Installation
9
- Add this line to your application's Gemfile:
6
+
7
+ ### Start a Bullet Train app
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.
10
+
11
+ #### Using it in a non-Bullet Train Rails app
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.
14
+
15
+ #### Using it in an older version of Bullet Train
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.
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.
20
+
21
+ ### Add the gem
22
+
23
+ Add this line to your application's `Gemfile`:
10
24
 
11
25
  ```ruby
12
26
  gem "supercharts-bullet_train"
@@ -22,8 +36,89 @@ Or install it yourself as:
22
36
  $ gem install supercharts-bullet_train
23
37
  ```
24
38
 
39
+ ### Add the `groupdate` gem
40
+
41
+ You'll also need the `groupdate` gem.
42
+
43
+ Add this line to your application's `Gemfile`:
44
+
45
+ ```ruby
46
+ gem "groupdate"
47
+ ```
48
+
49
+ And then execute:
50
+ ```bash
51
+ $ bundle
52
+ ```
53
+
54
+ Or install it yourself as:
55
+ ```bash
56
+ $ gem install groupdate
57
+ ```
58
+
59
+ ### Add the npm package
60
+
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.
62
+
63
+ ```bash
64
+ yarn add @supercharts/supercharts-bullet-train
65
+ ```
66
+
67
+ In your `app/javascript/controllers/index.js`, add the following lines:
68
+
69
+ ```js
70
+ // near the top
71
+ import { controllerDefinitions as superchartsControllers } from "@supercharts/supercharts-bullet-train"
72
+
73
+ // after application = Application.start()
74
+ application.load(superchartsControllers)
75
+ ```
76
+
77
+ You're all set.
78
+
79
+ ## Usage
80
+
81
+ Let's 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).
82
+
83
+ You'd like a chart to appear in your Dashboard, showing how many click-throughs per day (so we'll group by), associated with your Team.
84
+
85
+ ```bash
86
+ bin/super-scaffold supercharts:chart ClickThrough Team
87
+ ```
88
+
89
+ ### Generate some test data
90
+
91
+ We'll use a FactoryBot `trait` to randomize the `created_at` property for the test data we'll create.
92
+
93
+ ```ruby
94
+ # test/factories/click_throughs.rb
95
+ FactoryBot.define do
96
+ factory :click_through do
97
+ association :team
98
+ # add the following lines if the file was already created
99
+ trait :created_last_2_months do
100
+ created_at { Time.at(2.months.ago + rand * (Time.now.to_f - 2.months.ago.to_f)) }
101
+ end
102
+ end
103
+ end
104
+ ```
105
+
106
+ Then from the `rails console`:
107
+
108
+ ```ruby
109
+ FactoryBot.create_list(:click_through, 450, :created_last_2_months, team_id: 1)
110
+ ```
111
+
112
+ Visit your app in `localhost:3000` and you should see your new chart.
113
+
114
+ ## Modifying the chart
115
+
116
+ Coming soon...
117
+
25
118
  ## Contributing
26
119
  Contribution directions go here.
27
120
 
28
121
  ## License
29
122
  The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
123
+
124
+ [bullet-train]: https://bullettrain.co
@@ -1,2 +1,2 @@
1
- import{SuperchartChartjsController as t,parseContentsAsJSON as e}from"@supercharts/stimulus-base";import*as r from"d3";import{Controller as a}from"@hotwired/stimulus";function o(t){const e=(t.match(/^(?:\.\/)?(.+)(?:[_-]controller\..+?)$/)||[])[1];if(e)return e.replace(/_/g,"-").replace(/\//g,"--")}class s extends t{connect(){super.connect()}updateChart(){super.updateChart()}get chartjsData(){if(this.hasChartJsDataTarget)return super.chartjsData();if(!this.hasCsvDataTarget)return console.warn("The chart needs data in a in a csv target or in a chartjsData target (in chart.js JSON)"),[];const t=r.csvParse(this.csvDataTarget.innerHTML.trim(),r.autoType);return{labels:t.map(e=>e[t.columns[0]]),datasets:[{type:this.typeValue,label:this.labelValue,data:t.map(e=>e[t.columns[1]])}]}}get chartjsOptions(){let t={...this.defaultOptions};return this.hasChartjsOptionsTarget&&(t={...t,...e(this.chartjsOptionsTarget)}),t}get defaultOptions(){const t=this.cssPropertyValue("--axis-color");return{maintainAspectRatio:!1,animation:{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:n,delay:t=>"data"!==t.type||t.yStarted?0:(t.yStarted=!0,t.index*this.delayBetweenPoints)}},plugins:{legend:{display:!1}},color:t,fill:!1,lineTension:.3,backgroundColor:"#fff",borderColor:this.cssPropertyValue("--line-color"),borderCapStyle:"butt",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",pointBorderColor:this.cssPropertyValue("--point-stroke-color"),pointBackgroundColor:this.cssPropertyValue("--point-color"),pointBorderWidth:4,pointHoverRadius:10,pointHoverBackgroundColor:this.cssPropertyValue("--point-color"),pointHoverBorderColor:this.cssPropertyValue("--point-stroke-color-hover"),pointHoverBorderWidth:3,pointRadius:6,pointHitRadius:10,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}}}}}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 n(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"},label:{type:String,default:"Value"}},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"};class i extends a{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 a{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 c=[[s,"superchart_controller.js"],[i,"supercharts/filterable_controller.js"],[l,"supercharts/filters_controller.js"]].map(function(t){const e=t[0];return{identifier:o(t[1]),controllerConstructor:e}});export{i as FilterableController,l as FiltersController,s as SuperchartController,c as controllerDefinitions};
1
+ import{SuperchartChartjsController as t,parseContentsAsJSON as e}from"@supercharts/stimulus-base";import*as a from"d3";import{Controller as r}from"@hotwired/stimulus";function s(t){const e=(t.match(/^(?:\.\/)?(.+)(?:[_-]controller\..+?)$/)||[])[1];if(e)return e.replace(/_/g,"-").replace(/\//g,"--")}class o extends t{connect(){super.connect()}updateChart(){super.updateChart()}describeDataForX(t){var e,a;const r=(null==t||null==(e=t.tooltip)?void 0:e.dataPoints[0]).dataIndex;this.dispatch("description-requested",{detail:{label:this.csvData[r][this.csvData.columns[1]],value:this.csvData[r][this.csvData.columns[2]],show:!(null==t||null==(a=t.tooltip)||!a.opacity)}})}parseCsvData(){this.csvData=a.csvParse(this.csvDataTarget.innerHTML.trim(),a.autoType)}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(this.chartjsOptionsTarget)}),t}get defaultOptions(){const t=this.cssPropertyValue("--axis-color");return{maintainAspectRatio:!1,animation:{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:i,delay:t=>"data"!==t.type||t.yStarted?0:(t.yStarted=!0,t.index*this.delayBetweenPoints)}},interaction:{mode:"index",intersect:!1},plugins:{legend:{display:!1},tooltip:{enabled:!1,position:"nearest",external:this.describeDataForX.bind(this)}},color:t,fill:!1,lineTension:.3,backgroundColor:"#fff",borderColor:this.cssPropertyValue("--line-color"),borderCapStyle:"butt",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",pointBorderColor:this.cssPropertyValue("--point-stroke-color"),pointBackgroundColor:this.cssPropertyValue("--point-color"),pointBorderWidth:4,pointHoverRadius:10,pointHoverBackgroundColor:this.cssPropertyValue("--point-color"),pointHoverBorderColor:this.cssPropertyValue("--point-stroke-color-hover"),pointHoverBorderWidth:3,pointRadius:6,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}}}}}get delayBetweenPoints(){var t,e,a;return this.cssPropertyValue("--animation-duration")/(null==(t=this.chartjsData)||null==(e=t.datasets[0])||null==(a=e.data)?void 0:a.length)}}function i(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"};class l extends r{showDescriptionWith(t){var e,a,r;if(null==t||null==(e=t.detail)||!e.show)return this.hideContextualDescription(),void this.showOverallDescription();this.hideOverallDescription();const s=null==t||null==(a=t.detail)?void 0:a.value,o=null==t||null==(r=t.detail)?void 0:r.label;this.contextualDescriptionTarget.innerHTML=this.contextualDescriptionTemplateTarget.innerHTML.replaceAll("%value%",s).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)}}l.targets=["overallDescription","contextualDescription","contextualDescriptionTemplate"],l.classes=["hideOverallDescription","hideContextualDescription"];class n extends r{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 r{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=[[o,"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,o as SuperchartController,h as controllerDefinitions};
2
2
  //# sourceMappingURL=supercharts-bullet-train.esm.js.map
@@ -1 +1 @@
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/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 } from '@supercharts/stimulus-base'\nimport * as d3 from \"d3\"\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 label: {\n type: String,\n default: \"Value\"\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 }\n \n connect() {\n super.connect()\n }\n \n updateChart() {\n super.updateChart()\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 const csv = d3.csvParse(this.csvDataTarget.innerHTML.trim(), d3.autoType)\n return {\n labels: csv.map(d => d[csv.columns[0]]),\n datasets: [{\n type: this.typeValue,\n label: this.labelValue,\n data: csv.map(d => d[csv.columns[1]])\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 options\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: {\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 plugins: {\n legend: {\n display: false,\n }\n },\n color: axisColor,\n fill: false,\n lineTension: 0.3,\n backgroundColor: \"#fff\",\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 pointBorderWidth: 4,\n pointHoverRadius: 10,\n pointHoverBackgroundColor: this.cssPropertyValue('--point-color'),\n pointHoverBorderColor: this.cssPropertyValue('--point-stroke-color-hover'),\n pointHoverBorderWidth: 3,\n pointRadius: 6,\n pointHitRadius: 10,\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 }\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 = [ \"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 FilterableController from \"./supercharts/filterable_controller\"\nimport FiltersController from \"./supercharts/filters_controller\"\n\nexport const controllerDefinitions = [\n [SuperchartController, \"superchart_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 FilterableController,\n FiltersController,\n}\n"],"names":["identifierForContextKey","key","logicalName","match","replace","SuperchartChartjsController","connect","super","updateChart","chartjsData","this","hasChartJsDataTarget","hasCsvDataTarget","console","warn","d3","csvParse","csvDataTarget","innerHTML","trim","autoType","labels","csv","map","d","columns","datasets","type","typeValue","label","labelValue","data","chartjsOptions","options","defaultOptions","hasChartjsOptionsTarget","parseContentsAsJSON","chartjsOptionsTarget","axisColor","cssPropertyValue","maintainAspectRatio","animation","x","easing","duration","delayBetweenPoints","from","NaN","delay","ctx","xStarted","index","y","previousY","yStarted","plugins","legend","display","color","fill","lineTension","backgroundColor","borderColor","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","pointBorderColor","pointBackgroundColor","pointBorderWidth","pointHoverRadius","pointHoverBackgroundColor","pointHoverBorderColor","pointHoverBorderWidth","pointRadius","pointHitRadius","spanGaps","scales","grid","tickColor","ticks","_this$chartjsData","_this$chartjsData$dat","_this$chartjsData$dat2","length","chart","getPixelForValue","getDatasetMeta","datasetIndex","getProps","targets","values","String","default","defaultCssProperties","Controller","event","chartSourceDataTarget","detail","dataElement","remove","chartTarget","dispatchEvent","CustomEvent","eventNameValue","eventName","_class","element","dataTarget","bubbles","cancelable","controllerDefinitions","SuperchartController","FilterableController","FiltersController","controller","identifier","controllerConstructor"],"mappings":"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"}
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 } from '@supercharts/stimulus-base'\nimport * as d3 from \"d3\"\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 }\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[2]],\n show: !!event?.tooltip?.opacity\n } })\n }\n \n parseCsvData() {\n this.csvData = d3.csvParse(this.csvDataTarget.innerHTML.trim(), d3.autoType)\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 options\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: {\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 interaction: {\n mode: 'index',\n intersect: false,\n },\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 backgroundColor: \"#fff\",\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 pointBorderWidth: 4,\n pointHoverRadius: 10,\n pointHoverBackgroundColor: this.cssPropertyValue('--point-color'),\n pointHoverBorderColor: this.cssPropertyValue('--point-stroke-color-hover'),\n pointHoverBorderWidth: 3,\n pointRadius: 6,\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 }\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","_event$tooltip","tooltip","dataPoints","this","dispatch","detail","label","csvData","columns","value","show","_event$tooltip2","opacity","parseCsvData","d3","csvParse","csvDataTarget","innerHTML","trim","autoType","chartjsData","hasChartJsDataTarget","hasCsvDataTarget","labels","map","d","datasets","type","typeValue","data","console","warn","options","defaultOptions","hasChartjsOptionsTarget","parseContentsAsJSON","chartjsOptionsTarget","cssPropertyValue","maintainAspectRatio","animation","x","easing","duration","delayBetweenPoints","from","NaN","delay","ctx","xStarted","index","y","previousY","yStarted","interaction","mode","intersect","plugins","legend","display","enabled","position","external","bind","color","axisColor","fill","lineTension","backgroundColor","borderColor","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","pointBorderColor","pointBackgroundColor","pointBorderWidth","pointHoverRadius","pointHoverBackgroundColor","pointHoverBorderColor","pointHoverBorderWidth","pointRadius","pointHitRadius","hoverBackgroundColor","spanGaps","scales","grid","tickColor","ticks","_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","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":"uKAqBA,SAASA,EAAwBC,GAC7B,MAAMC,GAAeD,EAAIE,MAAM,2CAA6C,IAAI,GAChF,GAAID,EACA,OAAOA,EAAYE,QAAQ,KAAM,KAAKA,QAAQ,MAAO,KAE7D,iBCvByDC,EAqBvDC,UACEC,MAAMD,SACP,CAEDE,cACED,MAAMC,aACP,CAEDC,iBAAiBC,WACf,MACMC,GADK,MAAGD,UAAHE,EAAGF,EAAOG,cAAV,EAAGD,EAAgBE,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,OAAO,MAACZ,UAADa,EAACb,EAAOG,WAAPU,EAAgBC,WAE3B,CAEDC,eACEV,KAAKI,QAAUO,EAAGC,SAASZ,KAAKa,cAAcC,UAAUC,OAAQJ,EAAGK,SACpE,CAEGC,kBACF,OAAIjB,KAAKkB,qBACA1B,MAAMyB,cAEVjB,KAAKmB,kBAKVnB,KAAKU,eAEE,CACLU,OAAQpB,KAAKI,QAAQiB,IAAIC,GAAKA,EAAEtB,KAAKI,QAAQC,QAAQ,KACrDkB,SAAU,CAAC,CACTC,KAAMxB,KAAKyB,UACXtB,MAAO,QACPuB,KAAM1B,KAAKI,QAAQiB,IAAIC,GAAKA,EAAEtB,KAAKI,QAAQC,QAAQ,UAXrDsB,QAAQC,KAAM,2FACP,GAaV,sBAGC,IAAWC,EAAG,IACT7B,KAAK8B,gBAUV,OAPI9B,KAAK+B,0BACPF,EAAU,IACLA,KACAG,EAAoBhC,KAAKiC,wBAIzBJ,CACR,CAGGC,qBACF,QAAkB9B,KAAKkC,iBAAiB,gBACxC,MAAO,CACLC,qBAAqB,EACrBC,UAAW,CACTC,EAAG,CACDb,KAAM,SACNc,OAAQ,SACRC,SAAUvC,KAAKwC,mBACfC,KAAMC,IACNC,MAAQC,GACW,SAAbA,EAAIpB,MAAmBoB,EAAIC,YAG/BD,EAAIC,UAAW,EACLD,EAACE,MAAQ9C,KAAKwC,qBAG5BO,EAAG,CACDvB,KAAM,SACNc,OAAQ,SACRC,SAAUvC,KAAKwC,mBACfC,KAAMO,EACNL,MAAQC,GACW,SAAbA,EAAIpB,MAAmBoB,EAAIK,SAE9B,GACDL,EAAIK,UAAW,IACJH,MAAQ9C,KAAKwC,sBAI9BU,YAAa,CACXC,KAAM,QACNC,WAAW,GAEbC,QAAS,CACPC,OAAQ,CACNC,SAAS,GAEXzD,QAAS,CACP0D,SAAS,EACTC,SAAU,UACVC,SAAU1D,KAAKN,iBAAiBiE,KAAK3D,QAGzC4D,MAAOC,EACPC,MAAM,EACNC,YAAa,GACbC,gBAAiB,OACjBC,YAAajE,KAAKkC,iBAAiB,gBACnCgC,eAAgB,OAChBC,WAAY,GACZC,iBAAkB,EAClBC,gBAAiB,QACjBC,iBAAkBtE,KAAKkC,iBAAiB,wBACxCqC,qBAAsBvE,KAAKkC,iBAAiB,iBAC5CsC,iBAAkB,EAClBC,iBAAkB,GAClBC,0BAA2B1E,KAAKkC,iBAAiB,iBACjDyC,sBAAuB3E,KAAKkC,iBAAiB,8BAC7C0C,sBAAuB,EACvBC,YAAa,EACbC,eAAgB,GAChBd,gBAAiBhE,KAAKkC,iBAAiB,oBACvC6C,qBAAsB/E,KAAKkC,iBAAiB,0BAC5C8C,UAAU,EACVC,OAAQ,CACN5C,EAAG,CACD6C,KAAM,CACJtB,MAAO5D,KAAKkC,iBAAiB,gBAC7B+B,YAAaJ,EACbsB,UAAWtB,GAEbuB,MAAO,CACLxB,MAAOC,EACPsB,UAAWtB,IAGfd,EAAG,CACDmC,KAAM,CACJtB,MAAO5D,KAAKkC,iBAAiB,gBAC7B+B,YAAaJ,EACbsB,UAAWtB,GAEbuB,MAAO,CACLxB,MAAOC,EACPsB,UAAWtB,KAKpB,CAEqBrB,mCACpB,OAAOxC,KAAKkC,iBAAiB,kCAA0BlC,KAAKiB,uBAALoE,EAAkB9D,SAAS,cAA3B+D,EAA+B5D,aAA/B6D,EAAqCC,OAC7F,EAGH,SAAAxC,EAAoBJ,GAClB,OAAqB,IAAdA,EAAIE,MAAcF,EAAI6C,MAAMR,OAAOlC,EAAE2C,iBAAiB,KAAO9C,EAAI6C,MAAME,eAAe/C,EAAIgD,cAAclE,KAAKkB,EAAIE,MAAQ,GAAG+C,SAAS,CAAC,MAAM,GAAM9C,CAC1J,GApLQ+C,QAAU,CAAE,iBAAkB,cAAe,gBAAiB,WAC9DC,EAAAA,OAAS,CACdvE,KAAM,CACJA,KAAMwE,OACNC,QAAS,WAINC,qBAAuB,CAC5B,uBAAwB,IACxB,eAAgB,OAChB,eAAgB,OAChB,eAAgB,OAChB,gBAAiB,OACjB,uBAAwB,OACxB,6BAA8B,OAC9B,mBAAoB,OACpB,yBAA0B,wBCnBUC,EAItCC,oBAAoBzG,GAAO,IAAA0G,EAAAC,EAAAC,EACzB,SAAK5G,GAAD,SAACA,EAAOO,UAAPmG,EAAe9F,KAGlB,OAFAP,KAAKwG,iCACLxG,KAAKyG,yBAIPzG,KAAK0G,yBACL,QAAc/G,MAAAA,GAAH,OAAGA,EAAAA,EAAOO,aAAPP,EAAA2G,EAAehG,MAClBH,EAAA,MAAGR,UAAH4G,EAAG5G,EAAOO,aAAV,EAAGqG,EAAepG,MAE7BH,KAAK2G,4BAA4B7F,UADnBd,KAAK4G,oCAAoC9F,UAEpD+F,WAAW,UAAWvG,GACtBuG,WAAW,UAAW1G,GACzBH,KAAK8G,2BACN,CAEDJ,yBACE1G,KAAK+G,yBAAyBC,UAAUC,OAAOjH,KAAKkH,8BACrD,CAEDT,yBACEzG,KAAK+G,yBAAyBC,UAAUG,UAAUnH,KAAKkH,8BACxD,CAEDV,4BACExG,KAAK2G,4BAA4BK,UAAUC,OAAOjH,KAAKoH,iCACxD,CAEDN,4BACE9G,KAAK2G,4BAA4BK,UAAUG,UAAUnH,KAAKoH,iCAC3D,IAlCMtB,QAAU,CAAE,qBAAsB,wBAAyB,mCAC3DuB,QAAU,CAAE,yBAA0B,6BCFlBlB,MAAAA,UAAAA,EAS3B1G,YAAYE,GACVK,KAAKsH,sBAAsBxG,UAAYnB,EAAMO,OAAOqH,YAAYzG,UAChEnB,EAAMO,OAAOqH,YAAYJ,SACzBnH,KAAKwH,YAAYC,cAAc,IAAIC,YAAY1H,KAAK2H,gBACrD,IAZM7B,QAAU,CAAE,kBAAmB,SAC/BC,EAAAA,OAAS,CACd6B,UAAW,CACTpG,KAAMwE,OACNC,QAAS,iBCLA,MAAA4B,UAAyB1B,EAStC5G,UACES,KAAK8H,QAAQL,cACX,IAAAC,YAAgB1H,KAAK2H,eAAgB,CACnCzH,OAAQ,CAAEqH,YAAavH,KAAK+H,YAC5BC,SAAS,EACTC,YAAY,IAGjB,IAhBMnC,QAAU,CAAE,UACZC,OAAS,CACd6B,UAAW,CACTpG,KAAMwE,OACNC,QAAS,4BCAFiC,QAAwB,CACnC,CAACC,EAAsB,4BACvB,CAACC,EAAuB,yCACxB,CAACC,EAAsB,wCACvB,CAACC,EAAmB,sCACpBjH,IAAI,SAASC,GACb,MACgBiH,EAAGjH,EAAE,GACrB,MAAO,CACLkH,WAAYvJ,EAHFqC,EAAE,IAIZmH,sBAAuBF,EAE1B"}
@@ -1,2 +1,2 @@
1
- var t=require("@supercharts/stimulus-base"),e=require("d3"),r=require("@hotwired/stimulus");function a(t){if(t&&t.__esModule)return t;var e=Object.create(null);return t&&Object.keys(t).forEach(function(r){if("default"!==r){var a=Object.getOwnPropertyDescriptor(t,r);Object.defineProperty(e,r,a.get?a:{enumerable:!0,get:function(){return t[r]}})}}),e.default=t,e}var o=/*#__PURE__*/a(e);function s(t){const e=(t.match(/^(?:\.\/)?(.+)(?:[_-]controller\..+?)$/)||[])[1];if(e)return e.replace(/_/g,"-").replace(/\//g,"--")}class n extends t.SuperchartChartjsController{connect(){super.connect()}updateChart(){super.updateChart()}get chartjsData(){if(this.hasChartJsDataTarget)return super.chartjsData();if(!this.hasCsvDataTarget)return console.warn("The chart needs data in a in a csv target or in a chartjsData target (in chart.js JSON)"),[];const t=o.csvParse(this.csvDataTarget.innerHTML.trim(),o.autoType);return{labels:t.map(e=>e[t.columns[0]]),datasets:[{type:this.typeValue,label:this.labelValue,data:t.map(e=>e[t.columns[1]])}]}}get chartjsOptions(){let e={...this.defaultOptions};return this.hasChartjsOptionsTarget&&(e={...e,...t.parseContentsAsJSON(this.chartjsOptionsTarget)}),e}get defaultOptions(){const t=this.cssPropertyValue("--axis-color");return{maintainAspectRatio:!1,animation:{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:i,delay:t=>"data"!==t.type||t.yStarted?0:(t.yStarted=!0,t.index*this.delayBetweenPoints)}},plugins:{legend:{display:!1}},color:t,fill:!1,lineTension:.3,backgroundColor:"#fff",borderColor:this.cssPropertyValue("--line-color"),borderCapStyle:"butt",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",pointBorderColor:this.cssPropertyValue("--point-stroke-color"),pointBackgroundColor:this.cssPropertyValue("--point-color"),pointBorderWidth:4,pointHoverRadius:10,pointHoverBackgroundColor:this.cssPropertyValue("--point-color"),pointHoverBorderColor:this.cssPropertyValue("--point-stroke-color-hover"),pointHoverBorderWidth:3,pointRadius:6,pointHitRadius:10,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}}}}}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 i(t){return 0===t.index?t.chart.scales.y.getPixelForValue(100):t.chart.getDatasetMeta(t.datasetIndex).data[t.index-1].getProps(["y"],!0).y}n.targets=["chartjsOptions","chartjsData","chartjsCanvas","csvData"],n.values={type:{type:String,default:"line"},label:{type:String,default:"Value"}},n.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"};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 c extends r.Controller{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 u=[[n,"superchart_controller.js"],[l,"supercharts/filterable_controller.js"],[c,"supercharts/filters_controller.js"]].map(function(t){const e=t[0];return{identifier:s(t[1]),controllerConstructor:e}});exports.FilterableController=l,exports.FiltersController=c,exports.SuperchartController=n,exports.controllerDefinitions=u;
1
+ var t=require("@supercharts/stimulus-base"),e=require("d3"),r=require("@hotwired/stimulus");function a(t){if(t&&t.__esModule)return t;var e=Object.create(null);return t&&Object.keys(t).forEach(function(r){if("default"!==r){var a=Object.getOwnPropertyDescriptor(t,r);Object.defineProperty(e,r,a.get?a:{enumerable:!0,get:function(){return t[r]}})}}),e.default=t,e}var s=/*#__PURE__*/a(e);function o(t){const e=(t.match(/^(?:\.\/)?(.+)(?:[_-]controller\..+?)$/)||[])[1];if(e)return e.replace(/_/g,"-").replace(/\//g,"--")}class i extends t.SuperchartChartjsController{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[2]],show:!(null==t||null==(r=t.tooltip)||!r.opacity)}})}parseCsvData(){this.csvData=s.csvParse(this.csvDataTarget.innerHTML.trim(),s.autoType)}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)}),e}get defaultOptions(){const t=this.cssPropertyValue("--axis-color");return{maintainAspectRatio:!1,animation:{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)}},interaction:{mode:"index",intersect:!1},plugins:{legend:{display:!1},tooltip:{enabled:!1,position:"nearest",external:this.describeDataForX.bind(this)}},color:t,fill:!1,lineTension:.3,backgroundColor:"#fff",borderColor:this.cssPropertyValue("--line-color"),borderCapStyle:"butt",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",pointBorderColor:this.cssPropertyValue("--point-stroke-color"),pointBackgroundColor:this.cssPropertyValue("--point-color"),pointBorderWidth:4,pointHoverRadius:10,pointHoverBackgroundColor:this.cssPropertyValue("--point-color"),pointHoverBorderColor:this.cssPropertyValue("--point-stroke-color-hover"),pointHoverBorderWidth:3,pointRadius:6,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}}}}}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}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"};class n extends r.Controller{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,o=null==t||null==(a=t.detail)?void 0:a.label;this.contextualDescriptionTarget.innerHTML=this.contextualDescriptionTemplateTarget.innerHTML.replaceAll("%value%",s).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)}}n.targets=["overallDescription","contextualDescription","contextualDescriptionTemplate"],n.classes=["hideOverallDescription","hideContextualDescription"];class c extends r.Controller{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 r.Controller{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 u=[[i,"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:o(t[1]),controllerConstructor:e}});exports.DescribableController=n,exports.FilterableController=c,exports.FiltersController=h,exports.SuperchartController=i,exports.controllerDefinitions=u;
2
2
  //# sourceMappingURL=supercharts-bullet-train.js.map
@@ -1 +1 @@
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/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 } from '@supercharts/stimulus-base'\nimport * as d3 from \"d3\"\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 label: {\n type: String,\n default: \"Value\"\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 }\n \n connect() {\n super.connect()\n }\n \n updateChart() {\n super.updateChart()\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 const csv = d3.csvParse(this.csvDataTarget.innerHTML.trim(), d3.autoType)\n return {\n labels: csv.map(d => d[csv.columns[0]]),\n datasets: [{\n type: this.typeValue,\n label: this.labelValue,\n data: csv.map(d => d[csv.columns[1]])\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 options\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: {\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 plugins: {\n legend: {\n display: false,\n }\n },\n color: axisColor,\n fill: false,\n lineTension: 0.3,\n backgroundColor: \"#fff\",\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 pointBorderWidth: 4,\n pointHoverRadius: 10,\n pointHoverBackgroundColor: this.cssPropertyValue('--point-color'),\n pointHoverBorderColor: this.cssPropertyValue('--point-stroke-color-hover'),\n pointHoverBorderWidth: 3,\n pointRadius: 6,\n pointHitRadius: 10,\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 }\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 = [ \"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 FilterableController from \"./supercharts/filterable_controller\"\nimport FiltersController from \"./supercharts/filters_controller\"\n\nexport const controllerDefinitions = [\n [SuperchartController, \"superchart_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 FilterableController,\n FiltersController,\n}\n"],"names":["identifierForContextKey","key","logicalName","match","replace","SuperchartChartjsController","connect","super","updateChart","chartjsData","this","hasChartJsDataTarget","hasCsvDataTarget","console","warn","d3","csvParse","csvDataTarget","innerHTML","trim","autoType","labels","csv","map","d","columns","datasets","type","typeValue","label","labelValue","data","chartjsOptions","options","defaultOptions","hasChartjsOptionsTarget","parseContentsAsJSON","chartjsOptionsTarget","axisColor","cssPropertyValue","maintainAspectRatio","animation","x","easing","duration","delayBetweenPoints","from","NaN","delay","ctx","xStarted","index","y","previousY","yStarted","plugins","legend","display","color","fill","lineTension","backgroundColor","borderColor","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","pointBorderColor","pointBackgroundColor","pointBorderWidth","pointHoverRadius","pointHoverBackgroundColor","pointHoverBorderColor","pointHoverBorderWidth","pointRadius","pointHitRadius","spanGaps","scales","grid","tickColor","ticks","_this$chartjsData","_this$chartjsData$dat","_this$chartjsData$dat2","length","chart","getPixelForValue","getDatasetMeta","datasetIndex","getProps","targets","values","String","default","defaultCssProperties","Controller","event","chartSourceDataTarget","detail","dataElement","remove","chartTarget","dispatchEvent","CustomEvent","eventNameValue","eventName","_class","element","dataTarget","bubbles","cancelable","controllerDefinitions","SuperchartController","FilterableController","FiltersController","controller","identifier","controllerConstructor"],"mappings":"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"}
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 } from '@supercharts/stimulus-base'\nimport * as d3 from \"d3\"\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 }\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[2]],\n show: !!event?.tooltip?.opacity\n } })\n }\n \n parseCsvData() {\n this.csvData = d3.csvParse(this.csvDataTarget.innerHTML.trim(), d3.autoType)\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 options\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: {\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 interaction: {\n mode: 'index',\n intersect: false,\n },\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 backgroundColor: \"#fff\",\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 pointBorderWidth: 4,\n pointHoverRadius: 10,\n pointHoverBackgroundColor: this.cssPropertyValue('--point-color'),\n pointHoverBorderColor: this.cssPropertyValue('--point-stroke-color-hover'),\n pointHoverBorderWidth: 3,\n pointRadius: 6,\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 }\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","_event$tooltip","tooltip","dataPoints","this","dispatch","detail","label","csvData","columns","value","show","_event$tooltip2","opacity","parseCsvData","d3","csvParse","csvDataTarget","innerHTML","trim","autoType","chartjsData","hasChartJsDataTarget","hasCsvDataTarget","labels","map","d","datasets","type","typeValue","data","console","warn","options","defaultOptions","hasChartjsOptionsTarget","parseContentsAsJSON","chartjsOptionsTarget","cssPropertyValue","maintainAspectRatio","animation","x","easing","duration","delayBetweenPoints","from","NaN","delay","ctx","xStarted","index","y","previousY","yStarted","interaction","mode","intersect","plugins","legend","display","enabled","position","external","bind","color","axisColor","fill","lineTension","backgroundColor","borderColor","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","pointBorderColor","pointBackgroundColor","pointBorderWidth","pointHoverRadius","pointHoverBackgroundColor","pointHoverBorderColor","pointHoverBorderWidth","pointRadius","pointHitRadius","hoverBackgroundColor","spanGaps","scales","grid","tickColor","ticks","_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","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 +1,2 @@
1
- import{SuperchartChartjsController as t,parseContentsAsJSON as e}from"@supercharts/stimulus-base";import*as r from"d3";import{Controller as a}from"@hotwired/stimulus";function o(t){const e=(t.match(/^(?:\.\/)?(.+)(?:[_-]controller\..+?)$/)||[])[1];if(e)return e.replace(/_/g,"-").replace(/\//g,"--")}function s(){return s=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},s.apply(this,arguments)}class n extends t{connect(){super.connect()}updateChart(){super.updateChart()}get chartjsData(){if(this.hasChartJsDataTarget)return super.chartjsData();if(!this.hasCsvDataTarget)return console.warn("The chart needs data in a in a csv target or in a chartjsData target (in chart.js JSON)"),[];const t=r.csvParse(this.csvDataTarget.innerHTML.trim(),r.autoType);return{labels:t.map(e=>e[t.columns[0]]),datasets:[{type:this.typeValue,label:this.labelValue,data:t.map(e=>e[t.columns[1]])}]}}get chartjsOptions(){let t=s({},this.defaultOptions);return this.hasChartjsOptionsTarget&&(t=s({},t,e(this.chartjsOptionsTarget))),t}get defaultOptions(){const t=this.cssPropertyValue("--axis-color");return{maintainAspectRatio:!1,animation:{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:i,delay:t=>"data"!==t.type||t.yStarted?0:(t.yStarted=!0,t.index*this.delayBetweenPoints)}},plugins:{legend:{display:!1}},color:t,fill:!1,lineTension:.3,backgroundColor:"#fff",borderColor:this.cssPropertyValue("--line-color"),borderCapStyle:"butt",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",pointBorderColor:this.cssPropertyValue("--point-stroke-color"),pointBackgroundColor:this.cssPropertyValue("--point-color"),pointBorderWidth:4,pointHoverRadius:10,pointHoverBackgroundColor:this.cssPropertyValue("--point-color"),pointHoverBorderColor:this.cssPropertyValue("--point-stroke-color-hover"),pointHoverBorderWidth:3,pointRadius:6,pointHitRadius:10,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}}}}}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 i(t){return 0===t.index?t.chart.scales.y.getPixelForValue(100):t.chart.getDatasetMeta(t.datasetIndex).data[t.index-1].getProps(["y"],!0).y}n.targets=["chartjsOptions","chartjsData","chartjsCanvas","csvData"],n.values={type:{type:String,default:"line"},label:{type:String,default:"Value"}},n.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"};class l extends a{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 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 d=[[n,"superchart_controller.js"],[l,"supercharts/filterable_controller.js"],[c,"supercharts/filters_controller.js"]].map(function(t){const e=t[0];return{identifier:o(t[1]),controllerConstructor:e}});export{l as FilterableController,c as FiltersController,n as SuperchartController,d as controllerDefinitions};
1
+ import{SuperchartChartjsController as t,parseContentsAsJSON as e}from"@supercharts/stimulus-base";import*as a from"d3";import{Controller as r}from"@hotwired/stimulus";function s(t){const e=(t.match(/^(?:\.\/)?(.+)(?:[_-]controller\..+?)$/)||[])[1];if(e)return e.replace(/_/g,"-").replace(/\//g,"--")}function o(){return o=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var a=arguments[e];for(var r in a)Object.prototype.hasOwnProperty.call(a,r)&&(t[r]=a[r])}return t},o.apply(this,arguments)}class i extends t{connect(){super.connect()}updateChart(){super.updateChart()}describeDataForX(t){var e,a;const r=(null==t||null==(e=t.tooltip)?void 0:e.dataPoints[0]).dataIndex;this.dispatch("description-requested",{detail:{label:this.csvData[r][this.csvData.columns[1]],value:this.csvData[r][this.csvData.columns[2]],show:!(null==t||null==(a=t.tooltip)||!a.opacity)}})}parseCsvData(){this.csvData=a.csvParse(this.csvDataTarget.innerHTML.trim(),a.autoType)}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=o({},this.defaultOptions);return this.hasChartjsOptionsTarget&&(t=o({},t,e(this.chartjsOptionsTarget))),t}get defaultOptions(){const t=this.cssPropertyValue("--axis-color");return{maintainAspectRatio:!1,animation:{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)}},interaction:{mode:"index",intersect:!1},plugins:{legend:{display:!1},tooltip:{enabled:!1,position:"nearest",external:this.describeDataForX.bind(this)}},color:t,fill:!1,lineTension:.3,backgroundColor:"#fff",borderColor:this.cssPropertyValue("--line-color"),borderCapStyle:"butt",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",pointBorderColor:this.cssPropertyValue("--point-stroke-color"),pointBackgroundColor:this.cssPropertyValue("--point-color"),pointBorderWidth:4,pointHoverRadius:10,pointHoverBackgroundColor:this.cssPropertyValue("--point-color"),pointHoverBorderColor:this.cssPropertyValue("--point-stroke-color-hover"),pointHoverBorderWidth:3,pointRadius:6,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}}}}}get delayBetweenPoints(){var t,e,a;return this.cssPropertyValue("--animation-duration")/(null==(t=this.chartjsData)||null==(e=t.datasets[0])||null==(a=e.data)?void 0:a.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}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"};class n extends r{showDescriptionWith(t){var e,a,r;if(null==t||null==(e=t.detail)||!e.show)return this.hideContextualDescription(),void this.showOverallDescription();this.hideOverallDescription();const s=null==t||null==(a=t.detail)?void 0:a.value,o=null==t||null==(r=t.detail)?void 0:r.label;this.contextualDescriptionTarget.innerHTML=this.contextualDescriptionTemplateTarget.innerHTML.replaceAll("%value%",s).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)}}n.targets=["overallDescription","contextualDescription","contextualDescriptionTemplate"],n.classes=["hideOverallDescription","hideContextualDescription"];class c extends r{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 r{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=[[i,"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,i as SuperchartController,d as controllerDefinitions};
2
2
  //# sourceMappingURL=supercharts-bullet-train.modern.mjs.map
@@ -1 +1 @@
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/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 } from '@supercharts/stimulus-base'\nimport * as d3 from \"d3\"\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 label: {\n type: String,\n default: \"Value\"\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 }\n \n connect() {\n super.connect()\n }\n \n updateChart() {\n super.updateChart()\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 const csv = d3.csvParse(this.csvDataTarget.innerHTML.trim(), d3.autoType)\n return {\n labels: csv.map(d => d[csv.columns[0]]),\n datasets: [{\n type: this.typeValue,\n label: this.labelValue,\n data: csv.map(d => d[csv.columns[1]])\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 options\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: {\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 plugins: {\n legend: {\n display: false,\n }\n },\n color: axisColor,\n fill: false,\n lineTension: 0.3,\n backgroundColor: \"#fff\",\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 pointBorderWidth: 4,\n pointHoverRadius: 10,\n pointHoverBackgroundColor: this.cssPropertyValue('--point-color'),\n pointHoverBorderColor: this.cssPropertyValue('--point-stroke-color-hover'),\n pointHoverBorderWidth: 3,\n pointRadius: 6,\n pointHitRadius: 10,\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 }\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 = [ \"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 FilterableController from \"./supercharts/filterable_controller\"\nimport FiltersController from \"./supercharts/filters_controller\"\n\nexport const controllerDefinitions = [\n [SuperchartController, \"superchart_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 FilterableController,\n FiltersController,\n}\n"],"names":["identifierForContextKey","key","logicalName","match","replace","_class","connect","super","updateChart","chartjsData","this","hasChartJsDataTarget","hasCsvDataTarget","console","warn","csv","d3","csvParse","csvDataTarget","innerHTML","trim","autoType","labels","map","d","columns","datasets","type","typeValue","label","labelValue","data","chartjsOptions","options","_extends","defaultOptions","hasChartjsOptionsTarget","parseContentsAsJSON","chartjsOptionsTarget","axisColor","cssPropertyValue","maintainAspectRatio","animation","x","easing","duration","delayBetweenPoints","from","NaN","delay","ctx","xStarted","index","y","previousY","yStarted","plugins","legend","display","color","fill","lineTension","backgroundColor","borderColor","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","pointBorderColor","pointBackgroundColor","pointBorderWidth","pointHoverRadius","pointHoverBackgroundColor","pointHoverBorderColor","pointHoverBorderWidth","pointRadius","pointHitRadius","spanGaps","scales","grid","tickColor","ticks","_this$chartjsData","_this$chartjsData$dat","_this$chartjsData$dat2","length","chart","getPixelForValue","getDatasetMeta","datasetIndex","getProps","targets","values","String","default","defaultCssProperties","Controller","event","chartSourceDataTarget","detail","dataElement","remove","chartTarget","dispatchEvent","CustomEvent","eventNameValue","eventName","element","dataTarget","bubbles","cancelable","controllerDefinitions","SuperchartController","FilterableController","FiltersController","controller","identifier","controllerConstructor"],"mappings":"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"}
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 } from '@supercharts/stimulus-base'\nimport * as d3 from \"d3\"\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 }\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[2]],\n show: !!event?.tooltip?.opacity\n } })\n }\n \n parseCsvData() {\n this.csvData = d3.csvParse(this.csvDataTarget.innerHTML.trim(), d3.autoType)\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 options\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: {\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 interaction: {\n mode: 'index',\n intersect: false,\n },\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 backgroundColor: \"#fff\",\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 pointBorderWidth: 4,\n pointHoverRadius: 10,\n pointHoverBackgroundColor: this.cssPropertyValue('--point-color'),\n pointHoverBorderColor: this.cssPropertyValue('--point-stroke-color-hover'),\n pointHoverBorderWidth: 3,\n pointRadius: 6,\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 }\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","_event$tooltip","tooltip","dataPoints","this","dispatch","detail","label","csvData","columns","value","show","_event$tooltip2","opacity","parseCsvData","d3","csvParse","csvDataTarget","innerHTML","trim","autoType","hasChartJsDataTarget","chartjsData","hasCsvDataTarget","labels","map","d","datasets","type","typeValue","data","console","warn","chartjsOptions","options","defaultOptions","hasChartjsOptionsTarget","_extends","parseContentsAsJSON","chartjsOptionsTarget","axisColor","cssPropertyValue","maintainAspectRatio","animation","x","easing","duration","delayBetweenPoints","from","NaN","delay","ctx","xStarted","index","y","previousY","yStarted","interaction","mode","intersect","plugins","legend","display","enabled","position","external","bind","color","fill","lineTension","backgroundColor","borderColor","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","pointBorderColor","pointBackgroundColor","pointBorderWidth","pointHoverRadius","pointHoverBackgroundColor","pointHoverBorderColor","pointHoverBorderWidth","pointRadius","pointHitRadius","hoverBackgroundColor","spanGaps","scales","grid","tickColor","ticks","_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","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 +1,2 @@
1
- !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("@supercharts/stimulus-base"),require("d3"),require("@hotwired/stimulus")):"function"==typeof define&&define.amd?define(["exports","@supercharts/stimulus-base","d3","@hotwired/stimulus"],e):e((t||self).superchartsBulletTrain={},t.stimulusBase,t.d3,t.stimulus)}(this,function(t,e,r,a){function o(t){if(t&&t.__esModule)return t;var e=Object.create(null);return t&&Object.keys(t).forEach(function(r){if("default"!==r){var a=Object.getOwnPropertyDescriptor(t,r);Object.defineProperty(e,r,a.get?a:{enumerable:!0,get:function(){return t[r]}})}}),e.default=t,e}var s=/*#__PURE__*/o(r);function n(t){const e=(t.match(/^(?:\.\/)?(.+)(?:[_-]controller\..+?)$/)||[])[1];if(e)return e.replace(/_/g,"-").replace(/\//g,"--")}class i extends e.SuperchartChartjsController{connect(){super.connect()}updateChart(){super.updateChart()}get chartjsData(){if(this.hasChartJsDataTarget)return super.chartjsData();if(!this.hasCsvDataTarget)return console.warn("The chart needs data in a in a csv target or in a chartjsData target (in chart.js JSON)"),[];const t=s.csvParse(this.csvDataTarget.innerHTML.trim(),s.autoType);return{labels:t.map(e=>e[t.columns[0]]),datasets:[{type:this.typeValue,label:this.labelValue,data:t.map(e=>e[t.columns[1]])}]}}get chartjsOptions(){let t={...this.defaultOptions};return this.hasChartjsOptionsTarget&&(t={...t,...e.parseContentsAsJSON(this.chartjsOptionsTarget)}),t}get defaultOptions(){const t=this.cssPropertyValue("--axis-color");return{maintainAspectRatio:!1,animation:{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)}},plugins:{legend:{display:!1}},color:t,fill:!1,lineTension:.3,backgroundColor:"#fff",borderColor:this.cssPropertyValue("--line-color"),borderCapStyle:"butt",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",pointBorderColor:this.cssPropertyValue("--point-stroke-color"),pointBackgroundColor:this.cssPropertyValue("--point-color"),pointBorderWidth:4,pointHoverRadius:10,pointHoverBackgroundColor:this.cssPropertyValue("--point-color"),pointHoverBorderColor:this.cssPropertyValue("--point-stroke-color-hover"),pointHoverBorderWidth:3,pointRadius:6,pointHitRadius:10,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}}}}}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}i.targets=["chartjsOptions","chartjsData","chartjsCanvas","csvData"],i.values={type:{type:String,default:"line"},label:{type:String,default:"Value"}},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"};class c extends a.Controller{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 u extends a.Controller{connect(){this.element.dispatchEvent(new CustomEvent(this.eventNameValue,{detail:{dataElement:this.dataTarget},bubbles:!0,cancelable:!0}))}}u.targets=["data"],u.values={eventName:{type:String,default:"superchart:update-chart"}};const d=[[i,"superchart_controller.js"],[c,"supercharts/filterable_controller.js"],[u,"supercharts/filters_controller.js"]].map(function(t){const e=t[0];return{identifier:n(t[1]),controllerConstructor:e}});t.FilterableController=c,t.FiltersController=u,t.SuperchartController=i,t.controllerDefinitions=d});
1
+ !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("@supercharts/stimulus-base"),require("d3"),require("@hotwired/stimulus")):"function"==typeof define&&define.amd?define(["exports","@supercharts/stimulus-base","d3","@hotwired/stimulus"],e):e((t||self).superchartsBulletTrain={},t.stimulusBase,t.d3,t.stimulus)}(this,function(t,e,r,a){function s(t){if(t&&t.__esModule)return t;var e=Object.create(null);return t&&Object.keys(t).forEach(function(r){if("default"!==r){var a=Object.getOwnPropertyDescriptor(t,r);Object.defineProperty(e,r,a.get?a:{enumerable:!0,get:function(){return t[r]}})}}),e.default=t,e}var o=/*#__PURE__*/s(r);function i(t){const e=(t.match(/^(?:\.\/)?(.+)(?:[_-]controller\..+?)$/)||[])[1];if(e)return e.replace(/_/g,"-").replace(/\//g,"--")}class l extends e.SuperchartChartjsController{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[2]],show:!(null==t||null==(r=t.tooltip)||!r.opacity)}})}parseCsvData(){this.csvData=o.csvParse(this.csvDataTarget.innerHTML.trim(),o.autoType)}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)}),t}get defaultOptions(){const t=this.cssPropertyValue("--axis-color");return{maintainAspectRatio:!1,animation:{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:n,delay:t=>"data"!==t.type||t.yStarted?0:(t.yStarted=!0,t.index*this.delayBetweenPoints)}},interaction:{mode:"index",intersect:!1},plugins:{legend:{display:!1},tooltip:{enabled:!1,position:"nearest",external:this.describeDataForX.bind(this)}},color:t,fill:!1,lineTension:.3,backgroundColor:"#fff",borderColor:this.cssPropertyValue("--line-color"),borderCapStyle:"butt",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",pointBorderColor:this.cssPropertyValue("--point-stroke-color"),pointBackgroundColor:this.cssPropertyValue("--point-color"),pointBorderWidth:4,pointHoverRadius:10,pointHoverBackgroundColor:this.cssPropertyValue("--point-color"),pointHoverBorderColor:this.cssPropertyValue("--point-stroke-color-hover"),pointHoverBorderWidth:3,pointRadius:6,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}}}}}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 n(t){return 0===t.index?t.chart.scales.y.getPixelForValue(100):t.chart.getDatasetMeta(t.datasetIndex).data[t.index-1].getProps(["y"],!0).y}l.targets=["chartjsOptions","chartjsData","chartjsCanvas","csvData"],l.values={type:{type:String,default:"line"}},l.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"};class c extends a.Controller{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,o=null==t||null==(a=t.detail)?void 0:a.label;this.contextualDescriptionTarget.innerHTML=this.contextualDescriptionTemplateTarget.innerHTML.replaceAll("%value%",s).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)}}c.targets=["overallDescription","contextualDescription","contextualDescriptionTemplate"],c.classes=["hideOverallDescription","hideContextualDescription"];class u extends a.Controller{updateChart(t){this.chartSourceDataTarget.innerHTML=t.detail.dataElement.innerHTML,t.detail.dataElement.remove(),this.chartTarget.dispatchEvent(new CustomEvent(this.eventNameValue))}}u.targets=["chartSourceData","chart"],u.values={eventName:{type:String,default:"update-chart"}};class d extends a.Controller{connect(){this.element.dispatchEvent(new CustomEvent(this.eventNameValue,{detail:{dataElement:this.dataTarget},bubbles:!0,cancelable:!0}))}}d.targets=["data"],d.values={eventName:{type:String,default:"superchart:update-chart"}};const h=[[l,"superchart_controller.js"],[c,"supercharts/describable_controller.js"],[u,"supercharts/filterable_controller.js"],[d,"supercharts/filters_controller.js"]].map(function(t){const e=t[0];return{identifier:i(t[1]),controllerConstructor:e}});t.DescribableController=c,t.FilterableController=u,t.FiltersController=d,t.SuperchartController=l,t.controllerDefinitions=h});
2
2
  //# sourceMappingURL=supercharts-bullet-train.umd.js.map
@@ -1 +1 @@
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/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 } from '@supercharts/stimulus-base'\nimport * as d3 from \"d3\"\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 label: {\n type: String,\n default: \"Value\"\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 }\n \n connect() {\n super.connect()\n }\n \n updateChart() {\n super.updateChart()\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 const csv = d3.csvParse(this.csvDataTarget.innerHTML.trim(), d3.autoType)\n return {\n labels: csv.map(d => d[csv.columns[0]]),\n datasets: [{\n type: this.typeValue,\n label: this.labelValue,\n data: csv.map(d => d[csv.columns[1]])\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 options\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: {\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 plugins: {\n legend: {\n display: false,\n }\n },\n color: axisColor,\n fill: false,\n lineTension: 0.3,\n backgroundColor: \"#fff\",\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 pointBorderWidth: 4,\n pointHoverRadius: 10,\n pointHoverBackgroundColor: this.cssPropertyValue('--point-color'),\n pointHoverBorderColor: this.cssPropertyValue('--point-stroke-color-hover'),\n pointHoverBorderWidth: 3,\n pointRadius: 6,\n pointHitRadius: 10,\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 }\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 = [ \"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 FilterableController from \"./supercharts/filterable_controller\"\nimport FiltersController from \"./supercharts/filters_controller\"\n\nexport const controllerDefinitions = [\n [SuperchartController, \"superchart_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 FilterableController,\n FiltersController,\n}\n"],"names":["identifierForContextKey","key","logicalName","match","replace","SuperchartChartjsController","connect","super","updateChart","chartjsData","this","hasChartJsDataTarget","hasCsvDataTarget","console","warn","d3","csvParse","csvDataTarget","innerHTML","trim","autoType","labels","csv","map","d","columns","datasets","type","typeValue","label","labelValue","data","chartjsOptions","options","defaultOptions","hasChartjsOptionsTarget","parseContentsAsJSON","chartjsOptionsTarget","axisColor","cssPropertyValue","maintainAspectRatio","animation","x","easing","duration","delayBetweenPoints","from","NaN","delay","ctx","xStarted","index","y","previousY","yStarted","plugins","legend","display","color","fill","lineTension","backgroundColor","borderColor","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","pointBorderColor","pointBackgroundColor","pointBorderWidth","pointHoverRadius","pointHoverBackgroundColor","pointHoverBorderColor","pointHoverBorderWidth","pointRadius","pointHitRadius","spanGaps","scales","grid","tickColor","ticks","_this$chartjsData","_this$chartjsData$dat","_this$chartjsData$dat2","length","chart","getPixelForValue","getDatasetMeta","datasetIndex","getProps","targets","values","String","default","defaultCssProperties","Controller","event","chartSourceDataTarget","detail","dataElement","remove","chartTarget","dispatchEvent","CustomEvent","eventNameValue","eventName","_class","element","dataTarget","bubbles","cancelable","controllerDefinitions","SuperchartController","FilterableController","FiltersController","controller","identifier","controllerConstructor"],"mappings":"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"}
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 } from '@supercharts/stimulus-base'\nimport * as d3 from \"d3\"\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 }\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[2]],\n show: !!event?.tooltip?.opacity\n } })\n }\n \n parseCsvData() {\n this.csvData = d3.csvParse(this.csvDataTarget.innerHTML.trim(), d3.autoType)\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 options\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: {\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 interaction: {\n mode: 'index',\n intersect: false,\n },\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 backgroundColor: \"#fff\",\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 pointBorderWidth: 4,\n pointHoverRadius: 10,\n pointHoverBackgroundColor: this.cssPropertyValue('--point-color'),\n pointHoverBorderColor: this.cssPropertyValue('--point-stroke-color-hover'),\n pointHoverBorderWidth: 3,\n pointRadius: 6,\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 }\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","_event$tooltip","tooltip","dataPoints","this","dispatch","detail","label","csvData","columns","value","show","_event$tooltip2","opacity","parseCsvData","d3","csvParse","csvDataTarget","innerHTML","trim","autoType","chartjsData","hasChartJsDataTarget","hasCsvDataTarget","labels","map","d","datasets","type","typeValue","data","console","warn","options","defaultOptions","hasChartjsOptionsTarget","parseContentsAsJSON","chartjsOptionsTarget","cssPropertyValue","maintainAspectRatio","animation","x","easing","duration","delayBetweenPoints","from","NaN","delay","ctx","xStarted","index","y","previousY","yStarted","interaction","mode","intersect","plugins","legend","display","enabled","position","external","bind","color","axisColor","fill","lineTension","backgroundColor","borderColor","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","pointBorderColor","pointBackgroundColor","pointBorderWidth","pointHoverRadius","pointHoverBackgroundColor","pointHoverBorderColor","pointHoverBorderWidth","pointRadius","pointHitRadius","hoverBackgroundColor","spanGaps","scales","grid","tickColor","ticks","_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","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,6 +1,7 @@
1
1
  require 'csv'
2
2
 
3
3
  class Account::Scaffolding::CompletelyConcrete::TangibleThings::TangibleThingsChartController < Account::ApplicationController
4
+ include ActionView::Helpers::NumberHelper
4
5
  account_load_and_authorize_resource :tangible_thing, through: :absolutely_abstract_creative_concept, through_association: :completely_concrete_tangible_things, collection_actions: [:show]
5
6
 
6
7
  # GET /account/scaffolding/absolutely_abstract/creative_concepts/:absolutely_abstract_creative_concept_id/completely_concrete/tangible_things/chart
@@ -27,7 +28,7 @@ class Account::Scaffolding::CompletelyConcrete::TangibleThings::TangibleThingsCh
27
28
 
28
29
  @total = data.values.reduce(:+)
29
30
 
30
- date_format = if @period == :day
31
+ date_format_abbr = if @period == :day
31
32
  "%e"
32
33
  elsif @period == :week
33
34
  "%b %e"
@@ -35,9 +36,17 @@ class Account::Scaffolding::CompletelyConcrete::TangibleThings::TangibleThingsCh
35
36
  "%b"
36
37
  end
37
38
 
38
- @csv = CSV.generate(" ", headers: %w[date value], write_headers: true, encoding: "UTF-8") do |csv|
39
+ date_format_full = if @period == :day
40
+ "%B %e"
41
+ elsif @period == :week
42
+ "%B %e"
43
+ elsif @period == :month
44
+ "%B, %Y"
45
+ end
46
+
47
+ @csv = CSV.generate(" ", headers: %w[date_abbr date_full value value_formatted], write_headers: true, encoding: "UTF-8") do |csv|
39
48
  data.each do |date, value|
40
- csv.add_row [date.strftime(date_format), value]
49
+ csv.add_row [date.strftime(date_format_abbr), date.strftime(date_format_full), value, number_with_delimiter(value)]
41
50
  end
42
51
  end
43
52
  end
@@ -1,11 +1,13 @@
1
1
  import { identifierForContextKey } from "@hotwired/stimulus-webpack-helpers"
2
2
 
3
3
  import SuperchartController from "./superchart_controller"
4
+ import DescribableController from "./supercharts/describable_controller"
4
5
  import FilterableController from "./supercharts/filterable_controller"
5
6
  import FiltersController from "./supercharts/filters_controller"
6
7
 
7
8
  export const controllerDefinitions = [
8
9
  [SuperchartController, "superchart_controller.js"],
10
+ [DescribableController, "supercharts/describable_controller.js"],
9
11
  [FilterableController, "supercharts/filterable_controller.js"],
10
12
  [FiltersController, "supercharts/filters_controller.js"],
11
13
  ].map(function(d) {
@@ -19,6 +21,7 @@ export const controllerDefinitions = [
19
21
 
20
22
  export {
21
23
  SuperchartController,
24
+ DescribableController,
22
25
  FilterableController,
23
26
  FiltersController,
24
27
  }
@@ -7,10 +7,6 @@ export default class extends SuperchartChartjsController {
7
7
  type: {
8
8
  type: String,
9
9
  default: "line"
10
- },
11
- label: {
12
- type: String,
13
- default: "Value"
14
10
  }
15
11
  }
16
12
 
@@ -22,6 +18,8 @@ export default class extends SuperchartChartjsController {
22
18
  '--point-color': '#333',
23
19
  '--point-stroke-color': '#fff',
24
20
  '--point-stroke-color-hover': '#eee',
21
+ '--bar-fill-color': '#999',
22
+ '--bar-hover-fill-color': '#333',
25
23
  }
26
24
 
27
25
  connect() {
@@ -32,6 +30,20 @@ export default class extends SuperchartChartjsController {
32
30
  super.updateChart()
33
31
  }
34
32
 
33
+ describeDataForX(event) {
34
+ const point = event?.tooltip?.dataPoints[0]
35
+ const dataIndex = point.dataIndex
36
+ this.dispatch("description-requested", { detail: {
37
+ label: this.csvData[dataIndex][this.csvData.columns[1]],
38
+ value: this.csvData[dataIndex][this.csvData.columns[2]],
39
+ show: !!event?.tooltip?.opacity
40
+ } })
41
+ }
42
+
43
+ parseCsvData() {
44
+ this.csvData = d3.csvParse(this.csvDataTarget.innerHTML.trim(), d3.autoType)
45
+ }
46
+
35
47
  get chartjsData() {
36
48
  if (this.hasChartJsDataTarget) {
37
49
  return super.chartjsData()
@@ -41,13 +53,14 @@ export default class extends SuperchartChartjsController {
41
53
  return []
42
54
  }
43
55
 
44
- const csv = d3.csvParse(this.csvDataTarget.innerHTML.trim(), d3.autoType)
56
+ this.parseCsvData()
57
+
45
58
  return {
46
- labels: csv.map(d => d[csv.columns[0]]),
59
+ labels: this.csvData.map(d => d[this.csvData.columns[0]]),
47
60
  datasets: [{
48
61
  type: this.typeValue,
49
- label: this.labelValue,
50
- data: csv.map(d => d[csv.columns[1]])
62
+ label: "Value",
63
+ data: this.csvData.map(d => d[this.csvData.columns[2]])
51
64
  }]
52
65
  }
53
66
  }
@@ -100,15 +113,23 @@ export default class extends SuperchartChartjsController {
100
113
  }
101
114
  }
102
115
  },
116
+ interaction: {
117
+ mode: 'index',
118
+ intersect: false,
119
+ },
103
120
  plugins: {
104
121
  legend: {
105
122
  display: false,
123
+ },
124
+ tooltip: {
125
+ enabled: false,
126
+ position: 'nearest',
127
+ external: this.describeDataForX.bind(this)
106
128
  }
107
129
  },
108
130
  color: axisColor,
109
131
  fill: false,
110
132
  lineTension: 0.3,
111
- backgroundColor: "#fff",
112
133
  borderColor: this.cssPropertyValue('--line-color'),
113
134
  borderCapStyle: "butt",
114
135
  borderDash: [],
@@ -123,6 +144,8 @@ export default class extends SuperchartChartjsController {
123
144
  pointHoverBorderWidth: 3,
124
145
  pointRadius: 6,
125
146
  pointHitRadius: 10,
147
+ backgroundColor: this.cssPropertyValue('--bar-fill-color'),
148
+ hoverBackgroundColor: this.cssPropertyValue('--bar-hover-fill-color'),
126
149
  spanGaps: false,
127
150
  scales: {
128
151
  x: {
@@ -0,0 +1,39 @@
1
+ import { Controller } from '@hotwired/stimulus'
2
+
3
+ export default class extends Controller {
4
+ static targets = [ "overallDescription", "contextualDescription", "contextualDescriptionTemplate" ]
5
+ static classes = [ "hideOverallDescription", "hideContextualDescription" ]
6
+
7
+ showDescriptionWith(event) {
8
+ if (!event?.detail?.show) {
9
+ this.hideContextualDescription()
10
+ this.showOverallDescription()
11
+ return
12
+ }
13
+
14
+ this.hideOverallDescription()
15
+ const value = event?.detail?.value
16
+ const label = event?.detail?.label
17
+ let newHTML = this.contextualDescriptionTemplateTarget.innerHTML
18
+ this.contextualDescriptionTarget.innerHTML = newHTML
19
+ .replaceAll("%value%", value)
20
+ .replaceAll("%label%", label)
21
+ this.showContextualDescription()
22
+ }
23
+
24
+ hideOverallDescription() {
25
+ this.overallDescriptionTarget.classList.add(...this.hideOverallDescriptionClasses)
26
+ }
27
+
28
+ showOverallDescription() {
29
+ this.overallDescriptionTarget.classList.remove(...this.hideOverallDescriptionClasses)
30
+ }
31
+
32
+ hideContextualDescription() {
33
+ this.contextualDescriptionTarget.classList.add(...this.hideContextualDescriptionClasses)
34
+ }
35
+
36
+ showContextualDescription() {
37
+ this.contextualDescriptionTarget.classList.remove(...this.hideContextualDescriptionClasses)
38
+ }
39
+ }
@@ -3,27 +3,46 @@
3
3
  bg-white dark:bg-darkPrimary-700
4
4
  [--axis-color:theme('colors.gray.300')] dark:[--axis-color:theme('colors.darkPrimary.500')]
5
5
  [--grid-color:theme('colors.gray.100')] dark:[--grid-color:theme('colors.darkPrimary.800')]
6
- [--line-color:#047bf8]
6
+ [--line-color:#a86fe7]
7
7
  [--point-color:theme('colors.gray.800')] dark:[--point-color:theme('colors.white')]
8
8
  [--point-stroke-color:theme('colors.white')] dark:[--point-stroke-color:theme('colors.darkPrimary.700')]
9
9
  [--point-stroke-color-hover:theme('colors.gray.100')] dark:[--point-stroke-color-hover:theme('colors.darkPrimary.600')]
10
+ [--bar-fill-color:var(--line-color)]
11
+ [--bar-hover-fill-color:var(--point-color)]
10
12
  "
11
- data-controller="supercharts--filterable"
12
- data-action="superchart:update-chart->supercharts--filterable#updateChart"
13
+ data-controller="supercharts--filterable supercharts--describable"
14
+ data-action="superchart:update-chart->supercharts--filterable#updateChart superchart:description-requested->supercharts--describable#showDescriptionWith"
15
+ data-supercharts--describable-hide-overall-description-class="opacity-0"
16
+ data-supercharts--describable-hide-contextual-description-class="hidden"
13
17
  >
14
18
  <%= turbo_frame_tag :charts_tangible_things_filters do %>
15
19
  <div class="flex justify-start">
16
- <div class="">
17
- <h2 class="text-xs uppercase dark:text-white/50">
18
- <% if @timespan == "1m" %>
19
- Tangible Things last 31 days
20
- <% elsif @timespan == "ytd" %>
21
- Tangible Things since start of year
22
- <% end %>
23
- </h2>
24
- <p class="font-semibold dark:text-white mt-2" style="font-size: 1.8rem;">
25
- <%= @total %>
26
- </p>
20
+ <div class="relative">
21
+ <div data-supercharts--describable-target="overallDescription">
22
+ <h2 class="text-xs uppercase dark:text-white/50">
23
+ <% if @timespan == "1m" %>
24
+ Tangible Things last 31 days
25
+ <% elsif @timespan == "ytd" %>
26
+ Tangible Things since start of year
27
+ <% end %>
28
+ </h2>
29
+ <p class="font-semibold dark:text-white mt-2" style="font-size: 1.8rem;">
30
+ <%= @total %>
31
+ </p>
32
+ </div>
33
+ <div data-supercharts--describable-target="contextualDescription" class="hidden absolute top-0 left-0 right-0"></div>
34
+ <template data-supercharts--describable-target="contextualDescriptionTemplate">
35
+ <p class="font-semibold dark:text-white mb-1" style="font-size: 1.6rem;">%value%</p>
36
+ <p class="text-xs uppercase dark:text-white/50">
37
+ <% if @period == :day %>
38
+ Tangible Things on %label%
39
+ <% elsif @period == :week %>
40
+ Tangible Things in week of %label%
41
+ <% elsif @period == :month %>
42
+ Tangible Things in %label%
43
+ <% end %>
44
+ </p>
45
+ </template>
27
46
  </div>
28
47
  <div class="ml-auto">
29
48
  <div
@@ -47,11 +66,10 @@
47
66
  class="mt-4"
48
67
  data-controller="superchart"
49
68
  data-superchart-type-value="line"
50
- data-superchart-label-value="Tangible Things per <%= @period.to_s.capitalize %>"
51
69
  data-supercharts--filterable-target="chart"
52
70
  data-action="update-chart->superchart#updateChart"
53
71
  >
54
- <canvas data-superchart-target="chartjsCanvas" style="height: 200px"></canvas>
72
+ <canvas data-superchart-target="chartjsCanvas" style="height: var(--chart-height)""></canvas>
55
73
  <template data-superchart-target="csvData" data-supercharts--filterable-target="chartSourceData"></template>
56
74
  <template data-superchart-target="chartjsOptions"></template>
57
75
  </div>
@@ -0,0 +1,7 @@
1
+ <div class="p-8 rounded-md shadow
2
+ bg-white dark:bg-darkPrimary-700">
3
+ <h2 class="text-xs uppercase dark:text-white/50 mb-4">
4
+ <%= yield %>
5
+ </h2>
6
+ <div class="bg-black-100/5 ml-6 mr-4 mt-14 mb-2" style="height: calc(var(--chart-height) - 2rem)"></div>
7
+ </div>
@@ -1,5 +1,5 @@
1
1
  module BulletTrain
2
2
  module Supercharts
3
- VERSION = "0.1.8"
3
+ VERSION = "0.1.10"
4
4
  end
5
5
  end
@@ -22,8 +22,11 @@ class Scaffolding::SuperchartsChartTransformer < Scaffolding::SuperchartsTransfo
22
22
  # add children to the show page of their parent.
23
23
  unless cli_options["skip-parent"] || parent == "None"
24
24
  lines_to_add = <<~RUBY
25
- <div class="mt-4">
25
+ <div class="mt-4 [--chart-height:250px] md:[--chart-height:200px]">
26
26
  <%= turbo_frame_tag :charts_tangible_things, src: polymorphic_path([:account, @creative_concept, :tangible_things, :chart], timespan: "1m") do %>
27
+ <%= render "shared/supercharts/chart_skeleton" do %>
28
+ Tangible Things&hellip;
29
+ <% end %>
27
30
  <% end %>
28
31
  </div>
29
32
  RUBY
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: 0.1.8
4
+ version: 0.1.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pascal Laliberté
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-09-28 00:00:00.000000000 Z
11
+ date: 2022-10-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -47,11 +47,13 @@ files:
47
47
  - app/controllers/account/scaffolding/completely_concrete/tangible_things/tangible_things_chart_controller.rb
48
48
  - app/javascript/controllers/index.js
49
49
  - app/javascript/controllers/superchart_controller.js
50
+ - app/javascript/controllers/supercharts/describable_controller.js
50
51
  - app/javascript/controllers/supercharts/filterable_controller.js
51
52
  - app/javascript/controllers/supercharts/filters_controller.js
52
53
  - app/javascript/index.js
53
54
  - app/views/account/scaffolding/completely_concrete/tangible_things/tangible_things_chart/_breadcrumbs.html.erb
54
55
  - app/views/account/scaffolding/completely_concrete/tangible_things/tangible_things_chart/show.html.erb
56
+ - app/views/shared/supercharts/_chart_skeleton.html.erb
55
57
  - app/views/shared/supercharts/_filter_button.html.erb
56
58
  - config/routes.rb
57
59
  - lib/bullet_train/supercharts.rb