element_component 0.6.0 → 0.8.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 +4 -4
- data/AGENTS.md +5 -5
- data/README.md +348 -41
- data/examples/alert_example.rb +17 -17
- data/examples/badge_example.rb +63 -0
- data/examples/breadcrumb_example.rb +40 -0
- data/examples/button_example.rb +86 -0
- data/examples/button_group_example.rb +55 -0
- data/examples/card_example.rb +62 -0
- data/examples/carousel_example.rb +97 -0
- data/examples/close_button_example.rb +40 -0
- data/examples/dropdown_example.rb +131 -0
- data/examples/list_group_example.rb +68 -0
- data/examples/modal_example.rb +122 -0
- data/examples/nav_example.rb +77 -0
- data/examples/navbar_example.rb +104 -0
- data/examples/pagination_example.rb +47 -0
- data/examples/progress_example.rb +54 -0
- data/examples/spinner_example.rb +49 -0
- data/examples/table_example.rb +41 -0
- data/lib/element_component/components/alert.rb +3 -3
- data/lib/element_component/components/badge.rb +18 -0
- data/lib/element_component/components/breadcrumb/item.rb +29 -0
- data/lib/element_component/components/breadcrumb.rb +26 -0
- data/lib/element_component/components/button.rb +25 -0
- data/lib/element_component/components/button_group.rb +18 -0
- data/lib/element_component/components/card/body.rb +14 -0
- data/lib/element_component/components/card/footer.rb +14 -0
- data/lib/element_component/components/card/header.rb +14 -0
- data/lib/element_component/components/card/image.rb +17 -0
- data/lib/element_component/components/card/text.rb +14 -0
- data/lib/element_component/components/card/title.rb +14 -0
- data/lib/element_component/components/card.rb +21 -0
- data/lib/element_component/components/carousel/caption.rb +14 -0
- data/lib/element_component/components/carousel/item.rb +16 -0
- data/lib/element_component/components/carousel.rb +70 -0
- data/lib/element_component/components/close_button.rb +17 -0
- data/lib/element_component/components/dropdown/divider.rb +20 -0
- data/lib/element_component/components/dropdown/header.rb +22 -0
- data/lib/element_component/components/dropdown/item.rb +33 -0
- data/lib/element_component/components/dropdown/menu.rb +15 -0
- data/lib/element_component/components/dropdown.rb +43 -0
- data/lib/element_component/components/list_group/item.rb +23 -0
- data/lib/element_component/components/list_group.rb +18 -0
- data/lib/element_component/components/modal/body.rb +14 -0
- data/lib/element_component/components/modal/content.rb +14 -0
- data/lib/element_component/components/modal/dialog.rb +21 -0
- data/lib/element_component/components/modal/footer.rb +14 -0
- data/lib/element_component/components/modal/header.rb +16 -0
- data/lib/element_component/components/modal/title.rb +14 -0
- data/lib/element_component/components/modal.rb +42 -0
- data/lib/element_component/components/nav/item.rb +14 -0
- data/lib/element_component/components/nav/link.rb +18 -0
- data/lib/element_component/components/nav.rb +23 -0
- data/lib/element_component/components/navbar/brand.rb +15 -0
- data/lib/element_component/components/navbar/collapse.rb +16 -0
- data/lib/element_component/components/navbar/nav.rb +14 -0
- data/lib/element_component/components/navbar/toggler.rb +22 -0
- data/lib/element_component/components/navbar.rb +51 -0
- data/lib/element_component/components/pagination/item.rb +27 -0
- data/lib/element_component/components/pagination.rb +33 -0
- data/lib/element_component/components/progress/bar.rb +24 -0
- data/lib/element_component/components/progress.rb +17 -0
- data/lib/element_component/components/spinner.rb +19 -0
- data/lib/element_component/components/table.rb +21 -0
- data/lib/element_component/components.rb +16 -0
- data/lib/element_component/element.rb +5 -3
- data/lib/element_component/version.rb +1 -1
- metadata +61 -1
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "../lib/element_component"
|
|
4
|
+
|
|
5
|
+
# =============================================================================
|
|
6
|
+
# Basic Breadcrumb
|
|
7
|
+
# =============================================================================
|
|
8
|
+
breadcrumb = ElementComponent::Components::Breadcrumb.new do |b|
|
|
9
|
+
b.add_content(ElementComponent::Components::BreadcrumbItem.new(href: "/") { |item| item.add_content("Home") })
|
|
10
|
+
b.add_content(ElementComponent::Components::BreadcrumbItem.new(href: "/library") do |item|
|
|
11
|
+
item.add_content("Library")
|
|
12
|
+
end)
|
|
13
|
+
b.add_content(ElementComponent::Components::BreadcrumbItem.new(active: true) { |item| item.add_content("Data") })
|
|
14
|
+
end
|
|
15
|
+
puts "=== Basic Breadcrumb ==="
|
|
16
|
+
puts breadcrumb.render
|
|
17
|
+
puts
|
|
18
|
+
|
|
19
|
+
# =============================================================================
|
|
20
|
+
# Breadcrumb with Two Items
|
|
21
|
+
# =============================================================================
|
|
22
|
+
breadcrumb = ElementComponent::Components::Breadcrumb.new do |b|
|
|
23
|
+
b.add_content(ElementComponent::Components::BreadcrumbItem.new(href: "/") { |item| item.add_content("Home") })
|
|
24
|
+
b.add_content(ElementComponent::Components::BreadcrumbItem.new(active: true) do |item|
|
|
25
|
+
item.add_content("Current Page")
|
|
26
|
+
end)
|
|
27
|
+
end
|
|
28
|
+
puts "=== Two-Item Breadcrumb ==="
|
|
29
|
+
puts breadcrumb.render
|
|
30
|
+
puts
|
|
31
|
+
|
|
32
|
+
# =============================================================================
|
|
33
|
+
# Breadcrumb with Custom Class
|
|
34
|
+
# =============================================================================
|
|
35
|
+
breadcrumb = ElementComponent::Components::Breadcrumb.new(class: "custom-breadcrumb") do |b|
|
|
36
|
+
b.add_content(ElementComponent::Components::BreadcrumbItem.new(href: "/") { |item| item.add_content("Home") })
|
|
37
|
+
b.add_content(ElementComponent::Components::BreadcrumbItem.new(active: true) { |item| item.add_content("Active") })
|
|
38
|
+
end
|
|
39
|
+
puts "=== Breadcrumb with Custom Class ==="
|
|
40
|
+
puts breadcrumb.render
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "../lib/element_component"
|
|
4
|
+
|
|
5
|
+
# =============================================================================
|
|
6
|
+
# Basic Button
|
|
7
|
+
# =============================================================================
|
|
8
|
+
btn = ElementComponent::Components::Button.new(variant: :primary)
|
|
9
|
+
btn.add_content("Click Me")
|
|
10
|
+
puts "=== Basic Button ==="
|
|
11
|
+
puts btn.render
|
|
12
|
+
puts
|
|
13
|
+
|
|
14
|
+
# =============================================================================
|
|
15
|
+
# Outline Button
|
|
16
|
+
# =============================================================================
|
|
17
|
+
btn = ElementComponent::Components::Button.new(variant: :danger, outline: true)
|
|
18
|
+
btn.add_content("Delete")
|
|
19
|
+
puts "=== Outline Button ==="
|
|
20
|
+
puts btn.render
|
|
21
|
+
puts
|
|
22
|
+
|
|
23
|
+
# =============================================================================
|
|
24
|
+
# Size Variants
|
|
25
|
+
# =============================================================================
|
|
26
|
+
btn_lg = ElementComponent::Components::Button.new(variant: :success, size: :lg)
|
|
27
|
+
btn_lg.add_content("Large Button")
|
|
28
|
+
|
|
29
|
+
btn_sm = ElementComponent::Components::Button.new(variant: :secondary, size: :sm)
|
|
30
|
+
btn_sm.add_content("Small Button")
|
|
31
|
+
|
|
32
|
+
puts "=== Size Variants ==="
|
|
33
|
+
puts btn_lg.render
|
|
34
|
+
puts btn_sm.render
|
|
35
|
+
puts
|
|
36
|
+
|
|
37
|
+
# =============================================================================
|
|
38
|
+
# Button as Link
|
|
39
|
+
# =============================================================================
|
|
40
|
+
btn = ElementComponent::Components::Button.new(variant: :primary, href: "/home")
|
|
41
|
+
btn.add_content("Home")
|
|
42
|
+
puts "=== Button as Link ==="
|
|
43
|
+
puts btn.render
|
|
44
|
+
puts
|
|
45
|
+
|
|
46
|
+
# =============================================================================
|
|
47
|
+
# All Contexts
|
|
48
|
+
# =============================================================================
|
|
49
|
+
puts "=== All Button Variants ==="
|
|
50
|
+
ElementComponent::Components::Button::VALID_VARIANTS.each do |variant|
|
|
51
|
+
btn = ElementComponent::Components::Button.new(variant: variant)
|
|
52
|
+
btn.add_content(variant.to_s.capitalize)
|
|
53
|
+
puts btn.render
|
|
54
|
+
end
|
|
55
|
+
puts
|
|
56
|
+
|
|
57
|
+
# =============================================================================
|
|
58
|
+
# Button with Block
|
|
59
|
+
# =============================================================================
|
|
60
|
+
btn = ElementComponent::Components::Button.new(variant: :info) do |b|
|
|
61
|
+
b.add_content("Info Button")
|
|
62
|
+
end
|
|
63
|
+
puts "=== Button with Block ==="
|
|
64
|
+
puts btn.render
|
|
65
|
+
puts
|
|
66
|
+
|
|
67
|
+
# =============================================================================
|
|
68
|
+
# Chained API
|
|
69
|
+
# =============================================================================
|
|
70
|
+
btn = ElementComponent::Components::Button.new(variant: :warning)
|
|
71
|
+
.add_content("Caution")
|
|
72
|
+
puts "=== Chained API ==="
|
|
73
|
+
puts btn.render
|
|
74
|
+
puts
|
|
75
|
+
|
|
76
|
+
# =============================================================================
|
|
77
|
+
# Button with Custom Attributes
|
|
78
|
+
# =============================================================================
|
|
79
|
+
btn = ElementComponent::Components::Button.new(
|
|
80
|
+
variant: :dark,
|
|
81
|
+
id: "btn-submit",
|
|
82
|
+
data: { action: "submit" }
|
|
83
|
+
)
|
|
84
|
+
btn.add_content("Submit")
|
|
85
|
+
puts "=== Button with Custom Attributes ==="
|
|
86
|
+
puts btn.render
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "../lib/element_component"
|
|
4
|
+
|
|
5
|
+
# =============================================================================
|
|
6
|
+
# Basic Button Group
|
|
7
|
+
# =============================================================================
|
|
8
|
+
group = ElementComponent::Components::ButtonGroup.new
|
|
9
|
+
group.add_content(
|
|
10
|
+
ElementComponent::Components::Button.new(variant: :primary).add_content("Left")
|
|
11
|
+
)
|
|
12
|
+
group.add_content(
|
|
13
|
+
ElementComponent::Components::Button.new(variant: :primary).add_content("Middle")
|
|
14
|
+
)
|
|
15
|
+
group.add_content(
|
|
16
|
+
ElementComponent::Components::Button.new(variant: :primary).add_content("Right")
|
|
17
|
+
)
|
|
18
|
+
puts "=== Basic Button Group ==="
|
|
19
|
+
puts group.render
|
|
20
|
+
puts
|
|
21
|
+
|
|
22
|
+
# =============================================================================
|
|
23
|
+
# Vertical Button Group
|
|
24
|
+
# =============================================================================
|
|
25
|
+
group = ElementComponent::Components::ButtonGroup.new(vertical: true)
|
|
26
|
+
group.add_content(
|
|
27
|
+
ElementComponent::Components::Button.new(variant: :secondary).add_content("Top")
|
|
28
|
+
)
|
|
29
|
+
group.add_content(
|
|
30
|
+
ElementComponent::Components::Button.new(variant: :secondary).add_content("Bottom")
|
|
31
|
+
)
|
|
32
|
+
puts "=== Vertical Button Group ==="
|
|
33
|
+
puts group.render
|
|
34
|
+
puts
|
|
35
|
+
|
|
36
|
+
# =============================================================================
|
|
37
|
+
# Button Group with Size
|
|
38
|
+
# =============================================================================
|
|
39
|
+
group = ElementComponent::Components::ButtonGroup.new(size: :sm) do |g|
|
|
40
|
+
g.add_content(ElementComponent::Components::Button.new(variant: :success) { |b| b.add_content("Save") })
|
|
41
|
+
g.add_content(ElementComponent::Components::Button.new(variant: :danger) { |b| b.add_content("Delete") })
|
|
42
|
+
end
|
|
43
|
+
puts "=== Small Button Group ==="
|
|
44
|
+
puts group.render
|
|
45
|
+
puts
|
|
46
|
+
|
|
47
|
+
# =============================================================================
|
|
48
|
+
# Chained API
|
|
49
|
+
# =============================================================================
|
|
50
|
+
group = ElementComponent::Components::ButtonGroup.new(class: "my-group")
|
|
51
|
+
group.add_content(
|
|
52
|
+
ElementComponent::Components::Button.new(variant: :info).add_content("Action")
|
|
53
|
+
)
|
|
54
|
+
puts "=== Button Group with Custom Class ==="
|
|
55
|
+
puts group.render
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "../lib/element_component"
|
|
4
|
+
|
|
5
|
+
# =============================================================================
|
|
6
|
+
# Basic Card
|
|
7
|
+
# =============================================================================
|
|
8
|
+
card = ElementComponent::Components::Card.new
|
|
9
|
+
card.add_content("Simple card content")
|
|
10
|
+
puts "=== Basic Card ==="
|
|
11
|
+
puts card.render
|
|
12
|
+
puts
|
|
13
|
+
|
|
14
|
+
# =============================================================================
|
|
15
|
+
# Card with Header, Body, and Footer
|
|
16
|
+
# =============================================================================
|
|
17
|
+
card = ElementComponent::Components::Card.new do |c|
|
|
18
|
+
c.add_content(ElementComponent::Components::CardHeader.new { |ch| ch.add_content("Header") })
|
|
19
|
+
c.add_content(ElementComponent::Components::CardBody.new { |cb| cb.add_content("Body content here") })
|
|
20
|
+
c.add_content(ElementComponent::Components::CardFooter.new { |cf| cf.add_content("Footer") })
|
|
21
|
+
end
|
|
22
|
+
puts "=== Card with Header, Body, Footer ==="
|
|
23
|
+
puts card.render
|
|
24
|
+
puts
|
|
25
|
+
|
|
26
|
+
# =============================================================================
|
|
27
|
+
# Card with Title and Text
|
|
28
|
+
# =============================================================================
|
|
29
|
+
card = ElementComponent::Components::Card.new do |c|
|
|
30
|
+
c.add_content(ElementComponent::Components::CardBody.new do |cb|
|
|
31
|
+
cb.add_content(ElementComponent::Components::CardTitle.new { |ct| ct.add_content("Card Title") })
|
|
32
|
+
cb.add_content(ElementComponent::Components::CardText.new { |ct| ct.add_content("Some quick example text.") })
|
|
33
|
+
end)
|
|
34
|
+
end
|
|
35
|
+
puts "=== Card with Title and Text ==="
|
|
36
|
+
puts card.render
|
|
37
|
+
puts
|
|
38
|
+
|
|
39
|
+
# =============================================================================
|
|
40
|
+
# Card with Image
|
|
41
|
+
# =============================================================================
|
|
42
|
+
card = ElementComponent::Components::Card.new do |c|
|
|
43
|
+
c.add_content(ElementComponent::Components::CardImage.new(src: "image.jpg", top: true))
|
|
44
|
+
c.add_content(ElementComponent::Components::CardBody.new do |cb|
|
|
45
|
+
cb.add_content(ElementComponent::Components::CardTitle.new { |ct| ct.add_content("Image Card") })
|
|
46
|
+
cb.add_content(ElementComponent::Components::CardText.new { |ct| ct.add_content("Card with an image on top.") })
|
|
47
|
+
end)
|
|
48
|
+
end
|
|
49
|
+
puts "=== Card with Image ==="
|
|
50
|
+
puts card.render
|
|
51
|
+
puts
|
|
52
|
+
|
|
53
|
+
# =============================================================================
|
|
54
|
+
# Chained API
|
|
55
|
+
# =============================================================================
|
|
56
|
+
card = ElementComponent::Components::Card.new
|
|
57
|
+
card.add_content(
|
|
58
|
+
ElementComponent::Components::CardBody.new
|
|
59
|
+
.add_content("Chained content")
|
|
60
|
+
)
|
|
61
|
+
puts "=== Chained API ==="
|
|
62
|
+
puts card.render
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "../lib/element_component"
|
|
4
|
+
|
|
5
|
+
# =============================================================================
|
|
6
|
+
# Basic Carousel
|
|
7
|
+
# =============================================================================
|
|
8
|
+
carousel = ElementComponent::Components::Carousel.new(id: "basicCarousel") do |c|
|
|
9
|
+
c.add_content(ElementComponent::Components::CarouselItem.new(active: true) do |item|
|
|
10
|
+
item.add_content(%(<img src="slide1.jpg" class="d-block w-100" alt="Slide 1">))
|
|
11
|
+
end)
|
|
12
|
+
c.add_content(ElementComponent::Components::CarouselItem.new do |item|
|
|
13
|
+
item.add_content(%(<img src="slide2.jpg" class="d-block w-100" alt="Slide 2">))
|
|
14
|
+
end)
|
|
15
|
+
end
|
|
16
|
+
puts "=== Basic Carousel ==="
|
|
17
|
+
puts carousel.render
|
|
18
|
+
puts
|
|
19
|
+
|
|
20
|
+
# =============================================================================
|
|
21
|
+
# Carousel with Captions
|
|
22
|
+
# =============================================================================
|
|
23
|
+
carousel = ElementComponent::Components::Carousel.new(id: "captionCarousel") do |c|
|
|
24
|
+
c.add_content(ElementComponent::Components::CarouselItem.new(active: true) do |item|
|
|
25
|
+
item.add_content(%(<img src="hero.jpg" class="d-block w-100" alt="Hero">))
|
|
26
|
+
item.add_content(ElementComponent::Components::CarouselCaption.new do |cap|
|
|
27
|
+
cap.add_content(%(<h5>First slide</h5><p>Some description here.</p>))
|
|
28
|
+
end)
|
|
29
|
+
end)
|
|
30
|
+
c.add_content(ElementComponent::Components::CarouselItem.new do |item|
|
|
31
|
+
item.add_content(%(<img src="hero2.jpg" class="d-block w-100" alt="Hero 2">))
|
|
32
|
+
item.add_content(ElementComponent::Components::CarouselCaption.new do |cap|
|
|
33
|
+
cap.add_content(%(<h5>Second slide</h5><p>Another description.</p>))
|
|
34
|
+
end)
|
|
35
|
+
end)
|
|
36
|
+
end
|
|
37
|
+
puts "=== Carousel with Captions ==="
|
|
38
|
+
puts carousel.render
|
|
39
|
+
puts
|
|
40
|
+
|
|
41
|
+
# =============================================================================
|
|
42
|
+
# Fade Carousel
|
|
43
|
+
# =============================================================================
|
|
44
|
+
carousel = ElementComponent::Components::Carousel.new(id: "fadeCarousel", fade: true) do |c|
|
|
45
|
+
c.add_content(ElementComponent::Components::CarouselItem.new(active: true) { |item| item.add_content("Slide 1") })
|
|
46
|
+
c.add_content(ElementComponent::Components::CarouselItem.new { |item| item.add_content("Slide 2") })
|
|
47
|
+
end
|
|
48
|
+
puts "=== Fade Carousel ==="
|
|
49
|
+
puts carousel.render
|
|
50
|
+
puts
|
|
51
|
+
|
|
52
|
+
# =============================================================================
|
|
53
|
+
# Carousel Without Indicators
|
|
54
|
+
# =============================================================================
|
|
55
|
+
carousel = ElementComponent::Components::Carousel.new(id: "noIndicators", indicators: false) do |c|
|
|
56
|
+
c.add_content(ElementComponent::Components::CarouselItem.new(active: true) { |item| item.add_content("Slide 1") })
|
|
57
|
+
end
|
|
58
|
+
puts "=== Carousel Without Indicators ==="
|
|
59
|
+
puts carousel.render
|
|
60
|
+
puts
|
|
61
|
+
|
|
62
|
+
# =============================================================================
|
|
63
|
+
# Carousel Without Controls
|
|
64
|
+
# =============================================================================
|
|
65
|
+
carousel = ElementComponent::Components::Carousel.new(id: "noControls", controls: false) do |c|
|
|
66
|
+
c.add_content(ElementComponent::Components::CarouselItem.new(active: true) { |item| item.add_content("Slide 1") })
|
|
67
|
+
end
|
|
68
|
+
puts "=== Carousel Without Controls ==="
|
|
69
|
+
puts carousel.render
|
|
70
|
+
puts
|
|
71
|
+
|
|
72
|
+
# =============================================================================
|
|
73
|
+
# Custom Interval
|
|
74
|
+
# =============================================================================
|
|
75
|
+
carousel = ElementComponent::Components::Carousel.new(id: "intervalCarousel") do |c|
|
|
76
|
+
c.add_content(ElementComponent::Components::CarouselItem.new(active: true, interval: 5000) do |item|
|
|
77
|
+
item.add_content("Slide 1")
|
|
78
|
+
end)
|
|
79
|
+
c.add_content(ElementComponent::Components::CarouselItem.new(interval: 2000) { |item| item.add_content("Slide 2") })
|
|
80
|
+
end
|
|
81
|
+
puts "=== Carousel with Custom Interval ==="
|
|
82
|
+
puts carousel.render
|
|
83
|
+
puts
|
|
84
|
+
|
|
85
|
+
# =============================================================================
|
|
86
|
+
# Sub-Components Rendered Independently
|
|
87
|
+
# =============================================================================
|
|
88
|
+
puts "=== CarouselItem ==="
|
|
89
|
+
puts ElementComponent::Components::CarouselItem.new.render
|
|
90
|
+
puts
|
|
91
|
+
|
|
92
|
+
puts "=== CarouselItem Active ==="
|
|
93
|
+
puts ElementComponent::Components::CarouselItem.new(active: true).render
|
|
94
|
+
puts
|
|
95
|
+
|
|
96
|
+
puts "=== CarouselCaption ==="
|
|
97
|
+
puts ElementComponent::Components::CarouselCaption.new.render
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "../lib/element_component"
|
|
4
|
+
|
|
5
|
+
# =============================================================================
|
|
6
|
+
# Basic Close Button
|
|
7
|
+
# =============================================================================
|
|
8
|
+
btn = ElementComponent::Components::CloseButton.new
|
|
9
|
+
puts "=== Basic Close Button ==="
|
|
10
|
+
puts btn.render
|
|
11
|
+
puts
|
|
12
|
+
|
|
13
|
+
# =============================================================================
|
|
14
|
+
# Disabled Close Button
|
|
15
|
+
# =============================================================================
|
|
16
|
+
btn = ElementComponent::Components::CloseButton.new(disabled: true)
|
|
17
|
+
puts "=== Disabled Close Button ==="
|
|
18
|
+
puts btn.render
|
|
19
|
+
puts
|
|
20
|
+
|
|
21
|
+
# =============================================================================
|
|
22
|
+
# Close Button with Custom Attributes
|
|
23
|
+
# =============================================================================
|
|
24
|
+
btn = ElementComponent::Components::CloseButton.new(
|
|
25
|
+
class: "custom-close",
|
|
26
|
+
id: "close-btn-1",
|
|
27
|
+
data: { dismiss: "modal" }
|
|
28
|
+
)
|
|
29
|
+
puts "=== Close Button with Custom Attributes ==="
|
|
30
|
+
puts btn.render
|
|
31
|
+
puts
|
|
32
|
+
|
|
33
|
+
# =============================================================================
|
|
34
|
+
# Close Button Inside an Alert (simulated)
|
|
35
|
+
# =============================================================================
|
|
36
|
+
alert = ElementComponent::Components::Alert.new(variant: :warning, dismissible: true) do |a|
|
|
37
|
+
a.add_content("This alert has a close button.")
|
|
38
|
+
end
|
|
39
|
+
puts "=== Close Button Inside Alert ==="
|
|
40
|
+
puts alert.render
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "../lib/element_component"
|
|
4
|
+
|
|
5
|
+
# =============================================================================
|
|
6
|
+
# Basic Dropdown
|
|
7
|
+
# =============================================================================
|
|
8
|
+
dropdown = ElementComponent::Components::Dropdown.new do |d|
|
|
9
|
+
d.add_content(
|
|
10
|
+
ElementComponent::Element.new("button",
|
|
11
|
+
class: "btn btn-secondary dropdown-toggle",
|
|
12
|
+
type: "button",
|
|
13
|
+
"data-bs-toggle": "dropdown",
|
|
14
|
+
"aria-expanded": "false") do |btn|
|
|
15
|
+
btn.add_content("Dropdown")
|
|
16
|
+
end
|
|
17
|
+
)
|
|
18
|
+
d.add_content(
|
|
19
|
+
ElementComponent::Components::DropdownMenu.new do |menu|
|
|
20
|
+
menu.add_content(ElementComponent::Components::DropdownItem.new { |item| item.add_content("Action") })
|
|
21
|
+
menu.add_content(ElementComponent::Components::DropdownItem.new { |item| item.add_content("Another action") })
|
|
22
|
+
menu.add_content(ElementComponent::Components::DropdownDivider.new)
|
|
23
|
+
menu.add_content(ElementComponent::Components::DropdownItem.new { |item| item.add_content("Something else") })
|
|
24
|
+
end
|
|
25
|
+
)
|
|
26
|
+
end
|
|
27
|
+
puts "=== Basic Dropdown ==="
|
|
28
|
+
puts dropdown.render
|
|
29
|
+
puts
|
|
30
|
+
|
|
31
|
+
# =============================================================================
|
|
32
|
+
# Dropdown with Active and Disabled Items
|
|
33
|
+
# =============================================================================
|
|
34
|
+
dropdown = ElementComponent::Components::Dropdown.new do |d|
|
|
35
|
+
d.add_content(
|
|
36
|
+
ElementComponent::Element.new("button",
|
|
37
|
+
class: "btn btn-primary dropdown-toggle",
|
|
38
|
+
type: "button",
|
|
39
|
+
"data-bs-toggle": "dropdown",
|
|
40
|
+
"aria-expanded": "false") do |btn|
|
|
41
|
+
btn.add_content("Menu")
|
|
42
|
+
end
|
|
43
|
+
)
|
|
44
|
+
d.add_content(
|
|
45
|
+
ElementComponent::Components::DropdownMenu.new do |menu|
|
|
46
|
+
menu.add_content(ElementComponent::Components::DropdownHeader.new { |h| h.add_content("Section 1") })
|
|
47
|
+
menu.add_content(ElementComponent::Components::DropdownItem.new { |item| item.add_content("Regular item") })
|
|
48
|
+
menu.add_content(ElementComponent::Components::DropdownItem.new(active: true) do |item|
|
|
49
|
+
item.add_content("Active item")
|
|
50
|
+
end)
|
|
51
|
+
menu.add_content(ElementComponent::Components::DropdownItem.new(disabled: true) do |item|
|
|
52
|
+
item.add_content("Disabled item")
|
|
53
|
+
end)
|
|
54
|
+
end
|
|
55
|
+
)
|
|
56
|
+
end
|
|
57
|
+
puts "=== Dropdown with States ==="
|
|
58
|
+
puts dropdown.render
|
|
59
|
+
puts
|
|
60
|
+
|
|
61
|
+
# =============================================================================
|
|
62
|
+
# Dropdown Type Button Items
|
|
63
|
+
# =============================================================================
|
|
64
|
+
dropdown = ElementComponent::Components::Dropdown.new do |d|
|
|
65
|
+
d.add_content(
|
|
66
|
+
ElementComponent::Element.new("button",
|
|
67
|
+
class: "btn btn-success dropdown-toggle",
|
|
68
|
+
type: "button",
|
|
69
|
+
"data-bs-toggle": "dropdown",
|
|
70
|
+
"aria-expanded": "false") do |btn|
|
|
71
|
+
btn.add_content("Actions")
|
|
72
|
+
end
|
|
73
|
+
)
|
|
74
|
+
d.add_content(
|
|
75
|
+
ElementComponent::Components::DropdownMenu.new do |menu|
|
|
76
|
+
menu.add_content(ElementComponent::Components::DropdownItem.new(type: :button) do |item|
|
|
77
|
+
item.add_content("Save")
|
|
78
|
+
end)
|
|
79
|
+
menu.add_content(ElementComponent::Components::DropdownItem.new(type: :button) do |item|
|
|
80
|
+
item.add_content("Delete")
|
|
81
|
+
end)
|
|
82
|
+
end
|
|
83
|
+
)
|
|
84
|
+
end
|
|
85
|
+
puts "=== Dropdown with Button Items ==="
|
|
86
|
+
puts dropdown.render
|
|
87
|
+
puts
|
|
88
|
+
|
|
89
|
+
# =============================================================================
|
|
90
|
+
# Dropup Direction
|
|
91
|
+
# =============================================================================
|
|
92
|
+
dropdown = ElementComponent::Components::Dropdown.new(direction: :dropup) do |d|
|
|
93
|
+
d.add_content(
|
|
94
|
+
ElementComponent::Element.new("button",
|
|
95
|
+
class: "btn btn-warning dropdown-toggle",
|
|
96
|
+
type: "button",
|
|
97
|
+
"data-bs-toggle": "dropdown",
|
|
98
|
+
"aria-expanded": "false") do |btn|
|
|
99
|
+
btn.add_content("Up")
|
|
100
|
+
end
|
|
101
|
+
)
|
|
102
|
+
d.add_content(
|
|
103
|
+
ElementComponent::Components::DropdownMenu.new do |menu|
|
|
104
|
+
menu.add_content(ElementComponent::Components::DropdownItem.new { |item| item.add_content("Item 1") })
|
|
105
|
+
menu.add_content(ElementComponent::Components::DropdownItem.new { |item| item.add_content("Item 2") })
|
|
106
|
+
end
|
|
107
|
+
)
|
|
108
|
+
end
|
|
109
|
+
puts "=== Dropup ==="
|
|
110
|
+
puts dropdown.render
|
|
111
|
+
puts
|
|
112
|
+
|
|
113
|
+
# =============================================================================
|
|
114
|
+
# Sub-Components Rendered Independently
|
|
115
|
+
# =============================================================================
|
|
116
|
+
puts "=== DropdownMenu ==="
|
|
117
|
+
puts ElementComponent::Components::DropdownMenu.new.render
|
|
118
|
+
puts
|
|
119
|
+
|
|
120
|
+
puts "=== DropdownItem ==="
|
|
121
|
+
dropdown_item = ElementComponent::Components::DropdownItem.new { |item| item.add_content("Item") }
|
|
122
|
+
puts dropdown_item.render
|
|
123
|
+
puts
|
|
124
|
+
|
|
125
|
+
puts "=== DropdownDivider ==="
|
|
126
|
+
puts ElementComponent::Components::DropdownDivider.new.render
|
|
127
|
+
puts
|
|
128
|
+
|
|
129
|
+
puts "=== DropdownHeader ==="
|
|
130
|
+
dropdown_header = ElementComponent::Components::DropdownHeader.new { |h| h.add_content("Header") }
|
|
131
|
+
puts dropdown_header.render
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "../lib/element_component"
|
|
4
|
+
|
|
5
|
+
# =============================================================================
|
|
6
|
+
# Basic List Group
|
|
7
|
+
# =============================================================================
|
|
8
|
+
group = ElementComponent::Components::ListGroup.new do |g|
|
|
9
|
+
g.add_content(ElementComponent::Components::ListGroupItem.new { |item| item.add_content("Item 1") })
|
|
10
|
+
g.add_content(ElementComponent::Components::ListGroupItem.new { |item| item.add_content("Item 2") })
|
|
11
|
+
g.add_content(ElementComponent::Components::ListGroupItem.new { |item| item.add_content("Item 3") })
|
|
12
|
+
end
|
|
13
|
+
puts "=== Basic List Group ==="
|
|
14
|
+
puts group.render
|
|
15
|
+
puts
|
|
16
|
+
|
|
17
|
+
# =============================================================================
|
|
18
|
+
# Flush List Group
|
|
19
|
+
# =============================================================================
|
|
20
|
+
group = ElementComponent::Components::ListGroup.new(flush: true) do |g|
|
|
21
|
+
g.add_content(ElementComponent::Components::ListGroupItem.new { |item| item.add_content("Flush Item 1") })
|
|
22
|
+
g.add_content(ElementComponent::Components::ListGroupItem.new { |item| item.add_content("Flush Item 2") })
|
|
23
|
+
end
|
|
24
|
+
puts "=== Flush List Group ==="
|
|
25
|
+
puts group.render
|
|
26
|
+
puts
|
|
27
|
+
|
|
28
|
+
# =============================================================================
|
|
29
|
+
# Active and Disabled Items
|
|
30
|
+
# =============================================================================
|
|
31
|
+
group = ElementComponent::Components::ListGroup.new do |g|
|
|
32
|
+
g.add_content(ElementComponent::Components::ListGroupItem.new(active: true) do |item|
|
|
33
|
+
item.add_content("Active Item")
|
|
34
|
+
end)
|
|
35
|
+
g.add_content(ElementComponent::Components::ListGroupItem.new { |item| item.add_content("Regular Item") })
|
|
36
|
+
g.add_content(ElementComponent::Components::ListGroupItem.new(disabled: true) do |item|
|
|
37
|
+
item.add_content("Disabled Item")
|
|
38
|
+
end)
|
|
39
|
+
end
|
|
40
|
+
puts "=== Active and Disabled Items ==="
|
|
41
|
+
puts group.render
|
|
42
|
+
puts
|
|
43
|
+
|
|
44
|
+
# =============================================================================
|
|
45
|
+
# List Group with Links
|
|
46
|
+
# =============================================================================
|
|
47
|
+
group = ElementComponent::Components::ListGroup.new do |g|
|
|
48
|
+
g.add_content(ElementComponent::Components::ListGroupItem.new(href: "/page1") { |item| item.add_content("Link 1") })
|
|
49
|
+
g.add_content(ElementComponent::Components::ListGroupItem.new(href: "/page2") { |item| item.add_content("Link 2") })
|
|
50
|
+
end
|
|
51
|
+
puts "=== List Group with Links ==="
|
|
52
|
+
puts group.render
|
|
53
|
+
puts
|
|
54
|
+
|
|
55
|
+
# =============================================================================
|
|
56
|
+
# Variant Items
|
|
57
|
+
# =============================================================================
|
|
58
|
+
group = ElementComponent::Components::ListGroup.new do |g|
|
|
59
|
+
g.add_content(ElementComponent::Components::ListGroupItem.new(variant: :success) do |item|
|
|
60
|
+
item.add_content("Success")
|
|
61
|
+
end)
|
|
62
|
+
g.add_content(ElementComponent::Components::ListGroupItem.new(variant: :danger) { |item| item.add_content("Danger") })
|
|
63
|
+
g.add_content(ElementComponent::Components::ListGroupItem.new(variant: :warning) do |item|
|
|
64
|
+
item.add_content("Warning")
|
|
65
|
+
end)
|
|
66
|
+
end
|
|
67
|
+
puts "=== Variant Items ==="
|
|
68
|
+
puts group.render
|