element_component 0.6.0 → 0.7.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 +3 -3
- data/README.md +339 -32
- data/examples/alert_example.rb +10 -10
- data/examples/badge_example.rb +63 -0
- data/examples/breadcrumb_example.rb +36 -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 +95 -0
- data/examples/close_button_example.rb +40 -0
- data/examples/dropdown_example.rb +123 -0
- data/examples/list_group_example.rb +60 -0
- data/examples/modal_example.rb +120 -0
- data/examples/nav_example.rb +75 -0
- data/examples/navbar_example.rb +96 -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/version.rb +1 -1
- metadata +61 -1
|
@@ -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
|
|
61
|
+
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
|
|
40
|
+
add_content(ElementComponent::Components::Button.new(variant: :success) { add_content("Save") })
|
|
41
|
+
add_content(ElementComponent::Components::Button.new(variant: :danger) { 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
|
|
18
|
+
add_content(ElementComponent::Components::CardHeader.new { add_content("Header") })
|
|
19
|
+
add_content(ElementComponent::Components::CardBody.new { add_content("Body content here") })
|
|
20
|
+
add_content(ElementComponent::Components::CardFooter.new { 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
|
|
30
|
+
add_content(ElementComponent::Components::CardBody.new do
|
|
31
|
+
add_content(ElementComponent::Components::CardTitle.new { add_content("Card Title") })
|
|
32
|
+
add_content(ElementComponent::Components::CardText.new { 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
|
|
43
|
+
add_content(ElementComponent::Components::CardImage.new(src: "image.jpg", top: true))
|
|
44
|
+
add_content(ElementComponent::Components::CardBody.new do
|
|
45
|
+
add_content(ElementComponent::Components::CardTitle.new { add_content("Image Card") })
|
|
46
|
+
add_content(ElementComponent::Components::CardText.new { 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,95 @@
|
|
|
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
|
|
9
|
+
add_content(ElementComponent::Components::CarouselItem.new(active: true) do
|
|
10
|
+
add_content(%(<img src="slide1.jpg" class="d-block w-100" alt="Slide 1">))
|
|
11
|
+
end)
|
|
12
|
+
add_content(ElementComponent::Components::CarouselItem.new do
|
|
13
|
+
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
|
|
24
|
+
add_content(ElementComponent::Components::CarouselItem.new(active: true) do
|
|
25
|
+
add_content(%(<img src="hero.jpg" class="d-block w-100" alt="Hero">))
|
|
26
|
+
add_content(ElementComponent::Components::CarouselCaption.new do
|
|
27
|
+
add_content(%(<h5>First slide</h5><p>Some description here.</p>))
|
|
28
|
+
end)
|
|
29
|
+
end)
|
|
30
|
+
add_content(ElementComponent::Components::CarouselItem.new do
|
|
31
|
+
add_content(%(<img src="hero2.jpg" class="d-block w-100" alt="Hero 2">))
|
|
32
|
+
add_content(ElementComponent::Components::CarouselCaption.new do
|
|
33
|
+
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
|
|
45
|
+
add_content(ElementComponent::Components::CarouselItem.new(active: true) { add_content("Slide 1") })
|
|
46
|
+
add_content(ElementComponent::Components::CarouselItem.new { 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
|
|
56
|
+
add_content(ElementComponent::Components::CarouselItem.new(active: true) { 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
|
|
66
|
+
add_content(ElementComponent::Components::CarouselItem.new(active: true) { 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
|
|
76
|
+
add_content(ElementComponent::Components::CarouselItem.new(active: true, interval: 5000) { add_content("Slide 1") })
|
|
77
|
+
add_content(ElementComponent::Components::CarouselItem.new(interval: 2000) { add_content("Slide 2") })
|
|
78
|
+
end
|
|
79
|
+
puts "=== Carousel with Custom Interval ==="
|
|
80
|
+
puts carousel.render
|
|
81
|
+
puts
|
|
82
|
+
|
|
83
|
+
# =============================================================================
|
|
84
|
+
# Sub-Components Rendered Independently
|
|
85
|
+
# =============================================================================
|
|
86
|
+
puts "=== CarouselItem ==="
|
|
87
|
+
puts ElementComponent::Components::CarouselItem.new.render
|
|
88
|
+
puts
|
|
89
|
+
|
|
90
|
+
puts "=== CarouselItem Active ==="
|
|
91
|
+
puts ElementComponent::Components::CarouselItem.new(active: true).render
|
|
92
|
+
puts
|
|
93
|
+
|
|
94
|
+
puts "=== CarouselCaption ==="
|
|
95
|
+
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
|
|
37
|
+
add_content("This alert has a close button.")
|
|
38
|
+
end
|
|
39
|
+
puts "=== Close Button Inside Alert ==="
|
|
40
|
+
puts alert.render
|
|
@@ -0,0 +1,123 @@
|
|
|
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
|
|
9
|
+
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
|
|
15
|
+
add_content("Dropdown")
|
|
16
|
+
end
|
|
17
|
+
)
|
|
18
|
+
add_content(
|
|
19
|
+
ElementComponent::Components::DropdownMenu.new do
|
|
20
|
+
add_content(ElementComponent::Components::DropdownItem.new { add_content("Action") })
|
|
21
|
+
add_content(ElementComponent::Components::DropdownItem.new { add_content("Another action") })
|
|
22
|
+
add_content(ElementComponent::Components::DropdownDivider.new)
|
|
23
|
+
add_content(ElementComponent::Components::DropdownItem.new { 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
|
|
35
|
+
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
|
|
41
|
+
add_content("Menu")
|
|
42
|
+
end
|
|
43
|
+
)
|
|
44
|
+
add_content(
|
|
45
|
+
ElementComponent::Components::DropdownMenu.new do
|
|
46
|
+
add_content(ElementComponent::Components::DropdownHeader.new { add_content("Section 1") })
|
|
47
|
+
add_content(ElementComponent::Components::DropdownItem.new { add_content("Regular item") })
|
|
48
|
+
add_content(ElementComponent::Components::DropdownItem.new(active: true) { add_content("Active item") })
|
|
49
|
+
add_content(ElementComponent::Components::DropdownItem.new(disabled: true) { add_content("Disabled item") })
|
|
50
|
+
end
|
|
51
|
+
)
|
|
52
|
+
end
|
|
53
|
+
puts "=== Dropdown with States ==="
|
|
54
|
+
puts dropdown.render
|
|
55
|
+
puts
|
|
56
|
+
|
|
57
|
+
# =============================================================================
|
|
58
|
+
# Dropdown Type Button Items
|
|
59
|
+
# =============================================================================
|
|
60
|
+
dropdown = ElementComponent::Components::Dropdown.new do
|
|
61
|
+
add_content(
|
|
62
|
+
ElementComponent::Element.new("button",
|
|
63
|
+
class: "btn btn-success dropdown-toggle",
|
|
64
|
+
type: "button",
|
|
65
|
+
"data-bs-toggle": "dropdown",
|
|
66
|
+
"aria-expanded": "false") do
|
|
67
|
+
add_content("Actions")
|
|
68
|
+
end
|
|
69
|
+
)
|
|
70
|
+
add_content(
|
|
71
|
+
ElementComponent::Components::DropdownMenu.new do
|
|
72
|
+
add_content(ElementComponent::Components::DropdownItem.new(type: :button) { add_content("Save") })
|
|
73
|
+
add_content(ElementComponent::Components::DropdownItem.new(type: :button) { add_content("Delete") })
|
|
74
|
+
end
|
|
75
|
+
)
|
|
76
|
+
end
|
|
77
|
+
puts "=== Dropdown with Button Items ==="
|
|
78
|
+
puts dropdown.render
|
|
79
|
+
puts
|
|
80
|
+
|
|
81
|
+
# =============================================================================
|
|
82
|
+
# Dropup Direction
|
|
83
|
+
# =============================================================================
|
|
84
|
+
dropdown = ElementComponent::Components::Dropdown.new(direction: :dropup) do
|
|
85
|
+
add_content(
|
|
86
|
+
ElementComponent::Element.new("button",
|
|
87
|
+
class: "btn btn-warning dropdown-toggle",
|
|
88
|
+
type: "button",
|
|
89
|
+
"data-bs-toggle": "dropdown",
|
|
90
|
+
"aria-expanded": "false") do
|
|
91
|
+
add_content("Up")
|
|
92
|
+
end
|
|
93
|
+
)
|
|
94
|
+
add_content(
|
|
95
|
+
ElementComponent::Components::DropdownMenu.new do
|
|
96
|
+
add_content(ElementComponent::Components::DropdownItem.new { add_content("Item 1") })
|
|
97
|
+
add_content(ElementComponent::Components::DropdownItem.new { add_content("Item 2") })
|
|
98
|
+
end
|
|
99
|
+
)
|
|
100
|
+
end
|
|
101
|
+
puts "=== Dropup ==="
|
|
102
|
+
puts dropdown.render
|
|
103
|
+
puts
|
|
104
|
+
|
|
105
|
+
# =============================================================================
|
|
106
|
+
# Sub-Components Rendered Independently
|
|
107
|
+
# =============================================================================
|
|
108
|
+
puts "=== DropdownMenu ==="
|
|
109
|
+
puts ElementComponent::Components::DropdownMenu.new.render
|
|
110
|
+
puts
|
|
111
|
+
|
|
112
|
+
puts "=== DropdownItem ==="
|
|
113
|
+
dropdown_item = ElementComponent::Components::DropdownItem.new { add_content("Item") }
|
|
114
|
+
puts dropdown_item.render
|
|
115
|
+
puts
|
|
116
|
+
|
|
117
|
+
puts "=== DropdownDivider ==="
|
|
118
|
+
puts ElementComponent::Components::DropdownDivider.new.render
|
|
119
|
+
puts
|
|
120
|
+
|
|
121
|
+
puts "=== DropdownHeader ==="
|
|
122
|
+
dropdown_header = ElementComponent::Components::DropdownHeader.new { add_content("Header") }
|
|
123
|
+
puts dropdown_header.render
|
|
@@ -0,0 +1,60 @@
|
|
|
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
|
|
9
|
+
add_content(ElementComponent::Components::ListGroupItem.new { add_content("Item 1") })
|
|
10
|
+
add_content(ElementComponent::Components::ListGroupItem.new { add_content("Item 2") })
|
|
11
|
+
add_content(ElementComponent::Components::ListGroupItem.new { 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
|
|
21
|
+
add_content(ElementComponent::Components::ListGroupItem.new { add_content("Flush Item 1") })
|
|
22
|
+
add_content(ElementComponent::Components::ListGroupItem.new { 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
|
|
32
|
+
add_content(ElementComponent::Components::ListGroupItem.new(active: true) { add_content("Active Item") })
|
|
33
|
+
add_content(ElementComponent::Components::ListGroupItem.new { add_content("Regular Item") })
|
|
34
|
+
add_content(ElementComponent::Components::ListGroupItem.new(disabled: true) { add_content("Disabled Item") })
|
|
35
|
+
end
|
|
36
|
+
puts "=== Active and Disabled Items ==="
|
|
37
|
+
puts group.render
|
|
38
|
+
puts
|
|
39
|
+
|
|
40
|
+
# =============================================================================
|
|
41
|
+
# List Group with Links
|
|
42
|
+
# =============================================================================
|
|
43
|
+
group = ElementComponent::Components::ListGroup.new do
|
|
44
|
+
add_content(ElementComponent::Components::ListGroupItem.new(href: "/page1") { add_content("Link 1") })
|
|
45
|
+
add_content(ElementComponent::Components::ListGroupItem.new(href: "/page2") { add_content("Link 2") })
|
|
46
|
+
end
|
|
47
|
+
puts "=== List Group with Links ==="
|
|
48
|
+
puts group.render
|
|
49
|
+
puts
|
|
50
|
+
|
|
51
|
+
# =============================================================================
|
|
52
|
+
# Variant Items
|
|
53
|
+
# =============================================================================
|
|
54
|
+
group = ElementComponent::Components::ListGroup.new do
|
|
55
|
+
add_content(ElementComponent::Components::ListGroupItem.new(variant: :success) { add_content("Success") })
|
|
56
|
+
add_content(ElementComponent::Components::ListGroupItem.new(variant: :danger) { add_content("Danger") })
|
|
57
|
+
add_content(ElementComponent::Components::ListGroupItem.new(variant: :warning) { add_content("Warning") })
|
|
58
|
+
end
|
|
59
|
+
puts "=== Variant Items ==="
|
|
60
|
+
puts group.render
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "../lib/element_component"
|
|
4
|
+
|
|
5
|
+
# =============================================================================
|
|
6
|
+
# Basic Modal
|
|
7
|
+
# =============================================================================
|
|
8
|
+
modal = ElementComponent::Components::Modal.new(id: "basicModal")
|
|
9
|
+
modal.add_content(
|
|
10
|
+
ElementComponent::Components::ModalContent.new do
|
|
11
|
+
add_content(ElementComponent::Components::ModalHeader.new do
|
|
12
|
+
add_content(ElementComponent::Components::ModalTitle.new { add_content("Modal title") })
|
|
13
|
+
end)
|
|
14
|
+
add_content(ElementComponent::Components::ModalBody.new { add_content("Modal body text goes here.") })
|
|
15
|
+
add_content(ElementComponent::Components::ModalFooter.new do
|
|
16
|
+
add_content(ElementComponent::Components::Button.new(variant: :secondary) { add_content("Close") })
|
|
17
|
+
add_content(ElementComponent::Components::Button.new(variant: :primary) { add_content("Save changes") })
|
|
18
|
+
end)
|
|
19
|
+
end
|
|
20
|
+
)
|
|
21
|
+
puts "=== Basic Modal ==="
|
|
22
|
+
puts modal.render
|
|
23
|
+
puts
|
|
24
|
+
|
|
25
|
+
# =============================================================================
|
|
26
|
+
# Scrollable Modal
|
|
27
|
+
# =============================================================================
|
|
28
|
+
modal = ElementComponent::Components::Modal.new(id: "scrollModal", scrollable: true)
|
|
29
|
+
modal.add_content(
|
|
30
|
+
ElementComponent::Components::ModalContent.new do
|
|
31
|
+
add_content(ElementComponent::Components::ModalHeader.new do
|
|
32
|
+
add_content(ElementComponent::Components::ModalTitle.new { add_content("Scrollable") })
|
|
33
|
+
end)
|
|
34
|
+
add_content(ElementComponent::Components::ModalBody.new { add_content("Long content body...") })
|
|
35
|
+
add_content(ElementComponent::Components::ModalFooter.new { add_content("Footer") })
|
|
36
|
+
end
|
|
37
|
+
)
|
|
38
|
+
puts "=== Scrollable Modal ==="
|
|
39
|
+
puts modal.render
|
|
40
|
+
puts
|
|
41
|
+
|
|
42
|
+
# =============================================================================
|
|
43
|
+
# Centered Modal
|
|
44
|
+
# =============================================================================
|
|
45
|
+
modal = ElementComponent::Components::Modal.new(id: "centerModal", centered: true)
|
|
46
|
+
modal.add_content(
|
|
47
|
+
ElementComponent::Components::ModalContent.new do
|
|
48
|
+
add_content(ElementComponent::Components::ModalBody.new { add_content("Centered content") })
|
|
49
|
+
end
|
|
50
|
+
)
|
|
51
|
+
puts "=== Centered Modal ==="
|
|
52
|
+
puts modal.render
|
|
53
|
+
puts
|
|
54
|
+
|
|
55
|
+
# =============================================================================
|
|
56
|
+
# Large Modal
|
|
57
|
+
# =============================================================================
|
|
58
|
+
modal = ElementComponent::Components::Modal.new(id: "lgModal", size: :lg)
|
|
59
|
+
modal.add_content(
|
|
60
|
+
ElementComponent::Components::ModalContent.new do
|
|
61
|
+
add_content(ElementComponent::Components::ModalBody.new { add_content("Large modal body") })
|
|
62
|
+
end
|
|
63
|
+
)
|
|
64
|
+
puts "=== Large Modal ==="
|
|
65
|
+
puts modal.render
|
|
66
|
+
puts
|
|
67
|
+
|
|
68
|
+
# =============================================================================
|
|
69
|
+
# Static Backdrop Modal
|
|
70
|
+
# =============================================================================
|
|
71
|
+
modal = ElementComponent::Components::Modal.new(id: "staticModal", static: true)
|
|
72
|
+
modal.add_content(
|
|
73
|
+
ElementComponent::Components::ModalContent.new do
|
|
74
|
+
add_content(ElementComponent::Components::ModalBody.new { add_content("Click outside does not close") })
|
|
75
|
+
end
|
|
76
|
+
)
|
|
77
|
+
puts "=== Static Backdrop Modal ==="
|
|
78
|
+
puts modal.render
|
|
79
|
+
puts
|
|
80
|
+
|
|
81
|
+
# =============================================================================
|
|
82
|
+
# Header Without Close
|
|
83
|
+
# =============================================================================
|
|
84
|
+
modal = ElementComponent::Components::Modal.new(id: "noCloseModal")
|
|
85
|
+
modal.add_content(
|
|
86
|
+
ElementComponent::Components::ModalContent.new do
|
|
87
|
+
add_content(ElementComponent::Components::ModalHeader.new(close_button: false) do
|
|
88
|
+
add_content(ElementComponent::Components::ModalTitle.new { add_content("No close button") })
|
|
89
|
+
end)
|
|
90
|
+
end
|
|
91
|
+
)
|
|
92
|
+
puts "=== Modal Header Without Close ==="
|
|
93
|
+
puts modal.render
|
|
94
|
+
puts
|
|
95
|
+
|
|
96
|
+
# =============================================================================
|
|
97
|
+
# Sub-Components Rendered Independently
|
|
98
|
+
# =============================================================================
|
|
99
|
+
puts "=== ModalDialog ==="
|
|
100
|
+
puts ElementComponent::Components::ModalDialog.new.render
|
|
101
|
+
puts
|
|
102
|
+
|
|
103
|
+
puts "=== ModalContent ==="
|
|
104
|
+
puts ElementComponent::Components::ModalContent.new.render
|
|
105
|
+
puts
|
|
106
|
+
|
|
107
|
+
puts "=== ModalHeader ==="
|
|
108
|
+
puts ElementComponent::Components::ModalHeader.new.render
|
|
109
|
+
puts
|
|
110
|
+
|
|
111
|
+
puts "=== ModalTitle ==="
|
|
112
|
+
puts ElementComponent::Components::ModalTitle.new.render
|
|
113
|
+
puts
|
|
114
|
+
|
|
115
|
+
puts "=== ModalBody ==="
|
|
116
|
+
puts ElementComponent::Components::ModalBody.new.render
|
|
117
|
+
puts
|
|
118
|
+
|
|
119
|
+
puts "=== ModalFooter ==="
|
|
120
|
+
puts ElementComponent::Components::ModalFooter.new.render
|