satis 1.0.66

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 (101) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +92 -0
  4. data/Rakefile +23 -0
  5. data/app/assets/config/satis_manifest.js +1 -0
  6. data/app/assets/stylesheets/satis/application.css +15 -0
  7. data/app/components/satis/appearance_switcher/component.html.slim +6 -0
  8. data/app/components/satis/appearance_switcher/component.rb +11 -0
  9. data/app/components/satis/appearance_switcher/component.scss +34 -0
  10. data/app/components/satis/appearance_switcher/component_controller.js +62 -0
  11. data/app/components/satis/application_component.rb +50 -0
  12. data/app/components/satis/avatar/component.html.slim +7 -0
  13. data/app/components/satis/avatar/component.rb +52 -0
  14. data/app/components/satis/breadcrumbs/component.html.slim +8 -0
  15. data/app/components/satis/breadcrumbs/component.rb +23 -0
  16. data/app/components/satis/breadcrumbs/component.scss +19 -0
  17. data/app/components/satis/breadcrumbs/crumb.slim +8 -0
  18. data/app/components/satis/card/component.html.slim +54 -0
  19. data/app/components/satis/card/component.md +14 -0
  20. data/app/components/satis/card/component.rb +41 -0
  21. data/app/components/satis/card/component.scss +15 -0
  22. data/app/components/satis/date_time_picker/component.html.slim +48 -0
  23. data/app/components/satis/date_time_picker/component.md +11 -0
  24. data/app/components/satis/date_time_picker/component.rb +48 -0
  25. data/app/components/satis/date_time_picker/component.scss +5 -0
  26. data/app/components/satis/date_time_picker/component_controller.js +499 -0
  27. data/app/components/satis/dropdown/component.html.slim +36 -0
  28. data/app/components/satis/dropdown/component.md +48 -0
  29. data/app/components/satis/dropdown/component.rb +77 -0
  30. data/app/components/satis/dropdown/component.scss +10 -0
  31. data/app/components/satis/dropdown/component_controller.js +547 -0
  32. data/app/components/satis/flash_messages/component.html.slim +3 -0
  33. data/app/components/satis/flash_messages/component.rb +31 -0
  34. data/app/components/satis/flash_messages/component.scss +18 -0
  35. data/app/components/satis/flash_messages/message.html.slim +8 -0
  36. data/app/components/satis/info/component.html.slim +4 -0
  37. data/app/components/satis/info/component.rb +22 -0
  38. data/app/components/satis/info_item/component.html.slim +7 -0
  39. data/app/components/satis/info_item/component.rb +19 -0
  40. data/app/components/satis/input/component.html.slim +11 -0
  41. data/app/components/satis/input/component.rb +38 -0
  42. data/app/components/satis/input/component.scss +50 -0
  43. data/app/components/satis/input/element.html.slim +2 -0
  44. data/app/components/satis/map/component.html.slim +2 -0
  45. data/app/components/satis/map/component.rb +17 -0
  46. data/app/components/satis/map/component.scss +9 -0
  47. data/app/components/satis/map/component_controller.js +37 -0
  48. data/app/components/satis/menu/component.html.slim +13 -0
  49. data/app/components/satis/menu/component.md +1 -0
  50. data/app/components/satis/menu/component.rb +16 -0
  51. data/app/components/satis/menu/component_controller.js +62 -0
  52. data/app/components/satis/menu_item/component.html.slim +16 -0
  53. data/app/components/satis/menu_item/component.rb +14 -0
  54. data/app/components/satis/page/component.html.slim +45 -0
  55. data/app/components/satis/page/component.rb +15 -0
  56. data/app/components/satis/page/component_controller.js +86 -0
  57. data/app/components/satis/sidebar_menu/component.html.slim +3 -0
  58. data/app/components/satis/sidebar_menu/component.rb +17 -0
  59. data/app/components/satis/sidebar_menu/component.scss +0 -0
  60. data/app/components/satis/sidebar_menu/component_controller.js +9 -0
  61. data/app/components/satis/sidebar_menu/mobile/component.html.slim +3 -0
  62. data/app/components/satis/sidebar_menu/mobile/component.rb +10 -0
  63. data/app/components/satis/sidebar_menu_item/component.html.slim +15 -0
  64. data/app/components/satis/sidebar_menu_item/component.rb +20 -0
  65. data/app/components/satis/sidebar_menu_item/component.scss +27 -0
  66. data/app/components/satis/sidebar_menu_item/component_controller.js +62 -0
  67. data/app/components/satis/sidebar_menu_item/mobile/component.html.slim +17 -0
  68. data/app/components/satis/sidebar_menu_item/mobile/component.rb +10 -0
  69. data/app/components/satis/switch/component.html.slim +14 -0
  70. data/app/components/satis/switch/component.rb +24 -0
  71. data/app/components/satis/switch/component_controller.js +49 -0
  72. data/app/components/satis/tab/component.rb +35 -0
  73. data/app/components/satis/tabs/component.html.slim +23 -0
  74. data/app/components/satis/tabs/component.md +21 -0
  75. data/app/components/satis/tabs/component.rb +16 -0
  76. data/app/components/satis/tabs/component.scss +33 -0
  77. data/app/components/satis/tabs/component_controller.js +123 -0
  78. data/app/controllers/satis/application_controller.rb +4 -0
  79. data/app/helpers/satis/application_helper.rb +15 -0
  80. data/app/jobs/satis/application_job.rb +4 -0
  81. data/app/mailers/satis/application_mailer.rb +6 -0
  82. data/app/models/satis/application_record.rb +5 -0
  83. data/app/views/shared/_fields_for.html.slim +35 -0
  84. data/config/routes.rb +5 -0
  85. data/lib/satis/action_controller_helpers.rb +29 -0
  86. data/lib/satis/configuration.rb +61 -0
  87. data/lib/satis/engine.rb +27 -0
  88. data/lib/satis/forms/builder.rb +440 -0
  89. data/lib/satis/forms/concerns/buttons.rb +49 -0
  90. data/lib/satis/forms/concerns/file.rb +35 -0
  91. data/lib/satis/forms/concerns/options.rb +44 -0
  92. data/lib/satis/forms/concerns/required.rb +68 -0
  93. data/lib/satis/forms/concerns/select.rb +95 -0
  94. data/lib/satis/helpers/container.rb +83 -0
  95. data/lib/satis/menus/builder.rb +13 -0
  96. data/lib/satis/menus/item.rb +34 -0
  97. data/lib/satis/menus/menu.rb +23 -0
  98. data/lib/satis/version.rb +3 -0
  99. data/lib/satis.rb +36 -0
  100. data/lib/tasks/satis_tasks.rake +4 -0
  101. metadata +213 -0
@@ -0,0 +1,95 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'active_support/concern'
4
+
5
+ module Satis
6
+ module Forms
7
+ module Concerns
8
+ module Select
9
+ extend ActiveSupport::Concern
10
+
11
+ included do
12
+ def collection_input(method, options, &block)
13
+ form_group(method, options) do
14
+ safe_join [
15
+ (custom_label(method, options[:label], options) unless options[:label] == false),
16
+ block.call
17
+ ]
18
+ end
19
+ end
20
+
21
+ def select_input(method, options = {})
22
+ input_options = options[:input_html] || {}
23
+ multiple = input_options[:multiple]
24
+ options = value_text_method_options(options)
25
+
26
+ collection_input(method, options) do
27
+ collection_select(method, options[:collection], options[:value_method], options[:text_method], options,
28
+ merge_input_options({ class: "#{if multiple
29
+ 'form-multiselect'
30
+ else
31
+ 'form-select'
32
+ end} #{if has_error?(method)
33
+ 'is-invalid'
34
+ end}" }, options[:input_html]))
35
+ end
36
+ end
37
+
38
+ def grouped_select_input(method, options = {})
39
+ # We probably need to go back later and adjust this for more customization
40
+ collection_input(method, options) do
41
+ grouped_collection_select(method, options[:collection], :last, :first, :to_s, :to_s, options,
42
+ merge_input_options({ class: "custom-select form-control #{if has_error?(method)
43
+ 'is-invalid'
44
+ end}" }, options[:input_html]))
45
+ end
46
+ end
47
+
48
+ def dropdown_input(method, options = {}, &block)
49
+ form_group(method, options) do
50
+ safe_join [
51
+
52
+ (custom_label(method, options[:label], options) unless options[:label] == false),
53
+ @template.render(Satis::Dropdown::Component.new(form: self, attribute: method, title: options[:label], **value_text_method_options(options),
54
+ &block))
55
+ ]
56
+ end
57
+ end
58
+
59
+ def value_text_method_options(options)
60
+ value_method = options[:value_method]
61
+ text_method = options[:text_method]
62
+
63
+ # An array of models
64
+ if options[:collection].is_a?(Array) && options[:collection].first.class < ActiveRecord::Base
65
+ value_method ||= :id
66
+ text_method ||= :name
67
+ # An array of arrays, whereby the inner array is size 2: [[text,value],[text,value]]
68
+ elsif options[:collection].is_a?(Array) && options[:collection].first.is_a?(Array) && options[:collection].first.size == 2
69
+ value_method ||= :second
70
+ text_method ||= :first
71
+ # An array:["textvalue","textvalue"]
72
+ elsif options[:collection].is_a?(Array) && !options[:collection].first.is_a?(Array)
73
+ value_method ||= :to_s
74
+ text_method ||= :to_s
75
+ # An activerecord relation
76
+ elsif options[:collection].class < ActiveRecord::Relation
77
+ value_method ||= :id
78
+ text_method ||= :name
79
+ # An activerecord relation
80
+ elsif options[:collection].respond_to?(:each) && options[:collection].first.respond_to?(:id) && options[:collection].first.respond_to?(:name)
81
+ value_method ||= :id
82
+ text_method ||= :name
83
+ # Whatever else
84
+ else
85
+ value_method ||= :second
86
+ text_method ||= :first
87
+ end
88
+
89
+ options.reverse_merge(value_method: value_method, text_method: text_method)
90
+ end
91
+ end
92
+ end
93
+ end
94
+ end
95
+ end
@@ -0,0 +1,83 @@
1
+ module Satis
2
+ module Helpers
3
+ class Container
4
+ attr_reader :action_view
5
+
6
+ delegate :add_helper, to: :class
7
+
8
+ def initialize(action_view)
9
+ @action_view = action_view
10
+
11
+ add_helper :appearance_switcher, Satis::AppearanceSwitcher::Component
12
+ add_helper :avatar, Satis::Avatar::Component
13
+ add_helper :breadcrumbs, Satis::Breadcrumbs::Component
14
+ add_helper :card, Satis::Card::Component
15
+ add_helper :flash_messages, Satis::FlashMessages::Component
16
+ add_helper :info, Satis::Info::Component
17
+ add_helper :map, Satis::Map::Component
18
+ add_helper :menu, Satis::Menu::Component
19
+ add_helper :page, Satis::Page::Component
20
+ add_helper :sidebar_menu, Satis::SidebarMenu::Component
21
+ add_helper :tabs, Satis::Tabs::Component
22
+ add_helper :input, Satis::Input::Component
23
+ end
24
+
25
+ def copyable(name, scrub: "#")
26
+ return if name.blank?
27
+
28
+ action_view.content_tag("satis-copyable", name, scrub: scrub)
29
+ end
30
+
31
+ def browser
32
+ @browser ||= Browser.new(action_view.request.user_agent)
33
+ end
34
+
35
+ def form_for(name, *args, &block)
36
+ options = args.extract_options!.deep_merge!(html: {data: {}})
37
+ form_options_defaults!(options)
38
+ update_form_data_options!(options[:html][:data], options)
39
+ args << options.merge(builder: Satis::Forms::Builder)
40
+ action_view.form_for(name, *args, &block)
41
+ end
42
+
43
+ def form_with(model: nil, scope: nil, url: nil, format: nil, **options, &block)
44
+ options = options.reverse_merge(builder: Satis::Forms::Builder, class: "").deep_merge!(data: {})
45
+ form_options_defaults!(options)
46
+ update_form_data_options!(options[:data], options)
47
+ action_view.form_with(model: model, scope: scope, url: url, format: format, **options, &block)
48
+ end
49
+
50
+ def form_options_defaults!(options)
51
+ options[:submit_on_enter] = Satis.submit_on_enter? if options[:submit_on_enter].nil?
52
+ options[:confirm_before_leave] = Satis.confirm_before_leave? if options[:confirm_before_leave].nil?
53
+ end
54
+
55
+ def update_form_data_options!(data, options)
56
+ data[:controller] ||= ""
57
+ data[:controller] += " form"
58
+ data[:"form-no-submit-on-enter-value"] = !options[:submit_on_enter]
59
+ data[:"form-confirm-before-leave-value"] = options[:confirm_before_leave]
60
+ end
61
+
62
+ def self.add_helper(name, component)
63
+ if respond_to?(name)
64
+ Satis.config.logger.warn("Helper #{name} already defined, skipping.")
65
+ return
66
+ end
67
+ define_method(name) do |*args, **kwargs, &block|
68
+ original_args = args.dup
69
+ options = args.extract_options!
70
+ instance = if options.key? :variant
71
+ variant_component = component.to_s.sub(/::Component$/, "::#{options[:variant].to_s.camelize}::Component").safe_constantize
72
+ (variant_component || component).new(*original_args, **kwargs)
73
+ else
74
+ component.new(*original_args, **kwargs)
75
+ end
76
+
77
+ instance.original_view_context = action_view
78
+ action_view.render(instance, &block)
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Satis
4
+ module Menus
5
+ class Builder
6
+ attr_reader :options
7
+
8
+ def self.build(*args, **kwargs, &block)
9
+ Menu.new(*args, **kwargs, &block)
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Satis
4
+ module Menus
5
+ class Item
6
+ attr_reader :id, :link, :icon, :app, :menu, :link_attributes, :level, :type
7
+
8
+ attr_writer :scope
9
+
10
+ def initialize(id, link: nil, label: nil, icon: nil, link_attributes: {}, active: nil, scope: [], level: nil, type: :item, &block)
11
+ @id = id
12
+ @label = label
13
+ @icon = icon
14
+ @link = link
15
+ @link_attributes = link_attributes
16
+ @scope = scope
17
+ @level = level
18
+ @type = type
19
+ @link_attributes = @link_attributes.merge(data: { action: 'click->satis-menu#toggle' }) if type == :toggle
20
+ @menu = Menu.new(scope + ["#{id}_menu".to_sym], level: level + 1, &block) if block_given?
21
+ end
22
+
23
+ def label
24
+ return @label if @label
25
+
26
+ @label ||= I18n.t(id, scope: [:menu] + @scope, default: id.to_s.humanize)
27
+ end
28
+
29
+ def active?
30
+ active
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Satis
4
+ module Menus
5
+ class Menu
6
+ attr_reader :items, :level
7
+
8
+ def initialize(*args, **kwargs)
9
+ @options = args.extract_options!
10
+ @items = []
11
+ @scope = Array.wrap(args.first)
12
+ @level = kwargs[:level] || 0
13
+ yield self if block_given?
14
+ end
15
+
16
+ def item(*args, **kwargs, &block)
17
+ kwargs[:scope] = @scope
18
+ kwargs[:level] = @level
19
+ @items << Item.new(*args, **kwargs, &block)
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,3 @@
1
+ module Satis
2
+ VERSION = '1.0.66'
3
+ end
data/lib/satis.rb ADDED
@@ -0,0 +1,36 @@
1
+ require 'satis/version'
2
+ require 'satis/engine'
3
+ require 'satis/configuration'
4
+
5
+ require 'view_component'
6
+ require 'browser'
7
+ require 'browser/aliases'
8
+
9
+ Browser::Base.include(Browser::Aliases)
10
+
11
+ module Satis
12
+ class << self
13
+ attr_reader :config
14
+
15
+ def setup
16
+ @config = Configuration.new
17
+ yield config
18
+ end
19
+
20
+ def confirm_before_leave?
21
+ return false if config.nil?
22
+
23
+ config.confirm_before_leave
24
+ end
25
+
26
+ def submit_on_enter?
27
+ return true if config.nil?
28
+
29
+ config.submit_on_enter
30
+ end
31
+
32
+ def add_helper(name, component)
33
+ Satis::Helpers::Container.add_helper(name, component)
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :satis do
3
+ # # Task goes here
4
+ # end
metadata ADDED
@@ -0,0 +1,213 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: satis
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.66
5
+ platform: ruby
6
+ authors:
7
+ - Tom de Grunt
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2022-11-07 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: browser
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: diffy
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rails
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '6'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '6'
55
+ - !ruby/object:Gem::Dependency
56
+ name: view_component
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: auxilium
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '3'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '3'
83
+ description: Pretty cool
84
+ email:
85
+ - tom@degrunt.nl
86
+ executables: []
87
+ extensions: []
88
+ extra_rdoc_files: []
89
+ files:
90
+ - MIT-LICENSE
91
+ - README.md
92
+ - Rakefile
93
+ - app/assets/config/satis_manifest.js
94
+ - app/assets/stylesheets/satis/application.css
95
+ - app/components/satis/appearance_switcher/component.html.slim
96
+ - app/components/satis/appearance_switcher/component.rb
97
+ - app/components/satis/appearance_switcher/component.scss
98
+ - app/components/satis/appearance_switcher/component_controller.js
99
+ - app/components/satis/application_component.rb
100
+ - app/components/satis/avatar/component.html.slim
101
+ - app/components/satis/avatar/component.rb
102
+ - app/components/satis/breadcrumbs/component.html.slim
103
+ - app/components/satis/breadcrumbs/component.rb
104
+ - app/components/satis/breadcrumbs/component.scss
105
+ - app/components/satis/breadcrumbs/crumb.slim
106
+ - app/components/satis/card/component.html.slim
107
+ - app/components/satis/card/component.md
108
+ - app/components/satis/card/component.rb
109
+ - app/components/satis/card/component.scss
110
+ - app/components/satis/date_time_picker/component.html.slim
111
+ - app/components/satis/date_time_picker/component.md
112
+ - app/components/satis/date_time_picker/component.rb
113
+ - app/components/satis/date_time_picker/component.scss
114
+ - app/components/satis/date_time_picker/component_controller.js
115
+ - app/components/satis/dropdown/component.html.slim
116
+ - app/components/satis/dropdown/component.md
117
+ - app/components/satis/dropdown/component.rb
118
+ - app/components/satis/dropdown/component.scss
119
+ - app/components/satis/dropdown/component_controller.js
120
+ - app/components/satis/flash_messages/component.html.slim
121
+ - app/components/satis/flash_messages/component.rb
122
+ - app/components/satis/flash_messages/component.scss
123
+ - app/components/satis/flash_messages/message.html.slim
124
+ - app/components/satis/info/component.html.slim
125
+ - app/components/satis/info/component.rb
126
+ - app/components/satis/info_item/component.html.slim
127
+ - app/components/satis/info_item/component.rb
128
+ - app/components/satis/input/component.html.slim
129
+ - app/components/satis/input/component.rb
130
+ - app/components/satis/input/component.scss
131
+ - app/components/satis/input/element.html.slim
132
+ - app/components/satis/map/component.html.slim
133
+ - app/components/satis/map/component.rb
134
+ - app/components/satis/map/component.scss
135
+ - app/components/satis/map/component_controller.js
136
+ - app/components/satis/menu/component.html.slim
137
+ - app/components/satis/menu/component.md
138
+ - app/components/satis/menu/component.rb
139
+ - app/components/satis/menu/component_controller.js
140
+ - app/components/satis/menu_item/component.html.slim
141
+ - app/components/satis/menu_item/component.rb
142
+ - app/components/satis/page/component.html.slim
143
+ - app/components/satis/page/component.rb
144
+ - app/components/satis/page/component_controller.js
145
+ - app/components/satis/sidebar_menu/component.html.slim
146
+ - app/components/satis/sidebar_menu/component.rb
147
+ - app/components/satis/sidebar_menu/component.scss
148
+ - app/components/satis/sidebar_menu/component_controller.js
149
+ - app/components/satis/sidebar_menu/mobile/component.html.slim
150
+ - app/components/satis/sidebar_menu/mobile/component.rb
151
+ - app/components/satis/sidebar_menu_item/component.html.slim
152
+ - app/components/satis/sidebar_menu_item/component.rb
153
+ - app/components/satis/sidebar_menu_item/component.scss
154
+ - app/components/satis/sidebar_menu_item/component_controller.js
155
+ - app/components/satis/sidebar_menu_item/mobile/component.html.slim
156
+ - app/components/satis/sidebar_menu_item/mobile/component.rb
157
+ - app/components/satis/switch/component.html.slim
158
+ - app/components/satis/switch/component.rb
159
+ - app/components/satis/switch/component_controller.js
160
+ - app/components/satis/tab/component.rb
161
+ - app/components/satis/tabs/component.html.slim
162
+ - app/components/satis/tabs/component.md
163
+ - app/components/satis/tabs/component.rb
164
+ - app/components/satis/tabs/component.scss
165
+ - app/components/satis/tabs/component_controller.js
166
+ - app/controllers/satis/application_controller.rb
167
+ - app/helpers/satis/application_helper.rb
168
+ - app/jobs/satis/application_job.rb
169
+ - app/mailers/satis/application_mailer.rb
170
+ - app/models/satis/application_record.rb
171
+ - app/views/shared/_fields_for.html.slim
172
+ - config/routes.rb
173
+ - lib/satis.rb
174
+ - lib/satis/action_controller_helpers.rb
175
+ - lib/satis/configuration.rb
176
+ - lib/satis/engine.rb
177
+ - lib/satis/forms/builder.rb
178
+ - lib/satis/forms/concerns/buttons.rb
179
+ - lib/satis/forms/concerns/file.rb
180
+ - lib/satis/forms/concerns/options.rb
181
+ - lib/satis/forms/concerns/required.rb
182
+ - lib/satis/forms/concerns/select.rb
183
+ - lib/satis/helpers/container.rb
184
+ - lib/satis/menus/builder.rb
185
+ - lib/satis/menus/item.rb
186
+ - lib/satis/menus/menu.rb
187
+ - lib/satis/version.rb
188
+ - lib/tasks/satis_tasks.rake
189
+ homepage: https://github.com/entdec/satis
190
+ licenses:
191
+ - MIT
192
+ metadata: {}
193
+ post_install_message:
194
+ rdoc_options: []
195
+ require_paths:
196
+ - lib
197
+ required_ruby_version: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - ">="
200
+ - !ruby/object:Gem::Version
201
+ version: '0'
202
+ required_rubygems_version: !ruby/object:Gem::Requirement
203
+ requirements:
204
+ - - ">="
205
+ - !ruby/object:Gem::Version
206
+ version: '0'
207
+ requirements: []
208
+ rubygems_version: 3.3.7
209
+ signing_key:
210
+ specification_version: 4
211
+ summary: Satis allow you to focus on features, let us do the UI/UX. It'll give you
212
+ satisfaction.
213
+ test_files: []