Class: Shadcn::BaseComponent

Inherits:
ViewComponent::Base
  • Object
show all
Includes:
Rails::Helpers::ClassNameHelper
Defined in:
app/components/shadcn/base_component.rb

Overview

Base class for all shadcn ViewComponents Provides common functionality like class merging and data attribute handling

Direct Known Subclasses

AccordionComponent, AccordionContentComponent, AccordionItemComponent, AccordionTriggerComponent, AlertComponent, AlertDescriptionComponent, AlertDialogActionComponent, AlertDialogCancelComponent, AlertDialogComponent, AlertDialogContentComponent, AlertDialogDescriptionComponent, AlertDialogFooterComponent, AlertDialogHeaderComponent, AlertDialogTitleComponent, AlertTitleComponent, AspectRatioComponent, AvatarComponent, AvatarFallbackComponent, BadgeComponent, BreadcrumbComponent, BreadcrumbItemComponent, ButtonComponent, ButtonGroupComponent, CalendarComponent, CardActionComponent, CardComponent, CardContentComponent, CardDescriptionComponent, CardFooterComponent, CardHeaderComponent, CardTitleComponent, CarouselComponent, CarouselContentComponent, CarouselItemComponent, CarouselNextComponent, CarouselPreviousComponent, CheckboxComponent, CollapsibleComponent, CollapsibleContentComponent, ComboboxComponent, CommandComponent, CommandDialogComponent, CommandEmptyComponent, CommandGroupComponent, CommandInputComponent, CommandItemComponent, CommandListComponent, CommandSeparatorComponent, CommandShortcutComponent, ContextMenuCheckboxItemComponent, ContextMenuComponent, ContextMenuContentComponent, ContextMenuItemComponent, ContextMenuLabelComponent, ContextMenuRadioGroupComponent, ContextMenuRadioItemComponent, ContextMenuSeparatorComponent, ContextMenuShortcutComponent, DatePickerComponent, DialogComponent, DialogContentComponent, DialogDescriptionComponent, DialogFooterComponent, DialogHeaderComponent, DialogTitleComponent, DrawerComponent, DrawerContentComponent, DrawerDescriptionComponent, DrawerFooterComponent, DrawerHeaderComponent, DrawerTitleComponent, DropdownMenuCheckboxItemComponent, DropdownMenuComponent, DropdownMenuContentComponent, DropdownMenuGroupComponent, DropdownMenuItemComponent, DropdownMenuLabelComponent, DropdownMenuRadioGroupComponent, DropdownMenuRadioItemComponent, DropdownMenuSeparatorComponent, DropdownMenuShortcutComponent, EmptyComponent, EmptyContentComponent, EmptyDescriptionComponent, EmptyHeaderComponent, EmptyMediaComponent, EmptyTitleComponent, FieldComponent, FieldComponent::DescriptionComponent, FieldComponent::ErrorComponent, HoverCardComponent, HoverCardContentComponent, InputComponent, InputGroupComponent, InputGroupComponent::AddonComponent, InputOtpComponent, InputOtpComponent::GroupComponent, InputOtpComponent::OtpSeparatorComponent, ItemActionsComponent, ItemComponent, ItemContentComponent, ItemDescriptionComponent, ItemFooterComponent, ItemGroupComponent, ItemHeaderComponent, ItemMediaComponent, ItemSeparatorComponent, ItemTitleComponent, KbdComponent, LabelComponent, MenubarCheckboxItemComponent, MenubarComponent, MenubarContentComponent, MenubarItemComponent, MenubarLabelComponent, MenubarMenuComponent, MenubarRadioGroupComponent, MenubarRadioItemComponent, MenubarSeparatorComponent, MenubarShortcutComponent, MenubarSubComponent, MenubarSubContentComponent, MenubarSubTriggerComponent, MenubarTriggerComponent, NativeSelectComponent, NativeSelectComponent::OptgroupComponent, NativeSelectComponent::OptionComponent, NavigationMenuComponent, NavigationMenuContentComponent, NavigationMenuItemComponent, NavigationMenuLinkComponent, NavigationMenuListComponent, NavigationMenuTriggerComponent, PaginationComponent, PaginationContentComponent, PaginationEllipsisComponent, PaginationItemComponent, PaginationNextComponent, PaginationPreviousComponent, PopoverComponent, PopoverContentComponent, ProgressComponent, RadioGroupComponent, RadioGroupItemComponent, ResizableHandleComponent, ResizablePanelComponent, ResizablePanelGroupComponent, ScrollAreaComponent, SelectComponent, SelectGroupComponent, SelectItemComponent, SelectSeparatorComponent, SeparatorComponent, SheetComponent, SheetContentComponent, SheetDescriptionComponent, SheetFooterComponent, SheetHeaderComponent, SheetTitleComponent, SidebarComponent, SidebarContentComponent, SidebarFooterComponent, SidebarGroupActionComponent, SidebarGroupComponent, SidebarGroupContentComponent, SidebarGroupLabelComponent, SidebarHeaderComponent, SidebarInsetComponent, SidebarMenuActionComponent, SidebarMenuBadgeComponent, SidebarMenuButtonComponent, SidebarMenuComponent, SidebarMenuItemComponent, SidebarMenuSkeletonComponent, SidebarMenuSubButtonComponent, SidebarMenuSubComponent, SidebarMenuSubItemComponent, SidebarProviderComponent, SidebarRailComponent, SidebarSeparatorComponent, SidebarTriggerComponent, SkeletonComponent, SliderComponent, SpinnerComponent, SwitchComponent, TableBodyComponent, TableCaptionComponent, TableCellComponent, TableComponent, TableFooterComponent, TableHeadComponent, TableHeaderComponent, TableRowComponent, TabsComponent, TabsContentComponent, TabsListComponent, TabsTriggerComponent, TextareaComponent, ToastActionComponent, ToastComponent, ToastDescriptionComponent, ToastTitleComponent, ToastViewportComponent, ToggleComponent, ToggleGroupComponent, ToggleGroupItemComponent, TooltipComponent, TypographyComponent

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Rails::Helpers::ClassNameHelper

#cn

Constructor Details

#initialize(class_name: nil, data: {}, **html_options, &block) ⇒ BaseComponent

Returns a new instance of BaseComponent.

Parameters:

  • class_name (String, nil) (defaults to: nil)

    Additional CSS classes (preferred)

  • class (String, nil)

    Alias for class_name (for Rails-like API)

  • data (Hash) (defaults to: {})

    Data attributes (will be prefixed with data-)

  • html_options (Hash)

    Additional HTML attributes



17
18
19
20
21
22
23
24
25
# File 'app/components/shadcn/base_component.rb', line 17

def initialize(class_name: nil, data: {}, **html_options, &block)
  # Support both class: and class_name: for better Rails compatibility
  # class_name takes precedence if both are provided
  html_class = html_options.delete(:class)
  @class_name = class_name || html_class
  @data = data
  @html_options = html_options
  @constructor_block = block
end

Instance Attribute Details

#class_nameObject (readonly)

Common attributes shared by all components



11
12
13
# File 'app/components/shadcn/base_component.rb', line 11

def class_name
  @class_name
end

#dataObject (readonly)

Common attributes shared by all components



11
12
13
# File 'app/components/shadcn/base_component.rb', line 11

def data
  @data
end

#html_optionsObject (readonly)

Common attributes shared by all components



11
12
13
# File 'app/components/shadcn/base_component.rb', line 11

def html_options
  @html_options
end

Instance Method Details

#contentObject

Override content to support blocks passed to new() This allows both syntaxes:

render Component.new { "text" }  # block to new()
render Component.new do %>text<% end  # block to render()

Note: Only calls blocks with arity 0 (no arguments). Blocks expecting arguments (like slot blocks) are handled by ViewComponent.



33
34
35
36
37
38
# File 'app/components/shadcn/base_component.rb', line 33

def content
  return super if super.present?
  return @constructor_block.call if @constructor_block && @constructor_block.arity == 0

  nil
end