phlex_ui 0.0.4 → 0.0.5
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/alert/description.rb +17 -0
- data/lib/phlex_ui/alert/title.rb +17 -0
- data/lib/phlex_ui/alert.rb +36 -0
- data/lib/phlex_ui/alert_dialog/action.rb +17 -0
- data/lib/phlex_ui/alert_dialog/cancel.rb +21 -0
- data/lib/phlex_ui/alert_dialog/content.rb +45 -0
- data/lib/phlex_ui/alert_dialog/description.rb +17 -0
- data/lib/phlex_ui/alert_dialog/footer.rb +17 -0
- data/lib/phlex_ui/alert_dialog/header.rb +17 -0
- data/lib/phlex_ui/alert_dialog/title.rb +17 -0
- data/lib/phlex_ui/alert_dialog/trigger.rb +18 -0
- data/lib/phlex_ui/alert_dialog.rb +26 -0
- data/lib/phlex_ui/aspect_ratio.rb +33 -0
- data/lib/phlex_ui/avatar/fallback.rb +17 -0
- data/lib/phlex_ui/avatar/image.rb +26 -0
- data/lib/phlex_ui/avatar.rb +49 -0
- data/lib/phlex_ui/badge.rb +46 -62
- data/lib/phlex_ui/button.rb +86 -63
- data/lib/phlex_ui/card/content.rb +17 -0
- data/lib/phlex_ui/card/description.rb +17 -0
- data/lib/phlex_ui/card/footer.rb +17 -0
- data/lib/phlex_ui/card/header.rb +17 -0
- data/lib/phlex_ui/card/title.rb +17 -0
- data/lib/phlex_ui/card.rb +17 -0
- data/lib/phlex_ui/checkbox.rb +18 -0
- data/lib/phlex_ui/clipboard/popover.rb +36 -0
- data/lib/phlex_ui/clipboard/source.rb +19 -0
- data/lib/phlex_ui/clipboard/trigger.rb +20 -0
- data/lib/phlex_ui/clipboard.rb +39 -0
- data/lib/phlex_ui/codeblock.rb +105 -0
- data/lib/phlex_ui/collapsible/content.rb +18 -0
- data/lib/phlex_ui/collapsible/trigger.rb +19 -0
- data/lib/phlex_ui/collapsible.rb +25 -0
- data/lib/phlex_ui/context_menu/content.rb +25 -0
- data/lib/phlex_ui/context_menu/item.rb +66 -0
- data/lib/phlex_ui/context_menu/label.rb +24 -0
- data/lib/phlex_ui/context_menu/separator.rb +19 -0
- data/lib/phlex_ui/context_menu/trigger.rb +20 -0
- data/lib/phlex_ui/context_menu.rb +26 -0
- data/lib/phlex_ui/dialog/content.rb +78 -0
- data/lib/phlex_ui/dialog/description.rb +17 -0
- data/lib/phlex_ui/dialog/footer.rb +17 -0
- data/lib/phlex_ui/dialog/header.rb +17 -0
- data/lib/phlex_ui/dialog/middle.rb +17 -0
- data/lib/phlex_ui/dialog/title.rb +17 -0
- data/lib/phlex_ui/dialog/trigger.rb +19 -0
- data/lib/phlex_ui/dialog.rb +25 -0
- data/lib/phlex_ui/dropdown_menu/content.rb +22 -0
- data/lib/phlex_ui/dropdown_menu/item.rb +28 -0
- data/lib/phlex_ui/dropdown_menu/label.rb +17 -0
- data/lib/phlex_ui/dropdown_menu/separator.rb +19 -0
- data/lib/phlex_ui/dropdown_menu/trigger.rb +17 -0
- data/lib/phlex_ui/dropdown_menu.rb +26 -0
- data/lib/phlex_ui/form/item.rb +17 -0
- data/lib/phlex_ui/form/spacer.rb +17 -0
- data/lib/phlex_ui/form.rb +34 -0
- data/lib/phlex_ui/hint.rb +17 -0
- data/lib/phlex_ui/hover_card/content.rb +22 -0
- data/lib/phlex_ui/hover_card/trigger.rb +19 -0
- data/lib/phlex_ui/hover_card.rb +27 -0
- data/lib/phlex_ui/input.rb +29 -0
- data/lib/phlex_ui/input_error.rb +17 -0
- data/lib/phlex_ui/label.rb +17 -0
- data/lib/phlex_ui/link.rb +97 -0
- data/lib/phlex_ui/popover/content.rb +22 -0
- data/lib/phlex_ui/popover/trigger.rb +19 -0
- data/lib/phlex_ui/popover.rb +25 -0
- data/lib/phlex_ui/shortcut_key.rb +17 -0
- data/lib/phlex_ui/table/body.rb +17 -0
- data/lib/phlex_ui/table/builder.rb +77 -0
- data/lib/phlex_ui/table/caption.rb +17 -0
- data/lib/phlex_ui/table/cell.rb +17 -0
- data/lib/phlex_ui/table/footer.rb +17 -0
- data/lib/phlex_ui/table/head.rb +17 -0
- data/lib/phlex_ui/table/header.rb +17 -0
- data/lib/phlex_ui/table/row.rb +17 -0
- data/lib/phlex_ui/table.rb +19 -0
- data/lib/phlex_ui/tabs/content.rb +26 -0
- data/lib/phlex_ui/tabs/list.rb +17 -0
- data/lib/phlex_ui/tabs/trigger.rb +28 -0
- data/lib/phlex_ui/tabs.rb +25 -0
- data/lib/phlex_ui/theme_toggle.rb +41 -0
- data/lib/phlex_ui/tooltip/content.rb +22 -0
- data/lib/phlex_ui/tooltip/trigger.rb +17 -0
- data/lib/phlex_ui/tooltip.rb +25 -0
- data/lib/phlex_ui/typography/blockquote.rb +17 -0
- data/lib/phlex_ui/typography/h1.rb +17 -0
- data/lib/phlex_ui/typography/h2.rb +17 -0
- data/lib/phlex_ui/typography/h3.rb +17 -0
- data/lib/phlex_ui/typography/h4.rb +17 -0
- data/lib/phlex_ui/typography/inline_code.rb +17 -0
- data/lib/phlex_ui/typography/large.rb +17 -0
- data/lib/phlex_ui/typography/lead.rb +17 -0
- data/lib/phlex_ui/typography/list.rb +47 -0
- data/lib/phlex_ui/typography/list_item.rb +17 -0
- data/lib/phlex_ui/typography/muted.rb +17 -0
- data/lib/phlex_ui/typography/p.rb +17 -0
- data/lib/phlex_ui/typography/small.rb +17 -0
- metadata +112 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 997466eeaf90ee785e93f2bbb17ddf3014db28e538cfd2b5bb1177800b7eff41
|
|
4
|
+
data.tar.gz: a876736cf42046f4eda6e974ca8d48a2ffceb29dc49679bf2a857815a2d14c4e
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: ca6af73e57c9c22983f4eab367a894bbcdba53e8b16b707ec14accf80f1faa81994f45f2ea34ffb1867cc800875bce96c7d716043f418b1aa88aa1adfcc3049d
|
|
7
|
+
data.tar.gz: 6fb432282362714d0a1b048e476dc15d7ad38f60ef26c311eaeefe35fcca31b9b34b72224f61147b991fd832c148f1380fa556eb878abe5ecf27dd3a50c8ea46
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module PhlexUI
|
|
4
|
+
class Alert < Base
|
|
5
|
+
def initialize(variant: nil, **attrs)
|
|
6
|
+
@variant = variant
|
|
7
|
+
super(**attrs) # must be called after variant is set
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def template(&)
|
|
11
|
+
div(**attrs, &)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
private
|
|
15
|
+
|
|
16
|
+
def colors
|
|
17
|
+
case @variant
|
|
18
|
+
when nil
|
|
19
|
+
'ring-border bg-muted-background text-text [&>svg]:opacity-80'
|
|
20
|
+
when :warning
|
|
21
|
+
'ring-warning/20 bg-warning/10 text-warning [&>svg]:text-warning/80'
|
|
22
|
+
when :success
|
|
23
|
+
'ring-success/20 bg-success/10 text-success [&>svg]:text-success/80'
|
|
24
|
+
when :destructive
|
|
25
|
+
'ring-destructive/10 dark:ring-destructive/20 text-destructive bg-destructive/10 [&>svg]:text-destructive/80'
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def default_attrs
|
|
30
|
+
base_classes = 'relative w-full ring-1 ring-inset rounded-lg px-4 py-4 text-sm [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg~*]:pl-8'
|
|
31
|
+
{
|
|
32
|
+
class: tokens(base_classes, colors),
|
|
33
|
+
}
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module PhlexUI
|
|
4
|
+
class AlertDialog::Cancel < Base
|
|
5
|
+
def template(&)
|
|
6
|
+
render PhlexUI::Button.new(**attrs, &)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
private
|
|
10
|
+
|
|
11
|
+
def default_attrs
|
|
12
|
+
{
|
|
13
|
+
variant: :outline,
|
|
14
|
+
data: {
|
|
15
|
+
action: 'click->dismissable#dismiss'
|
|
16
|
+
},
|
|
17
|
+
class: 'mt-2 sm:mt-0'
|
|
18
|
+
}
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module PhlexUI
|
|
4
|
+
class AlertDialog::Content < Base
|
|
5
|
+
def template(&)
|
|
6
|
+
template_tag(**attrs) do
|
|
7
|
+
div(data: { controller: 'dismissable' }) do
|
|
8
|
+
background
|
|
9
|
+
container(&)
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def background
|
|
15
|
+
div(
|
|
16
|
+
data_state: "open",
|
|
17
|
+
class:
|
|
18
|
+
"fixed inset-0 z-50 bg-background/80 backdrop-blur-sm data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
|
|
19
|
+
style: "pointer-events:auto",
|
|
20
|
+
data_aria_hidden: "true",
|
|
21
|
+
aria_hidden: "true"
|
|
22
|
+
)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def container(&)
|
|
26
|
+
div(
|
|
27
|
+
role: "alertdialog",
|
|
28
|
+
data_state: "open",
|
|
29
|
+
class: "fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 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-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg md:w-full",
|
|
30
|
+
style: "pointer-events:auto",
|
|
31
|
+
&
|
|
32
|
+
)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
private
|
|
36
|
+
|
|
37
|
+
def default_attrs
|
|
38
|
+
{
|
|
39
|
+
data: {
|
|
40
|
+
alert_dialog_target: "content"
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module PhlexUI
|
|
4
|
+
class AlertDialog::Footer < Base
|
|
5
|
+
def template(&)
|
|
6
|
+
div(**attrs, &)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
private
|
|
10
|
+
|
|
11
|
+
def default_attrs
|
|
12
|
+
{
|
|
13
|
+
class: "flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2"
|
|
14
|
+
}
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module PhlexUI
|
|
4
|
+
class AlertDialog::Header < Base
|
|
5
|
+
def template(&)
|
|
6
|
+
div(**attrs, &)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
private
|
|
10
|
+
|
|
11
|
+
def default_attrs
|
|
12
|
+
{
|
|
13
|
+
class: "flex flex-col space-y-2 text-center sm:text-left"
|
|
14
|
+
}
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module PhlexUI
|
|
4
|
+
class AlertDialog::Trigger < Base
|
|
5
|
+
def template(&)
|
|
6
|
+
div(**attrs, &)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
private
|
|
10
|
+
|
|
11
|
+
def default_attrs
|
|
12
|
+
{
|
|
13
|
+
data: { action: "click->alert-dialog#open" },
|
|
14
|
+
class: 'inline-block'
|
|
15
|
+
}
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module PhlexUI
|
|
4
|
+
class AlertDialog < Base
|
|
5
|
+
def initialize(open: false, **attrs)
|
|
6
|
+
@open = open
|
|
7
|
+
super(**attrs)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def template(&)
|
|
11
|
+
div(**attrs, &)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
private
|
|
15
|
+
|
|
16
|
+
def default_attrs
|
|
17
|
+
{
|
|
18
|
+
data: {
|
|
19
|
+
controller: 'alert-dialog',
|
|
20
|
+
alert_dialog_open_value: @open
|
|
21
|
+
},
|
|
22
|
+
class: 'inline-block'
|
|
23
|
+
}
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module PhlexUI
|
|
4
|
+
class AspectRatio < Base
|
|
5
|
+
def initialize(aspect_ratio: "16/9", **attrs)
|
|
6
|
+
raise "aspect_ratio must be in the format of a string with a slash in the middle (eg. '16/9', '1/1')" unless aspect_ratio.is_a?(String) && aspect_ratio.include?("/")
|
|
7
|
+
|
|
8
|
+
@aspect_ratio = aspect_ratio
|
|
9
|
+
super(**attrs)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def template(&)
|
|
13
|
+
div(
|
|
14
|
+
class: "relative w-full",
|
|
15
|
+
style: "padding-bottom: #{padding_bottom}%;",
|
|
16
|
+
) do
|
|
17
|
+
div(**attrs, &)
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
private
|
|
22
|
+
|
|
23
|
+
def padding_bottom
|
|
24
|
+
@aspect_ratio.split("/").map(&:to_i).reverse.reduce(&:fdiv) * 100
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def default_attrs
|
|
28
|
+
{
|
|
29
|
+
class: "bg-muted-background absolute inset-0 [&>img]:object-cover [&>img]:absolute [&>img]:h-full [&>img]:w-full [&>img]:inset-0 [&>img]:text-transparent"
|
|
30
|
+
}
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module PhlexUI
|
|
4
|
+
class Avatar::Fallback < Base
|
|
5
|
+
def template(&)
|
|
6
|
+
span(**attrs, &)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
private
|
|
10
|
+
|
|
11
|
+
def default_attrs
|
|
12
|
+
{
|
|
13
|
+
class: "flex h-full w-full items-center justify-center rounded-full bg-muted-background"
|
|
14
|
+
}
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module PhlexUI
|
|
4
|
+
class Avatar::Image < Base
|
|
5
|
+
def initialize(src:, alt: '', **attrs)
|
|
6
|
+
@src = src
|
|
7
|
+
@alt = alt
|
|
8
|
+
super(**attrs)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def template
|
|
12
|
+
img(**attrs)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
private
|
|
16
|
+
|
|
17
|
+
def default_attrs
|
|
18
|
+
{
|
|
19
|
+
loading: "lazy",
|
|
20
|
+
class: "aspect-square h-full w-full",
|
|
21
|
+
alt: @alt,
|
|
22
|
+
src: @src
|
|
23
|
+
}
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module PhlexUI
|
|
4
|
+
class Avatar < Base
|
|
5
|
+
SIZES = {
|
|
6
|
+
xs: "h-4 w-4 text-[0.5rem]",
|
|
7
|
+
sm: "h-6 w-6 text-xs",
|
|
8
|
+
md: "h-10 w-10 text-base",
|
|
9
|
+
lg: "h-14 w-14 text-xl",
|
|
10
|
+
xl: "h-20 w-20 text-3xl"
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
def initialize(size: :md, src: nil, alt: nil, initials: nil, **attrs)
|
|
14
|
+
@size = size
|
|
15
|
+
@src = src
|
|
16
|
+
@alt = alt
|
|
17
|
+
@initials = initials
|
|
18
|
+
@size_classes = SIZES[@size]
|
|
19
|
+
super(**attrs)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def template(&block)
|
|
23
|
+
if block_given?
|
|
24
|
+
span(**attrs, &block)
|
|
25
|
+
else
|
|
26
|
+
span(**attrs) do
|
|
27
|
+
render_image if @src
|
|
28
|
+
render_initials
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
private
|
|
34
|
+
|
|
35
|
+
def render_image
|
|
36
|
+
render ::PhlexUI::Avatar::Image.new(src: @src, alt: @alt)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def render_initials
|
|
40
|
+
render ::PhlexUI::Avatar::Fallback.new { @initials }
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def default_attrs
|
|
44
|
+
{
|
|
45
|
+
class: tokens("relative flex shrink-0 overflow-hidden rounded-full", @size_classes)
|
|
46
|
+
}
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
data/lib/phlex_ui/badge.rb
CHANGED
|
@@ -2,75 +2,59 @@
|
|
|
2
2
|
|
|
3
3
|
module PhlexUI
|
|
4
4
|
class Badge < Base
|
|
5
|
-
|
|
5
|
+
SIZES = {
|
|
6
|
+
sm: "px-1.5 py-0.5 text-xs",
|
|
7
|
+
md: "px-2 py-1 text-xs",
|
|
8
|
+
lg: "px-3 py-1 text-sm"
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
COLORS = {
|
|
12
|
+
primary: "text-primary bg-primary-50 dark:bg-primary-400/20 ring-primary-600/20",
|
|
13
|
+
secondary: "text-text bg-muted-background ring-border",
|
|
14
|
+
outline: "text-text bg-background ring-border",
|
|
15
|
+
destructive: "text-destructive-600 bg-destructive-50 dark:bg-destructive-400/20 dark:text-destructive-400 ring-destructive-600/20",
|
|
16
|
+
success: "text-success-600 bg-success-50 dark:bg-success-400/20 dark:text-success-400 ring-success-600/20",
|
|
17
|
+
warning: "text-warning-600 bg-warning-50 dark:bg-warning-400/20 dark:text-warning-400 ring-warning-600/20",
|
|
18
|
+
slate: "text-slate-600 bg-slate-50 dark:bg-slate-400/20 dark:text-slate-400 ring-slate-600/20",
|
|
19
|
+
gray: "text-gray-600 bg-gray-50 dark:bg-gray-400/20 dark:text-gray-400 ring-gray-600/20",
|
|
20
|
+
zinc: "text-zinc-600 bg-zinc-50 dark:bg-zinc-400/20 dark:text-zinc-400 ring-zinc-600/20",
|
|
21
|
+
neutral: "text-neutral-600 bg-neutral-50 dark:bg-neutral-400/20 dark:text-neutral-400 ring-neutral-600/20",
|
|
22
|
+
stone: "text-stone-600 bg-stone-50 dark:bg-stone-400/20 dark:text-stone-400 ring-stone-600/20",
|
|
23
|
+
red: "text-red-600 bg-red-50 dark:bg-red-400/20 dark:text-red-400 ring-red-600/20",
|
|
24
|
+
orange: "text-orange-600 bg-orange-50 dark:bg-orange-400/20 dark:text-orange-400 ring-orange-600/20",
|
|
25
|
+
amber: "text-amber-600 bg-amber-50 dark:bg-amber-400/20 dark:text-amber-400 ring-amber-600/20",
|
|
26
|
+
yellow: "text-yellow-600 bg-yellow-50 dark:bg-yellow-400/20 dark:text-yellow-400 ring-yellow-600/20",
|
|
27
|
+
lime: "text-lime-600 bg-lime-50 dark:bg-lime-400/20 dark:text-lime-400 ring-lime-600/20",
|
|
28
|
+
green: "text-green-600 bg-green-50 dark:bg-green-400/20 dark:text-green-400 ring-green-600/20",
|
|
29
|
+
emerald: "text-emerald-600 bg-emerald-50 dark:bg-emerald-400/20 dark:text-emerald-400 ring-emerald-600/20",
|
|
30
|
+
teal: "text-teal-600 bg-teal-50 dark:bg-teal-400/20 dark:text-teal-400 ring-teal-600/20",
|
|
31
|
+
cyan: "text-cyan-600 bg-cyan-50 dark:bg-cyan-400/20 dark:text-cyan-400 ring-cyan-600/20",
|
|
32
|
+
sky: "text-sky-600 bg-sky-50 dark:bg-sky-400/20 dark:text-sky-400 ring-sky-600/20",
|
|
33
|
+
blue: "text-blue-600 bg-blue-50 dark:bg-blue-400/20 dark:text-blue-400 ring-blue-600/20",
|
|
34
|
+
indigo: "text-indigo-600 bg-indigo-50 dark:bg-indigo-400/20 dark:text-indigo-400 ring-indigo-600/20",
|
|
35
|
+
violet: "text-violet-600 bg-violet-50 dark:bg-violet-400/20 dark:text-violet-400 ring-violet-600/20",
|
|
36
|
+
purple: "text-purple-600 bg-purple-50 dark:bg-purple-400/20 dark:text-purple-400 ring-purple-600/20",
|
|
37
|
+
fuchsia: "text-fuchsia-600 bg-fuchsia-50 dark:bg-fuchsia-400/20 dark:text-fuchsia-400 ring-fuchsia-600/20",
|
|
38
|
+
pink: "text-pink-600 bg-pink-50 dark:bg-pink-400/20 dark:text-pink-400 ring-pink-600/20",
|
|
39
|
+
rose: "text-rose-600 bg-rose-50 dark:bg-rose-400/20 dark:text-rose-400 ring-rose-600/20"
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
def initialize(variant: :primary, size: :md, **args)
|
|
6
43
|
@variant = variant
|
|
7
44
|
@size = size
|
|
8
|
-
|
|
45
|
+
super(**args)
|
|
9
46
|
end
|
|
10
47
|
|
|
11
48
|
def template(&)
|
|
12
|
-
|
|
13
|
-
when :primary
|
|
14
|
-
div(class: tokens("inline-flex items-center rounded-md border font-medium transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80", size_classes, @kwargs[:class]), &)
|
|
15
|
-
when :secondary
|
|
16
|
-
div(class: tokens("inline-flex items-center rounded-md border font-medium transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80", size_classes, @kwargs[:class]), &)
|
|
17
|
-
when :outline
|
|
18
|
-
div(class: tokens("inline-flex items-center rounded-md border font-medium transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 text-foreground", size_classes, @kwargs[:class]), &)
|
|
19
|
-
when :destructive
|
|
20
|
-
div(class: tokens("inline-flex items-center rounded-md border font-medium transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 border-transparent bg-destructive text-destructive-foreground shadow hover:bg-destructive/80", size_classes, @kwargs[:class]), &)
|
|
21
|
-
when :slate
|
|
22
|
-
div(class: tokens("inline-flex items-center rounded-md bg-slate-100 font-medium text-slate-600 bg-slate-100/80 dark:bg-slate-400/10 dark:text-slate-400", size_classes, @kwargs[:class]), &)
|
|
23
|
-
when :gray
|
|
24
|
-
div(class: tokens("inline-flex items-center rounded-md bg-gray-100 font-medium text-gray-600 bg-gray-100/80 dark:bg-gray-400/10 dark:text-gray-400", size_classes, @kwargs[:class]), &)
|
|
25
|
-
when :zinc
|
|
26
|
-
div(class: tokens("inline-flex items-center rounded-md bg-zinc-100 font-medium text-zinc-600 bg-zinc-100/80 dark:bg-zinc-400/10 dark:text-zinc-400", size_classes, @kwargs[:class]), &)
|
|
27
|
-
when :neutral
|
|
28
|
-
div(class: tokens("inline-flex items-center rounded-md bg-neutral-100 font-medium text-neutral-600 bg-neutral-100/80 dark:bg-neutral-400/10 dark:text-neutral-400", size_classes, @kwargs[:class]), &)
|
|
29
|
-
when :stone
|
|
30
|
-
div(class: tokens("inline-flex items-center rounded-md bg-stone-100 font-medium text-stone-600 bg-stone-100/80 dark:bg-stone-400/10 dark:text-stone-400", size_classes, @kwargs[:class]), &)
|
|
31
|
-
when :red
|
|
32
|
-
div(class: tokens("inline-flex items-center rounded-md bg-red-100 font-medium text-red-600 bg-red-100/80 dark:bg-red-400/10 dark:text-red-400", size_classes, @kwargs[:class]), &)
|
|
33
|
-
when :orange
|
|
34
|
-
div(class: tokens("inline-flex items-center rounded-md bg-orange-100 font-medium text-orange-600 bg-orange-100/80 dark:bg-orange-400/10 dark:text-orange-400", size_classes, @kwargs[:class]), &)
|
|
35
|
-
when :amber
|
|
36
|
-
div(class: tokens("inline-flex items-center rounded-md bg-amber-100 font-medium text-amber-600 bg-amber-100/80 dark:bg-amber-400/10 dark:text-amber-400", size_classes, @kwargs[:class]), &)
|
|
37
|
-
when :yellow
|
|
38
|
-
div(class: tokens("inline-flex items-center rounded-md bg-yellow-100 font-medium text-yellow-600 bg-yellow-100/80 dark:bg-yellow-400/10 dark:text-yellow-400", size_classes, @kwargs[:class]), &)
|
|
39
|
-
when :lime
|
|
40
|
-
div(class: tokens("inline-flex items-center rounded-md bg-lime-100 font-medium text-lime-600 bg-lime-100/80 dark:bg-lime-400/10 dark:text-lime-400", size_classes, @kwargs[:class]), &)
|
|
41
|
-
when :green
|
|
42
|
-
div(class: tokens("inline-flex items-center rounded-md bg-green-100 font-medium text-green-600 bg-green-100/80 dark:bg-green-400/10 dark:text-green-400", size_classes, @kwargs[:class]), &)
|
|
43
|
-
when :emerald
|
|
44
|
-
div(class: tokens("inline-flex items-center rounded-md bg-emerald-100 font-medium text-emerald-600 bg-emerald-100/80 dark:bg-emerald-400/10 dark:text-emerald-400", size_classes, @kwargs[:class]), &)
|
|
45
|
-
when :teal
|
|
46
|
-
div(class: tokens("inline-flex items-center rounded-md bg-teal-100 font-medium text-teal-600 bg-teal-100/80 dark:bg-teal-400/10 dark:text-teal-400", size_classes, @kwargs[:class]), &)
|
|
47
|
-
when :cyan
|
|
48
|
-
div(class: tokens("inline-flex items-center rounded-md bg-cyan-100 font-medium text-cyan-600 bg-cyan-100/80 dark:bg-cyan-400/10 dark:text-cyan-400", size_classes, @kwargs[:class]), &)
|
|
49
|
-
when :sky
|
|
50
|
-
div(class: tokens("inline-flex items-center rounded-md bg-sky-100 font-medium text-sky-600 bg-sky-100/80 dark:bg-sky-400/10 dark:text-sky-400", size_classes, @kwargs[:class]), &)
|
|
51
|
-
when :blue
|
|
52
|
-
div(class: tokens("inline-flex items-center rounded-md bg-blue-100 font-medium text-blue-600 bg-blue-100/80 dark:bg-blue-400/10 dark:text-blue-400", size_classes, @kwargs[:class]), &)
|
|
53
|
-
when :indigo
|
|
54
|
-
div(class: tokens("inline-flex items-center rounded-md bg-indigo-100 font-medium text-indigo-600 bg-indigo-100/80 dark:bg-indigo-400/10 dark:text-indigo-400", size_classes, @kwargs[:class]), &)
|
|
55
|
-
when :violet
|
|
56
|
-
div(class: tokens("inline-flex items-center rounded-md bg-violet-100 font-medium text-violet-600 bg-violet-100/80 dark:bg-violet-400/10 dark:text-violet-400", size_classes, @kwargs[:class]), &)
|
|
57
|
-
when :purple
|
|
58
|
-
div(class: tokens("inline-flex items-center rounded-md bg-purple-100 font-medium text-purple-600 bg-purple-100/80 dark:bg-purple-400/10 dark:text-purple-400", size_classes, @kwargs[:class]), &)
|
|
59
|
-
when :fuchsia
|
|
60
|
-
div(class: tokens("inline-flex items-center rounded-md bg-fuchsia-100 font-medium text-fuchsia-600 bg-fuchsia-100/80 dark:bg-fuchsia-400/10 dark:text-fuchsia-400", size_classes, @kwargs[:class]), &)
|
|
61
|
-
when :pink
|
|
62
|
-
div(class: tokens("inline-flex items-center rounded-md bg-pink-100 font-medium text-pink-600 bg-pink-100/80 dark:bg-pink-400/10 dark:text-pink-400", size_classes, @kwargs[:class]), &)
|
|
63
|
-
when :rose
|
|
64
|
-
div(class: tokens("inline-flex items-center rounded-md bg-rose-100 font-medium text-rose-600 bg-rose-100/80 dark:bg-rose-400/10 dark:text-rose-400", size_classes, @kwargs[:class]), &)
|
|
65
|
-
end
|
|
49
|
+
span(**attrs, &)
|
|
66
50
|
end
|
|
67
51
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
52
|
+
private
|
|
53
|
+
|
|
54
|
+
def default_attrs
|
|
55
|
+
{
|
|
56
|
+
class: tokens("inline-flex items-center rounded-md font-medium ring-1 ring-inset", SIZES[@size], COLORS[@variant]),
|
|
57
|
+
}
|
|
74
58
|
end
|
|
75
59
|
end
|
|
76
60
|
end
|