Class: NitroKit::Toast::Item

Inherits:
Component
  • Object
show all
Defined in:
app/components/nitro_kit/toast.rb

Constant Summary collapse

VARIANTS =
%i[default info success warning error].freeze
ASSERTIVE_VARIANTS =
%i[error].freeze

Constants inherited from Component

Component::ADDITIVE_DATA_ATTRIBUTES, Component::COMPONENT_OWNED_DATA_ATTRIBUTES, Component::FORBIDDEN_ATTRIBUTES, Component::RESERVED_DATA_ATTRIBUTES

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(title: nil, description: nil, variant: :default, dismissible: true, id: nil, html: {}, aria: {}, data: {}, desperately_need_a_class: nil) ⇒ Item

Returns a new instance of Item.



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'app/components/nitro_kit/toast.rb', line 14

def initialize(
  title: nil,
  description: nil,
  variant: :default,
  dismissible: true,
  id: nil,
  html: {},
  aria: {},
  data: {},
  desperately_need_a_class: nil
)
  @title = optional_text(:title, title)
  @description = optional_text(:description, description)
  @variant = validate_choice!(:variant, variant, VARIANTS)
  @dismissible = validate_boolean!(:dismissible, dismissible)

  super(
    component: :toast_item,
    attributes: {
      id:,
      role: ASSERTIVE_VARIANTS.include?(@variant) ? "alert" : "status",
      data: {
        state: "open",
        turbo_temporary: true,
        nk__toast_target: "item",
        nk__toast_permanent: dismissible ? nil : "true",
        action: [
          "pointerenter->nk--toast#pause",
          "pointerleave->nk--toast#resume",
          "focusin->nk--toast#pause",
          "focusout->nk--toast#resume",
          "transitionend->nk--toast#remove"
        ].join(" ")
      }
    },
    html:,
    aria: aria.merge(atomic: true),
    data:,
    variant:,
    desperately_need_a_class:
  )
end

Instance Attribute Details

#descriptionObject (readonly)

Returns the value of attribute description.



57
58
59
# File 'app/components/nitro_kit/toast.rb', line 57

def description
  @description
end

#dismissibleObject (readonly)

Returns the value of attribute dismissible.



57
58
59
# File 'app/components/nitro_kit/toast.rb', line 57

def dismissible
  @dismissible
end

#titleObject (readonly)

Returns the value of attribute title.



57
58
59
# File 'app/components/nitro_kit/toast.rb', line 57

def title
  @title
end

#variantObject (readonly)

Returns the value of attribute variant.



57
58
59
# File 'app/components/nitro_kit/toast.rb', line 57

def variant
  @variant
end

Instance Method Details

#view_template(&block) ⇒ Object



59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'app/components/nitro_kit/toast.rb', line 59

def view_template(&block)
  if title.nil? && description.nil? && !block
    raise ArgumentError, "Toast item requires a title, description, or block"
  end

  li(**root_attributes) do
    div(**slot_attributes(:content)) do
      p(**slot_attributes(:title)) { plain(title) } if title
      div(**slot_attributes(:description)) do
        block ? yield : plain(description.to_s)
      end if description || block
    end

    dismiss_button if dismissible
  end
end