relay_ui 0.1.1 → 0.2.3
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/LICENSE.txt +21 -0
- data/README.md +100 -0
- data/dist/relay_ui/relay_ui.css +595 -0
- data/lib/relay_ui/engine.rb +6 -7
- data/lib/relay_ui/version.rb +2 -2
- data/lib/relay_ui.rb +1 -1
- data/lib/rui/badges/base.rb +5 -0
- data/lib/rui/badges/blue.rb +5 -0
- data/lib/rui/badges/gray.rb +5 -0
- data/lib/rui/badges/green.rb +5 -0
- data/lib/rui/badges/purple.rb +5 -0
- data/lib/rui/badges/red.rb +5 -0
- data/lib/rui/badges/yellow.rb +5 -0
- data/{app/components → lib/rui}/base.rb +1 -3
- data/lib/rui/buttons/base.rb +27 -0
- data/lib/rui/buttons/destructive.rb +5 -0
- data/lib/rui/buttons/ghost.rb +5 -0
- data/lib/rui/buttons/outline.rb +5 -0
- data/lib/rui/buttons/primary.rb +5 -0
- data/lib/rui/buttons/secondary.rb +5 -0
- data/{app/components → lib/rui}/icon.rb +3 -1
- data/lib/rui/links/base.rb +28 -0
- data/lib/rui/links/destructive.rb +5 -0
- data/lib/rui/links/ghost.rb +5 -0
- data/lib/rui/links/outline.rb +5 -0
- data/lib/rui/links/primary.rb +5 -0
- data/lib/rui/links/secondary.rb +5 -0
- data/lib/rui/markdown/generator.rb +35 -0
- data/lib/rui/markdown/safe.rb +7 -0
- data/lib/rui/markdown/safe_renderer.rb +13 -0
- data/lib/rui/markdown/unsafe.rb +7 -0
- data/lib/rui/markdown/unsafe_renderer.rb +34 -0
- data/lib/rui/navigation.rb +51 -0
- data/lib/rui/slideout.rb +20 -0
- data/lib/rui/text.rb +19 -0
- metadata +80 -37
- data/Rakefile +0 -64
- data/app/assets/javascripts/relay_ui/index.js +0 -5
- data/app/assets/stylesheets/relay_ui/application.css +0 -1
- data/app/components/badges/base.rb +0 -5
- data/app/components/badges/blue.rb +0 -5
- data/app/components/badges/gray.rb +0 -5
- data/app/components/badges/green.rb +0 -5
- data/app/components/badges/purple.rb +0 -5
- data/app/components/badges/red.rb +0 -5
- data/app/components/badges/yellow.rb +0 -5
- data/app/components/buttons/base.rb +0 -30
- data/app/components/buttons/destructive.rb +0 -5
- data/app/components/buttons/ghost.rb +0 -5
- data/app/components/buttons/link.rb +0 -9
- data/app/components/buttons/outline.rb +0 -5
- data/app/components/buttons/primary.rb +0 -5
- data/app/components/buttons/secondary.rb +0 -5
- data/app/components/code_block.rb +0 -13
- data/app/components/headings.rb +0 -37
- data/app/components/lists/base.rb +0 -13
- data/app/components/lists/ordered.rb +0 -5
- data/app/components/lists/unordered.rb +0 -5
- data/app/components/navigation.rb +0 -49
- data/app/components/slideout.rb +0 -20
- data/app/components/text.rb +0 -19
- data/package.json +0 -16
- data/tailwind.config.js +0 -10
- data/vendor/assets/javascripts/relay_ui/dist/relay_ui.js +0 -2471
- data/vendor/assets/stylesheets/relay_ui/relay_ui.css +0 -2528
@@ -0,0 +1,27 @@
|
|
1
|
+
class RUI::Buttons::Base < RUI::Base
|
2
|
+
def initialize(icon: nil, data: {})
|
3
|
+
@icon = icon
|
4
|
+
@data = data
|
5
|
+
end
|
6
|
+
|
7
|
+
def view_template
|
8
|
+
button(class: classes, data: @data) do
|
9
|
+
div(class: "rui:flex rui:flex-row rui:items-center rui:gap-2") do
|
10
|
+
if @icon
|
11
|
+
div(class: "rui:size-4 rui:my-1") do
|
12
|
+
render RUI::Icon.new(@icon)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
span { yield } if block_given?
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def classes
|
23
|
+
"#{base_classes} #{variant_classes}"
|
24
|
+
end
|
25
|
+
|
26
|
+
def base_classes = "rui:inline-block rui:px-3 rui:py-1 rui:hover:cursor-pointer rui:rounded rui:transition rui:duration-200 rui:ease-in-out"
|
27
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
class RUI::Links::Base < RUI::Base
|
2
|
+
def initialize(href: "#", icon: nil, data: {})
|
3
|
+
@href = href
|
4
|
+
@icon = icon
|
5
|
+
@data = data
|
6
|
+
end
|
7
|
+
|
8
|
+
def view_template
|
9
|
+
a(href: @href, class: classes, data: @data) do
|
10
|
+
div(class: "rui:flex rui:flex-row rui:items-center rui:gap-2") do
|
11
|
+
if @icon
|
12
|
+
div(class: "rui:size-4 rui:my-1") do
|
13
|
+
render RUI::Icon.new(@icon)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
span { yield } if block_given?
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def classes
|
24
|
+
"#{base_classes} #{variant_classes}"
|
25
|
+
end
|
26
|
+
|
27
|
+
def base_classes = "rui:inline-block rui:px-3 rui:py-1 rui:hover:cursor-pointer rui:rounded rui:transition rui:duration-200 rui:ease-in-out"
|
28
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require "redcarpet"
|
2
|
+
|
3
|
+
class RUI::Markdown::Generator
|
4
|
+
include Singleton
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
options = {
|
8
|
+
filter_html: true,
|
9
|
+
hard_wrap: true,
|
10
|
+
link_attributes: { rel: "nofollow", target: "_blank" },
|
11
|
+
escape_html: true
|
12
|
+
}
|
13
|
+
|
14
|
+
unsafe_renderer = RUI::Markdown::UnsafeRenderer.new options
|
15
|
+
safe_renderer = RUI::Markdown::SafeRenderer.new options
|
16
|
+
|
17
|
+
extensions = {
|
18
|
+
autolink: true,
|
19
|
+
tables: true,
|
20
|
+
fenced_code_blocks: true,
|
21
|
+
lax_spacing: true,
|
22
|
+
no_intra_emphasis: true,
|
23
|
+
strikethrough: true,
|
24
|
+
superscript: true,
|
25
|
+
disable_indented_code_blocks: true
|
26
|
+
}
|
27
|
+
|
28
|
+
@unsafe_generator = Redcarpet::Markdown.new unsafe_renderer, extensions
|
29
|
+
@safe_generator = Redcarpet::Markdown.new safe_renderer, extensions
|
30
|
+
end
|
31
|
+
|
32
|
+
def get_unsafe(markdown) = @unsafe_generator.render(markdown).html_safe
|
33
|
+
|
34
|
+
def get_safe(markdown) = @safe_generator.render(markdown).html_safe
|
35
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require "rouge"
|
2
|
+
require "rouge/plugins/redcarpet"
|
3
|
+
require "redcarpet"
|
4
|
+
|
5
|
+
class RUI::Markdown::SafeRenderer < Redcarpet::Render::XHTML
|
6
|
+
include Rouge::Plugins::Redcarpet
|
7
|
+
|
8
|
+
private
|
9
|
+
|
10
|
+
def rouge_formatter(lexer)
|
11
|
+
Rouge::Formatters::HTMLLegacy.new(inline_theme: "github.dark")
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require "rouge"
|
2
|
+
require "rouge/plugins/redcarpet"
|
3
|
+
require "redcarpet"
|
4
|
+
|
5
|
+
class RUI::Markdown::UnsafeRenderer < Redcarpet::Render::XHTML
|
6
|
+
include Rouge::Plugins::Redcarpet
|
7
|
+
|
8
|
+
def block_code(code, lang)
|
9
|
+
lexer =
|
10
|
+
begin
|
11
|
+
Rouge::Lexer.find_fancy(lang, code)
|
12
|
+
rescue Rouge::Guesser::Ambiguous => e
|
13
|
+
e.alternatives.first
|
14
|
+
end
|
15
|
+
lexer ||= Rouge::Lexers::PlainText
|
16
|
+
|
17
|
+
if lexer.tag == "make"
|
18
|
+
code.gsub! %r{^ }, "\t"
|
19
|
+
end
|
20
|
+
|
21
|
+
formatter = rouge_formatter(lexer)
|
22
|
+
|
23
|
+
# This is a hack to unescape HTML entities in code blocks
|
24
|
+
unescaped = CGI.unescapeHTML(code)
|
25
|
+
|
26
|
+
formatter.format(lexer.lex(unescaped))
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def rouge_formatter(lexer)
|
32
|
+
Rouge::Formatters::HTMLLegacy.new(inline_theme: "github.dark")
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
class RUI::Navigation < RUI::Base
|
2
|
+
register_value_helper :request
|
3
|
+
|
4
|
+
def view_template
|
5
|
+
div(class: "rui:flex rui:flex-col rui:sticky rui:top-0 rui:max-h-screen rui:overflow-y-auto rui:mx-10 rui:py-10") do
|
6
|
+
yield
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
def section_heading
|
11
|
+
p(class: "rui:pt-8 rui:pb-4 rui:mt-6 rui:text-sm rui:font-semibold rui:uppercase rui:text-zinc-400 rui:border-t rui:border-zinc-200") do
|
12
|
+
yield
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def icon_link(href:, icon:)
|
17
|
+
if request.path == href
|
18
|
+
state_classes = "rui:border-blue-700 rui:text-zinc-700 rui:**:[svg]:stroke-blue-700"
|
19
|
+
else
|
20
|
+
state_classes = "rui:border-transparent rui:text-zinc-400 rui:hover:border-zinc-200 rui:hover:text-zinc-700 rui:**:[svg]:stroke-zinc-300 rui:hover:**:[svg]:stroke-zinc-700"
|
21
|
+
end
|
22
|
+
|
23
|
+
a(href:, class: "rui:inline-flex rui:items-center rui:gap-2 rui:py-1 #{state_classes}") do
|
24
|
+
div(class: "rui:size-4") do
|
25
|
+
render RUI::Icon.new(icon)
|
26
|
+
end
|
27
|
+
span { yield }
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def text_link(href)
|
32
|
+
if request.path == href
|
33
|
+
state_classes = "rui:border-blue-700 rui:text-zinc-700"
|
34
|
+
else
|
35
|
+
state_classes = "rui:border-transparent rui:text-zinc-400 rui:hover:border-zinc-200 rui:hover:text-zinc-700"
|
36
|
+
end
|
37
|
+
|
38
|
+
a(href:, class: "rui:text-zinc-400 rui:px-5 rui:py-1 rui:border-l-3 #{state_classes}") do
|
39
|
+
span { yield }
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def coming_soon
|
44
|
+
div(class: "rui:flex rui:flex-row rui:items-center") do
|
45
|
+
span(class: "rui:text-zinc-400 rui:px-5 rui:py-1 rui:border-l-3 rui:border-transparent") do
|
46
|
+
yield
|
47
|
+
end
|
48
|
+
render RUI::Badges::Gray.new { "Coming Soon" }
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
data/lib/rui/slideout.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
class RUI::Slideout < RUI::Base
|
2
|
+
include Phlex::Rails::Helpers::TurboFrameTag
|
3
|
+
|
4
|
+
def view_template
|
5
|
+
turbo_frame_tag "slideout" do
|
6
|
+
div(class: "rui:absolute rui:inset-0 rui:z-50", data: { controller: "slideout" }) do
|
7
|
+
a(href: "#", class: "rui:cursor-default", data: { action: "slideout#hide" }) do
|
8
|
+
div(id: "modal-curtain", class: "rui:w-screen rui:h-screen rui:bg-black rui:transition-opacity rui:opacity-75", data: { slideout_target: "curtain" })
|
9
|
+
end
|
10
|
+
div(class: "rui:right-0 rui:fixed rui:inset-y-0 rui:flex rui:max-w-1/2 rui:pointer-events-none") do
|
11
|
+
div(class: "rui:w-screen rui:pointer-events-auto", data: { slideout_target: "slideout" }) do
|
12
|
+
div(class: "rui:w-full rui:h-full rui:bg-white rui:shadow") do
|
13
|
+
yield
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
data/lib/rui/text.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
module RUI::Text
|
2
|
+
class Large < RUI::Base
|
3
|
+
def view_template
|
4
|
+
p(class: "rui:text-lg rui:text-zinc-700 rui:mb-4") { yield }
|
5
|
+
end
|
6
|
+
end
|
7
|
+
|
8
|
+
class Medium < RUI::Base
|
9
|
+
def view_template
|
10
|
+
p(class: "rui:text-base rui:text-zinc-700 rui:mb-4") { yield }
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
class Small < RUI::Base
|
15
|
+
def view_template
|
16
|
+
p(class: "rui:text-sm rui:text-zinc-700 rui:mb-4") { yield }
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: relay_ui
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- logicrelay
|
8
8
|
bindir: bin
|
9
9
|
cert_chain: []
|
10
|
-
date: 2025-03-
|
10
|
+
date: 2025-03-12 00:00:00.000000000 Z
|
11
11
|
dependencies:
|
12
12
|
- !ruby/object:Gem::Dependency
|
13
13
|
name: phlex
|
@@ -15,28 +15,56 @@ dependencies:
|
|
15
15
|
requirements:
|
16
16
|
- - "~>"
|
17
17
|
- !ruby/object:Gem::Version
|
18
|
-
version: 2.1
|
18
|
+
version: '2.1'
|
19
19
|
type: :runtime
|
20
20
|
prerelease: false
|
21
21
|
version_requirements: !ruby/object:Gem::Requirement
|
22
22
|
requirements:
|
23
23
|
- - "~>"
|
24
24
|
- !ruby/object:Gem::Version
|
25
|
-
version: 2.1
|
25
|
+
version: '2.1'
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: tabler_icons_ruby
|
28
28
|
requirement: !ruby/object:Gem::Requirement
|
29
29
|
requirements:
|
30
30
|
- - "~>"
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: 3.11
|
32
|
+
version: '3.11'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
35
|
version_requirements: !ruby/object:Gem::Requirement
|
36
36
|
requirements:
|
37
37
|
- - "~>"
|
38
38
|
- !ruby/object:Gem::Version
|
39
|
-
version: 3.11
|
39
|
+
version: '3.11'
|
40
|
+
- !ruby/object:Gem::Dependency
|
41
|
+
name: redcarpet
|
42
|
+
requirement: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - "~>"
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '3.6'
|
47
|
+
type: :runtime
|
48
|
+
prerelease: false
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - "~>"
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '3.6'
|
54
|
+
- !ruby/object:Gem::Dependency
|
55
|
+
name: rouge
|
56
|
+
requirement: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - "~>"
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '4.5'
|
61
|
+
type: :runtime
|
62
|
+
prerelease: false
|
63
|
+
version_requirements: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - "~>"
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '4.5'
|
40
68
|
- !ruby/object:Gem::Dependency
|
41
69
|
name: rake
|
42
70
|
requirement: !ruby/object:Gem::Requirement
|
@@ -93,6 +121,20 @@ dependencies:
|
|
93
121
|
- - ">="
|
94
122
|
- !ruby/object:Gem::Version
|
95
123
|
version: '0'
|
124
|
+
- !ruby/object:Gem::Dependency
|
125
|
+
name: rubocop-rails-omakase
|
126
|
+
requirement: !ruby/object:Gem::Requirement
|
127
|
+
requirements:
|
128
|
+
- - ">="
|
129
|
+
- !ruby/object:Gem::Version
|
130
|
+
version: '0'
|
131
|
+
type: :development
|
132
|
+
prerelease: false
|
133
|
+
version_requirements: !ruby/object:Gem::Requirement
|
134
|
+
requirements:
|
135
|
+
- - ">="
|
136
|
+
- !ruby/object:Gem::Version
|
137
|
+
version: '0'
|
96
138
|
description: 'RelayUI is an opinionated UI kit for Rails applications, leveraging
|
97
139
|
Phlex and TailwindCSS to provide a robust and cohesive design system, particularly
|
98
140
|
suited for B2B backend interfaces.
|
@@ -104,40 +146,41 @@ executables: []
|
|
104
146
|
extensions: []
|
105
147
|
extra_rdoc_files: []
|
106
148
|
files:
|
107
|
-
-
|
108
|
-
-
|
109
|
-
-
|
110
|
-
- app/components/badges/base.rb
|
111
|
-
- app/components/badges/blue.rb
|
112
|
-
- app/components/badges/gray.rb
|
113
|
-
- app/components/badges/green.rb
|
114
|
-
- app/components/badges/purple.rb
|
115
|
-
- app/components/badges/red.rb
|
116
|
-
- app/components/badges/yellow.rb
|
117
|
-
- app/components/base.rb
|
118
|
-
- app/components/buttons/base.rb
|
119
|
-
- app/components/buttons/destructive.rb
|
120
|
-
- app/components/buttons/ghost.rb
|
121
|
-
- app/components/buttons/link.rb
|
122
|
-
- app/components/buttons/outline.rb
|
123
|
-
- app/components/buttons/primary.rb
|
124
|
-
- app/components/buttons/secondary.rb
|
125
|
-
- app/components/code_block.rb
|
126
|
-
- app/components/headings.rb
|
127
|
-
- app/components/icon.rb
|
128
|
-
- app/components/lists/base.rb
|
129
|
-
- app/components/lists/ordered.rb
|
130
|
-
- app/components/lists/unordered.rb
|
131
|
-
- app/components/navigation.rb
|
132
|
-
- app/components/slideout.rb
|
133
|
-
- app/components/text.rb
|
149
|
+
- LICENSE.txt
|
150
|
+
- README.md
|
151
|
+
- dist/relay_ui/relay_ui.css
|
134
152
|
- lib/relay_ui.rb
|
135
153
|
- lib/relay_ui/engine.rb
|
136
154
|
- lib/relay_ui/version.rb
|
137
|
-
-
|
138
|
-
-
|
139
|
-
-
|
140
|
-
-
|
155
|
+
- lib/rui/badges/base.rb
|
156
|
+
- lib/rui/badges/blue.rb
|
157
|
+
- lib/rui/badges/gray.rb
|
158
|
+
- lib/rui/badges/green.rb
|
159
|
+
- lib/rui/badges/purple.rb
|
160
|
+
- lib/rui/badges/red.rb
|
161
|
+
- lib/rui/badges/yellow.rb
|
162
|
+
- lib/rui/base.rb
|
163
|
+
- lib/rui/buttons/base.rb
|
164
|
+
- lib/rui/buttons/destructive.rb
|
165
|
+
- lib/rui/buttons/ghost.rb
|
166
|
+
- lib/rui/buttons/outline.rb
|
167
|
+
- lib/rui/buttons/primary.rb
|
168
|
+
- lib/rui/buttons/secondary.rb
|
169
|
+
- lib/rui/icon.rb
|
170
|
+
- lib/rui/links/base.rb
|
171
|
+
- lib/rui/links/destructive.rb
|
172
|
+
- lib/rui/links/ghost.rb
|
173
|
+
- lib/rui/links/outline.rb
|
174
|
+
- lib/rui/links/primary.rb
|
175
|
+
- lib/rui/links/secondary.rb
|
176
|
+
- lib/rui/markdown/generator.rb
|
177
|
+
- lib/rui/markdown/safe.rb
|
178
|
+
- lib/rui/markdown/safe_renderer.rb
|
179
|
+
- lib/rui/markdown/unsafe.rb
|
180
|
+
- lib/rui/markdown/unsafe_renderer.rb
|
181
|
+
- lib/rui/navigation.rb
|
182
|
+
- lib/rui/slideout.rb
|
183
|
+
- lib/rui/text.rb
|
141
184
|
homepage: https://www.relayui.com
|
142
185
|
licenses:
|
143
186
|
- MIT
|
data/Rakefile
DELETED
@@ -1,64 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "bundler/gem_tasks"
|
4
|
-
require "rspec/core/rake_task"
|
5
|
-
|
6
|
-
RSpec::Core::RakeTask.new(:spec)
|
7
|
-
|
8
|
-
require "rubocop/rake_task"
|
9
|
-
|
10
|
-
RuboCop::RakeTask.new
|
11
|
-
|
12
|
-
task default: %i[spec rubocop]
|
13
|
-
|
14
|
-
namespace :build do
|
15
|
-
desc "Build JavaScript"
|
16
|
-
task :js do
|
17
|
-
sh "npm run build:js"
|
18
|
-
end
|
19
|
-
|
20
|
-
desc "Build CSS"
|
21
|
-
task :css do
|
22
|
-
sh "npm run build:css"
|
23
|
-
end
|
24
|
-
|
25
|
-
desc "Build all assets"
|
26
|
-
task :assets => [:js, :css]
|
27
|
-
end
|
28
|
-
|
29
|
-
namespace :watch do
|
30
|
-
desc "Watch JavaScript files and rebuild on changes"
|
31
|
-
task :js do
|
32
|
-
sh "npm run watch:js"
|
33
|
-
end
|
34
|
-
|
35
|
-
desc "Watch CSS files and rebuild on changes"
|
36
|
-
task :css do
|
37
|
-
sh "npm run watch:css"
|
38
|
-
end
|
39
|
-
|
40
|
-
desc "Watch all assets and rebuild on changes"
|
41
|
-
task :assets do
|
42
|
-
puts "Starting asset watchers for both JS and CSS..."
|
43
|
-
puts "Press Ctrl-C to stop watching"
|
44
|
-
|
45
|
-
# Run both watchers in parallel using a basic approach that works across platforms
|
46
|
-
trap("INT") { exit }
|
47
|
-
|
48
|
-
# Fork processes for each watcher
|
49
|
-
pid1 = Process.fork { sh "npm run watch:js" }
|
50
|
-
pid2 = Process.fork { sh "npm run watch:css" }
|
51
|
-
|
52
|
-
# Wait for any process to exit
|
53
|
-
Process.wait(pid1)
|
54
|
-
Process.wait(pid2)
|
55
|
-
rescue Interrupt
|
56
|
-
puts "\nShutting down watchers..."
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
task :build => ["build:assets"]
|
61
|
-
task :watch => ["watch:assets"]
|
62
|
-
task :default => ["build"]
|
63
|
-
|
64
|
-
CLEAN.include("vendor")
|
@@ -1 +0,0 @@
|
|
1
|
-
@import 'tailwindcss';
|
@@ -1,30 +0,0 @@
|
|
1
|
-
class RelayUi::Buttons::Base < RelayUi::Base
|
2
|
-
def initialize(data: {}, href: "#", icon: nil)
|
3
|
-
@data = data
|
4
|
-
@href = href
|
5
|
-
@icon = icon
|
6
|
-
end
|
7
|
-
|
8
|
-
def view_template
|
9
|
-
div do
|
10
|
-
a(href: @href, class: classes, data: @data) do
|
11
|
-
div(class: "flex flex-row items-center gap-2") do
|
12
|
-
if @icon
|
13
|
-
div(class: "size-4 my-1") do
|
14
|
-
render RelayUi::Icon.new(@icon)
|
15
|
-
end
|
16
|
-
end
|
17
|
-
span { yield } if block_given?
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
private
|
24
|
-
|
25
|
-
def classes
|
26
|
-
"#{base_classes} #{variant_classes}"
|
27
|
-
end
|
28
|
-
|
29
|
-
def base_classes = "inline-block px-3 py-1 hover:cursor-pointer rounded transition duration-200 ease-in-out"
|
30
|
-
end
|