ariadne_view_components 0.0.93.2 → 0.0.94.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +9 -0
- data/README.md +13 -4
- data/app/assets/javascripts/ariadne_view_components.js +14 -14
- data/app/assets/javascripts/ariadne_view_components.js.br +0 -0
- data/app/assets/javascripts/ariadne_view_components.js.gz +0 -0
- data/app/assets/javascripts/ariadne_view_components.js.map +1 -1
- data/app/assets/stylesheets/ariadne_view_components.css +1 -1
- data/app/assets/stylesheets/ariadne_view_components.css.br +0 -0
- data/app/assets/stylesheets/ariadne_view_components.css.gz +0 -0
- data/app/components/ariadne/base_component.rb +25 -22
- data/app/components/ariadne/behaviors/tooltipable.rb +12 -12
- data/app/components/ariadne/form/checkbox/component.rb +2 -2
- data/app/components/ariadne/form/group/component.rb +1 -1
- data/app/components/ariadne/form/radio_button/component.rb +2 -2
- data/app/components/ariadne/form/select/component.rb +1 -1
- data/app/components/ariadne/form/text_field/component.html.erb +2 -2
- data/app/components/ariadne/form/text_field/component.rb +14 -7
- data/app/components/ariadne/form/toggle/component.rb +2 -2
- data/app/components/ariadne/form/toggle_group/component.rb +1 -1
- data/app/components/ariadne/form/toggle_group/option/component.rb +1 -1
- data/app/components/ariadne/layout/grid/component.rb +1 -1
- data/app/components/ariadne/layout/grid/item/component.rb +2 -2
- data/app/components/ariadne/layout/label_block/component.rb +1 -1
- data/app/components/ariadne/layout/narrow/component.html.erb +5 -5
- data/app/components/ariadne/layout/narrow/component.rb +1 -1
- data/app/components/ariadne/ui/accordion/component.rb +3 -1
- data/app/components/ariadne/ui/accordion/item/component.html.erb +10 -10
- data/app/components/ariadne/ui/accordion/item/component.rb +12 -3
- data/app/components/ariadne/ui/avatar/component.html.erb +9 -7
- data/app/components/ariadne/ui/avatar/component.rb +55 -7
- data/app/components/ariadne/ui/badge/component.rb +35 -16
- data/app/components/ariadne/ui/banner/component.html.erb +23 -0
- data/app/components/ariadne/ui/banner/component.rb +226 -0
- data/app/components/ariadne/ui/banner/component.ts +46 -0
- data/app/components/ariadne/ui/blankslate/component.html.erb +2 -2
- data/app/components/ariadne/ui/blankslate/component.rb +12 -1
- data/app/components/ariadne/ui/button/component.rb +35 -24
- data/app/components/ariadne/ui/card/body/component.rb +1 -1
- data/app/components/ariadne/ui/card/component.rb +11 -7
- data/app/components/ariadne/ui/card/footer/component.rb +1 -1
- data/app/components/ariadne/ui/card/header/component.html.erb +2 -2
- data/app/components/ariadne/ui/card/header/component.rb +25 -16
- data/app/components/ariadne/ui/clipboard_copy/component.html.erb +1 -0
- data/app/components/ariadne/ui/clipboard_copy/component.rb +17 -21
- data/app/components/ariadne/ui/clipboard_copy/component.ts +15 -0
- data/app/components/ariadne/ui/color_dot/component.html.erb +5 -5
- data/app/components/ariadne/ui/color_dot/component.rb +19 -4
- data/app/components/ariadne/ui/combobox/component.html.erb +1 -1
- data/app/components/ariadne/ui/combobox/component.rb +54 -23
- data/app/components/ariadne/ui/combobox/component.ts +2 -0
- data/app/components/ariadne/ui/dialog/body/component.html.erb +3 -0
- data/app/components/ariadne/ui/dialog/body/component.rb +28 -0
- data/app/components/ariadne/ui/dialog/component.html.erb +25 -24
- data/app/components/ariadne/ui/dialog/component.rb +87 -18
- data/app/components/ariadne/ui/dialog/component.ts +5 -1
- data/app/components/ariadne/ui/dialog/footer/component.html.erb +3 -0
- data/app/components/ariadne/ui/dialog/footer/component.rb +34 -0
- data/app/components/ariadne/ui/heroicon/component.rb +21 -21
- data/app/components/ariadne/ui/image/component.rb +11 -23
- data/app/components/ariadne/ui/link/component.html.erb +1 -3
- data/app/components/ariadne/ui/link/component.rb +17 -4
- data/app/components/ariadne/ui/list/component.html.erb +5 -9
- data/app/components/ariadne/ui/list/component.rb +31 -7
- data/app/components/ariadne/ui/list/item/component.rb +6 -5
- data/app/components/ariadne/ui/pagination/component.rb +1 -2
- data/app/components/ariadne/ui/popover/component.html.erb +1 -1
- data/app/components/ariadne/ui/popover/component.rb +31 -26
- data/app/components/ariadne/ui/relative_time/component.html.erb +1 -0
- data/app/components/ariadne/ui/{time_ago → relative_time}/component.rb +15 -15
- data/app/components/ariadne/ui/{time_ago → relative_time}/component.ts +1 -1
- data/app/components/ariadne/ui/shortcut/component.html.erb +0 -1
- data/app/components/ariadne/ui/shortcut/component.rb +31 -5
- data/app/components/ariadne/ui/shortcut/component.ts +1 -1
- data/app/components/ariadne/ui/skeleton/component.rb +2 -8
- data/app/components/ariadne/ui/stats_panel/component.html.erb +3 -3
- data/app/components/ariadne/ui/stats_panel/component.rb +25 -1
- data/app/components/ariadne/ui/stats_panel/item/component.html.erb +3 -3
- data/app/components/ariadne/ui/stats_panel/item/component.rb +6 -6
- data/app/components/ariadne/ui/table/cell/component.rb +1 -1
- data/app/components/ariadne/ui/table/row/component.rb +1 -1
- data/app/components/ariadne/ui/typography/component.rb +3 -1
- data/app/frontend/controllers/tooltip_controller.ts +8 -3
- data/app/frontend/stylesheets/ariadne_view_components.css +1 -0
- data/app/frontend/stylesheets/theme.css +88 -0
- data/app/frontend/utils/createController.ts +9 -0
- data/app/helpers/ariadne/color_helper.rb +158 -0
- data/app/helpers/ariadne/form_helper.rb +1 -0
- data/app/helpers/ariadne/size_helper.rb +7 -0
- data/app/lib/ariadne/attributes_helper.rb +4 -4
- data/app/lib/ariadne/view_component/style_variants.rb +1 -1
- data/app/lib/ariadne/view_helper.rb +0 -6
- data/lib/ariadne/accessibility.rb +64 -0
- data/lib/ariadne/forms/dsl/form_object.rb +5 -1
- data/lib/ariadne/forms/dsl/input.rb +1 -1
- data/lib/ariadne/static/generate_arguments.rb +54 -0
- data/lib/ariadne/static/generate_audited_at.rb +17 -0
- data/lib/ariadne/static/generate_constants.rb +19 -0
- data/lib/ariadne/static/generate_previews.rb +53 -0
- data/lib/ariadne/static/generate_statuses.rb +17 -0
- data/lib/ariadne/static/generate_structure.rb +279 -0
- data/lib/ariadne/static.rb +68 -0
- data/lib/ariadne/view_components/constants.rb +2 -2
- data/lib/ariadne/view_components/version.rb +1 -1
- data/lib/ariadne/view_components.rb +0 -51
- data/lib/ariadne/yard/component_manifest.rb +81 -81
- data/lib/ariadne/yard/component_ref.rb +1 -1
- data/lib/ariadne/yard/docs_helper.rb +24 -16
- data/lib/ariadne/yard/dry_initializer/common_handler.rb +103 -0
- data/lib/ariadne/yard/dry_initializer/option_handler.rb +38 -0
- data/lib/ariadne/yard/dry_initializer/param_handler.rb +57 -0
- data/lib/ariadne/yard/registry.rb +2 -5
- data/lib/ariadne/yard/{info_arch_docs_helper.rb → structure_docs_helper.rb} +5 -5
- data/lib/ariadne/yard.rb +20 -8
- data/lib/rubocop/config/default.yml +0 -3
- metadata +34 -37
- data/app/components/ariadne/behaviors/captionable.rb +0 -55
- data/app/components/ariadne/turbo/frame/component.html.erb +0 -3
- data/app/components/ariadne/turbo/frame/component.rb +0 -16
- data/app/components/ariadne/turbo/stream_action/component.html.erb +0 -4
- data/app/components/ariadne/turbo/stream_action/component.rb +0 -25
- data/app/components/ariadne/ui/data_table/component.html.erb +0 -1
- data/app/components/ariadne/ui/data_table/component.rb +0 -11
- data/app/components/ariadne/ui/flash/component.html.erb +0 -18
- data/app/components/ariadne/ui/flash/component.rb +0 -151
- data/app/components/ariadne/ui/flash/component.ts +0 -56
- data/app/components/ariadne/ui/overlay/component.html.erb +0 -12
- data/app/components/ariadne/ui/overlay/component.rb +0 -54
- data/app/components/ariadne/ui/overlay/component.ts +0 -92
- data/app/components/ariadne/ui/time_ago/component.html.erb +0 -1
- data/lib/ariadne/view_components/commands.rb +0 -90
- data/lib/ariadne/view_components/statuses.rb +0 -14
- data/lib/ariadne/view_components/upstream.rb +0 -19
- data/lib/ariadne/yard/lookbook_pages_backend.rb +0 -235
- data/lib/rubocop/cop/ariadne/no_tag_memoize.rb +0 -44
- data/static/arguments.yml +0 -879
- data/static/assets/view-components.svg +0 -18
- data/static/classes.yml +0 -211
- data/static/constants.json +0 -743
- data/static/statuses.json +0 -58
- data/static/tailwindcss.yml +0 -727
- /data/app/components/ariadne/ui/{time_ago → relative_time}/en.yml +0 -0
@@ -9,24 +9,20 @@
|
|
9
9
|
<div class="" role="menuitem"><%= link %></div>
|
10
10
|
<% end %>
|
11
11
|
<% checkboxes.each do |checkbox| %>
|
12
|
-
<div
|
13
|
-
class="<%= style(:item) %>"
|
14
|
-
data-<%= stimulus_name %>-target="searchString">
|
12
|
+
<div class="<%= style(:item) %>" data-<%= stimulus_name %>-target="searchString">
|
15
13
|
<div class="ariadne-truncate ariadne-w-full" role="menuitemcheckbox"><%= checkbox %></div>
|
16
14
|
</div>
|
17
15
|
<% end %>
|
18
16
|
<% radio_buttons.each do |radio_button| %>
|
19
|
-
<div
|
20
|
-
class="<%= style(:item) %>"
|
21
|
-
data-<%= stimulus_name %>-target="searchString">
|
17
|
+
<div class="<%= style(:item) %>" data-<%= stimulus_name %>-target="searchString">
|
22
18
|
<div class="ariadne-truncate" role="menuitemradiobutton"><%= radio_button %></div>
|
23
19
|
</div>
|
24
20
|
<% end %>
|
25
21
|
<% items.each do |item| %>
|
26
22
|
<%= item %>
|
27
23
|
<% end %>
|
28
|
-
|
29
|
-
|
30
|
-
</
|
24
|
+
</div>
|
25
|
+
<div class="ariadne-text-center ariadne-hidden" data-<%= stimulus_name %>-target="emptyRoot">
|
26
|
+
<span class="ariadne-py-3 ariadne-text-md ariadne-text-zinc-600 dark:ariadne-text-zinc-400"><%= @empty_placeholder %> </span>
|
31
27
|
</div>
|
32
28
|
</div>
|
@@ -4,9 +4,18 @@
|
|
4
4
|
module Ariadne
|
5
5
|
module UI
|
6
6
|
module List
|
7
|
+
# Use this for a vertical list of interactive actions or options.
|
8
|
+
# It's composed of items presented in a consistent, single-column format, with room for icons, descriptions, side information, and other visuals.
|
7
9
|
class Component < Ariadne::BaseComponent
|
8
|
-
|
10
|
+
DEFAULT_SIZE = :md
|
9
11
|
|
12
|
+
# @param [Symbol] size (Ariadne::UI::List::DEFAULT_SIZE) The size of the badge. <%= one_of(Ariadne::SizeHelper::VALID_SIZES) %>
|
13
|
+
option :size, default: proc { DEFAULT_SIZE }
|
14
|
+
|
15
|
+
# Renders a filter field for the list. You will need to provide an option for `empty_placeholder`, which is a string
|
16
|
+
# that will be displayed when the results of the filter is empty.
|
17
|
+
#
|
18
|
+
# @param options [Hash] Same arguments as <%= link_to_component(Ariadne::Form::TextField::Component) %>.
|
10
19
|
renders_one :filter_field, lambda { |**options|
|
11
20
|
raise ArgumentError, "Must provide text for `empty_placeholder`" if options[:empty_placeholder].blank?
|
12
21
|
|
@@ -22,17 +31,28 @@ module Ariadne
|
|
22
31
|
autocomplete: "off",
|
23
32
|
autofocus: true,
|
24
33
|
type: "search",
|
25
|
-
data: {
|
26
|
-
"#{stimulus_name}-target": "input",
|
27
|
-
action: "#{stimulus_name}#handleInput",
|
28
|
-
},
|
29
34
|
})
|
30
35
|
|
36
|
+
component_data_attrs = {
|
37
|
+
"#{stimulus_name}-target": "input",
|
38
|
+
action: "#{stimulus_name}#handleInput",
|
39
|
+
}
|
40
|
+
options[:html_attrs][:data] = merge_data_attributes(options[:html_attrs], component_data_attrs)
|
41
|
+
|
31
42
|
Ariadne::Form::TextField::Component.new(**options)
|
32
43
|
}
|
33
44
|
|
45
|
+
# Renders a checkbox in the list.
|
46
|
+
#
|
47
|
+
# @param options [Hash] Same arguments as <%= link_to_component(Ariadne::Form::Checkbox::Component) %>.
|
34
48
|
renders_many :checkboxes, Ariadne::Form::Checkbox::Component
|
49
|
+
# Renders a radiobutton in the list.
|
50
|
+
#
|
51
|
+
# @param options [Hash] Same arguments as <%= link_to_component(Ariadne::Form::RadioButton::Component) %>.
|
35
52
|
renders_many :radio_buttons, Ariadne::Form::RadioButton::Component
|
53
|
+
# Renders a link in the list.
|
54
|
+
#
|
55
|
+
# @param options [Hash] Same arguments as <%= link_to_component(Ariadne::UI::Link::Component) %>.
|
36
56
|
renders_many :links, lambda { |**options|
|
37
57
|
options[:theme] = :nude
|
38
58
|
options[:"data-#{stimulus_name}-target"] = "searchString"
|
@@ -57,13 +77,17 @@ module Ariadne
|
|
57
77
|
Ariadne::UI::Link::Component.new(**options)
|
58
78
|
}
|
59
79
|
|
80
|
+
# Renders an item in the list. Use this slot for custom items, or items which ought to be displayed rather than interacted with.
|
81
|
+
#
|
82
|
+
# @param options [Hash] Same arguments as <%= link_to_component(Ariadne::UI::List::Item::Component) %>.
|
60
83
|
renders_many :items, Ariadne::UI::List::Item::Component
|
61
84
|
|
62
85
|
accepts_html_attributes do |html_attrs|
|
63
|
-
html_attrs[:class] =
|
64
|
-
|
86
|
+
html_attrs[:class] = merge_tailwind_classes([style, html_attrs[:class]].join(" "))
|
87
|
+
component_data_attrs = {
|
65
88
|
controller: stimulus_name,
|
66
89
|
}
|
90
|
+
html_attrs[:data] = merge_data_attributes(html_attrs, component_data_attrs)
|
67
91
|
end
|
68
92
|
|
69
93
|
SHARED_BACKGROUND_COLORS = [
|
@@ -5,16 +5,17 @@ module Ariadne
|
|
5
5
|
module UI
|
6
6
|
module List
|
7
7
|
module Item
|
8
|
+
# Use this class as a wrapper for any custom content you wish to insert into the list.
|
8
9
|
class Component < Ariadne::BaseComponent
|
9
10
|
option :as_menu, default: proc { false }
|
10
11
|
|
11
12
|
accepts_html_attributes do |html_attrs|
|
12
|
-
html_attrs[:class] =
|
13
|
+
html_attrs[:class] = merge_tailwind_classes([style(:item), html_attrs[:class]].join(" "))
|
13
14
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
15
|
+
component_data_attrs = {
|
16
|
+
"#{stimulus_name.sub("-item", "")}-target": "searchString",
|
17
|
+
}
|
18
|
+
html_attrs[:data] = merge_data_attributes(html_attrs, component_data_attrs)
|
18
19
|
end
|
19
20
|
|
20
21
|
style :item do
|
@@ -4,6 +4,7 @@
|
|
4
4
|
module Ariadne
|
5
5
|
module UI
|
6
6
|
module Pagination
|
7
|
+
# Pagination is a horizontal set of links to navigate paginated content.
|
7
8
|
class Component < Ariadne::BaseComponent
|
8
9
|
option :label
|
9
10
|
option :goto_label
|
@@ -13,8 +14,6 @@ module Ariadne
|
|
13
14
|
|
14
15
|
option :callback_page_url
|
15
16
|
|
16
|
-
option :page_size_options, default: proc { [10, 25, 50, 100] }
|
17
|
-
|
18
17
|
def page_links
|
19
18
|
(1..pages_count).each_with_object([]) do |page, list|
|
20
19
|
if [1, pages_count].include?(page) || page.between?(current_page - 2, current_page + 2)
|
@@ -4,6 +4,8 @@
|
|
4
4
|
module Ariadne
|
5
5
|
module UI
|
6
6
|
module Popover
|
7
|
+
# A component that displays rich content in a card, triggered by a button. Typically
|
8
|
+
# you would use this component to display a menu, a form, or any other card within a hover or trigger.
|
7
9
|
class Component < Ariadne::BaseComponent
|
8
10
|
ALIGNMENT_DEFAULT = :center
|
9
11
|
ALIGNMENT_OPTIONS = [:left, :right, ALIGNMENT_DEFAULT]
|
@@ -11,41 +13,48 @@ module Ariadne
|
|
11
13
|
POSITION_DEFAULT = :auto
|
12
14
|
POSITION_OPTIONS = [POSITION_DEFAULT, :above, :below]
|
13
15
|
|
14
|
-
|
16
|
+
# @param [String] target_id (Ariadne::UI::Popover::Component.generate_id) The ID of the element that triggers the popover.
|
17
|
+
option :target_id, default: -> { self.class.generate_id }
|
15
18
|
|
16
|
-
|
17
|
-
option :
|
19
|
+
# @param [Symbol] position (:auto) The position of the popover. <%= one_of(Ariadne::UI::Popover::Component::POSITION_OPTIONS) %>
|
20
|
+
option :position, default: -> { POSITION_DEFAULT }
|
21
|
+
# @param [Symbol] alignment (:center) The alignment of the popover. <%= one_of(Ariadne::UI::Popover::Component::ALIGNMENT_OPTIONS) %>
|
22
|
+
option :alignment, default: -> { ALIGNMENT_DEFAULT }
|
18
23
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
}.merge(options[:html_attrs])
|
24
|
+
# The button which reveals the popover.
|
25
|
+
#
|
26
|
+
# @param options [Hash] Same arguments as <%= link_to_component(Ariadne::UI::Button::Component) %>.
|
27
|
+
renders_one :reveal_button, lambda { |**options|
|
28
|
+
options[:html_attrs] ||= {}
|
25
29
|
|
26
|
-
|
27
|
-
|
30
|
+
options[:html_attrs] = {
|
31
|
+
popovertarget: target_id,
|
32
|
+
popovertargetaction: "toggle",
|
33
|
+
}.merge(options[:html_attrs])
|
28
34
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
35
|
+
# requires CSS Anchor Positioning
|
36
|
+
# options[:html_attrs][:style] = "anchor-name: --popover-#{target_id};"
|
37
|
+
|
38
|
+
component_data_attrs = {
|
39
|
+
"#{stimulus_name}-target" => "button",
|
40
|
+
action: "click->#{stimulus_name}#toggle",
|
41
|
+
}
|
42
|
+
options[:html_attrs][:data] = merge_data_attributes(options[:html_attrs], component_data_attrs)
|
33
43
|
|
34
|
-
|
35
|
-
|
44
|
+
Ariadne::UI::Button::Component.new(**options)
|
45
|
+
}
|
36
46
|
|
37
47
|
accepts_html_attributes do |html_attrs|
|
38
48
|
html_attrs[:id] ||= target_id
|
39
49
|
html_attrs[:popover] = ""
|
40
50
|
|
41
|
-
html_attrs[:class] =
|
51
|
+
html_attrs[:class] = merge_tailwind_classes([style, html_attrs[:class]].join(" "))
|
42
52
|
|
43
53
|
# requires CSS Anchor Positioning
|
44
54
|
# as a `style` to account for future feature where the popover can be moved
|
45
55
|
# html_attrs[:style] = "inset: unset; top: anchor(--popover-#{target_id} bottom); right: anchor(--popover-#{target_id} left, -1rem);"
|
46
56
|
|
47
|
-
@stimulus_controllers =
|
48
|
-
[stimulus_name, html_attrs.fetch(:data, {}).delete(:controller)].compact.join(" ")
|
57
|
+
@stimulus_controllers = [stimulus_name, html_attrs.fetch(:data, {}).delete(:controller)].compact.join(" ")
|
49
58
|
|
50
59
|
html_attrs[:data] ||= {}
|
51
60
|
html_attrs[:data] = {
|
@@ -67,10 +76,6 @@ module Ariadne
|
|
67
76
|
placement
|
68
77
|
end
|
69
78
|
|
70
|
-
def target_id
|
71
|
-
@target_id ||= ::Ariadne::ViewHelper.generate_id
|
72
|
-
end
|
73
|
-
|
74
79
|
style do
|
75
80
|
base do
|
76
81
|
[
|
@@ -78,8 +83,8 @@ module Ariadne
|
|
78
83
|
"ariadne-z-20",
|
79
84
|
"ariadne-rounded-lg",
|
80
85
|
"ariadne-shadow-lg",
|
81
|
-
"ariadne-bg-
|
82
|
-
"dark:ariadne-bg-
|
86
|
+
"ariadne-bg-popover",
|
87
|
+
"dark:ariadne-bg-popover-dark",
|
83
88
|
]
|
84
89
|
end
|
85
90
|
end
|
@@ -0,0 +1 @@
|
|
1
|
+
<relative-time <%= html_attributes %>><%= @datetime.strftime("%B %-d, %Y %H:%M") %></relative-time>
|
@@ -3,7 +3,7 @@
|
|
3
3
|
|
4
4
|
module Ariadne
|
5
5
|
module UI
|
6
|
-
module
|
6
|
+
module RelativeTime
|
7
7
|
# Formats a timestamp as a localized string or as relative text that auto-updates in the user's browser.
|
8
8
|
class Component < Ariadne::BaseComponent
|
9
9
|
include FetchOrFallbackHelper
|
@@ -88,33 +88,33 @@ module Ariadne
|
|
88
88
|
|
89
89
|
# @param datetime [Time] The time to be formatted.
|
90
90
|
option :datetime
|
91
|
-
# @param tense [Symbol] Which tense to use. <%= one_of(
|
91
|
+
# @param tense [Symbol] (TENSE_DEFAULT) Which tense to use. <%= one_of(Ariadne::UI::RelativeTime::Component::TENSE_OPTIONS) %>
|
92
92
|
option :tense, default: -> { TENSE_DEFAULT }
|
93
|
-
# @param prefix [
|
93
|
+
# @param prefix [String] What to prefix the relative time display with.
|
94
94
|
option :prefix, default: -> { nil }
|
95
|
-
# @param second [Symbol] What format seconds should take. <%= one_of(
|
95
|
+
# @param second [Symbol] (SECOND_DEFAULT) What format seconds should take. <%= one_of(Ariadne::UI::RelativeTime::Component::SECOND_OPTIONS) %>
|
96
96
|
option :second, default: -> { SECOND_DEFAULT }
|
97
|
-
# @param minute [Symbol] What format minues should take. <%= one_of(
|
97
|
+
# @param minute [Symbol] (MINUTE_DEFAULT) What format minues should take. <%= one_of(Ariadne::UI::RelativeTime::Component::MINUTE_OPTIONS) %>
|
98
98
|
option :minute, default: -> { MINUTE_DEFAULT }
|
99
|
-
# @param hour [Symbol] What format hours should take. <%= one_of(
|
99
|
+
# @param hour [Symbol] (HOUR_DEFAULT) What format hours should take. <%= one_of(Ariadne::UI::RelativeTime::Component::HOUR_OPTIONS) %>
|
100
100
|
option :hour, default: -> { HOUR_DEFAULT }
|
101
|
-
# @param weekday [Symbol] What format weekdays should take. <%= one_of(
|
101
|
+
# @param weekday [Symbol] (WEEKDAY_DEFAULT) What format weekdays should take. <%= one_of(Ariadne::UI::RelativeTime::Component::WEEKDAY_OPTIONS) %>
|
102
102
|
option :weekday, default: -> { WEEKDAY_DEFAULT }
|
103
|
-
# @param day [Symbol] What format days should take. <%= one_of(
|
103
|
+
# @param day [Symbol] (DAY_DEFAULT) What format days should take. <%= one_of(Ariadne::UI::RelativeTime::Component::DAY_OPTIONS) %>
|
104
104
|
option :day, default: -> { DAY_DEFAULT }
|
105
|
-
# @param month [Symbol] What format months should take. <%= one_of(
|
105
|
+
# @param month [Symbol] (MONTH_DEFAULT) What format months should take. <%= one_of(Ariadne::UI::RelativeTime::Component::MONTH_OPTIONS) %>
|
106
106
|
option :month, default: -> { MONTH_DEFAULT }
|
107
|
-
# @param year [Symbol] What format years should take. <%= one_of(
|
107
|
+
# @param year [Symbol] (YEAR_DEFAULT) What format years should take. <%= one_of(Ariadne::UI::RelativeTime::Component::YEAR_OPTIONS) %>
|
108
108
|
option :year, default: -> { YEAR_DEFAULT }
|
109
|
-
# @param time_zone_name [Symbol] What format the time zone should take. <%= one_of(
|
109
|
+
# @param time_zone_name [Symbol] (TIMEZONENAME_DEFAULT) What format the time zone should take. <%= one_of(Ariadne::UI::RelativeTime::Component::TIMEZONENAME_OPTIONS) %>
|
110
110
|
option :time_zone_name, default: -> { TIMEZONENAME_DEFAULT }
|
111
111
|
# @param threshold [String] The threshold, in ISO-8601 'durations' format, at which relative time displays become absolute.
|
112
112
|
option :threshold, default: -> { nil }
|
113
|
-
# @param precision [Symbol] The precision elapsed time should display. <%= one_of(
|
113
|
+
# @param precision [Symbol] (PRECISION_DEFAULT) The precision elapsed time should display. <%= one_of(Ariadne::UI::RelativeTime::Component::PRECISION_OPTIONS) %>
|
114
114
|
option :precision, default: -> { PRECISION_DEFAULT }
|
115
|
-
# @param format [Symbol] The format the display should take. <%= one_of(
|
115
|
+
# @param format [Symbol] (FORMAT_DEFAULT) The format the display should take. <%= one_of(Ariadne::UI::RelativeTime::Component::FORMAT_OPTIONS) %>
|
116
116
|
option :format, default: -> { FORMAT_DEFAULT }
|
117
|
-
# @param format_style [Symbol] The format the display should take. <%= one_of(
|
117
|
+
# @param format_style [Symbol] (FORMAT_STYLE_DEFAULT) The format the display should take. <%= one_of(Ariadne::UI::RelativeTime::Component::FORMAT_STYLE_OPTIONS) %>
|
118
118
|
option :format_style, default: -> { FORMAT_STYLE_DEFAULT }
|
119
119
|
# @param lang [String] The language to use.
|
120
120
|
option :lang, default: -> { nil }
|
@@ -144,7 +144,7 @@ module Ariadne
|
|
144
144
|
if datetime.respond_to?(:iso8601)
|
145
145
|
@datetime = datetime
|
146
146
|
html_attrs[:datetime] = datetime.iso8601
|
147
|
-
|
147
|
+
else
|
148
148
|
@datetime = Time.iso8601(datetime)
|
149
149
|
html_attrs[:datetime] = @datetime
|
150
150
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import '@github/relative-time-element'
|
2
2
|
import {controllerFactory} from '@utils/createController'
|
3
3
|
|
4
|
-
export default class
|
4
|
+
export default class RealativeTimeController extends controllerFactory<HTMLDetailsElement>()({
|
5
5
|
targets: {},
|
6
6
|
}) {}
|
@@ -4,17 +4,21 @@
|
|
4
4
|
module Ariadne
|
5
5
|
module UI
|
6
6
|
module Shortcut
|
7
|
+
# This component stylizes a keyboard shortcut.
|
7
8
|
class Component < Ariadne::BaseComponent
|
9
|
+
DEFAULT_SIZE = :md
|
8
10
|
SPECIAL_KEYS = ["alt", "shift", "ctrl"]
|
9
11
|
|
10
|
-
|
12
|
+
# @param keys [Array<String>] The keys to display as a shortcut.
|
11
13
|
option :keys
|
12
|
-
|
14
|
+
|
15
|
+
# @param [Symbol] size (Ariadne::UI::Shortcut::DEFAULT_SIZE) The size of the shortcut. <%= one_of(Ariadne::SizeHelper::VALID_SIZES) %>
|
16
|
+
option :size, default: proc { DEFAULT_SIZE }
|
13
17
|
|
14
18
|
def special_keys = SPECIAL_KEYS
|
15
19
|
|
16
20
|
accepts_html_attributes do |html_attrs|
|
17
|
-
html_attrs[:class] =
|
21
|
+
html_attrs[:class] = merge_tailwind_classes([style(:key, size:), html_attrs[:class]].join(" "))
|
18
22
|
end
|
19
23
|
|
20
24
|
style do
|
@@ -30,7 +34,21 @@ module Ariadne
|
|
30
34
|
|
31
35
|
style :key do
|
32
36
|
base do
|
33
|
-
[
|
37
|
+
[
|
38
|
+
"ariadne-font-mono",
|
39
|
+
"ariadne-px-2",
|
40
|
+
"ariadne-py-1.5",
|
41
|
+
"ariadne-text-xs",
|
42
|
+
"ariadne-font-semibold",
|
43
|
+
"ariadne-text-gray-800",
|
44
|
+
"ariadne-bg-neutral-50",
|
45
|
+
"ariadne-border",
|
46
|
+
"ariadne-border-gray-200",
|
47
|
+
"ariadne-rounded-lg",
|
48
|
+
"ariadne-dark:bg-neutral-600",
|
49
|
+
"ariadne-dark:text-gray-100",
|
50
|
+
"ariadne-dark:border-gray-500",
|
51
|
+
]
|
34
52
|
end
|
35
53
|
|
36
54
|
variants do
|
@@ -43,9 +61,17 @@ module Ariadne
|
|
43
61
|
["ariadne-text-sm", "ariadne-px-1.5", "ariadne-rounded"]
|
44
62
|
end
|
45
63
|
|
46
|
-
|
64
|
+
md do
|
47
65
|
["ariadne-text-base", "ariadne-px-1.5", "ariadne-rounded-md"]
|
48
66
|
end
|
67
|
+
|
68
|
+
lg do
|
69
|
+
["ariadne-text-base", "ariadne-px-2", "ariadne-rounded-lg"]
|
70
|
+
end
|
71
|
+
|
72
|
+
xl do
|
73
|
+
["ariadne-text-base", "ariadne-px-3", "ariadne-rounded-xl"]
|
74
|
+
end
|
49
75
|
end
|
50
76
|
end
|
51
77
|
end
|
@@ -16,10 +16,10 @@ export default class extends controllerFactory()({
|
|
16
16
|
}
|
17
17
|
|
18
18
|
connect() {
|
19
|
+
this.replaceSymbol(this.shiftTargets, '⇧')
|
19
20
|
if (isMac()) {
|
20
21
|
this.replaceSymbol(this.ctrlTargets, '⌘')
|
21
22
|
this.replaceSymbol(this.altTargets, '⌥')
|
22
|
-
this.replaceSymbol(this.shiftTargets, '⇧')
|
23
23
|
}
|
24
24
|
}
|
25
25
|
}
|
@@ -4,11 +4,10 @@
|
|
4
4
|
module Ariadne
|
5
5
|
module UI
|
6
6
|
module Skeleton
|
7
|
+
# Use this to show a placeholder while content is loading.
|
7
8
|
class Component < Ariadne::BaseComponent
|
8
|
-
option :size, default: proc { :base }
|
9
|
-
|
10
9
|
accepts_html_attributes do |html_attrs|
|
11
|
-
html_attrs[:class] =
|
10
|
+
html_attrs[:class] = merge_tailwind_classes([style, html_attrs[:class]].join(" "))
|
12
11
|
end
|
13
12
|
|
14
13
|
def before_render
|
@@ -32,11 +31,6 @@ module Ariadne
|
|
32
31
|
end
|
33
32
|
|
34
33
|
variants do
|
35
|
-
size do
|
36
|
-
base do
|
37
|
-
[]
|
38
|
-
end
|
39
|
-
end
|
40
34
|
end
|
41
35
|
end
|
42
36
|
end
|
@@ -1,7 +1,7 @@
|
|
1
|
-
<dl class="
|
2
|
-
<%
|
1
|
+
<dl class="<%= html_attrs[:class]%>" <%= html_attributes %>>
|
2
|
+
<% stat_items.each_with_index do |stat_item, index| %>
|
3
3
|
<span class="flex-1 <%= 'pl-2' if index > 0 %>">
|
4
|
-
<%= render
|
4
|
+
<%= render stat_item %>
|
5
5
|
</span>
|
6
6
|
<% end %>
|
7
7
|
</dl>
|
@@ -4,8 +4,32 @@
|
|
4
4
|
module Ariadne
|
5
5
|
module UI
|
6
6
|
module StatsPanel
|
7
|
+
# Arranges a collection of stats in a horizontal grid.
|
7
8
|
class Component < Ariadne::BaseComponent
|
8
|
-
|
9
|
+
# Renders a stat item.
|
10
|
+
#
|
11
|
+
# @param options [Hash] Same arguments as <%= link_to_component(Ariadne::UI::StatsPanel::Item::Component) %>.
|
12
|
+
renders_many :stat_items, Item::Component
|
13
|
+
|
14
|
+
accepts_html_attributes do |html_attrs|
|
15
|
+
html_attrs[:class] = merge_tailwind_classes([style, html_attrs[:class]].join(" "))
|
16
|
+
end
|
17
|
+
|
18
|
+
style do
|
19
|
+
base do
|
20
|
+
[
|
21
|
+
"ariadne-flex",
|
22
|
+
"ariadne-flex-wrap",
|
23
|
+
"ariadne-space-x-2",
|
24
|
+
"ariadne-divide-x",
|
25
|
+
"ariadne-divide-slate-100",
|
26
|
+
"dark:ariadne-divide-slate-800",
|
27
|
+
]
|
28
|
+
end
|
29
|
+
|
30
|
+
variants do
|
31
|
+
end
|
32
|
+
end
|
9
33
|
end
|
10
34
|
end
|
11
35
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
<span class="flex flex-col-reverse">
|
2
|
-
<dt class="text-zinc-600 dark:text-zinc-400 text-xs"><%= label %></dt>
|
3
|
-
<dd class="<%=
|
1
|
+
<span class="ariadne-flex ariadne-flex-col-reverse">
|
2
|
+
<dt class="ariadne-text-zinc-600 dark:ariadne-text-zinc-400 ariadne-text-xs"><%= label %></dt>
|
3
|
+
<dd class="<%= html_attrs[:class] %>"><%= content %></dd>
|
4
4
|
</span>
|
@@ -5,19 +5,19 @@ module Ariadne
|
|
5
5
|
module UI
|
6
6
|
module StatsPanel
|
7
7
|
module Item
|
8
|
+
# Renders a stat item.
|
8
9
|
class Component < Ariadne::BaseComponent
|
9
|
-
|
10
|
+
# @param [String] label Indicates the text to display beneath the stat
|
10
11
|
option :label
|
11
12
|
|
13
|
+
accepts_html_attributes do |html_attrs|
|
14
|
+
html_attrs[:class] = merge_tailwind_classes([style, html_attrs[:class]].join(" "))
|
15
|
+
end
|
16
|
+
|
12
17
|
style do
|
13
18
|
base { ["text-number-lg-smb"] }
|
14
19
|
|
15
20
|
variants do
|
16
|
-
theme do
|
17
|
-
default { [] }
|
18
|
-
success { ["ariadne-text-emerald-600", "dark:ariadne-text-emerald-400"] }
|
19
|
-
danger { ["ariadne-text-red-600", "dark:ariadne-text-red-400"] }
|
20
|
-
end
|
21
21
|
end
|
22
22
|
end
|
23
23
|
end
|
@@ -9,7 +9,7 @@ module Ariadne
|
|
9
9
|
attr_accessor :context
|
10
10
|
|
11
11
|
accepts_html_attributes do |html_attrs|
|
12
|
-
html_attrs[:class] =
|
12
|
+
html_attrs[:class] = merge_tailwind_classes([style(:cell), html_attrs[:class]].join(" "))
|
13
13
|
end
|
14
14
|
|
15
15
|
def tag_name
|
@@ -12,7 +12,7 @@ module Ariadne
|
|
12
12
|
renders_many :cells, Ariadne::UI::Table::Cell::Component
|
13
13
|
|
14
14
|
accepts_html_attributes do |html_attrs|
|
15
|
-
html_attrs[:class] =
|
15
|
+
html_attrs[:class] = merge_tailwind_classes([style(:row), html_attrs[:class]].join(" "))
|
16
16
|
end
|
17
17
|
|
18
18
|
style :row do
|
@@ -4,13 +4,15 @@
|
|
4
4
|
module Ariadne
|
5
5
|
module UI
|
6
6
|
module Typography
|
7
|
+
VALID_TYPES = [:title, :heading, :subheading, :ann, :lede, :code].freeze
|
8
|
+
|
7
9
|
class Component < Ariadne::BaseComponent
|
8
10
|
option :tag, optional: true
|
9
11
|
option :type
|
10
12
|
option :size, optional: true
|
11
13
|
|
12
14
|
accepts_html_attributes do |html_attrs|
|
13
|
-
html_attrs[:class] =
|
15
|
+
html_attrs[:class] = merge_tailwind_classes([style(type:, size:), html_attrs[:class]].join(" "))
|
14
16
|
end
|
15
17
|
|
16
18
|
def tag_name
|
@@ -1,5 +1,9 @@
|
|
1
1
|
import {controllerFactory} from '@utils/createController'
|
2
|
-
import {computePosition, arrow, offset, flip
|
2
|
+
import {computePosition, arrow, offset, flip} from '@floating-ui/dom'
|
3
|
+
|
4
|
+
|
5
|
+
const TRIANGLE_HEIGHT = 6
|
6
|
+
const DEFAULT_OFFSET = 4;
|
3
7
|
|
4
8
|
export default class TooltipController extends controllerFactory<HTMLElement>()({
|
5
9
|
targets: {
|
@@ -7,16 +11,17 @@ export default class TooltipController extends controllerFactory<HTMLElement>()(
|
|
7
11
|
wrapper: HTMLDivElement,
|
8
12
|
tooltip: HTMLDivElement,
|
9
13
|
arrow: HTMLDivElement,
|
14
|
+
text: HTMLSpanElement,
|
10
15
|
},
|
11
16
|
}) {
|
12
17
|
async update() {
|
13
18
|
computePosition(this.activatorTarget, this.tooltipTarget, {
|
14
19
|
placement: 'top',
|
15
|
-
middleware: [
|
20
|
+
middleware: [flip({ padding: 12 }), offset(TRIANGLE_HEIGHT + DEFAULT_OFFSET), arrow({element: this.arrowTarget})],
|
16
21
|
// eslint-disable-next-line github/no-then
|
17
22
|
}).then(({x, y, placement, middlewareData}) => {
|
18
23
|
Object.assign(this.tooltipTarget.style, {
|
19
|
-
left:
|
24
|
+
left: `0px`,
|
20
25
|
top: `${y}px`,
|
21
26
|
})
|
22
27
|
|