satis 1.0.66

Sign up to get free protection for your applications and to get access to all the features.
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: []