ariadne_view_components 0.0.93.1 → 0.0.94
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/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.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
| @@ -4,21 +4,35 @@ | |
| 4 4 | 
             
            module Ariadne
         | 
| 5 5 | 
             
              module UI
         | 
| 6 6 | 
             
                module ColorDot
         | 
| 7 | 
            +
                  # Creates a colored circle.
         | 
| 7 8 | 
             
                  class Component < Ariadne::BaseComponent
         | 
| 9 | 
            +
                    # @param [Symbol] color The hex color of the dot (without the hash)
         | 
| 8 10 | 
             
                    option :color
         | 
| 9 | 
            -
             | 
| 11 | 
            +
             | 
| 12 | 
            +
                    DEFAULT_SIZE = :md
         | 
| 13 | 
            +
                    # @param [Symbol] size (Ariadne::UI::ColorDot::DEFAULT_SIZE) Indicates the button's size. <%= one_of(Ariadne::SizeHelper::VALID_SIZES) %>
         | 
| 14 | 
            +
                    option :size, default: -> { DEFAULT_SIZE }
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                    def before_render
         | 
| 17 | 
            +
                      raise ArgumentError, "Color must be a 6-character hex string" unless color.match?(/\A[a-fA-F0-9]{6}\z/)
         | 
| 18 | 
            +
                    end
         | 
| 10 19 |  | 
| 11 20 | 
             
                    style do
         | 
| 12 21 | 
             
                      base do
         | 
| 13 | 
            -
                         | 
| 22 | 
            +
                        [
         | 
| 23 | 
            +
                          "ariadne-inline-flex",
         | 
| 24 | 
            +
                          "ariadne-items-center",
         | 
| 25 | 
            +
                          "ariadne-truncate",
         | 
| 26 | 
            +
                        ]
         | 
| 14 27 | 
             
                      end
         | 
| 15 28 |  | 
| 16 29 | 
             
                      variants do
         | 
| 17 30 | 
             
                        size do
         | 
| 18 31 | 
             
                          xs { "ariadne-ps-0.5" }
         | 
| 19 32 | 
             
                          sm { "ariadne-ps-0.5" }
         | 
| 20 | 
            -
                          base { "ariadne-ps-1" }
         | 
| 21 33 | 
             
                          md { "ariadne-ps-1" }
         | 
| 34 | 
            +
                          lg { "ariadne-ps-1" }
         | 
| 35 | 
            +
                          xl { "ariadne-ps-1" }
         | 
| 22 36 | 
             
                        end
         | 
| 23 37 | 
             
                      end
         | 
| 24 38 | 
             
                    end
         | 
| @@ -28,8 +42,9 @@ module Ariadne | |
| 28 42 | 
             
                        size do
         | 
| 29 43 | 
             
                          xs { "ariadne-size-2" }
         | 
| 30 44 | 
             
                          sm { "ariadne-size-2.5" }
         | 
| 31 | 
            -
                          base { "ariadne-size-3" }
         | 
| 32 45 | 
             
                          md { "ariadne-size-3" }
         | 
| 46 | 
            +
                          lg { "ariadne-size-3" }
         | 
| 47 | 
            +
                          xl { "ariadne-ps-1" }
         | 
| 33 48 | 
             
                        end
         | 
| 34 49 | 
             
                      end
         | 
| 35 50 | 
             
                    end
         | 
| @@ -1,6 +1,6 @@ | |
| 1 1 | 
             
            <details class="ariadne-inline" <%= html_attrs.to_html %>>
         | 
| 2 2 | 
             
              <summary class="ariadne-list-none ariadne-rounded" data-<%= stimulus_name %>-target="button" data-action="click-><%= stimulus_name %>#toggle">
         | 
| 3 | 
            -
                <%=  | 
| 3 | 
            +
                <%= reveal_button %>
         | 
| 4 4 | 
             
              </summary>
         | 
| 5 5 | 
             
              <details-menu
         | 
| 6 6 | 
             
                class="<%= merged_styles(:popover, size:) %>"
         | 
| @@ -4,41 +4,71 @@ | |
| 4 4 | 
             
            module Ariadne
         | 
| 5 5 | 
             
              module UI
         | 
| 6 6 | 
             
                module Combobox
         | 
| 7 | 
            +
                  # The combobox is used to present a list of options for selection.
         | 
| 8 | 
            +
                  #
         | 
| 9 | 
            +
                  # Style overrides:
         | 
| 10 | 
            +
                  #
         | 
| 11 | 
            +
                  # - `popover` - The popover that contains the combobox options.
         | 
| 7 12 | 
             
                  class Component < Ariadne::BaseComponent
         | 
| 8 | 
            -
                     | 
| 13 | 
            +
                    DEFAULT_SIZE = :md
         | 
| 9 14 |  | 
| 10 | 
            -
                     | 
| 15 | 
            +
                    # @param [Symbol] size (Ariadne::UI::Combobox::DEFAULT_SIZE) The size of the badge. <%= one_of(Ariadne::SizeHelper::VALID_SIZES) %>
         | 
| 16 | 
            +
                    option :size, default: proc { DEFAULT_SIZE }
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                    DEFAULT_PLACEMENT = "bottom"
         | 
| 19 | 
            +
                    # according to `floating-ui/dom`
         | 
| 20 | 
            +
                    VALID_PLACEMENTS = ["top", "right", "bottom", "left", "top-start", "top-end", "right-start", "right-end", "bottom-start", "bottom-end", "left-start", "left-end"]
         | 
| 21 | 
            +
                    # @param [String] size (bottom) The location of the menu.
         | 
| 22 | 
            +
                    option :placement, default: proc { DEFAULT_PLACEMENT }
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                    # @param [Boolean] clamped (false) Indicates if the menu should be clamped to the viewport.
         | 
| 11 25 | 
             
                    option :clamped, default: proc { false }
         | 
| 12 26 |  | 
| 27 | 
            +
                    # @param [String] changed_action A stimulus action to call when a value within the combobox changes.
         | 
| 13 28 | 
             
                    option :changed_action, optional: true
         | 
| 14 29 |  | 
| 30 | 
            +
                    # The list of options to display in the combobox.
         | 
| 31 | 
            +
                    #
         | 
| 32 | 
            +
                    # @param options [Hash] Same arguments as <%= link_to_component(Ariadne::UI::List::Component) %>.
         | 
| 15 33 | 
             
                    renders_one :list, lambda { |**options|
         | 
| 16 | 
            -
             | 
| 17 | 
            -
             | 
| 34 | 
            +
                                         options[:as_menu] = true
         | 
| 35 | 
            +
                                         Ariadne::UI::List::Component.new(**options)
         | 
| 36 | 
            +
                                       }
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                    # The button which renders the combobox.
         | 
| 39 | 
            +
                    #
         | 
| 40 | 
            +
                    # @param options [Hash] Same arguments as <%= link_to_component(Ariadne::UI::Button::Component) %>.
         | 
| 41 | 
            +
                    renders_one :reveal_button, lambda { |**options|
         | 
| 42 | 
            +
                      options[:html_attrs] ||= {}
         | 
| 43 | 
            +
                      options[:html_attrs][:role] = "combobox"
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                      options[:html_attrs][:aria] = merge_aria(
         | 
| 46 | 
            +
                        options[:html_attrs], {
         | 
| 47 | 
            +
                          aria: {
         | 
| 48 | 
            +
                            haspopup: "dialog",
         | 
| 49 | 
            +
                            expanded: "false",
         | 
| 50 | 
            +
                          },
         | 
| 51 | 
            +
                        }
         | 
| 52 | 
            +
                      )
         | 
| 53 | 
            +
             | 
| 54 | 
            +
                      options[:scheme] ||= :nude
         | 
| 55 | 
            +
                      options[:html_attrs][:id] ||= Ariadne::UI::Button::Component.generate_id
         | 
| 56 | 
            +
                      Ariadne::UI::Button::Component.new(**options)
         | 
| 18 57 | 
             
                    }
         | 
| 19 | 
            -
                    renders_one :button, Ariadne::UI::Button::Component
         | 
| 20 58 |  | 
| 21 59 | 
             
                    accepts_html_attributes do |html_attrs|
         | 
| 22 | 
            -
                       | 
| 23 | 
            -
             | 
| 24 | 
            -
                        controller: "#{stimulus_name} #{html_attrs[:data].delete(:controller)}".strip,
         | 
| 60 | 
            +
                      component_data_attrs = {
         | 
| 61 | 
            +
                        controller: stimulus_name,
         | 
| 25 62 | 
             
                        "#{stimulus_name}-target": "wrapper",
         | 
| 26 63 | 
             
                        "#{stimulus_name}-placement-value": placement,
         | 
| 27 64 | 
             
                        "#{stimulus_name}-clamped-value": clamped,
         | 
| 28 | 
            -
                      } | 
| 65 | 
            +
                      }
         | 
| 29 66 |  | 
| 30 67 | 
             
                      if changed_action
         | 
| 31 | 
            -
                         | 
| 68 | 
            +
                        component_data_attrs[:action] = "#{stimulus_name}:changed->#{changed_action}"
         | 
| 32 69 | 
             
                      end
         | 
| 33 | 
            -
                    end
         | 
| 34 | 
            -
             | 
| 35 | 
            -
                    def initialize(**options)
         | 
| 36 | 
            -
                      super
         | 
| 37 | 
            -
                      validate!
         | 
| 38 | 
            -
                    end
         | 
| 39 70 |  | 
| 40 | 
            -
             | 
| 41 | 
            -
                      # raise ArgumentError, "Must provide only `options` or `items`, not both" if items? && options?
         | 
| 71 | 
            +
                      html_attrs[:data] = merge_data_attributes(html_attrs, component_data_attrs)
         | 
| 42 72 | 
             
                    end
         | 
| 43 73 |  | 
| 44 74 | 
             
                    accepts_styles :popover
         | 
| @@ -52,10 +82,8 @@ module Ariadne | |
| 52 82 | 
             
                          "ariadne-scrollbar-trigger",
         | 
| 53 83 | 
             
                          "ariadne-rounded-lg",
         | 
| 54 84 | 
             
                          "ariadne-shadow-lg",
         | 
| 55 | 
            -
                          "ariadne-bg- | 
| 56 | 
            -
                          " | 
| 57 | 
            -
                          "ariadne-text-content",
         | 
| 58 | 
            -
                          "dark:ariadne-text-content-dark",
         | 
| 85 | 
            +
                          "ariadne-bg-popover",
         | 
| 86 | 
            +
                          "text-popover-foreground",
         | 
| 59 87 | 
             
                        ]
         | 
| 60 88 | 
             
                      end
         | 
| 61 89 |  | 
| @@ -72,7 +100,10 @@ module Ariadne | |
| 72 100 |  | 
| 73 101 | 
             
                    style :options do
         | 
| 74 102 | 
             
                      base do
         | 
| 75 | 
            -
                        [ | 
| 103 | 
            +
                        [
         | 
| 104 | 
            +
                          "ariadne-overflow-auto",
         | 
| 105 | 
            +
                          "ariadne-p-2",
         | 
| 106 | 
            +
                        ]
         | 
| 76 107 | 
             
                      end
         | 
| 77 108 | 
             
                    end
         | 
| 78 109 | 
             
                  end
         | 
| @@ -29,6 +29,7 @@ export default class ComboboxController extends controllerFactory<HTMLDetailsEle | |
| 29 29 | 
             
                if (this.changedIds.size > 0) {
         | 
| 30 30 | 
             
                  this.dispatch('changed')
         | 
| 31 31 | 
             
                  this.changedIds.clear()
         | 
| 32 | 
            +
                  this.buttonTarget.setAttribute('aria-expanded', 'false')
         | 
| 32 33 | 
             
                }
         | 
| 33 34 | 
             
              }
         | 
| 34 35 |  | 
| @@ -115,5 +116,6 @@ export default class ComboboxController extends controllerFactory<HTMLDetailsEle | |
| 115 116 | 
             
              toggle(): void {
         | 
| 116 117 | 
             
                this.element.open = !this.element.open
         | 
| 117 118 | 
             
                this.setupAutoUpdate()
         | 
| 119 | 
            +
                this.buttonTarget.setAttribute('aria-expanded', 'true')
         | 
| 118 120 | 
             
              }
         | 
| 119 121 | 
             
            }
         | 
| @@ -0,0 +1,28 @@ | |
| 1 | 
            +
            # typed: false
         | 
| 2 | 
            +
            # frozen_string_literal: true
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            module Ariadne
         | 
| 5 | 
            +
              module UI
         | 
| 6 | 
            +
                module Dialog
         | 
| 7 | 
            +
                  module Body
         | 
| 8 | 
            +
                    # A `Dialog::Body` is a compositional component, used to render the
         | 
| 9 | 
            +
                    # innards of a dialog. See <%= link_to_component(Ariadne::UI::Dialog::Component) %>.
         | 
| 10 | 
            +
                    class Component < Ariadne::BaseComponent
         | 
| 11 | 
            +
                      attr_accessor :context
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                      accepts_html_attributes do |html_attrs|
         | 
| 14 | 
            +
                        html_attrs[:class] = merge_tailwind_classes([style, html_attrs[:class]].join(" "))
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                        html_attrs
         | 
| 17 | 
            +
                      end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                      style do
         | 
| 20 | 
            +
                        base do
         | 
| 21 | 
            +
                          []
         | 
| 22 | 
            +
                        end
         | 
| 23 | 
            +
                      end
         | 
| 24 | 
            +
                    end
         | 
| 25 | 
            +
                  end
         | 
| 26 | 
            +
                end
         | 
| 27 | 
            +
              end
         | 
| 28 | 
            +
            end
         | 
| @@ -1,29 +1,30 @@ | |
| 1 1 | 
             
            <div
         | 
| 2 | 
            -
              class="ariadne-contents"
         | 
| 3 2 | 
             
              data-controller="<%= stimulus_name %>"
         | 
| 4 | 
            -
              data-action="click@window-><%= stimulus_name %>#windowClick"
         | 
| 5 | 
            -
              <%=  | 
| 6 | 
            -
              <%= trigger %>
         | 
| 7 | 
            -
             | 
| 3 | 
            +
              data-action="click@window-><%= stimulus_name %>#windowClick">
         | 
| 4 | 
            +
              <%= reveal_button %>
         | 
| 8 5 | 
             
              <dialog
         | 
| 9 | 
            -
                class="<%=  | 
| 10 | 
            -
                data-<%= stimulus_name %>-target="dialog" | 
| 11 | 
            -
                 | 
| 12 | 
            -
             | 
| 13 | 
            -
             | 
| 14 | 
            -
             | 
| 15 | 
            -
             | 
| 16 | 
            -
             | 
| 17 | 
            -
             | 
| 18 | 
            -
             | 
| 19 | 
            -
                      <div class="ariadne-flex ariadne-gap-2 ariadne-flex-wrap"><%= footer %></div>
         | 
| 20 | 
            -
                    <% end %>
         | 
| 21 | 
            -
                  </div>
         | 
| 22 | 
            -
                  <div class="ariadne-absolute ariadne-end-3 ariadne-top-3">
         | 
| 23 | 
            -
                    <%= render Ariadne::UI::Button::Component.new(
         | 
| 24 | 
            -
                      theme: :nude,
         | 
| 25 | 
            -
                      html_attrs: { "data-action": "click->#{stimulus_name}#triggerClick", aria: { label: trigger_close_label } }).as_icon(icon: "x-mark", variant: :outline) %>
         | 
| 26 | 
            -
                  </div>
         | 
| 6 | 
            +
                class="<%= html_attrs[:class] %>"
         | 
| 7 | 
            +
                data-<%= stimulus_name %>-target="dialog"
         | 
| 8 | 
            +
                <%= html_attributes %>>
         | 
| 9 | 
            +
                <div class="ariadne-flex ariadne-flex-col ariadne-space-y-2 ariadne-text-center sm:ariadne-text-left">
         | 
| 10 | 
            +
                  <span id="<%= dialog_id %>-title" class="ariadne-text-lg ariadne-font-semibold"><%= title %></span>
         | 
| 11 | 
            +
              <% if content.present? %>
         | 
| 12 | 
            +
                <%= content %>
         | 
| 13 | 
            +
              <% else %>
         | 
| 14 | 
            +
                <div data-labelled-by="<%= labelledby %>">
         | 
| 15 | 
            +
                  <%= body %>
         | 
| 27 16 | 
             
                </div>
         | 
| 28 | 
            -
               | 
| 17 | 
            +
              <% end %>
         | 
| 18 | 
            +
              <% if footer? %>
         | 
| 19 | 
            +
                <%= footer %>
         | 
| 20 | 
            +
              <% end %>
         | 
| 21 | 
            +
            </div>
         | 
| 22 | 
            +
            <div class="ariadne-absolute ariadne-end-3 ariadne-top-3">
         | 
| 23 | 
            +
              <%= render Ariadne::UI::Button::Component.new(
         | 
| 24 | 
            +
                      scheme: :nude,
         | 
| 25 | 
            +
                      size: :xs,
         | 
| 26 | 
            +
                      html_attrs: { "data-action": "click->#{stimulus_name}#swapVisibility", aria: { label: dialog_close_label } }).as_icon(icon: "x-mark", variant: :outline) %>
         | 
| 27 | 
            +
            </div>
         | 
| 28 | 
            +
            </div>
         | 
| 29 | 
            +
            </dialog>
         | 
| 29 30 | 
             
            </div>
         | 
| @@ -4,16 +4,83 @@ | |
| 4 4 | 
             
            module Ariadne
         | 
| 5 5 | 
             
              module UI
         | 
| 6 6 | 
             
                module Dialog
         | 
| 7 | 
            +
                  # A `Dialog` is used to remove the user from the main application flow,
         | 
| 8 | 
            +
                  # to confirm actions, ask for disambiguation or to present small forms.
         | 
| 9 | 
            +
                  #
         | 
| 10 | 
            +
                  # @accessibility
         | 
| 11 | 
            +
                  #   - **Dialog Accessible Name**: A dialog should have an accessible name,
         | 
| 12 | 
            +
                  #   so screen readers are aware of the purpose of the dialog when it opens.
         | 
| 13 | 
            +
                  #   Give an accessible name by setting `:title`. The accessible name will be
         | 
| 14 | 
            +
                  #   used as the main heading inside the dialog.
         | 
| 15 | 
            +
                  #   - **Dialog unique id**: A dialog should be unique. Give a unique id by
         | 
| 16 | 
            +
                  #   setting `:dialog_id`. If no `:dialog_id` is given, a random
         | 
| 17 | 
            +
                  #   hex id is generated.
         | 
| 18 | 
            +
                  #
         | 
| 19 | 
            +
                  #   The combination of both `:title` and `:dialog_id` establishes an
         | 
| 20 | 
            +
                  #   `aria-labelledby` relationship between the title and the unique id of
         | 
| 21 | 
            +
                  #   the dialog.
         | 
| 7 22 | 
             
                  class Component < Ariadne::BaseComponent
         | 
| 23 | 
            +
                    # @param title [String] The id of the dialog.
         | 
| 8 24 | 
             
                    option :title
         | 
| 9 | 
            -
                     | 
| 10 | 
            -
                    option : | 
| 11 | 
            -
                    option :width, default: proc { :base }
         | 
| 25 | 
            +
                    # @param dialog_close_label [String] ("Close") The aria label for the button which closes the dialog. Necessary if using the `close_button` slot.
         | 
| 26 | 
            +
                    option :dialog_close_label, default: -> { "Close" }
         | 
| 12 27 |  | 
| 13 | 
            -
                     | 
| 14 | 
            -
                     | 
| 28 | 
            +
                    # @param dialog_id  [String] (UUID) The id of the dialog. If no `:dialog_id` is given, a random
         | 
| 29 | 
            +
                    # UUID-based ID is generated.
         | 
| 30 | 
            +
                    option :dialog_id, default: -> { self.class.generate_id }
         | 
| 15 31 |  | 
| 16 | 
            -
                     | 
| 32 | 
            +
                    # @param [Symbol] width (:narrow) Indicates the width of the button. Can be either `:narrow` or `:full`.
         | 
| 33 | 
            +
                    option :width, default: proc { :narrow }
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                    # The button to open the dialog.
         | 
| 36 | 
            +
                    #
         | 
| 37 | 
            +
                    # @param options [Hash] Same arguments as <%= link_to_component(Ariadne::UI::Button::Component) %>.
         | 
| 38 | 
            +
                    renders_one :reveal_button, lambda { |**options|
         | 
| 39 | 
            +
                      component_data_attrs = {
         | 
| 40 | 
            +
                        action: "#{Ariadne::UI::Dialog::Component.stimulus_name}#swapVisibility",
         | 
| 41 | 
            +
                      }
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                      options[:html_attrs] ||= {}
         | 
| 44 | 
            +
                      options[:html_attrs][:data] = merge_data_attributes(options[:html_attrs], component_data_attrs)
         | 
| 45 | 
            +
                      Ariadne::UI::Button::Component.new(**options)
         | 
| 46 | 
            +
                    }
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                    # The content.
         | 
| 49 | 
            +
                    #
         | 
| 50 | 
            +
                    # @param system_arguments [Hash] Same arguments as <%= link_to_component(Ariadne::UI::Dialog::Body::Component) %>.
         | 
| 51 | 
            +
                    renders_one :body, Ariadne::UI::Dialog::Body::Component
         | 
| 52 | 
            +
             | 
| 53 | 
            +
                    # Optional footer content to the dialog; usually buttons.
         | 
| 54 | 
            +
                    #
         | 
| 55 | 
            +
                    # @param system_arguments [Hash] Same arguments as <%= link_to_component(Ariadne::UI::Dialog::Footer::Component) %>.
         | 
| 56 | 
            +
                    renders_one :footer, Ariadne::UI::Dialog::Footer::Component
         | 
| 57 | 
            +
             | 
| 58 | 
            +
                    accepts_html_attributes do |html_attrs|
         | 
| 59 | 
            +
                      html_attrs[:class] = merge_tailwind_classes([style(width:), html_attrs[:class]].join(" "))
         | 
| 60 | 
            +
             | 
| 61 | 
            +
                      @dialog_id = html_attrs[:id].presence || @dialog_id
         | 
| 62 | 
            +
                      html_attrs[:id] = @dialog_id
         | 
| 63 | 
            +
             | 
| 64 | 
            +
                      html_attrs[:aria] = { modal: true }
         | 
| 65 | 
            +
                      html_attrs[:aria] = merge_aria(
         | 
| 66 | 
            +
                        html_attrs, {
         | 
| 67 | 
            +
                          aria: {
         | 
| 68 | 
            +
                            labelledby: labelledby,
         | 
| 69 | 
            +
                            describedby: describedby,
         | 
| 70 | 
            +
                          },
         | 
| 71 | 
            +
                        }
         | 
| 72 | 
            +
                      )
         | 
| 73 | 
            +
             | 
| 74 | 
            +
                      html_attrs
         | 
| 75 | 
            +
                    end
         | 
| 76 | 
            +
             | 
| 77 | 
            +
                    def labelledby
         | 
| 78 | 
            +
                      "#{@dialog_id}-title"
         | 
| 79 | 
            +
                    end
         | 
| 80 | 
            +
             | 
| 81 | 
            +
                    def describedby
         | 
| 82 | 
            +
                      "#{@dialog_id}-description"
         | 
| 83 | 
            +
                    end
         | 
| 17 84 |  | 
| 18 85 | 
             
                    style do
         | 
| 19 86 | 
             
                      base do
         | 
| @@ -22,27 +89,29 @@ module Ariadne | |
| 22 89 | 
             
                          "ariadne-max-h-[90-vh]",
         | 
| 23 90 | 
             
                          "ariadne-shadow-xl",
         | 
| 24 91 | 
             
                          "ariadne-rounded-2xl",
         | 
| 25 | 
            -
                          "ariadne-bg- | 
| 26 | 
            -
                          " | 
| 92 | 
            +
                          "ariadne-bg-card",
         | 
| 93 | 
            +
                          "ariadne-text-card-foreground",
         | 
| 27 94 | 
             
                          "ariadne-text-content",
         | 
| 28 95 | 
             
                          "dark:ariadne-text-content-dark",
         | 
| 29 96 | 
             
                          "backdrop:ariadne-bg-zinc-900/20",
         | 
| 30 97 | 
             
                          "backdrop:dark:ariadne-bg-zinc-100/20",
         | 
| 98 | 
            +
                          "ariadne-relative",
         | 
| 99 | 
            +
                          "ariadne-px-4",
         | 
| 100 | 
            +
                          "ariadne-pb-4",
         | 
| 101 | 
            +
                          "ariadne-pt-5",
         | 
| 102 | 
            +
                          "ariadne-text-left",
         | 
| 103 | 
            +
                          "ariadne-shadow-xl",
         | 
| 104 | 
            +
                          "ariadne-transition-all",
         | 
| 105 | 
            +
                          "sm:ariadne-w-full",
         | 
| 106 | 
            +
                          "sm:ariadne-max-w-xl",
         | 
| 107 | 
            +
                          "sm:ariadne-p-6",
         | 
| 31 108 | 
             
                        ]
         | 
| 32 109 | 
             
                      end
         | 
| 33 110 | 
             
                      variants do
         | 
| 34 111 | 
             
                        width do
         | 
| 35 | 
            -
                           | 
| 36 | 
            -
                            [
         | 
| 37 | 
            -
                              "ariadne-w-96",
         | 
| 38 | 
            -
                              "ariadne-max-w-[90vw]",
         | 
| 39 | 
            -
                            ]
         | 
| 40 | 
            -
                          end
         | 
| 41 | 
            -
             | 
| 42 | 
            -
                          wide do
         | 
| 112 | 
            +
                          full do
         | 
| 43 113 | 
             
                            [
         | 
| 44 | 
            -
                              "ariadne-w- | 
| 45 | 
            -
                              "ariadne-max-w-[90vw]",
         | 
| 114 | 
            +
                              "ariadne-w-full",
         | 
| 46 115 | 
             
                            ]
         | 
| 47 116 | 
             
                          end
         | 
| 48 117 | 
             
                        end
         | 
| @@ -9,17 +9,21 @@ export default class DialogController extends controllerFactory()({ | |
| 9 9 | 
             
                this.dialogTarget.close()
         | 
| 10 10 | 
             
                enableBodyScroll(this.dialogTarget)
         | 
| 11 11 | 
             
              }
         | 
| 12 | 
            +
             | 
| 12 13 | 
             
              disconnect() {
         | 
| 13 14 | 
             
                this.close()
         | 
| 14 15 | 
             
              }
         | 
| 16 | 
            +
             | 
| 15 17 | 
             
              open() {
         | 
| 16 18 | 
             
                this.dialogTarget.showModal()
         | 
| 17 19 | 
             
                disableBodyScroll(this.dialogTarget, {reserveScrollBarGap: true})
         | 
| 18 20 | 
             
              }
         | 
| 19 | 
            -
             | 
| 21 | 
            +
             | 
| 22 | 
            +
              swapVisibility() {
         | 
| 20 23 | 
             
                if (this.dialogTarget.open) this.close()
         | 
| 21 24 | 
             
                else this.open()
         | 
| 22 25 | 
             
              }
         | 
| 26 | 
            +
             | 
| 23 27 | 
             
              windowClick(e: MouseEvent) {
         | 
| 24 28 | 
             
                if (e.target === this.dialogTarget) {
         | 
| 25 29 | 
             
                  this.close()
         | 
| @@ -0,0 +1,34 @@ | |
| 1 | 
            +
            # typed: false
         | 
| 2 | 
            +
            # frozen_string_literal: true
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            module Ariadne
         | 
| 5 | 
            +
              module UI
         | 
| 6 | 
            +
                module Dialog
         | 
| 7 | 
            +
                  module Footer
         | 
| 8 | 
            +
                    # A `Dialog::Footer` is a compositional component, used to render the
         | 
| 9 | 
            +
                    # innards of a dialog. See <%= link_to_component(Ariadne::UI::Dialog::Component) %>.
         | 
| 10 | 
            +
                    class Component < Ariadne::BaseComponent
         | 
| 11 | 
            +
                      attr_accessor :context
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                      accepts_html_attributes do |html_attrs|
         | 
| 14 | 
            +
                        html_attrs[:class] = merge_tailwind_classes([style, html_attrs[:class]].join(" "))
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                        html_attrs
         | 
| 17 | 
            +
                      end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                      style do
         | 
| 20 | 
            +
                        base do
         | 
| 21 | 
            +
                          [
         | 
| 22 | 
            +
                            "ariadne-flex",
         | 
| 23 | 
            +
                            "ariadne-flex-col-reverse",
         | 
| 24 | 
            +
                            "sm:ariadne-flex-row",
         | 
| 25 | 
            +
                            "sm:ariadne-justify-end",
         | 
| 26 | 
            +
                            "sm:ariadne-space-x-2",
         | 
| 27 | 
            +
                          ]
         | 
| 28 | 
            +
                        end
         | 
| 29 | 
            +
                      end
         | 
| 30 | 
            +
                    end
         | 
| 31 | 
            +
                  end
         | 
| 32 | 
            +
                end
         | 
| 33 | 
            +
              end
         | 
| 34 | 
            +
            end
         | 
| @@ -6,36 +6,36 @@ require "heroicons_helper" | |
| 6 6 | 
             
            module Ariadne
         | 
| 7 7 | 
             
              module UI
         | 
| 8 8 | 
             
                module Heroicon
         | 
| 9 | 
            -
                  #  | 
| 10 | 
            -
                  #   <%= render(Ariadne::UI::Heroicon::Component.new(icon: :check, variant: HeroiconsHelper::Icon::VARIANT_OUTLINE)) %>
         | 
| 11 | 
            -
                  #   <%= render(Ariadne::UI::Heroicon::Component.new(icon: :check, variant: HeroiconsHelper::Icon::VARIANT_SOLID)) %>
         | 
| 12 | 
            -
                  #
         | 
| 13 | 
            -
                  # @example Medium
         | 
| 14 | 
            -
                  #   <%= render(Ariadne::UI::Heroicon::Component.new(icon: :"user-group", variant: HeroiconsHelper::Icon::VARIANT_OUTLINE, size: :md)) %>
         | 
| 15 | 
            -
                  #
         | 
| 16 | 
            -
                  # @example Helper
         | 
| 17 | 
            -
                  #   <%= ariadne_heroicon(icon: :check, variant: HeroiconsHelper::Icon::VARIANT_OUTLINE) %>
         | 
| 18 | 
            -
                  #
         | 
| 19 | 
            -
                  # @param tag [Symbol, String] The rendered tag name
         | 
| 20 | 
            -
                  # @param classes [String] <%= link_to_classes_docs %>
         | 
| 21 | 
            -
                  # @param icon [Symbol, String] Name of <%= link_to_heroicons %> to use.
         | 
| 22 | 
            -
                  # @param variant [String] <%= one_of(HeroiconsHelper::Icon::VALID_VARIANTS, sort: false) %>
         | 
| 23 | 
            -
                  # @param size [Symbol] <%= one_of(Ariadne::UI::Heroicon::Component::SIZE_MAPPINGS, sort: false) %>
         | 
| 9 | 
            +
                  # Use this component whenever you need to render a [Heroicon](https://heroicons.com/) SVG icon.
         | 
| 24 10 | 
             
                  class Component < Ariadne::BaseComponent
         | 
| 25 | 
            -
                     | 
| 11 | 
            +
                    DEFAULT_SIZE = :md
         | 
| 26 12 |  | 
| 13 | 
            +
                    # @param icon [Symbol, String] The name of <%= link_to_heroicons %> to use.
         | 
| 27 14 | 
             
                    option :icon
         | 
| 15 | 
            +
                    # @param variant [String] The type of variant to use. <%= one_of(HeroiconsHelper::Icon::VALID_VARIANTS) %>
         | 
| 28 16 | 
             
                    option :variant
         | 
| 29 | 
            -
                     | 
| 17 | 
            +
                    # @param [Symbol] size (Ariadne::UI::Heroicon::DEFAULT_SIZE) The size of the badge. <%= one_of(Ariadne::SizeHelper::VALID_SIZES) %>
         | 
| 18 | 
            +
                    option :size, default: proc { DEFAULT_SIZE }
         | 
| 30 19 |  | 
| 31 20 | 
             
                    include IconHelper
         | 
| 32 21 | 
             
                    include HeroiconsHelper
         | 
| 33 22 |  | 
| 34 23 | 
             
                    accepts_html_attributes do |html_attrs|
         | 
| 35 | 
            -
                      classes = [ | 
| 36 | 
            -
             | 
| 37 | 
            -
             | 
| 38 | 
            -
             | 
| 24 | 
            +
                      classes = [
         | 
| 25 | 
            +
                        @heroicon.attributes["class"],
         | 
| 26 | 
            +
                        style(size: @size),
         | 
| 27 | 
            +
                        html_attrs[:class],
         | 
| 28 | 
            +
                      ]
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                      html_attrs[:class] = merge_tailwind_classes(classes)
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                      html_attrs[:aria] ||= {}
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                      if html_attrs[:aria][:label] || html_attrs[:"aria-label"]
         | 
| 35 | 
            +
                        html_attrs[:role] = "img"
         | 
| 36 | 
            +
                      else
         | 
| 37 | 
            +
                        html_attrs[:aria][:hidden] = true
         | 
| 38 | 
            +
                      end
         | 
| 39 39 | 
             
                    end
         | 
| 40 40 |  | 
| 41 41 | 
             
                    def initialize(**options)
         | 
| @@ -4,36 +4,24 @@ | |
| 4 4 | 
             
            module Ariadne
         | 
| 5 5 | 
             
              module UI
         | 
| 6 6 | 
             
                module Image
         | 
| 7 | 
            -
                  #  | 
| 7 | 
            +
                  # Component for rendering images.
         | 
| 8 8 | 
             
                  #
         | 
| 9 | 
            -
                  # | 
| 10 | 
            -
                  #
         | 
| 11 | 
            -
                  # @example Helper
         | 
| 12 | 
            -
                  #
         | 
| 13 | 
            -
                  #   <%= ariadne_image(src: "https://github.com/github.png", alt: "GitHub") %>
         | 
| 14 | 
            -
                  #
         | 
| 15 | 
            -
                  # @example Lazy loading
         | 
| 16 | 
            -
                  #
         | 
| 17 | 
            -
                  #   <%= render(Ariadne::ImageComponent.new(src: "https://github.com/github.png", alt: "GitHub", lazy: true)) %>
         | 
| 18 | 
            -
                  #
         | 
| 19 | 
            -
                  # @example Custom size
         | 
| 20 | 
            -
                  #
         | 
| 21 | 
            -
                  #   <%= render(Ariadne::ImageComponent.new(src: "https://github.com/github.png", alt: "GitHub", attributes: { height: 100, width: 100 })) %>
         | 
| 22 | 
            -
                  #
         | 
| 23 | 
            -
                  # @param tag [Symbol, String] The rendered tag name
         | 
| 24 | 
            -
                  # @param src [String] The source url of the image.
         | 
| 25 | 
            -
                  # @param alt [String] Specifies an alternate text for the image.
         | 
| 26 | 
            -
                  # @param lazy [Boolean] Whether or not to lazily load the image.
         | 
| 27 | 
            -
                  # @param classes [String] <%= link_to_classes_docs %>
         | 
| 28 | 
            -
                  # @param attributes [Hash] <%= link_to_attributes_docs %>
         | 
| 9 | 
            +
                  # @accessibility
         | 
| 10 | 
            +
                  #   Always provide a meaningful `alt`.
         | 
| 29 11 | 
             
                  class Component < Ariadne::BaseComponent
         | 
| 12 | 
            +
                    DEFAULT_SIZE = :md
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                    # @param src [String] The source url of the image.
         | 
| 30 15 | 
             
                    option :src
         | 
| 16 | 
            +
                    # @param alt [String] Specifies an alternate text for the image.
         | 
| 31 17 | 
             
                    option :alt
         | 
| 32 | 
            -
                     | 
| 18 | 
            +
                    # @param [Symbol] size (Ariadne::UI::Image::DEFAULT_SIZE) The size of the badge. <%= one_of(Ariadne::SizeHelper::VALID_SIZES) %>
         | 
| 19 | 
            +
                    option :size, default: -> { DEFAULT_SIZE }
         | 
| 20 | 
            +
                    # @param lazy [Boolean] Whether or not to lazily load the image.
         | 
| 33 21 | 
             
                    option :lazy, default: -> { false }
         | 
| 34 22 |  | 
| 35 23 | 
             
                    accepts_html_attributes do |html_attrs|
         | 
| 36 | 
            -
                      html_attrs[:class] =  | 
| 24 | 
            +
                      html_attrs[:class] = merge_tailwind_classes([style(size: @size), html_attrs[:class]].join(" "))
         | 
| 37 25 |  | 
| 38 26 | 
             
                      html_attrs[:src] = @src
         | 
| 39 27 | 
             
                      html_attrs[:alt] = @alt
         | 
| @@ -4,16 +4,27 @@ | |
| 4 4 | 
             
            module Ariadne
         | 
| 5 5 | 
             
              module UI
         | 
| 6 6 | 
             
                module Link
         | 
| 7 | 
            +
                  # Use this to navigate from one page to another. `Link` styles anchor tags with default styling and hover text-decoration.
         | 
| 8 | 
            +
                  #
         | 
| 9 | 
            +
                  # @behaviors <%= link_to_component(Ariadne::Behaviors::Tooltipable) %>
         | 
| 7 10 | 
             
                  class Component < Ariadne::BaseComponent
         | 
| 11 | 
            +
                    # @param [String] href URL to be used for the link.
         | 
| 8 12 | 
             
                    option :href
         | 
| 9 13 |  | 
| 10 | 
            -
                     | 
| 11 | 
            -
                     | 
| 14 | 
            +
                    DEFAULT_SIZE = :md
         | 
| 15 | 
            +
                    DEFAULT_SCHEME = :base
         | 
| 16 | 
            +
                    SCHEME_OPTIONS = [DEFAULT_SCHEME, :nude, :none, :thick].freeze
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                    # @param [Symbol] theme (:primary) Indicates the link's design scheme. <%= one_of(Ariadne::UI::Link::Component::SCHEME_OPTIONS) %>
         | 
| 19 | 
            +
                    option :scheme, default: -> { :base }
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                    # @param [Symbol] size (Ariadne::UI::Link::DEFAULT_SIZE) The size of the link. <%= one_of(Ariadne::SizeHelper::VALID_SIZES) %>
         | 
| 22 | 
            +
                    option :size, default: proc { DEFAULT_SIZE }
         | 
| 12 23 |  | 
| 13 24 | 
             
                    include Ariadne::Behaviors::Tooltipable
         | 
| 14 25 |  | 
| 15 26 | 
             
                    accepts_html_attributes do |html_attrs|
         | 
| 16 | 
            -
                      html_attrs[:class] =  | 
| 27 | 
            +
                      html_attrs[:class] = merge_tailwind_classes([style(scheme:, size:), html_attrs[:class]].join(" "))
         | 
| 17 28 | 
             
                    end
         | 
| 18 29 |  | 
| 19 30 | 
             
                    style do
         | 
| @@ -30,7 +41,7 @@ module Ariadne | |
| 30 41 | 
             
                      end
         | 
| 31 42 |  | 
| 32 43 | 
             
                      variants do
         | 
| 33 | 
            -
                         | 
| 44 | 
            +
                        scheme do
         | 
| 34 45 | 
             
                          base do
         | 
| 35 46 | 
             
                            [
         | 
| 36 47 | 
             
                              "ariadne-text-indigo-600",
         | 
| @@ -75,11 +86,13 @@ module Ariadne | |
| 75 86 | 
             
                            ]
         | 
| 76 87 | 
             
                          end
         | 
| 77 88 | 
             
                        end
         | 
| 89 | 
            +
             | 
| 78 90 | 
             
                        size do
         | 
| 79 91 | 
             
                          xs { "ariadne-text-xs ariadne-gap-0.5 [&>svg]:ariadne-size-3" }
         | 
| 80 92 | 
             
                          sm { "ariadne-text-sm ariadne-gap-0.5 [&>svg]:ariadne-size-4" }
         | 
| 81 93 | 
             
                          md { "ariadne-text-base ariadne-gap-1 [&>svg]:ariadne-size-4" }
         | 
| 82 94 | 
             
                          lg { "ariadne-text-lg ariadne-gap-1 [&>svg]:ariadne-size-5" }
         | 
| 95 | 
            +
                          xl { "ariadne-text-xl ariadne-gap-1 [&>svg]:ariadne-size-6" }
         | 
| 83 96 | 
             
                        end
         | 
| 84 97 | 
             
                      end
         | 
| 85 98 | 
             
                    end
         |