fleetio_spark 0.2.48 → 1.0.0.rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (189) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/spark/_icons.js +1 -1
  3. data/app/assets/javascripts/spark/components/app/sidebar/_fix.js +4 -4
  4. data/app/assets/javascripts/spark/components/app/sidebar/_toggle.js +1 -1
  5. data/app/assets/javascripts/spark/components/layout/_auto-grid.js +5 -5
  6. data/app/assets/javascripts/spark/components/nav/_toggle.js +16 -7
  7. data/app/assets/javascripts/spark/components/ui/_sticky_panel.js +2 -2
  8. data/app/assets/javascripts/spark/components/ui/_toast.js +3 -6
  9. data/app/assets/javascripts/spark/shims/_dataset.js +241 -0
  10. data/app/assets/javascripts/spark/spark.js +18 -16
  11. data/app/assets/stylesheets/spark/_index.scss +0 -1
  12. data/app/assets/stylesheets/spark/components/_index.scss +11 -5
  13. data/app/assets/stylesheets/spark/components/app/_header.scss +15 -28
  14. data/app/assets/stylesheets/spark/components/app/_layout.scss +2 -2
  15. data/app/assets/stylesheets/spark/components/app/_sidebar.scss +19 -47
  16. data/app/assets/stylesheets/spark/components/app/sidebar/_header.scss +44 -48
  17. data/app/assets/stylesheets/spark/components/app/sidebar/_toggle.scss +5 -2
  18. data/app/assets/stylesheets/spark/components/button/_button.scss +48 -53
  19. data/app/assets/stylesheets/spark/components/button/_button_group.scss +10 -16
  20. data/app/assets/stylesheets/spark/components/button/_size.scss +17 -8
  21. data/app/assets/stylesheets/spark/components/icon/_badge.scss +41 -0
  22. data/app/assets/stylesheets/spark/{_icons.scss → components/icon/_icon.scss} +0 -0
  23. data/app/assets/stylesheets/spark/components/{form → input}/_switch.scss +20 -20
  24. data/app/assets/stylesheets/spark/components/layout/_block.scss +44 -0
  25. data/app/assets/stylesheets/spark/components/layout/_grid.scss +26 -29
  26. data/app/assets/stylesheets/spark/components/layout/_media_block.scss +76 -0
  27. data/app/assets/stylesheets/spark/components/layout/_page.scss +54 -0
  28. data/app/assets/stylesheets/spark/components/{app → messaging}/_banner.scss +3 -3
  29. data/app/assets/stylesheets/spark/components/messaging/_trial-notice.scss +20 -0
  30. data/app/assets/stylesheets/spark/components/nav/_item.scss +6 -30
  31. data/app/assets/stylesheets/spark/components/nav/_sidebar.scss +11 -48
  32. data/app/assets/stylesheets/spark/components/nav/_tabs.scss +5 -5
  33. data/app/assets/stylesheets/spark/components/nav/sidebar/_theme-default.scss +59 -0
  34. data/app/assets/stylesheets/spark/components/nav/sidebar/_theme-primary.scss +69 -0
  35. data/app/assets/stylesheets/spark/components/nav/tree/_group.scss +1 -6
  36. data/app/assets/stylesheets/spark/components/ui/_card.scss +57 -0
  37. data/app/assets/stylesheets/spark/components/ui/_header.scss +55 -55
  38. data/app/assets/stylesheets/spark/components/ui/_placeholder.scss +8 -22
  39. data/app/assets/stylesheets/spark/components/ui/_toolbar.scss +1 -27
  40. data/app/assets/stylesheets/spark/components_old/_dropdown.scss +117 -114
  41. data/app/assets/stylesheets/spark/components_old/_index.scss +1 -1
  42. data/app/assets/stylesheets/spark/components_old/header/_index.scss +0 -1
  43. data/app/assets/stylesheets/spark/components_old/header/_search.scss +2 -0
  44. data/app/assets/stylesheets/spark/core/_vars.scss +6 -3
  45. data/app/components/spark/badge.html.slim +4 -0
  46. data/app/components/spark/badge.rb +15 -0
  47. data/app/components/spark/banner.html.slim +7 -0
  48. data/app/components/spark/banner.rb +28 -0
  49. data/app/components/spark/button.html.slim +9 -0
  50. data/app/components/spark/button.rb +68 -0
  51. data/app/components/spark/button/group.html.slim +4 -0
  52. data/app/components/spark/button/group.rb +22 -0
  53. data/app/components/spark/card.html.slim +7 -0
  54. data/app/components/spark/card.rb +13 -0
  55. data/app/components/spark/checklist.html.slim +14 -0
  56. data/app/components/spark/checklist.rb +49 -0
  57. data/app/components/spark/checklist/container.html.slim +14 -0
  58. data/app/components/spark/checklist/container.rb +51 -0
  59. data/app/components/spark/checklist/item.html.slim +9 -0
  60. data/app/components/spark/checklist/item.rb +24 -0
  61. data/app/components/spark/checklist/trigger.html.slim +6 -0
  62. data/app/components/spark/checklist/trigger.rb +13 -0
  63. data/app/components/spark/component/base.rb +27 -0
  64. data/app/components/spark/embed/wistia_media.html.slim +11 -0
  65. data/app/components/spark/embed/wistia_media.rb +22 -0
  66. data/app/components/spark/embed/wistia_media_component.rb +22 -36
  67. data/app/components/spark/grid.html.slim +4 -0
  68. data/app/components/spark/grid.rb +31 -0
  69. data/app/components/spark/grid/column.html.slim +1 -0
  70. data/app/components/spark/grid/column.rb +34 -0
  71. data/app/components/spark/icon.html.slim +1 -0
  72. data/app/components/spark/icon.rb +34 -0
  73. data/app/components/spark/icon/placeholder.html.slim +20 -0
  74. data/app/components/spark/icon/placeholder.rb +139 -0
  75. data/app/components/spark/input/base.html.slim +1 -0
  76. data/app/components/spark/input/base.rb +17 -0
  77. data/app/components/spark/input/checkbox.html.slim +2 -0
  78. data/app/components/spark/input/checkbox.rb +14 -0
  79. data/app/components/spark/input/label.html.slim +4 -0
  80. data/app/components/spark/input/label.rb +13 -0
  81. data/app/components/spark/input/switch.html.slim +5 -0
  82. data/app/components/spark/input/switch.rb +24 -0
  83. data/app/components/spark/layout/block.html.slim +13 -0
  84. data/app/components/spark/layout/block.rb +62 -0
  85. data/app/components/spark/layout/media_block.html.slim +11 -0
  86. data/app/components/spark/layout/media_block.rb +29 -0
  87. data/app/components/spark/layout/page.html.slim +15 -0
  88. data/app/components/spark/layout/page.rb +37 -0
  89. data/app/components/spark/nav/group.html.slim +5 -0
  90. data/app/components/spark/nav/group.rb +31 -0
  91. data/app/components/spark/nav/item.html.slim +12 -0
  92. data/app/components/spark/nav/item.rb +36 -0
  93. data/app/components/spark/nav/sidebar.html.slim +14 -0
  94. data/app/components/spark/nav/sidebar.rb +60 -0
  95. data/app/components/spark/nav/tab_panels.html.slim +6 -0
  96. data/app/components/spark/nav/tab_panels.rb +42 -0
  97. data/app/components/spark/nav/tabs.html.slim +8 -0
  98. data/app/components/spark/nav/tabs.rb +36 -0
  99. data/app/components/spark/nav/toggle.html.slim +9 -0
  100. data/app/components/spark/nav/toggle.rb +20 -0
  101. data/app/components/spark/nav/tree.html.slim +9 -0
  102. data/app/components/spark/nav/tree.rb +53 -0
  103. data/app/components/spark/nav/tree/group.html.slim +9 -0
  104. data/app/components/spark/nav/tree/group.rb +26 -0
  105. data/app/components/spark/sticky_panel.html.slim +2 -0
  106. data/app/components/spark/sticky_panel.rb +12 -0
  107. data/app/components/spark/toolbar.html.slim +7 -0
  108. data/app/components/spark/toolbar.rb +14 -0
  109. data/app/components/spark/tooltip.html.slim +3 -0
  110. data/app/components/spark/tooltip.rb +13 -0
  111. data/app/components/spark/trial_notice.html.slim +3 -0
  112. data/app/components/spark/trial_notice.rb +35 -0
  113. data/app/components/spark/widget_card.html.slim +5 -0
  114. data/app/components/spark/widget_card.rb +12 -0
  115. data/app/helpers/spark/application_helper.rb +9 -0
  116. data/lib/fleetio_spark.rb +6 -6
  117. data/lib/fleetio_spark/version.rb +1 -1
  118. data/public/code-1.0.0.rc.1.js +2 -0
  119. data/public/code-1.0.0.rc.1.js.gz +0 -0
  120. data/public/code-1.0.0.rc.1.js.map +1 -0
  121. data/public/spark-1.0.0.rc.1.css +1 -0
  122. data/public/spark-1.0.0.rc.1.css.gz +0 -0
  123. data/public/spark-1.0.0.rc.1.js +2 -0
  124. data/public/spark-1.0.0.rc.1.js.gz +0 -0
  125. data/public/spark-1.0.0.rc.1.js.map +1 -0
  126. metadata +110 -75
  127. data/app/assets/stylesheets/spark/components/layout/_base.scss +0 -0
  128. data/app/assets/stylesheets/spark/components/layout/_header.scss +0 -55
  129. data/app/assets/stylesheets/spark/components/page/_header.scss +0 -9
  130. data/app/assets/stylesheets/spark/components/page/_main.scss +0 -62
  131. data/app/assets/stylesheets/spark/components_old/header/_trial-status.scss +0 -61
  132. data/app/components/spark/app/banner_component.rb +0 -32
  133. data/app/components/spark/app/content_component.rb +0 -32
  134. data/app/components/spark/app/header_component.rb +0 -59
  135. data/app/components/spark/app/layout_component.rb +0 -92
  136. data/app/components/spark/app/modal_component.rb +0 -5
  137. data/app/components/spark/app/sidebar/header_component.rb +0 -39
  138. data/app/components/spark/app/sidebar_component.rb +0 -20
  139. data/app/components/spark/button/add_component.rb +0 -9
  140. data/app/components/spark/button/base_component.rb +0 -39
  141. data/app/components/spark/button/cancel_component.rb +0 -8
  142. data/app/components/spark/button/danger_component.rb +0 -8
  143. data/app/components/spark/button/group_component.rb +0 -24
  144. data/app/components/spark/button/icon_component.rb +0 -14
  145. data/app/components/spark/button/primary_component.rb +0 -8
  146. data/app/components/spark/button/text_component.rb +0 -8
  147. data/app/components/spark/form/checkbox_component.rb +0 -16
  148. data/app/components/spark/form/input_component.rb +0 -9
  149. data/app/components/spark/form/label_component.rb +0 -12
  150. data/app/components/spark/form/switch_component.rb +0 -32
  151. data/app/components/spark/layout/base_component.rb +0 -2
  152. data/app/components/spark/layout/grid/column_component.rb +0 -32
  153. data/app/components/spark/layout/grid_component.rb +0 -37
  154. data/app/components/spark/layout/header_component.rb +0 -26
  155. data/app/components/spark/layout/page_component.rb +0 -31
  156. data/app/components/spark/nav/breadcrumbs_component.rb +0 -2
  157. data/app/components/spark/nav/group_component.rb +0 -36
  158. data/app/components/spark/nav/item_component.rb +0 -44
  159. data/app/components/spark/nav/pills_component.rb +0 -28
  160. data/app/components/spark/nav/sidebar_component.rb +0 -59
  161. data/app/components/spark/nav/tab_panels/panel_component.rb +0 -37
  162. data/app/components/spark/nav/tab_panels/tab_component.rb +0 -13
  163. data/app/components/spark/nav/tab_panels_component.rb +0 -28
  164. data/app/components/spark/nav/tabs_component.rb +0 -59
  165. data/app/components/spark/nav/toggle_component.rb +0 -28
  166. data/app/components/spark/nav/tree/group_component.rb +0 -35
  167. data/app/components/spark/nav/tree_component.rb +0 -56
  168. data/app/components/spark/page/layout_component.rb +0 -32
  169. data/app/components/spark/page/main_component.rb +0 -39
  170. data/app/components/spark/ui/card_component.rb +0 -16
  171. data/app/components/spark/ui/checklist/container_component.rb +0 -56
  172. data/app/components/spark/ui/checklist/item_component.rb +0 -37
  173. data/app/components/spark/ui/checklist_trigger_component.rb +0 -20
  174. data/app/components/spark/ui/icon/_icon.html.erb +0 -0
  175. data/app/components/spark/ui/icon_component.rb +0 -30
  176. data/app/components/spark/ui/placeholder_component.rb +0 -105
  177. data/app/components/spark/ui/sticky_panel_component.rb +0 -9
  178. data/app/components/spark/ui/toolbar_component.rb +0 -17
  179. data/app/components/spark/ui/tooltip_component.rb +0 -13
  180. data/app/components/spark/ui/widget_card_component.rb +0 -13
  181. data/lib/fleetio_spark/component.rb +0 -36
  182. data/public/code-0.2.48.js +0 -2
  183. data/public/code-0.2.48.js.gz +0 -0
  184. data/public/code-0.2.48.js.map +0 -1
  185. data/public/spark-0.2.48.css +0 -1
  186. data/public/spark-0.2.48.css.gz +0 -0
  187. data/public/spark-0.2.48.js +0 -2
  188. data/public/spark-0.2.48.js.gz +0 -0
  189. data/public/spark-0.2.48.js.map +0 -1
@@ -0,0 +1,22 @@
1
+ module Spark
2
+ module Embed
3
+ class WistiaMedia < Spark::Component::Base
4
+ attribute :video_id, :background_image_url, :title, :subtitle, :height, :width
5
+
6
+ validates_attr :video_id, presence: true
7
+ validates_attr :background_image_url, presence: true
8
+ validates_attr :height, presence: true, numericality: { only_integer: true }
9
+ validates_attr :width, numericality: { only_integer: true }, allow_blank: true
10
+
11
+ def initialize(*)
12
+ super
13
+
14
+ classname.base = "spark-wistia-media"
15
+
16
+ unless @height.blank?
17
+ tag_attrs.merge!(style: "height: #{@height}px;max-width: #{@width}px")
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -1,43 +1,29 @@
1
- class Embed::WistiaMediaComponent < SparkComponents::Component
2
- base_class 'spark-wistia-media'
3
- attribute :video_id, :background_image_url, :title, :subtitle, :height, :width
1
+ module Embed
2
+ class WistiaMedia < Spark::Component::Base
3
+ attribute :video_id, :background_image_url, :title, :subtitle, :height, :width
4
4
 
5
- validates :video_id, presence: true
6
- validates :background_image_url, presence: true
7
- validates :height, presence: true, numericality: { only_integer: true }
8
- validates :width, numericality: { only_integer: true }, allow_blank: true
5
+ validates_attr :video_id, presence: true
6
+ validates_attr :background_image_url, presence: true
7
+ validates_attr :height, presence: true, numericality: { only_integer: true }
8
+ validates_attr :width, numericality: { only_integer: true }, allow_blank: true
9
9
 
10
- def render
11
- wistia_embed_options = {
12
- class: "wistia_embed wistia_async_#{video_id} popover=true seo=false popoverContent=link popoverAnimation=none",
13
- style: 'height:100%;width:100%'
14
- }
10
+ def initialize(*)
11
+ super
15
12
 
16
- wistia_embed_background_options = {
17
- class: 'wistia-embed-background',
18
- style: "background-image: url('#{background_image_url}')"
19
- }
20
-
21
- unless height.blank?
22
- tag_attrs.merge!(style: "height: #{height}px;max-width: #{width}px")
23
- end
13
+ classname.base = 'spark-wistia-media'
14
+ wistia_embed_options = {
15
+ class: "wistia_embed wistia_async_#{video_id} popover=true seo=false popoverContent=link popoverAnimation=none",
16
+ style: 'height:100%;width:100%'
17
+ }
24
18
 
25
- tag.div(tag_attrs) {
26
- concat tag.script(src: 'https://fast.wistia.com/assets/external/E-v1.js')
27
- concat tag.div(wistia_embed_options) {
28
- concat tag.div(wistia_embed_background_options) {
29
- concat tag.div(class: 'wistia-thumbnail-cover')
30
- concat tag.div(class: 'wistia-thumbnail-container') {
31
- tag.div {
32
- concat tag.p(title, class: 'title') unless title.blank?
33
- concat tag.p(subtitle, class: 'subtitle') unless subtitle.blank?
34
- }
35
- }
36
- concat tag.div(class: 'wistia-thumbnail-play') {
37
- component('ui/icon', name: 'play', size: :large)
38
- }
39
- }
19
+ wistia_embed_background_options = {
20
+ class: 'wistia-embed-background',
21
+ style: "background-image: url('#{background_image_url}')"
40
22
  }
41
- }
23
+
24
+ unless height.blank?
25
+ tag_attrs.merge!(style: "height: #{height}px;max-width: #{width}px")
26
+ end
27
+ end
42
28
  end
43
29
  end
@@ -0,0 +1,4 @@
1
+ div *tag_attrs
2
+ div class=classname.join_base(:columns)
3
+ - columns.each do |column|
4
+ = column.yield
@@ -0,0 +1,31 @@
1
+ module Spark
2
+ class Grid < Spark::Component::Base
3
+ COLUMN = [1,2,3,4,6,12].freeze
4
+ GUTTER = %i[small base medium large xl].freeze
5
+
6
+ attribute :span, :columns, :gutter, :gutter_match, :min, wrap: true
7
+
8
+ validates_attr :span, choices: Spark::Grid::Column::SPAN, allow_nil: true
9
+ validates_attr :columns, choices: COLUMN, allow_nil: true
10
+ validates_attr :gutter, choices: GUTTER, allow_nil: true
11
+
12
+ element :column, multiple: true, component: Spark::Grid::Column
13
+
14
+ def initialize(*)
15
+ super
16
+
17
+ raise "Grids do not support both cols and span. Set `span` (default span for columns), or `cols` (the number of columns per row)" if @span && @columns
18
+ @gutter ||= :base if @gutter_match
19
+ @span = 12 / @columns if @columns
20
+
21
+ data.add column_min: @min if @min
22
+
23
+ classname.base = "spark-grid"
24
+ classname.add("gutter-#{@gutter}") if @gutter
25
+ classname.add("gutter-#{@gutter}-match") if @gutter && @gutter_match
26
+ classname.add("no-wrap") unless @wrap
27
+
28
+ set_element_attribute_default(:column, span: @span)
29
+ end
30
+ end
31
+ end
@@ -0,0 +1 @@
1
+ div *tag_attrs = @content
@@ -0,0 +1,34 @@
1
+ module Spark
2
+ class Grid
3
+ class Column < Spark::Component::Base
4
+ SPAN_NAME = { half: 6, third: 4, fourth: 3, sixth: 2 }.freeze
5
+ SPAN = [*(1..12), *SPAN_NAME.keys].freeze
6
+ OFFSET = [*(1..11), *SPAN_NAME.keys].freeze
7
+
8
+ attribute :span, :offset
9
+
10
+ validates_attr :span, choices: SPAN, allow_nil: true
11
+ validates_attr :offset, choices: OFFSET, allow_nil: true
12
+
13
+ def initialize(*)
14
+ super
15
+ data.add span: span_name(@span) || 0
16
+ data.add offset: span_name(@offset) if @offset
17
+
18
+ classname.base = "spark-grid-column"
19
+
20
+ end
21
+
22
+ def span_name(size)
23
+ return if size.nil?
24
+ if size.is_a? Integer
25
+ SPAN[size - 1]
26
+ elsif size.is_a? Float
27
+ SPAN[(SPAN.size * size) - 1]
28
+ elsif size = SPAN_NAME[size.to_sym]
29
+ SPAN[(12 / size) - 1]
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1 @@
1
+ = Esvg.use(@name, tag_attrs)
@@ -0,0 +1,34 @@
1
+ module Spark
2
+ class Icon < ActionView::Component::Base
3
+ include Spark::Component
4
+
5
+ SIZE = { xsmall: 10, small: 14, base: 16, text: "1em", medium: 18, large: 24, xlarge: 32 }
6
+
7
+ attribute :name, :width, :height, size: :base
8
+
9
+ validates_attr :size, choices: SIZE.keys
10
+
11
+ def initialize(*)
12
+ super
13
+
14
+ raise no_icon_found if !Rails.env.production? && !Esvg.find_symbol(@name)
15
+ tag_attrs.add width: icon_width, height: icon_height, content: @yield
16
+
17
+ classname.base = "spark-icon"
18
+ end
19
+
20
+ private
21
+
22
+ def no_icon_found
23
+ %(Cannot find icon "#{@name}". A list of available icons can be found at http://spark.fleetio.com/resources/icons)
24
+ end
25
+
26
+ def icon_width
27
+ @width || @height || SIZE[@size]
28
+ end
29
+
30
+ def icon_height
31
+ @height || @width || SIZE[@size]
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,20 @@
1
+ - if @content.present?
2
+ = @content
3
+ - elsif @remote
4
+ = image_tag(remote_image_url, **remote_attrs)
5
+ - else
6
+ svg *tag_attrs
7
+ - if gradient?
8
+ defs
9
+ linearGradient id=gradient_id x1=0 y1=0 x2=1 y2=1
10
+ stop offset=0 stop-color=gradient.first
11
+ stop offset=1 stop-color=gradient.last
12
+ - if @circle
13
+ circle cy=(@height/2) cx=(@width/2) r=(@width/2) fill=background
14
+ - else
15
+ rect width=@width height=@height ry=4 fill=background
16
+ - if @icon
17
+ = Esvg.use(@icon, icon_attrs)
18
+ - elsif @text
19
+ text *text_attrs
20
+ = @text
@@ -0,0 +1,139 @@
1
+ module Spark
2
+ class Icon
3
+ class Placeholder < Spark::Component::Base
4
+ SIZE = { sm: 24, md: 32, lg: 44, xl: 84 }
5
+ THEME = {
6
+ default: {
7
+ text: "#ffffff",
8
+ fill: "#78858A"
9
+ },
10
+ gradient: {
11
+ gradient: %w[#616c70 #959fa3],
12
+ fill: "#78858A"
13
+ },
14
+ wisteria: {
15
+ gradient: %w[#A8A2EC #5853AE]
16
+ }
17
+ }
18
+
19
+ attribute :alt, :text, :circle, :font_size, :width, :height, :icon, size: :md, theme: :default
20
+ attribute remote: false
21
+
22
+ validates_attr :theme, choices: THEME.keys
23
+
24
+ def initialize(*)
25
+ super
26
+
27
+ aria.add(hidden: true)
28
+ classname.base = "spark-icon-placeholder-wrapper" unless @remote
29
+
30
+ @height ||= @width ||= SIZE[@size]
31
+ tag_attrs.add(attr_hash(:width, :height))
32
+ aria.add attr_hash(:alt)
33
+
34
+ return if @remote
35
+
36
+ raise no_icon_found if @icon && !Rails.env.production? && !Esvg.find_symbol(@icon)
37
+
38
+ classname.add("spark-icon-placeholder")
39
+ tag_attrs.add(svg_attrs)
40
+ end
41
+
42
+ def options
43
+ return @options if @options
44
+
45
+ @options ||= attr_hash(:width, :height, :alt, :text)
46
+ @options[:class] = shape_class
47
+ @options
48
+ end
49
+
50
+ private
51
+
52
+ def remote_image_url
53
+ fill = background_fill.sub('#','')
54
+ text_color = text_fill.sub('#','')
55
+ "https://via.placeholder.com/#{@width * 2}x#{@height * 2}/#{fill}/#{text_color}?text=#{@text || "%20"}"
56
+ end
57
+
58
+ def remote_attrs
59
+ classname.add(shape_class)
60
+ tag_attrs
61
+ end
62
+
63
+ def shape_class
64
+ @circle ? "spark-circle-crop" : "spark-roundrect-crop"
65
+ end
66
+
67
+ def svg_attrs
68
+ {
69
+ class: "ui-placeholder",
70
+ aria: { presentation: :true, label: @alt },
71
+ viewBox: "0 0 #{@width} #{@height}",
72
+ version: "1.1",
73
+ xmlns: "http://www.w3.org/2000/svg"
74
+ }
75
+ end
76
+
77
+ def icon_attrs
78
+ svg_scale = 0.63
79
+ center_scale = (1 - svg_scale) / 2
80
+ # make size proportional to container
81
+ {
82
+ color: text_fill,
83
+ width: (@width * svg_scale).round,
84
+ height: (@height * svg_scale).round,
85
+ x: (@width * center_scale).round,
86
+ y: (@height * center_scale).round
87
+ }
88
+ end
89
+
90
+ def text_attrs
91
+ {
92
+ x: @width/2,
93
+ y: @height/2,
94
+ fill: text_fill,
95
+ "font-size" => @font_size || "#{@width/3}px",
96
+ "text-anchor" => :middle,
97
+ "dominant-baseline" => :central,
98
+ "alignment-baseline" => :central
99
+ }
100
+ end
101
+
102
+ def theme
103
+ THEME[@theme]
104
+ end
105
+
106
+ def text_fill
107
+ theme[:text] || THEME[:default][:text]
108
+ end
109
+
110
+ def background_fill
111
+ theme[:fill] || theme[:gradient].first
112
+ end
113
+
114
+ def background
115
+ if gradient?
116
+ "url(##{gradient_id})"
117
+ else
118
+ background_fill
119
+ end
120
+ end
121
+
122
+ def gradient_id
123
+ "placeholder-gradient-#{@theme}"
124
+ end
125
+
126
+ def gradient
127
+ theme[:gradient]
128
+ end
129
+
130
+ def gradient?
131
+ !!gradient
132
+ end
133
+
134
+ def no_icon_found
135
+ %(Cannot find icon "#{@icon}". A list of available icons can be found at http://spark.fleetio.com/resources/icons)
136
+ end
137
+ end
138
+ end
139
+ end
@@ -0,0 +1 @@
1
+ input *tag_attrs
@@ -0,0 +1,17 @@
1
+ module Spark
2
+ module Input
3
+ class Base < Spark::Component::Base
4
+ attribute :value, :disabled, :required, :name, :label
5
+
6
+ # If a label is not passed, require an aria-label for accessibility
7
+ validates_attr :label, presence: { message: %q(A label or `aria: { label: "text" }` is required for accessiblity.) }, unless: -> { @aria.present? && @aria[:label].present? }
8
+
9
+ def initialize(*)
10
+ super
11
+
12
+ tag_attrs.add attr_hash(:value, :disabled, :required, :name)
13
+ classname.add "spark-input"
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,2 @@
1
+ = render Spark::Input::Label, text: @label
2
+ input *tag_attrs
@@ -0,0 +1,14 @@
1
+ module Spark
2
+ module Input
3
+ class Checkbox < Spark::Input::Base
4
+ attribute :checked, :toggle
5
+
6
+ def initialize(*)
7
+ super
8
+
9
+ tag_attrs.add attr_hash(:checked)
10
+ tag_attrs.add type: :checkbox
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,4 @@
1
+ label *tag_attrs
2
+ - if @text
3
+ .label-text = @text
4
+ = content
@@ -0,0 +1,13 @@
1
+ module Spark
2
+ module Input
3
+ class Label < Spark::Component::Base
4
+ attribute :text
5
+
6
+ def initialize(*)
7
+ super
8
+
9
+ classname.add("spark-label")
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,5 @@
1
+ div class= switch_class
2
+ = render(Spark::Input::Label, text: @label, class: "spark-input-switch-label") do
3
+ input *tag_attrs
4
+ span.spark-input-switch-panel
5
+ span.spark-input-switch-tick
@@ -0,0 +1,24 @@
1
+ module Spark
2
+ module Input
3
+ class Switch < Spark::Input::Checkbox
4
+ SIZE = %i[small medium].freeze
5
+ ALIGNMENT = %i[left right].freeze
6
+
7
+ attribute size: :medium, align: :left, value: :true
8
+
9
+ validates_attr :size, choices: SIZE
10
+ validates_attr :align, choices: ALIGNMENT
11
+
12
+ def initialize(*)
13
+ super
14
+
15
+ switch_class.add("size-#{@size}")
16
+ switch_class.add("align-#{@align}") if @align
17
+ end
18
+
19
+ def switch_class
20
+ @switch_class ||= Classname.new(base: "spark-input-switch")
21
+ end
22
+ end
23
+ end
24
+ end