matestack-ui-bootstrap 1.4.0
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 +7 -0
- data/LICENSE +8 -0
- data/README.md +26 -0
- data/Rakefile +43 -0
- data/app/assets/images/avatar-placeholder.png +0 -0
- data/app/assets/images/icons/bootstrap-icons.svg +1 -0
- data/app/concepts/matestack/ui/bootstrap/apps/admin_template.rb +85 -0
- data/app/concepts/matestack/ui/bootstrap/components/accordion.rb +53 -0
- data/app/concepts/matestack/ui/bootstrap/components/alert.js +53 -0
- data/app/concepts/matestack/ui/bootstrap/components/alert.rb +34 -0
- data/app/concepts/matestack/ui/bootstrap/components/avatar.rb +27 -0
- data/app/concepts/matestack/ui/bootstrap/components/badge.rb +30 -0
- data/app/concepts/matestack/ui/bootstrap/components/breadcrumb.rb +46 -0
- data/app/concepts/matestack/ui/bootstrap/components/button.rb +54 -0
- data/app/concepts/matestack/ui/bootstrap/components/button_group.rb +36 -0
- data/app/concepts/matestack/ui/bootstrap/components/card.rb +100 -0
- data/app/concepts/matestack/ui/bootstrap/components/carousel.js +79 -0
- data/app/concepts/matestack/ui/bootstrap/components/carousel.rb +85 -0
- data/app/concepts/matestack/ui/bootstrap/components/chart.js +232 -0
- data/app/concepts/matestack/ui/bootstrap/components/chart.rb +71 -0
- data/app/concepts/matestack/ui/bootstrap/components/close.rb +30 -0
- data/app/concepts/matestack/ui/bootstrap/components/collapse.js +84 -0
- data/app/concepts/matestack/ui/bootstrap/components/collapse.rb +43 -0
- data/app/concepts/matestack/ui/bootstrap/components/dropdown.js +14 -0
- data/app/concepts/matestack/ui/bootstrap/components/dropdown.rb +116 -0
- data/app/concepts/matestack/ui/bootstrap/components/icon.rb +19 -0
- data/app/concepts/matestack/ui/bootstrap/components/list_group.rb +83 -0
- data/app/concepts/matestack/ui/bootstrap/components/modal.js +90 -0
- data/app/concepts/matestack/ui/bootstrap/components/modal.rb +106 -0
- data/app/concepts/matestack/ui/bootstrap/components/navbar.rb +120 -0
- data/app/concepts/matestack/ui/bootstrap/components/page_heading.rb +28 -0
- data/app/concepts/matestack/ui/bootstrap/components/pagination.rb +40 -0
- data/app/concepts/matestack/ui/bootstrap/components/popover.js +26 -0
- data/app/concepts/matestack/ui/bootstrap/components/popover.rb +92 -0
- data/app/concepts/matestack/ui/bootstrap/components/progress.rb +65 -0
- data/app/concepts/matestack/ui/bootstrap/components/scrollspy.rb +33 -0
- data/app/concepts/matestack/ui/bootstrap/components/section_card.rb +31 -0
- data/app/concepts/matestack/ui/bootstrap/components/spinner.rb +31 -0
- data/app/concepts/matestack/ui/bootstrap/components/tab_nav.rb +81 -0
- data/app/concepts/matestack/ui/bootstrap/components/tab_nav_content.rb +32 -0
- data/app/concepts/matestack/ui/bootstrap/components/toast.js +79 -0
- data/app/concepts/matestack/ui/bootstrap/components/toast.rb +99 -0
- data/app/concepts/matestack/ui/bootstrap/components/tooltip.js +26 -0
- data/app/concepts/matestack/ui/bootstrap/components/tooltip.rb +82 -0
- data/app/concepts/matestack/ui/bootstrap/content/collection/collection.rb +112 -0
- data/app/concepts/matestack/ui/bootstrap/content/collection/collection.scss +10 -0
- data/app/concepts/matestack/ui/bootstrap/content/collection/content.rb +101 -0
- data/app/concepts/matestack/ui/bootstrap/content/collection/filter.rb +33 -0
- data/app/concepts/matestack/ui/bootstrap/content/collection/paginate.rb +92 -0
- data/app/concepts/matestack/ui/bootstrap/content/figure.rb +7 -0
- data/app/concepts/matestack/ui/bootstrap/form/checkbox.rb +90 -0
- data/app/concepts/matestack/ui/bootstrap/form/date.js +38 -0
- data/app/concepts/matestack/ui/bootstrap/form/date.rb +98 -0
- data/app/concepts/matestack/ui/bootstrap/form/input.rb +123 -0
- data/app/concepts/matestack/ui/bootstrap/form/radio.rb +65 -0
- data/app/concepts/matestack/ui/bootstrap/form/select.haml +11 -0
- data/app/concepts/matestack/ui/bootstrap/form/select.rb +74 -0
- data/app/concepts/matestack/ui/bootstrap/form/submit.rb +20 -0
- data/app/concepts/matestack/ui/bootstrap/form/switch.rb +90 -0
- data/app/concepts/matestack/ui/bootstrap/layout/column.rb +47 -0
- data/app/concepts/matestack/ui/bootstrap/layout/container.rb +25 -0
- data/app/concepts/matestack/ui/bootstrap/layout/row.rb +15 -0
- data/app/concepts/matestack/ui/bootstrap/layout/sidebar.js +64 -0
- data/app/concepts/matestack/ui/bootstrap/layout/sidebar.rb +45 -0
- data/app/concepts/matestack/ui/bootstrap/layout/sidebar.scss +57 -0
- data/app/concepts/matestack/ui/bootstrap/pages/devise/sign_in.rb +40 -0
- data/app/concepts/matestack/ui/bootstrap/registry.rb +63 -0
- data/app/helpers/matestack/ui/bootstrap/application_helper.rb +13 -0
- data/app/javascript/matestack-ui-bootstrap/index.js +26 -0
- data/app/javascript/matestack-ui-bootstrap/stylesheets/matestack-ui-bootstrap.scss +65 -0
- data/app/javascript/packs/matestack-ui-bootstrap.js +2 -0
- data/config/routes.rb +2 -0
- data/config/webpack/development.js +5 -0
- data/config/webpack/environment.js +29 -0
- data/config/webpack/production.js +33 -0
- data/config/webpack/test.js +5 -0
- data/config/webpacker.yml +96 -0
- data/lib/matestack/ui/bootstrap.rb +27 -0
- data/lib/matestack/ui/bootstrap/engine.rb +26 -0
- data/lib/matestack/ui/bootstrap/version.rb +7 -0
- data/lib/tasks/matestack/ui/bootstrap_tasks.rake +66 -0
- metadata +137 -0
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
class Matestack::Ui::Bootstrap::Form::Submit < Matestack::Ui::Component
|
|
2
|
+
|
|
3
|
+
optional :button_variant
|
|
4
|
+
optional :spinner_variant
|
|
5
|
+
optional :text
|
|
6
|
+
optional :loading_text
|
|
7
|
+
|
|
8
|
+
def response
|
|
9
|
+
form_submit do
|
|
10
|
+
bs_btn type: "submit", variant: button_variant || :primary, attributes: { "v-if": "!loading()" } do
|
|
11
|
+
plain text || "Submit"
|
|
12
|
+
end
|
|
13
|
+
bs_btn type: "submit", variant: button_variant || :primary, attributes: { disabled: true, "v-if": "loading()" } do
|
|
14
|
+
bs_spinner variant: spinner_variant || :light, size: :sm
|
|
15
|
+
plain loading_text || "Loading..."
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
end
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
class Matestack::Ui::Bootstrap::Form::Switch < Matestack::Ui::Core::Form::Checkbox::Checkbox
|
|
2
|
+
|
|
3
|
+
optional :form_text
|
|
4
|
+
optional :disabled
|
|
5
|
+
optional :variant
|
|
6
|
+
|
|
7
|
+
def response
|
|
8
|
+
if !checkbox_options.empty?
|
|
9
|
+
label for: attr_key, class: "form-label", text: input_label if input_label
|
|
10
|
+
end
|
|
11
|
+
if !checkbox_options.empty?
|
|
12
|
+
multiple_switches
|
|
13
|
+
else
|
|
14
|
+
true_false_switch
|
|
15
|
+
end
|
|
16
|
+
render_form_text
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
private
|
|
20
|
+
|
|
21
|
+
def checkbox_wrapper(options = {}, &block)
|
|
22
|
+
div class: "form-check form-switch #{'form-check-inline' if variant == :inline}", attributes: options[:attributes] do
|
|
23
|
+
yield
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def bs_label(text:, for_input:)
|
|
28
|
+
label text: text, for: for_input, class: 'form-check-label'
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def true_false_switch
|
|
32
|
+
checkbox_wrapper do
|
|
33
|
+
form_input type: :hidden, key: key, value: (false_value || 0), errors: false
|
|
34
|
+
input html_attributes.merge(
|
|
35
|
+
type: :checkbox,
|
|
36
|
+
id: "#{id_for_item(value)}",
|
|
37
|
+
name: item_name(key),
|
|
38
|
+
value: checked_value,
|
|
39
|
+
class: 'form-check-input',
|
|
40
|
+
disabled: disabled,
|
|
41
|
+
attributes: vue_attributes.merge(
|
|
42
|
+
ref: "input.#{attr_key}",
|
|
43
|
+
)
|
|
44
|
+
)
|
|
45
|
+
bs_label text: input_label, for_input: id_for_item(value)
|
|
46
|
+
render_errors
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def multiple_switches
|
|
51
|
+
checkbox_options.to_a.each do |item|
|
|
52
|
+
checkbox_wrapper do
|
|
53
|
+
input html_attributes.merge(
|
|
54
|
+
type: :checkbox,
|
|
55
|
+
id: "#{id_for_item(item_value(item))}",
|
|
56
|
+
name: item_name(item),
|
|
57
|
+
value: item_value(item),
|
|
58
|
+
class: 'form-check-input',
|
|
59
|
+
disabled: disabled,
|
|
60
|
+
attributes: vue_attributes
|
|
61
|
+
)
|
|
62
|
+
bs_label text: item_name(item), for_input: id_for_item(item_value(item))
|
|
63
|
+
render_errors if checkbox_options.to_a.last == item
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def render_errors
|
|
69
|
+
unless @included_config[:errors] == false && (errors == false || errors.nil?) || errors == false
|
|
70
|
+
div class: 'invalid-feedback', attributes: { 'v-for': "error in #{error_key}" } do
|
|
71
|
+
plain '{{ error }}'
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def input_error_class
|
|
77
|
+
'is-invalid'
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def checkbox_options
|
|
81
|
+
super || {}
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def render_form_text
|
|
85
|
+
div id: "form_text_for_#{attr_key}", class: "form-text" do
|
|
86
|
+
plain form_text
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
class Matestack::Ui::Bootstrap::Layout::Column < Matestack::Ui::Component
|
|
2
|
+
|
|
3
|
+
COL_ATTRIBUTES = %i[default sm md lg xl xxl]
|
|
4
|
+
optional *COL_ATTRIBUTES
|
|
5
|
+
|
|
6
|
+
ORDER_ATTRIBUTES = %i[order order_sm order_md order_lg order_xl order_xxl]
|
|
7
|
+
optional *ORDER_ATTRIBUTES
|
|
8
|
+
|
|
9
|
+
OFFSET_ATTRIBUTES = %i[offset offset_sm offset_md offset_lg offset_xl offset_xxl]
|
|
10
|
+
optional *OFFSET_ATTRIBUTES
|
|
11
|
+
|
|
12
|
+
optional class: { as: :bs_class }
|
|
13
|
+
optional :align_self
|
|
14
|
+
|
|
15
|
+
def response
|
|
16
|
+
div col_attributes do
|
|
17
|
+
yield_components
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
protected
|
|
22
|
+
|
|
23
|
+
def col_attributes
|
|
24
|
+
html_attributes.merge(
|
|
25
|
+
class: col_classes,
|
|
26
|
+
attributes: options[:attributes]
|
|
27
|
+
)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def col_classes
|
|
31
|
+
classes = []
|
|
32
|
+
COL_ATTRIBUTES.each do |attrs|
|
|
33
|
+
classes << "col-#{ self.send(:"#{attrs}") }" if attrs == :default and self.send(:"#{attrs}")
|
|
34
|
+
classes << "col-#{attrs}-#{ self.send(:"#{attrs}") }" if attrs != :default and self.send(:"#{attrs}")
|
|
35
|
+
end
|
|
36
|
+
ORDER_ATTRIBUTES.each do |attrs|
|
|
37
|
+
classes << "#{attrs}-#{ self.send(:"#{attrs}") }".gsub('_', '-') if self.send(:"#{attrs}")
|
|
38
|
+
end
|
|
39
|
+
OFFSET_ATTRIBUTES.each do |attrs|
|
|
40
|
+
classes << "#{attrs}-#{ self.send(:"#{attrs}") }".gsub('_', '-') if self.send(:"#{attrs}")
|
|
41
|
+
end
|
|
42
|
+
classes << "align-self-#{align_self}" if align_self.present?
|
|
43
|
+
classes << "col" if classes.blank?
|
|
44
|
+
classes << bs_class
|
|
45
|
+
classes.join(' ').strip
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
class Matestack::Ui::Bootstrap::Layout::Container < Matestack::Ui::Component
|
|
2
|
+
|
|
3
|
+
optional :size, class: { as: :bs_class }
|
|
4
|
+
|
|
5
|
+
def response
|
|
6
|
+
div container_attributes do
|
|
7
|
+
yield_components
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
protected
|
|
12
|
+
|
|
13
|
+
def container_attributes
|
|
14
|
+
html_attributes.merge(
|
|
15
|
+
class: container_classes
|
|
16
|
+
)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def container_classes
|
|
20
|
+
[].tap do |classes|
|
|
21
|
+
classes << (size.present? ? "container-#{size}" : "container")
|
|
22
|
+
classes << bs_class
|
|
23
|
+
end.join(' ').strip
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
class Matestack::Ui::Bootstrap::Layout::Row < Matestack::Ui::Component
|
|
2
|
+
def prepare
|
|
3
|
+
@row_classes = []
|
|
4
|
+
|
|
5
|
+
@row_classes << "align-items-#{options[:vertical]}" if options[:vertical].present?
|
|
6
|
+
@row_classes << "justify-content-#{options[:horizontal]}" if options[:horizontal].present?
|
|
7
|
+
@row_classes << "#{options[:class]}" if options[:class].present?
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def response
|
|
11
|
+
div id: "#{options[:id]}", class: "row #{@row_classes.join(' ')}" do
|
|
12
|
+
yield_components
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
const bootstrap = require('bootstrap')
|
|
2
|
+
|
|
3
|
+
MatestackUiCore.Vue.component('matestack-ui-bootstrap-sidebar', {
|
|
4
|
+
mixins: [MatestackUiCore.componentMixin],
|
|
5
|
+
|
|
6
|
+
data() {
|
|
7
|
+
return {
|
|
8
|
+
sidebarOpen: false,
|
|
9
|
+
};
|
|
10
|
+
},
|
|
11
|
+
|
|
12
|
+
methods: {
|
|
13
|
+
sidebarToggle: function() {
|
|
14
|
+
var sidebarElement = document.getElementById("sidebar");
|
|
15
|
+
if (sidebarElement.classList.contains("closed")) {
|
|
16
|
+
this.openSideBar();
|
|
17
|
+
} else {
|
|
18
|
+
this.closeSideBar();
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
openSideBar: function(){
|
|
22
|
+
var sidebarElement = document.getElementById("sidebar");
|
|
23
|
+
var contentElement = document.getElementById("content")
|
|
24
|
+
this.sidebarOpen = true;
|
|
25
|
+
sidebarElement.classList.remove("closed")
|
|
26
|
+
sidebarElement.classList.add("open")
|
|
27
|
+
contentElement.classList.add("sidebar-open")
|
|
28
|
+
},
|
|
29
|
+
closeSideBar: function(){
|
|
30
|
+
var sidebarElement = document.getElementById("sidebar");
|
|
31
|
+
var contentElement = document.getElementById("content")
|
|
32
|
+
this.sidebarOpen = false;
|
|
33
|
+
sidebarElement.classList.add("closed")
|
|
34
|
+
sidebarElement.classList.remove("open")
|
|
35
|
+
contentElement.classList.remove("sidebar-open")
|
|
36
|
+
},
|
|
37
|
+
resizeCallback: function(){
|
|
38
|
+
if (window.innerWidth <= 992){
|
|
39
|
+
this.closeSideBar();
|
|
40
|
+
} else {
|
|
41
|
+
this.openSideBar();
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
|
|
46
|
+
mounted: function(){
|
|
47
|
+
if (window.innerWidth <= 992){
|
|
48
|
+
this.sidebarOpen = true;
|
|
49
|
+
}
|
|
50
|
+
window.addEventListener('resize', this.resizeCallback);
|
|
51
|
+
var self = this;
|
|
52
|
+
MatestackUiCore.matestackEventHub.$on("page_loaded", function(){
|
|
53
|
+
if (window.innerWidth <= 992){
|
|
54
|
+
self.closeSideBar();
|
|
55
|
+
}
|
|
56
|
+
})
|
|
57
|
+
MatestackUiCore.matestackEventHub.$on("page_loading_triggered", function(){
|
|
58
|
+
if (window.innerWidth <= 992){
|
|
59
|
+
self.closeSideBar();
|
|
60
|
+
}
|
|
61
|
+
})
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
});
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
class Matestack::Ui::Bootstrap::Layout::Sidebar < Matestack::Ui::VueJsComponent
|
|
2
|
+
|
|
3
|
+
vue_js_component_name "matestack-ui-bootstrap-sidebar"
|
|
4
|
+
|
|
5
|
+
optional :slots
|
|
6
|
+
optional :sidebar_navigation_items
|
|
7
|
+
|
|
8
|
+
def response
|
|
9
|
+
div class: "sidebar-wrapper shadow-sm bg-white", id: "sidebar" do
|
|
10
|
+
nav class: 'sidebar pt-4 px-3' do
|
|
11
|
+
div class: "sidebar-toggler" do
|
|
12
|
+
bs_btn variant: :link, attributes: { "@click": "sidebarToggle" } do
|
|
13
|
+
bs_icon name: "list", size: 25, class: "text-muted"
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
div class: "sidebar-top mb-3" do
|
|
17
|
+
slot slots[:sidebar_top] if slots[:sidebar_top].present?
|
|
18
|
+
end
|
|
19
|
+
div class: "sidebar-navigation my-3" do
|
|
20
|
+
sidebar_navigation_partial
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def sidebar_navigation_partial
|
|
27
|
+
div class: "list-group" do
|
|
28
|
+
sidebar_navigation_items.each do |item|
|
|
29
|
+
if item[:type] == :link
|
|
30
|
+
link class: "list-group-item list-group-item-action border-0 rounded", path: item[:path] do
|
|
31
|
+
bs_icon name: item[:icon], size: 20 if item[:icon]
|
|
32
|
+
span class: "ps-3", text: item[:text] if item[:text]
|
|
33
|
+
end
|
|
34
|
+
else
|
|
35
|
+
transition class: "list-group-item list-group-item-action border-0 rounded", path: item[:path], delay: item[:delay] || 300 do
|
|
36
|
+
bs_icon name: item[:icon], size: 20 if item[:icon]
|
|
37
|
+
span class: "ps-3", text: item[:text] if item[:text]
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
end
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
// Sidebar
|
|
2
|
+
.sidebar-wrapper{
|
|
3
|
+
position: relative;
|
|
4
|
+
z-index: 10;
|
|
5
|
+
transition: 0.5s;
|
|
6
|
+
|
|
7
|
+
flex-grow: 0; /* do not grow - initial value: 0 */
|
|
8
|
+
flex-shrink: 0; /* do not shrink - initial value: 1 */
|
|
9
|
+
flex-basis: 300px; /* width/height - initial value: auto */
|
|
10
|
+
|
|
11
|
+
.sidebar-toggler{
|
|
12
|
+
transition: 0.5s;
|
|
13
|
+
position: relative;
|
|
14
|
+
left: 290px;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
&.closed {
|
|
18
|
+
margin-left: -300px;
|
|
19
|
+
}
|
|
20
|
+
&.open {
|
|
21
|
+
margin-left: 0px;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// @include media-breakpoint-down(lg) {
|
|
25
|
+
@media (max-width: 992px) {
|
|
26
|
+
margin-left: -300px;
|
|
27
|
+
&.open {
|
|
28
|
+
margin-left: 0px;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
.sidebar{
|
|
33
|
+
min-height: 100vh;
|
|
34
|
+
height: 100%;
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
.sidebar-top{
|
|
39
|
+
margin-top: -35px;
|
|
40
|
+
a{
|
|
41
|
+
text-decoration: none;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
.list-group-item{
|
|
46
|
+
&.active{
|
|
47
|
+
margin-top: 0px!important;
|
|
48
|
+
}
|
|
49
|
+
&.active-child{
|
|
50
|
+
color: var(--bs-white);
|
|
51
|
+
background-color: var(--bs-primary);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
class Matestack::Ui::Bootstrap::Pages::Devise::SignIn < Matestack::Ui::Page
|
|
2
|
+
|
|
3
|
+
def response
|
|
4
|
+
bs_container class: "mt-5" do
|
|
5
|
+
bs_row class: "mt-5", vertical: :center, horizontal: :center do
|
|
6
|
+
bs_col md:4 do
|
|
7
|
+
login_form_partial
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
private
|
|
14
|
+
|
|
15
|
+
def login_form_partial
|
|
16
|
+
section class: "mt-5 rounded shadow-sm p-4 mb-4" do
|
|
17
|
+
heading size: 2, text: 'Sign in'
|
|
18
|
+
form form_config do
|
|
19
|
+
div class: "mb-3 mt-4" do
|
|
20
|
+
bs_form_input label: 'Email', key: :email, type: :email
|
|
21
|
+
end
|
|
22
|
+
div class: "mb-3" do
|
|
23
|
+
bs_form_input label: 'Password', key: :password, type: :password
|
|
24
|
+
end
|
|
25
|
+
div class: "mb-3" do
|
|
26
|
+
bs_form_submit text: "Sign in"
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
toggle show_on: 'sign_in_failure' do
|
|
30
|
+
plain 'Your email or password is not valid.'
|
|
31
|
+
end
|
|
32
|
+
br
|
|
33
|
+
small text: "Dummy user: admin@matestack.io"
|
|
34
|
+
br
|
|
35
|
+
small text: "Dummy password: password"
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
end
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
module Matestack::Ui::Bootstrap::Registry
|
|
2
|
+
|
|
3
|
+
COMPONENTS = {
|
|
4
|
+
bs_accordion: Matestack::Ui::Bootstrap::Components::Accordion,
|
|
5
|
+
bs_alert: Matestack::Ui::Bootstrap::Components::Alert,
|
|
6
|
+
bs_avatar: Matestack::Ui::Bootstrap::Components::Avatar,
|
|
7
|
+
bs_badge: Matestack::Ui::Bootstrap::Components::Badge,
|
|
8
|
+
bs_breadcrumb: Matestack::Ui::Bootstrap::Components::Breadcrumb,
|
|
9
|
+
bs_btn: Matestack::Ui::Bootstrap::Components::Button,
|
|
10
|
+
bs_btn_group: Matestack::Ui::Bootstrap::Components::ButtonGroup,
|
|
11
|
+
bs_card: Matestack::Ui::Bootstrap::Components::Card,
|
|
12
|
+
bs_carousel: Matestack::Ui::Bootstrap::Components::Carousel,
|
|
13
|
+
bs_chart: Matestack::Ui::Bootstrap::Components::Chart,
|
|
14
|
+
bs_close: Matestack::Ui::Bootstrap::Components::Close,
|
|
15
|
+
bs_collapse: Matestack::Ui::Bootstrap::Components::Collapse,
|
|
16
|
+
bs_dropdown: Matestack::Ui::Bootstrap::Components::Dropdown,
|
|
17
|
+
bs_icon: Matestack::Ui::Bootstrap::Components::Icon,
|
|
18
|
+
bs_list_group: Matestack::Ui::Bootstrap::Components::ListGroup,
|
|
19
|
+
bs_modal: Matestack::Ui::Bootstrap::Components::Modal,
|
|
20
|
+
bs_navbar: Matestack::Ui::Bootstrap::Components::Navbar,
|
|
21
|
+
bs_pagination: Matestack::Ui::Bootstrap::Components::Pagination,
|
|
22
|
+
bs_page_heading: Matestack::Ui::Bootstrap::Components::PageHeading,
|
|
23
|
+
bs_popover: Matestack::Ui::Bootstrap::Components::Popover,
|
|
24
|
+
bs_progress: Matestack::Ui::Bootstrap::Components::Progress,
|
|
25
|
+
bs_scrollspy: Matestack::Ui::Bootstrap::Components::Scrollspy,
|
|
26
|
+
bs_section_card: Matestack::Ui::Bootstrap::Components::SectionCard,
|
|
27
|
+
bs_spinner: Matestack::Ui::Bootstrap::Components::Spinner,
|
|
28
|
+
bs_tab_nav: Matestack::Ui::Bootstrap::Components::TabNav,
|
|
29
|
+
bs_tab_nav_content: Matestack::Ui::Bootstrap::Components::TabNavContent,
|
|
30
|
+
bs_toast: Matestack::Ui::Bootstrap::Components::Toast,
|
|
31
|
+
bs_tooltip: Matestack::Ui::Bootstrap::Components::Tooltip,
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
FORMS = {
|
|
35
|
+
bs_form_input: Matestack::Ui::Bootstrap::Form::Input,
|
|
36
|
+
bs_form_select: Matestack::Ui::Bootstrap::Form::Select,
|
|
37
|
+
bs_form_checkbox: Matestack::Ui::Bootstrap::Form::Checkbox,
|
|
38
|
+
bs_form_radio: Matestack::Ui::Bootstrap::Form::Radio,
|
|
39
|
+
bs_form_switch: Matestack::Ui::Bootstrap::Form::Switch,
|
|
40
|
+
bs_form_submit: Matestack::Ui::Bootstrap::Form::Submit,
|
|
41
|
+
bs_form_date: Matestack::Ui::Bootstrap::Form::Date,
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
CONTENT = {
|
|
45
|
+
bs_figure: Matestack::Ui::Bootstrap::Content::Figure,
|
|
46
|
+
bs_smart_collection: Matestack::Ui::Bootstrap::Content::Collection::Collection,
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
LAYOUTS = {
|
|
50
|
+
bs_col: Matestack::Ui::Bootstrap::Layout::Column,
|
|
51
|
+
bs_container: Matestack::Ui::Bootstrap::Layout::Container,
|
|
52
|
+
bs_row: Matestack::Ui::Bootstrap::Layout::Row,
|
|
53
|
+
bs_sidebar: Matestack::Ui::Bootstrap::Layout::Sidebar
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
Matestack::Ui::Core::Component::Registry.register_components(
|
|
57
|
+
**COMPONENTS,
|
|
58
|
+
**FORMS,
|
|
59
|
+
**CONTENT,
|
|
60
|
+
**LAYOUTS
|
|
61
|
+
)
|
|
62
|
+
|
|
63
|
+
end
|