diff --git a/src/components/widgets/sales-transaction-by-time-of-day/sales-transaction-by-time-of-day.directive.coffee b/src/components/widgets/sales-transaction-by-time-of-day/sales-transaction-by-time-of-day.directive.coffee
new file mode 100644
index 00000000..6298cbf1
--- /dev/null
+++ b/src/components/widgets/sales-transaction-by-time-of-day/sales-transaction-by-time-of-day.directive.coffee
@@ -0,0 +1,69 @@
+module = angular.module('impac.components.widgets.sales-transaction-by-time-of-day', [])
+module.controller('WidgetSalesTransactionByTimeOfDayCtrl', ($scope, $q, HighchartsFactory) ->
+
+ w = $scope.widget
+
+ # Define settings
+ # --------------------------------------
+ $scope.orgDeferred = $q.defer();
+ settingsPromises = [$scope.orgDeferred.promise]
+
+ # Unique identifier for the chart object in the DOM
+ $scope.chartId = ->
+ "averageTransactionTimeChart-#{w.id}"
+
+ # # == Sub-Components =============================================================
+ $scope.chartDeferred = $q.defer()
+
+ # Widget specific methods
+ # --------------------------------------
+ w.initContext = ->
+ $scope.isDataFound = w.content?
+
+ w.format = ->
+ # Instantiate and render chart
+ options =
+ chartType: 'line'
+ chartOnClickCallbacks: []
+ currency: w.metadata.currency
+ showToday: true
+ showLegend: true
+
+ $scope.chart = new HighchartsFactory($scope.chartId(), w.content.chart, options)
+
+ $scope.chart.formatters = ->
+ currency = @options.currency
+ xAxisLabels =
+ labels:
+ formatter: ->
+ moment.utc(this.value).format('MMM YYYY')
+ yAxisLabels =
+ labels:
+ formatter: ->
+ "#{this.value} %"
+ xAxis: angular.merge([w.content.chart.xAxis[0]], [xAxisLabels])
+ yAxis: angular.merge([w.content.chart.yAxis[0]], [yAxisLabels])
+ rangeSelector:
+ selected: 3
+ tooltip:
+ shared: false
+ backgroundColor: '#FBF7E6'
+ formatter: ->
+ date = moment.utc(this.x).format('MMMM YYYY')
+ name = this.series.name
+ "#{date}
#{name}: #{this.y}%"
+
+ $scope.chart.render(w.content.chart, options)
+
+ # Notifies parent element that the chart is ready to be displayed
+ $scope.chartDeferred.notify($scope.chart)
+
+ $scope.widgetDeferred.resolve(settingsPromises)
+
+)
+module.directive('widgetSalesTransactionByTimeOfDay', ->
+ return {
+ restrict: 'A',
+ controller: 'WidgetSalesTransactionByTimeOfDayCtrl'
+ }
+)
\ No newline at end of file
diff --git a/src/components/widgets/sales-transaction-by-time-of-day/sales-transaction-by-time-of-day.less b/src/components/widgets/sales-transaction-by-time-of-day/sales-transaction-by-time-of-day.less
new file mode 100644
index 00000000..639a0c9a
--- /dev/null
+++ b/src/components/widgets/sales-transaction-by-time-of-day/sales-transaction-by-time-of-day.less
@@ -0,0 +1,7 @@
+.analytics .widget-item .content.sales-transaction-by-time-of-day {
+ .tall-widget();
+
+ .transaction-chart {
+ height: ~"calc(@{impac-big-widget-size} - 50px)";
+ }
+}
diff --git a/src/components/widgets/sales-transaction-by-time-of-day/sales-transaction-by-time-of-day.tmpl.html b/src/components/widgets/sales-transaction-by-time-of-day/sales-transaction-by-time-of-day.tmpl.html
new file mode 100644
index 00000000..5c79e535
--- /dev/null
+++ b/src/components/widgets/sales-transaction-by-time-of-day/sales-transaction-by-time-of-day.tmpl.html
@@ -0,0 +1,25 @@
+