phlex_ui 0.0.5 → 0.1.6
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/lib/phlex_ui/accordion/builder.rb +22 -0
- data/lib/phlex_ui/accordion/content.rb +15 -15
- data/lib/phlex_ui/accordion/default_content.rb +11 -11
- data/lib/phlex_ui/accordion/default_trigger.rb +14 -14
- data/lib/phlex_ui/accordion/icon.rb +31 -31
- data/lib/phlex_ui/accordion/item.rb +20 -20
- data/lib/phlex_ui/accordion/trigger.rb +11 -11
- data/lib/phlex_ui/accordion.rb +10 -21
- data/lib/phlex_ui/alert/description.rb +10 -10
- data/lib/phlex_ui/alert/title.rb +10 -10
- data/lib/phlex_ui/alert.rb +27 -27
- data/lib/phlex_ui/alert_dialog/action.rb +11 -11
- data/lib/phlex_ui/alert_dialog/cancel.rb +15 -15
- data/lib/phlex_ui/alert_dialog/content.rb +36 -36
- data/lib/phlex_ui/alert_dialog/description.rb +11 -11
- data/lib/phlex_ui/alert_dialog/footer.rb +11 -11
- data/lib/phlex_ui/alert_dialog/header.rb +11 -11
- data/lib/phlex_ui/alert_dialog/title.rb +11 -11
- data/lib/phlex_ui/alert_dialog/trigger.rb +12 -12
- data/lib/phlex_ui/alert_dialog.rb +18 -18
- data/lib/phlex_ui/aspect_ratio.rb +24 -24
- data/lib/phlex_ui/attribute_merger.rb +59 -61
- data/lib/phlex_ui/avatar/builder.rb +36 -0
- data/lib/phlex_ui/avatar/fallback.rb +11 -11
- data/lib/phlex_ui/avatar/image.rb +19 -19
- data/lib/phlex_ui/avatar.rb +23 -41
- data/lib/phlex_ui/badge.rb +50 -50
- data/lib/phlex_ui/base.rb +16 -16
- data/lib/phlex_ui/button.rb +80 -80
- data/lib/phlex_ui/calendar/body.rb +19 -0
- data/lib/phlex_ui/calendar/days.rb +104 -0
- data/lib/phlex_ui/calendar/header.rb +17 -0
- data/lib/phlex_ui/calendar/next.rb +43 -0
- data/lib/phlex_ui/calendar/prev.rb +43 -0
- data/lib/phlex_ui/calendar/title.rb +27 -0
- data/lib/phlex_ui/calendar/weekdays.rb +33 -0
- data/lib/phlex_ui/calendar.rb +39 -0
- data/lib/phlex_ui/card/content.rb +11 -11
- data/lib/phlex_ui/card/description.rb +11 -11
- data/lib/phlex_ui/card/footer.rb +11 -11
- data/lib/phlex_ui/card/header.rb +11 -11
- data/lib/phlex_ui/card/title.rb +11 -11
- data/lib/phlex_ui/card.rb +11 -11
- data/lib/phlex_ui/chart.rb +23 -0
- data/lib/phlex_ui/checkbox.rb +12 -12
- data/lib/phlex_ui/clipboard/popover.rb +28 -28
- data/lib/phlex_ui/clipboard/source.rb +13 -13
- data/lib/phlex_ui/clipboard/trigger.rb +14 -14
- data/lib/phlex_ui/clipboard.rb +30 -30
- data/lib/phlex_ui/codeblock.rb +86 -86
- data/lib/phlex_ui/collapsible/content.rb +12 -12
- data/lib/phlex_ui/collapsible/trigger.rb +13 -13
- data/lib/phlex_ui/collapsible.rb +18 -18
- data/lib/phlex_ui/command/dialog.rb +17 -0
- data/lib/phlex_ui/command/dialog_content.rb +49 -0
- data/lib/phlex_ui/command/dialog_trigger.rb +29 -0
- data/lib/phlex_ui/command/empty.rb +19 -0
- data/lib/phlex_ui/command/group.rb +41 -0
- data/lib/phlex_ui/command/input.rb +56 -0
- data/lib/phlex_ui/command/item.rb +31 -0
- data/lib/phlex_ui/command/list.rb +17 -0
- data/lib/phlex_ui/command.rb +17 -0
- data/lib/phlex_ui/context_menu/content.rb +19 -19
- data/lib/phlex_ui/context_menu/item.rb +55 -55
- data/lib/phlex_ui/context_menu/label.rb +16 -16
- data/lib/phlex_ui/context_menu/separator.rb +13 -13
- data/lib/phlex_ui/context_menu/trigger.rb +14 -14
- data/lib/phlex_ui/context_menu.rb +19 -19
- data/lib/phlex_ui/dialog/content.rb +67 -67
- data/lib/phlex_ui/dialog/description.rb +11 -11
- data/lib/phlex_ui/dialog/footer.rb +11 -11
- data/lib/phlex_ui/dialog/header.rb +11 -11
- data/lib/phlex_ui/dialog/middle.rb +11 -11
- data/lib/phlex_ui/dialog/title.rb +11 -11
- data/lib/phlex_ui/dialog/trigger.rb +14 -13
- data/lib/phlex_ui/dialog.rb +18 -18
- data/lib/phlex_ui/dropdown_menu/content.rb +16 -16
- data/lib/phlex_ui/dropdown_menu/item.rb +21 -21
- data/lib/phlex_ui/dropdown_menu/label.rb +11 -11
- data/lib/phlex_ui/dropdown_menu/separator.rb +13 -13
- data/lib/phlex_ui/dropdown_menu/trigger.rb +12 -11
- data/lib/phlex_ui/dropdown_menu.rb +19 -19
- data/lib/phlex_ui/form/builder.rb +38 -0
- data/lib/phlex_ui/form/item.rb +11 -11
- data/lib/phlex_ui/form/spacer.rb +11 -11
- data/lib/phlex_ui/form.rb +9 -28
- data/lib/phlex_ui/hint.rb +11 -11
- data/lib/phlex_ui/hover_card/content.rb +16 -16
- data/lib/phlex_ui/hover_card/trigger.rb +14 -13
- data/lib/phlex_ui/hover_card.rb +20 -20
- data/lib/phlex_ui/input.rb +22 -22
- data/lib/phlex_ui/input_error.rb +11 -11
- data/lib/phlex_ui/label.rb +11 -11
- data/lib/phlex_ui/link.rb +81 -81
- data/lib/phlex_ui/popover/content.rb +16 -16
- data/lib/phlex_ui/popover/trigger.rb +14 -13
- data/lib/phlex_ui/popover.rb +18 -18
- data/lib/phlex_ui/select/builder.rb +67 -0
- data/lib/phlex_ui/select/content.rb +30 -0
- data/lib/phlex_ui/select/group.rb +15 -0
- data/lib/phlex_ui/select/input.rb +20 -0
- data/lib/phlex_ui/select/item.rb +48 -0
- data/lib/phlex_ui/select/label.rb +17 -0
- data/lib/phlex_ui/select/trigger.rb +45 -0
- data/lib/phlex_ui/select/value.rb +27 -0
- data/lib/phlex_ui/select.rb +30 -0
- data/lib/phlex_ui/sheet/content.rb +77 -0
- data/lib/phlex_ui/sheet/description.rb +17 -0
- data/lib/phlex_ui/sheet/footer.rb +17 -0
- data/lib/phlex_ui/sheet/header.rb +17 -0
- data/lib/phlex_ui/sheet/middle.rb +17 -0
- data/lib/phlex_ui/sheet/title.rb +17 -0
- data/lib/phlex_ui/sheet/trigger.rb +17 -0
- data/lib/phlex_ui/sheet.rb +17 -0
- data/lib/phlex_ui/shortcut_key.rb +11 -11
- data/lib/phlex_ui/table/body.rb +11 -11
- data/lib/phlex_ui/table/builder.rb +59 -59
- data/lib/phlex_ui/table/caption.rb +11 -11
- data/lib/phlex_ui/table/cell.rb +11 -11
- data/lib/phlex_ui/table/footer.rb +11 -11
- data/lib/phlex_ui/table/head.rb +11 -11
- data/lib/phlex_ui/table/header.rb +11 -11
- data/lib/phlex_ui/table/row.rb +11 -11
- data/lib/phlex_ui/table.rb +13 -13
- data/lib/phlex_ui/tabs/content.rb +18 -18
- data/lib/phlex_ui/tabs/list.rb +11 -11
- data/lib/phlex_ui/tabs/trigger.rb +20 -20
- data/lib/phlex_ui/tabs.rb +17 -17
- data/lib/phlex_ui/theme_toggle.rb +31 -31
- data/lib/phlex_ui/tooltip/content.rb +16 -16
- data/lib/phlex_ui/tooltip/trigger.rb +12 -11
- data/lib/phlex_ui/tooltip.rb +18 -18
- data/lib/phlex_ui/typography/blockquote.rb +11 -11
- data/lib/phlex_ui/typography/h1.rb +10 -10
- data/lib/phlex_ui/typography/h2.rb +10 -10
- data/lib/phlex_ui/typography/h3.rb +11 -11
- data/lib/phlex_ui/typography/h4.rb +11 -11
- data/lib/phlex_ui/typography/inline_code.rb +11 -11
- data/lib/phlex_ui/typography/inline_link.rb +22 -0
- data/lib/phlex_ui/typography/large.rb +11 -11
- data/lib/phlex_ui/typography/lead.rb +11 -11
- data/lib/phlex_ui/typography/list.rb +36 -36
- data/lib/phlex_ui/typography/list_item.rb +11 -11
- data/lib/phlex_ui/typography/muted.rb +11 -11
- data/lib/phlex_ui/typography/p.rb +11 -11
- data/lib/phlex_ui/typography/small.rb +11 -11
- data/lib/phlex_ui.rb +9 -4
- metadata +88 -7
data/lib/phlex_ui/form/item.rb
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module PhlexUI
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
class Form::Item < Base
|
|
5
|
+
def template(&block)
|
|
6
|
+
div(**attrs, &block)
|
|
7
|
+
end
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
private
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
end
|
|
11
|
+
def default_attrs
|
|
12
|
+
{
|
|
13
|
+
class: "space-y-2"
|
|
14
|
+
}
|
|
16
15
|
end
|
|
17
|
-
end
|
|
16
|
+
end
|
|
17
|
+
end
|
data/lib/phlex_ui/form/spacer.rb
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module PhlexUI
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
class Form::Spacer < Base
|
|
5
|
+
def template(&block)
|
|
6
|
+
div(**attrs, &block)
|
|
7
|
+
end
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
private
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
end
|
|
11
|
+
def default_attrs
|
|
12
|
+
{
|
|
13
|
+
class: "space-y-4"
|
|
14
|
+
}
|
|
16
15
|
end
|
|
17
|
-
end
|
|
16
|
+
end
|
|
17
|
+
end
|
data/lib/phlex_ui/form.rb
CHANGED
|
@@ -1,34 +1,15 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module PhlexUI
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
def input(name, label: nil, hint: false, error: nil, **input_attrs)
|
|
10
|
-
name = name.to_s
|
|
11
|
-
label ||= convert_name_to_label(name)
|
|
12
|
-
|
|
13
|
-
render PhlexUI::Form::Item.new do
|
|
14
|
-
render PhlexUI::Label.new(for: name) { label } if label
|
|
15
|
-
render PhlexUI::Input.new(name: name, id: name, **input_attrs)
|
|
16
|
-
render PhlexUI::Hint.new { hint } if hint
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
def button(**button_attrs, &)
|
|
21
|
-
render PhlexUI::Button.new(**button_attrs, &)
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
private
|
|
4
|
+
class Form < Base
|
|
5
|
+
def template(&block)
|
|
6
|
+
form(**attrs, &block)
|
|
7
|
+
end
|
|
25
8
|
|
|
26
|
-
|
|
27
|
-
name.to_s.split("_").map(&:capitalize).join(" ")
|
|
28
|
-
end
|
|
9
|
+
private
|
|
29
10
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
end
|
|
11
|
+
def default_attrs
|
|
12
|
+
{}
|
|
33
13
|
end
|
|
34
|
-
end
|
|
14
|
+
end
|
|
15
|
+
end
|
data/lib/phlex_ui/hint.rb
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module PhlexUI
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
class Hint < Base
|
|
5
|
+
def template(&block)
|
|
6
|
+
p(**attrs, &block)
|
|
7
|
+
end
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
private
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
end
|
|
11
|
+
def default_attrs
|
|
12
|
+
{
|
|
13
|
+
class: "text-[0.8rem] text-muted-foreground"
|
|
14
|
+
}
|
|
16
15
|
end
|
|
17
|
-
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module PhlexUI
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
4
|
+
class HoverCard::Content < Base
|
|
5
|
+
def template(&block)
|
|
6
|
+
template_tag(data: {popover_target: "content"}) do
|
|
7
|
+
div(**attrs, &block)
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
private
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
end
|
|
13
|
+
def default_attrs
|
|
14
|
+
{
|
|
15
|
+
data: {
|
|
16
|
+
state: :open
|
|
17
|
+
},
|
|
18
|
+
class: "z-50 rounded-md border bg-background p-4 text-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2"
|
|
19
|
+
}
|
|
21
20
|
end
|
|
22
|
-
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -1,19 +1,20 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module PhlexUI
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
class HoverCard::Trigger < Base
|
|
5
|
+
def template(&block)
|
|
6
|
+
div(**attrs, &block)
|
|
7
|
+
end
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
private
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
11
|
+
def default_attrs
|
|
12
|
+
{
|
|
13
|
+
data: {
|
|
14
|
+
popover_target: "trigger"
|
|
15
|
+
},
|
|
16
|
+
class: "inline-block"
|
|
17
|
+
}
|
|
18
18
|
end
|
|
19
|
-
end
|
|
19
|
+
end
|
|
20
|
+
end
|
data/lib/phlex_ui/hover_card.rb
CHANGED
|
@@ -1,27 +1,27 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module PhlexUI
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
4
|
+
class HoverCard < Base
|
|
5
|
+
def initialize(option: {}, **attrs)
|
|
6
|
+
@options = option
|
|
7
|
+
@options[:delay] ||= [500, 250]
|
|
8
|
+
@options[:trigger] ||= "mouseenter focus click"
|
|
9
|
+
super(**attrs)
|
|
10
|
+
end
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
def template(&block)
|
|
13
|
+
div(**attrs, &block)
|
|
14
|
+
end
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
private
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
end
|
|
18
|
+
def default_attrs
|
|
19
|
+
{
|
|
20
|
+
data: {
|
|
21
|
+
controller: "popover",
|
|
22
|
+
popover_options_value: @options.to_json
|
|
23
|
+
}
|
|
24
|
+
}
|
|
26
25
|
end
|
|
27
|
-
end
|
|
26
|
+
end
|
|
27
|
+
end
|
data/lib/phlex_ui/input.rb
CHANGED
|
@@ -1,29 +1,29 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module PhlexUI
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
4
|
+
class Input < Base
|
|
5
|
+
def initialize(type: :string, error: nil, **attrs)
|
|
6
|
+
@type = type.to_sym
|
|
7
|
+
@error = error
|
|
8
|
+
super(**attrs)
|
|
9
|
+
end
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
11
|
+
def template
|
|
12
|
+
input(type: @type, **attrs)
|
|
13
|
+
render PhlexUI::InputError.new { @error } if @error
|
|
14
|
+
end
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
private
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
end
|
|
18
|
+
def default_attrs
|
|
19
|
+
{
|
|
20
|
+
class: tokens(
|
|
21
|
+
"flex h-9 w-full rounded-md border bg-background px-3 py-1 text-sm shadow-sm transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium focus-visible:outline-none focus-visible:ring-1 disabled:cursor-not-allowed disabled:opacity-50",
|
|
22
|
+
-> { @error.nil? } => "border-border focus-visible:ring-ring placeholder:text-muted-foreground",
|
|
23
|
+
-> { @error.present? } => "placeholder:text-destructive/60 text-destructive dark:text-destructive border-destructive focus-visible:ring-destructive",
|
|
24
|
+
-> { @type == :file } => "pt-1.5 dark:file:text-white"
|
|
25
|
+
)
|
|
26
|
+
}
|
|
28
27
|
end
|
|
29
|
-
end
|
|
28
|
+
end
|
|
29
|
+
end
|
data/lib/phlex_ui/input_error.rb
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module PhlexUI
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
class InputError < Base
|
|
5
|
+
def template(&block)
|
|
6
|
+
p(**attrs, &block)
|
|
7
|
+
end
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
private
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
end
|
|
11
|
+
def default_attrs
|
|
12
|
+
{
|
|
13
|
+
class: "mt-2 text-sm text-destructive"
|
|
14
|
+
}
|
|
16
15
|
end
|
|
17
|
-
end
|
|
16
|
+
end
|
|
17
|
+
end
|
data/lib/phlex_ui/label.rb
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module PhlexUI
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
class Label < Base
|
|
5
|
+
def template(&block)
|
|
6
|
+
label(**attrs, &block)
|
|
7
|
+
end
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
private
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
end
|
|
11
|
+
def default_attrs
|
|
12
|
+
{
|
|
13
|
+
class: "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
|
|
14
|
+
}
|
|
16
15
|
end
|
|
17
|
-
end
|
|
16
|
+
end
|
|
17
|
+
end
|
data/lib/phlex_ui/link.rb
CHANGED
|
@@ -1,97 +1,97 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module PhlexUI
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
4
|
+
class Link < Base
|
|
5
|
+
def initialize(href: "#", variant: :link, size: :md, icon: false, **attrs)
|
|
6
|
+
@href = href
|
|
7
|
+
@variant = variant.to_sym
|
|
8
|
+
@size = size.to_sym
|
|
9
|
+
@icon = icon
|
|
10
|
+
super(**attrs)
|
|
11
|
+
end
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
def template(&block)
|
|
14
|
+
a(href: @href, **attrs, &block)
|
|
15
|
+
end
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
private
|
|
18
18
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
end
|
|
27
|
-
else
|
|
28
|
-
case @size
|
|
29
|
-
when :sm then "px-3 py-1.5 h-8 text-xs"
|
|
30
|
-
when :md then "px-4 py-2 h-9 text-sm"
|
|
31
|
-
when :lg then "px-4 py-2 h-10 text-base"
|
|
32
|
-
when :xl then "px-6 py-3 h-12 text-base"
|
|
33
|
-
end
|
|
34
|
-
end
|
|
19
|
+
def size_classes
|
|
20
|
+
if @icon
|
|
21
|
+
case @size
|
|
22
|
+
when :sm then "h-6 w-6"
|
|
23
|
+
when :md then "h-9 w-9"
|
|
24
|
+
when :lg then "h-10 w-10"
|
|
25
|
+
when :xl then "h-12 w-12"
|
|
35
26
|
end
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
27
|
+
else
|
|
28
|
+
case @size
|
|
29
|
+
when :sm then "px-3 py-1.5 h-8 text-xs"
|
|
30
|
+
when :md then "px-4 py-2 h-9 text-sm"
|
|
31
|
+
when :lg then "px-4 py-2 h-10 text-base"
|
|
32
|
+
when :xl then "px-6 py-3 h-12 text-base"
|
|
42
33
|
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
43
36
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
37
|
+
def primary_classes
|
|
38
|
+
tokens(
|
|
39
|
+
"whitespace-nowrap inline-flex items-center justify-center rounded-md font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 bg-primary text-primary-foreground shadow hover:bg-primary/90",
|
|
40
|
+
size_classes
|
|
41
|
+
)
|
|
42
|
+
end
|
|
50
43
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
44
|
+
def link_classes
|
|
45
|
+
tokens(
|
|
46
|
+
"whitespace-nowrap inline-flex items-center justify-center rounded-md font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 text-primary underline-offset-4 hover:underline",
|
|
47
|
+
size_classes
|
|
48
|
+
)
|
|
49
|
+
end
|
|
57
50
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
51
|
+
def secondary_classes
|
|
52
|
+
tokens(
|
|
53
|
+
"whitespace-nowrap inline-flex items-center justify-center rounded-md font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 bg-secondary text-secondary-foreground hover:bg-opacity-80",
|
|
54
|
+
size_classes
|
|
55
|
+
)
|
|
56
|
+
end
|
|
64
57
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
58
|
+
def destructive_classes
|
|
59
|
+
tokens(
|
|
60
|
+
"whitespace-nowrap inline-flex items-center justify-center rounded-md font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90",
|
|
61
|
+
size_classes
|
|
62
|
+
)
|
|
63
|
+
end
|
|
71
64
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
65
|
+
def outline_classes
|
|
66
|
+
tokens(
|
|
67
|
+
"whitespace-nowrap inline-flex items-center justify-center rounded-md font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground",
|
|
68
|
+
size_classes
|
|
69
|
+
)
|
|
70
|
+
end
|
|
78
71
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
when :outline then outline_classes
|
|
86
|
-
when :ghost then ghost_classes
|
|
87
|
-
end
|
|
88
|
-
end
|
|
72
|
+
def ghost_classes
|
|
73
|
+
tokens(
|
|
74
|
+
"whitespace-nowrap inline-flex items-center justify-center rounded-md font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 hover:bg-accent hover:text-accent-foreground",
|
|
75
|
+
size_classes
|
|
76
|
+
)
|
|
77
|
+
end
|
|
89
78
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
79
|
+
def default_classes
|
|
80
|
+
case @variant
|
|
81
|
+
when :primary then primary_classes
|
|
82
|
+
when :link then link_classes
|
|
83
|
+
when :secondary then secondary_classes
|
|
84
|
+
when :destructive then destructive_classes
|
|
85
|
+
when :outline then outline_classes
|
|
86
|
+
when :ghost then ghost_classes
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def default_attrs
|
|
91
|
+
{
|
|
92
|
+
type: "button",
|
|
93
|
+
class: default_classes
|
|
94
|
+
}
|
|
96
95
|
end
|
|
97
|
-
end
|
|
96
|
+
end
|
|
97
|
+
end
|
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module PhlexUI
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
4
|
+
class Popover::Content < Base
|
|
5
|
+
def template(&block)
|
|
6
|
+
template_tag(data: {popover_target: "content"}) do
|
|
7
|
+
div(**attrs, &block)
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
private
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
end
|
|
13
|
+
def default_attrs
|
|
14
|
+
{
|
|
15
|
+
data: {
|
|
16
|
+
state: :open
|
|
17
|
+
},
|
|
18
|
+
class: "z-50 rounded-md border bg-background p-2 text-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2"
|
|
19
|
+
}
|
|
21
20
|
end
|
|
22
|
-
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -1,19 +1,20 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module PhlexUI
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
class Popover::Trigger < Base
|
|
5
|
+
def template(&block)
|
|
6
|
+
div(**attrs, &block)
|
|
7
|
+
end
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
private
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
11
|
+
def default_attrs
|
|
12
|
+
{
|
|
13
|
+
data: {
|
|
14
|
+
popover_target: "trigger"
|
|
15
|
+
},
|
|
16
|
+
class: "inline-block"
|
|
17
|
+
}
|
|
18
18
|
end
|
|
19
|
-
end
|
|
19
|
+
end
|
|
20
|
+
end
|