Class: Shadcn::BaseComponent
- Inherits:
-
ViewComponent::Base
- Object
- ViewComponent::Base
- Shadcn::BaseComponent
- 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
-
#class_name ⇒ Object
readonly
Common attributes shared by all components.
-
#data ⇒ Object
readonly
Common attributes shared by all components.
-
#html_options ⇒ Object
readonly
Common attributes shared by all components.
Instance Method Summary collapse
-
#content ⇒ Object
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).
-
#initialize(class_name: nil, data: {}, **html_options, &block) ⇒ BaseComponent
constructor
A new instance of BaseComponent.
Methods included from Rails::Helpers::ClassNameHelper
Constructor Details
#initialize(class_name: nil, data: {}, **html_options, &block) ⇒ BaseComponent
Returns a new instance of BaseComponent.
17 18 19 20 21 22 23 24 25 |
# File 'app/components/shadcn/base_component.rb', line 17 def initialize(class_name: nil, data: {}, **, &block) # Support both class: and class_name: for better Rails compatibility # class_name takes precedence if both are provided html_class = .delete(:class) @class_name = class_name || html_class @data = data @html_options = @constructor_block = block end |
Instance Attribute Details
#class_name ⇒ Object (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 |
#data ⇒ Object (readonly)
Common attributes shared by all components
11 12 13 |
# File 'app/components/shadcn/base_component.rb', line 11 def data @data end |
#html_options ⇒ Object (readonly)
Common attributes shared by all components
11 12 13 |
# File 'app/components/shadcn/base_component.rb', line 11 def @html_options end |
Instance Method Details
#content ⇒ Object
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 |