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.
Files changed (82) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +8 -0
  3. data/README.md +26 -0
  4. data/Rakefile +43 -0
  5. data/app/assets/images/avatar-placeholder.png +0 -0
  6. data/app/assets/images/icons/bootstrap-icons.svg +1 -0
  7. data/app/concepts/matestack/ui/bootstrap/apps/admin_template.rb +85 -0
  8. data/app/concepts/matestack/ui/bootstrap/components/accordion.rb +53 -0
  9. data/app/concepts/matestack/ui/bootstrap/components/alert.js +53 -0
  10. data/app/concepts/matestack/ui/bootstrap/components/alert.rb +34 -0
  11. data/app/concepts/matestack/ui/bootstrap/components/avatar.rb +27 -0
  12. data/app/concepts/matestack/ui/bootstrap/components/badge.rb +30 -0
  13. data/app/concepts/matestack/ui/bootstrap/components/breadcrumb.rb +46 -0
  14. data/app/concepts/matestack/ui/bootstrap/components/button.rb +54 -0
  15. data/app/concepts/matestack/ui/bootstrap/components/button_group.rb +36 -0
  16. data/app/concepts/matestack/ui/bootstrap/components/card.rb +100 -0
  17. data/app/concepts/matestack/ui/bootstrap/components/carousel.js +79 -0
  18. data/app/concepts/matestack/ui/bootstrap/components/carousel.rb +85 -0
  19. data/app/concepts/matestack/ui/bootstrap/components/chart.js +232 -0
  20. data/app/concepts/matestack/ui/bootstrap/components/chart.rb +71 -0
  21. data/app/concepts/matestack/ui/bootstrap/components/close.rb +30 -0
  22. data/app/concepts/matestack/ui/bootstrap/components/collapse.js +84 -0
  23. data/app/concepts/matestack/ui/bootstrap/components/collapse.rb +43 -0
  24. data/app/concepts/matestack/ui/bootstrap/components/dropdown.js +14 -0
  25. data/app/concepts/matestack/ui/bootstrap/components/dropdown.rb +116 -0
  26. data/app/concepts/matestack/ui/bootstrap/components/icon.rb +19 -0
  27. data/app/concepts/matestack/ui/bootstrap/components/list_group.rb +83 -0
  28. data/app/concepts/matestack/ui/bootstrap/components/modal.js +90 -0
  29. data/app/concepts/matestack/ui/bootstrap/components/modal.rb +106 -0
  30. data/app/concepts/matestack/ui/bootstrap/components/navbar.rb +120 -0
  31. data/app/concepts/matestack/ui/bootstrap/components/page_heading.rb +28 -0
  32. data/app/concepts/matestack/ui/bootstrap/components/pagination.rb +40 -0
  33. data/app/concepts/matestack/ui/bootstrap/components/popover.js +26 -0
  34. data/app/concepts/matestack/ui/bootstrap/components/popover.rb +92 -0
  35. data/app/concepts/matestack/ui/bootstrap/components/progress.rb +65 -0
  36. data/app/concepts/matestack/ui/bootstrap/components/scrollspy.rb +33 -0
  37. data/app/concepts/matestack/ui/bootstrap/components/section_card.rb +31 -0
  38. data/app/concepts/matestack/ui/bootstrap/components/spinner.rb +31 -0
  39. data/app/concepts/matestack/ui/bootstrap/components/tab_nav.rb +81 -0
  40. data/app/concepts/matestack/ui/bootstrap/components/tab_nav_content.rb +32 -0
  41. data/app/concepts/matestack/ui/bootstrap/components/toast.js +79 -0
  42. data/app/concepts/matestack/ui/bootstrap/components/toast.rb +99 -0
  43. data/app/concepts/matestack/ui/bootstrap/components/tooltip.js +26 -0
  44. data/app/concepts/matestack/ui/bootstrap/components/tooltip.rb +82 -0
  45. data/app/concepts/matestack/ui/bootstrap/content/collection/collection.rb +112 -0
  46. data/app/concepts/matestack/ui/bootstrap/content/collection/collection.scss +10 -0
  47. data/app/concepts/matestack/ui/bootstrap/content/collection/content.rb +101 -0
  48. data/app/concepts/matestack/ui/bootstrap/content/collection/filter.rb +33 -0
  49. data/app/concepts/matestack/ui/bootstrap/content/collection/paginate.rb +92 -0
  50. data/app/concepts/matestack/ui/bootstrap/content/figure.rb +7 -0
  51. data/app/concepts/matestack/ui/bootstrap/form/checkbox.rb +90 -0
  52. data/app/concepts/matestack/ui/bootstrap/form/date.js +38 -0
  53. data/app/concepts/matestack/ui/bootstrap/form/date.rb +98 -0
  54. data/app/concepts/matestack/ui/bootstrap/form/input.rb +123 -0
  55. data/app/concepts/matestack/ui/bootstrap/form/radio.rb +65 -0
  56. data/app/concepts/matestack/ui/bootstrap/form/select.haml +11 -0
  57. data/app/concepts/matestack/ui/bootstrap/form/select.rb +74 -0
  58. data/app/concepts/matestack/ui/bootstrap/form/submit.rb +20 -0
  59. data/app/concepts/matestack/ui/bootstrap/form/switch.rb +90 -0
  60. data/app/concepts/matestack/ui/bootstrap/layout/column.rb +47 -0
  61. data/app/concepts/matestack/ui/bootstrap/layout/container.rb +25 -0
  62. data/app/concepts/matestack/ui/bootstrap/layout/row.rb +15 -0
  63. data/app/concepts/matestack/ui/bootstrap/layout/sidebar.js +64 -0
  64. data/app/concepts/matestack/ui/bootstrap/layout/sidebar.rb +45 -0
  65. data/app/concepts/matestack/ui/bootstrap/layout/sidebar.scss +57 -0
  66. data/app/concepts/matestack/ui/bootstrap/pages/devise/sign_in.rb +40 -0
  67. data/app/concepts/matestack/ui/bootstrap/registry.rb +63 -0
  68. data/app/helpers/matestack/ui/bootstrap/application_helper.rb +13 -0
  69. data/app/javascript/matestack-ui-bootstrap/index.js +26 -0
  70. data/app/javascript/matestack-ui-bootstrap/stylesheets/matestack-ui-bootstrap.scss +65 -0
  71. data/app/javascript/packs/matestack-ui-bootstrap.js +2 -0
  72. data/config/routes.rb +2 -0
  73. data/config/webpack/development.js +5 -0
  74. data/config/webpack/environment.js +29 -0
  75. data/config/webpack/production.js +33 -0
  76. data/config/webpack/test.js +5 -0
  77. data/config/webpacker.yml +96 -0
  78. data/lib/matestack/ui/bootstrap.rb +27 -0
  79. data/lib/matestack/ui/bootstrap/engine.rb +26 -0
  80. data/lib/matestack/ui/bootstrap/version.rb +7 -0
  81. data/lib/tasks/matestack/ui/bootstrap_tasks.rake +66 -0
  82. 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