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
|
@@ -1,77 +1,77 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module PhlexUI
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
class Table::Builder < Base
|
|
5
|
+
include Phlex::DeferredRender
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
Column = Struct.new(:header, :header_attrs, :footer, :footer_attrs, :block, keyword_init: true)
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
9
|
+
def initialize(records = [], caption: nil, **attrs)
|
|
10
|
+
@records = records
|
|
11
|
+
@columns = []
|
|
12
|
+
@caption = caption
|
|
13
|
+
super(**attrs)
|
|
14
|
+
end
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
16
|
+
def template(&block)
|
|
17
|
+
render PhlexUI::Table.new(**attrs) do
|
|
18
|
+
header
|
|
19
|
+
body
|
|
20
|
+
caption if @caption
|
|
21
|
+
footer if @columns.any?(&:footer)
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
24
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
25
|
+
def column(header, footer = nil, header_attrs: {}, footer_attrs: {}, &block)
|
|
26
|
+
@columns << Column.new(
|
|
27
|
+
header: header,
|
|
28
|
+
header_attrs: header_attrs,
|
|
29
|
+
footer: footer,
|
|
30
|
+
footer_attrs: footer_attrs,
|
|
31
|
+
block: block
|
|
32
|
+
)
|
|
33
|
+
end
|
|
34
34
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
end
|
|
42
|
-
end
|
|
43
|
-
end
|
|
35
|
+
def header
|
|
36
|
+
render PhlexUI::Table::Header.new do
|
|
37
|
+
render PhlexUI::Table::Row.new do
|
|
38
|
+
@columns.each do |column|
|
|
39
|
+
render PhlexUI::Table::Head.new(**column.header_attrs) do
|
|
40
|
+
column.header
|
|
44
41
|
end
|
|
42
|
+
end
|
|
45
43
|
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
46
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
end
|
|
47
|
+
def body
|
|
48
|
+
render PhlexUI::Table::Body.new do
|
|
49
|
+
@records.each do |record|
|
|
50
|
+
render PhlexUI::Table::Row.new do
|
|
51
|
+
@columns.each do |column|
|
|
52
|
+
render PhlexUI::Table::Cell.new do
|
|
53
|
+
column.block.call(record)
|
|
54
|
+
end
|
|
58
55
|
end
|
|
56
|
+
end
|
|
59
57
|
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
60
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
end
|
|
68
|
-
end
|
|
69
|
-
end
|
|
61
|
+
def footer
|
|
62
|
+
render PhlexUI::Table::Footer.new do
|
|
63
|
+
render PhlexUI::Table::Row.new do
|
|
64
|
+
@columns.each do |column|
|
|
65
|
+
render PhlexUI::Table::Head.new(**column.footer_attrs) do
|
|
66
|
+
column.footer
|
|
70
67
|
end
|
|
68
|
+
end
|
|
71
69
|
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
72
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
end
|
|
73
|
+
def caption
|
|
74
|
+
render PhlexUI::Table::Caption.new { @caption }
|
|
76
75
|
end
|
|
77
|
-
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module PhlexUI
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
class Table::Caption < Base
|
|
5
|
+
def template(&block)
|
|
6
|
+
caption(**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-4 text-sm text-muted-foreground"
|
|
14
|
+
}
|
|
16
15
|
end
|
|
17
|
-
end
|
|
16
|
+
end
|
|
17
|
+
end
|
data/lib/phlex_ui/table/cell.rb
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module PhlexUI
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
class Table::Cell < Base
|
|
5
|
+
def template(&block)
|
|
6
|
+
td(**attrs, &block)
|
|
7
|
+
end
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
private
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
end
|
|
11
|
+
def default_attrs
|
|
12
|
+
{
|
|
13
|
+
class: "p-2 align-middle [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]"
|
|
14
|
+
}
|
|
16
15
|
end
|
|
17
|
-
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module PhlexUI
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
class Table::Footer < Base
|
|
5
|
+
def template(&block)
|
|
6
|
+
tfoot(**attrs, &block)
|
|
7
|
+
end
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
private
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
end
|
|
11
|
+
def default_attrs
|
|
12
|
+
{
|
|
13
|
+
class: "border-t bg-muted bg-opacity-50 font-medium[& amp;>tr]:last:border-b-0"
|
|
14
|
+
}
|
|
16
15
|
end
|
|
17
|
-
end
|
|
16
|
+
end
|
|
17
|
+
end
|
data/lib/phlex_ui/table/head.rb
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module PhlexUI
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
class Table::Head < Base
|
|
5
|
+
def template(&block)
|
|
6
|
+
th(**attrs, &block)
|
|
7
|
+
end
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
private
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
end
|
|
11
|
+
def default_attrs
|
|
12
|
+
{
|
|
13
|
+
class: "h-10 px-2 text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]"
|
|
14
|
+
}
|
|
16
15
|
end
|
|
17
|
-
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module PhlexUI
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
class Table::Header < Base
|
|
5
|
+
def template(&block)
|
|
6
|
+
thead(**attrs, &block)
|
|
7
|
+
end
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
private
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
end
|
|
11
|
+
def default_attrs
|
|
12
|
+
{
|
|
13
|
+
class: "[&_tr]:border-b"
|
|
14
|
+
}
|
|
16
15
|
end
|
|
17
|
-
end
|
|
16
|
+
end
|
|
17
|
+
end
|
data/lib/phlex_ui/table/row.rb
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module PhlexUI
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
class Table::Row < Base
|
|
5
|
+
def template(&block)
|
|
6
|
+
tr(**attrs, &block)
|
|
7
|
+
end
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
private
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
end
|
|
11
|
+
def default_attrs
|
|
12
|
+
{
|
|
13
|
+
class: "border-b transition-colors hover:bg-muted hover:bg-opacity-50 data-[state=selected]:bg-muted"
|
|
14
|
+
}
|
|
16
15
|
end
|
|
17
|
-
end
|
|
16
|
+
end
|
|
17
|
+
end
|
data/lib/phlex_ui/table.rb
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module PhlexUI
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
4
|
+
class Table < Base
|
|
5
|
+
def template(&block)
|
|
6
|
+
div(class: "relative w-full overflow-auto") do
|
|
7
|
+
table(**attrs, &block)
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
private
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
end
|
|
13
|
+
def default_attrs
|
|
14
|
+
{
|
|
15
|
+
class: "w-full caption-bottom text-sm"
|
|
16
|
+
}
|
|
18
17
|
end
|
|
19
|
-
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module PhlexUI
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
class Tabs::Content < Base
|
|
5
|
+
def initialize(value:, **attrs)
|
|
6
|
+
@value = value
|
|
7
|
+
super(**attrs)
|
|
8
|
+
end
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
def template(&block)
|
|
11
|
+
div(**attrs, &block)
|
|
12
|
+
end
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
private
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
end
|
|
16
|
+
def default_attrs
|
|
17
|
+
{
|
|
18
|
+
data: {
|
|
19
|
+
tabs_target: :content,
|
|
20
|
+
value: @value
|
|
21
|
+
},
|
|
22
|
+
class: "mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 hidden"
|
|
23
|
+
}
|
|
25
24
|
end
|
|
25
|
+
end
|
|
26
26
|
end
|
data/lib/phlex_ui/tabs/list.rb
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module PhlexUI
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
class Tabs::List < 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: "inline-flex h-9 items-center justify-center rounded-lg bg-muted p-1 text-muted-foreground"
|
|
14
|
+
}
|
|
16
15
|
end
|
|
17
|
-
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -1,28 +1,28 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module PhlexUI
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
class Tabs::Trigger < Base
|
|
5
|
+
def initialize(value:, **attrs)
|
|
6
|
+
@value = value
|
|
7
|
+
super(**attrs)
|
|
8
|
+
end
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
def template(&block)
|
|
11
|
+
button(**attrs, &block)
|
|
12
|
+
end
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
private
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
end
|
|
16
|
+
def default_attrs
|
|
17
|
+
{
|
|
18
|
+
type: :button,
|
|
19
|
+
data: {
|
|
20
|
+
tabs_target: :trigger,
|
|
21
|
+
action: "click->tabs#show",
|
|
22
|
+
value: @value
|
|
23
|
+
},
|
|
24
|
+
class: "inline-flex items-center justify-center whitespace-nowrap rounded-md px-3 py-1 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow"
|
|
25
|
+
}
|
|
27
26
|
end
|
|
27
|
+
end
|
|
28
28
|
end
|
data/lib/phlex_ui/tabs.rb
CHANGED
|
@@ -1,25 +1,25 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module PhlexUI
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
class Tabs < Base
|
|
5
|
+
def initialize(default: nil, **attrs)
|
|
6
|
+
@default = default
|
|
7
|
+
super(**attrs)
|
|
8
|
+
end
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
def template(&block)
|
|
11
|
+
div(**attrs, &block)
|
|
12
|
+
end
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
private
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
end
|
|
16
|
+
def default_attrs
|
|
17
|
+
{
|
|
18
|
+
data: {
|
|
19
|
+
controller: "tabs",
|
|
20
|
+
tabs_active_value: @default
|
|
21
|
+
}
|
|
22
|
+
}
|
|
24
23
|
end
|
|
24
|
+
end
|
|
25
25
|
end
|
|
@@ -1,41 +1,41 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module PhlexUI
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
class ThemeToggle < Base
|
|
5
|
+
def template(&block)
|
|
6
|
+
div(**attrs, &block)
|
|
7
|
+
end
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
def light_mode(**user_attrs, &block)
|
|
10
|
+
light_attrs = PhlexUI::AttributeMerger.new(default_light_attrs, user_attrs).call
|
|
11
|
+
div(**light_attrs, &block)
|
|
12
|
+
end
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
14
|
+
def dark_mode(**user_attrs, &block)
|
|
15
|
+
dark_attrs = PhlexUI::AttributeMerger.new(default_dark_attrs, user_attrs).call
|
|
16
|
+
div(**dark_attrs, &block)
|
|
17
|
+
end
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
private
|
|
20
20
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
21
|
+
def default_attrs
|
|
22
|
+
{
|
|
23
|
+
data: {controller: "toggle-theme"}
|
|
24
|
+
}
|
|
25
|
+
end
|
|
26
26
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
27
|
+
def default_light_attrs
|
|
28
|
+
{
|
|
29
|
+
class: "dark:hidden",
|
|
30
|
+
data: {action: "click->toggle-theme#setDarkTheme"}
|
|
31
|
+
}
|
|
32
|
+
end
|
|
33
33
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
end
|
|
34
|
+
def default_dark_attrs
|
|
35
|
+
{
|
|
36
|
+
class: "hidden dark:inline-block",
|
|
37
|
+
data: {action: "click->toggle-theme#setLightTheme"}
|
|
38
|
+
}
|
|
40
39
|
end
|
|
41
|
-
end
|
|
40
|
+
end
|
|
41
|
+
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 Tooltip::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 # used for animate-in and animate-out on tooltip
|
|
17
|
+
},
|
|
18
|
+
class: "z-50 rounded-md text-sm border bg-background px-2 py-0.5 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,17 +1,18 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module PhlexUI
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
class Tooltip::Trigger < Base
|
|
5
|
+
def template(&block)
|
|
6
|
+
div(**attrs, &block)
|
|
7
|
+
end
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
private
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
11
|
+
def default_attrs
|
|
12
|
+
{
|
|
13
|
+
data: {popover_target: "trigger"},
|
|
14
|
+
class: "inline-block"
|
|
15
|
+
}
|
|
16
16
|
end
|
|
17
|
-
end
|
|
17
|
+
end
|
|
18
|
+
end
|