-
Notifications
You must be signed in to change notification settings - Fork 67
[Feature] RubyUI 2.0 — Phase 2.0b: the other 173 ERB fixtures #554
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
ba778c1
3397e40
9cd02a0
d22a3d8
e7fad45
19c1989
2339de8
6d24bd3
1c2a6e8
c83dc4c
ed087fa
d9fe85e
8ac23ac
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Large diffs are not rendered by default.
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| <%= render RubyUI::Accordion.new do %><%= render RubyUI::AccordionItem.new(open: true, rotate_icon: 90) do %><%= render RubyUI::AccordionTrigger.new do %><p>What is RubyUI?</p><%= render RubyUI::AccordionIcon.new %><% end %><%= render RubyUI::AccordionContent.new do %><p>A UI component library for Ruby.</p><% end %><% end %><% end %> |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| <%= render RubyUI::Accordion.new do %><%= render RubyUI::AccordionItem.new do %><%= render RubyUI::AccordionDefaultTrigger.new do %>Title<% end %><%= render RubyUI::AccordionDefaultContent.new do %>Content<% end %><% end %><% end %> |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| <%= render RubyUI::Alert.new do %><%= render RubyUI::AlertTitle.new do %>Heads up!<% end %><%= render RubyUI::AlertDescription.new do %>You can add components to your app.<% end %><% end %> |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| <%= render RubyUI::Alert.new(variant: :destructive) do %><%= render RubyUI::AlertTitle.new do %>Error<% end %><%= render RubyUI::AlertDescription.new do %>Your session expired.<% end %><% end %> |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| <%= render RubyUI::Alert.new(variant: :success) do %><%= render RubyUI::AlertTitle.new do %>Done<% end %><% end %> |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| <%= render RubyUI::Alert.new(variant: :warning) do %><%= render RubyUI::AlertTitle.new do %>Careful<% end %><% end %> |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| <%= render RubyUI::AlertDialog.new do %><%= render RubyUI::AlertDialogTrigger.new do %><%= render RubyUI::Button.new do %>Show dialog<% end %><% end %><%= render RubyUI::AlertDialogContent.new do %><%= render RubyUI::AlertDialogHeader.new do %><%= render RubyUI::AlertDialogTitle.new do %>Are you absolutely sure?<% end %><%= render RubyUI::AlertDialogDescription.new do %>This action cannot be undone.<% end %><% end %><%= render RubyUI::AlertDialogFooter.new do %><%= render RubyUI::AlertDialogCancel.new do %>Cancel<% end %><%= render RubyUI::AlertDialogAction.new do %>Continue<% end %><% end %><% end %><% end %> |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| <%= render RubyUI::AlertDialog.new(open: true) do %><%= render RubyUI::AlertDialogContent.new do %><%= render RubyUI::AlertDialogTitle.new do %>Open<% end %><% end %><% end %> |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| <%= render RubyUI::AspectRatio.new do %><img alt="Placeholder" loading="lazy" src="/placeholder.png"><% end %> |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| <%= render RubyUI::AspectRatio.new(aspect_ratio: "1/1", class: "rounded-md border") do %><img alt="Placeholder" src="/placeholder.png"><% end %> |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| <%= render RubyUI::Avatar.new do %><%= render RubyUI::AvatarImage.new(src: "/avatar.png", alt: "Jane Doe") %><%= render RubyUI::AvatarFallback.new do %>JD<% end %><% end %> |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| <%= render RubyUI::Avatar.new(size: :lg) do %><%= render RubyUI::AvatarFallback.new do %>JD<% end %><% end %> |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| <%= render RubyUI::Avatar.new(size: :md) do %><%= render RubyUI::AvatarFallback.new do %>JD<% end %><% end %> |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| <%= render RubyUI::Avatar.new(size: :sm) do %><%= render RubyUI::AvatarFallback.new do %>JD<% end %><% end %> |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| <%= render RubyUI::Avatar.new(size: :xl) do %><%= render RubyUI::AvatarFallback.new do %>JD<% end %><% end %> |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| <% RubyUI::Badge::COLORS.each_key do |variant| %><%= render RubyUI::Badge.new(variant: variant) do %><%= variant %><% end %><% end %> |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| <%= render RubyUI::Badge.new(size: :lg) do %>Badge<% end %> |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| <%= render RubyUI::Badge.new(size: :md) do %>Badge<% end %> |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| <%= render RubyUI::Badge.new(size: :sm) do %>Badge<% end %> |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| <%= render RubyUI::Breadcrumb.new do %><%= render RubyUI::BreadcrumbList.new do %><%= render RubyUI::BreadcrumbItem.new do %><%= render RubyUI::BreadcrumbLink.new(href: "/") do %>Home<% end %><% end %><%= render RubyUI::BreadcrumbSeparator.new %><%= render RubyUI::BreadcrumbItem.new do %><%= render RubyUI::BreadcrumbEllipsis.new %><% end %><%= render RubyUI::BreadcrumbSeparator.new %><%= render RubyUI::BreadcrumbItem.new do %><%= render RubyUI::BreadcrumbPage.new do %>Current<% end %><% end %><% end %><% end %> |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| <%= render RubyUI::Bubble.new do %><%= render RubyUI::BubbleContent.new(as: :a, href: "#") do %>Open<% end %><% end %> |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| <%= render RubyUI::Bubble.new do %><%= render RubyUI::BubbleContent.new do %>Hi<% end %><% end %> |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| <%= render RubyUI::BubbleGroup.new do %><%= render RubyUI::Bubble.new(variant: :muted, align: :end) do %><%= render RubyUI::BubbleContent.new do %>Hi<% end %><%= render RubyUI::BubbleReactions.new do %>OK<% end %><% end %><% end %> |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| <%= render RubyUI::BubbleReactions.new(side: :top, align: :start) do %>OK<% end %> |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| <%= render RubyUI::Calendar.new(input_id: "#event-date", selected_date: "2026-05-15", min_date: "2026-05-07", date_format: "dd/MM/yyyy", class: "rounded-md border shadow") %> |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| <%= render RubyUI::Calendar.new %> |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| <%= render RubyUI::CalendarHeader.new do %><%= render RubyUI::CalendarTitle.new(default: "May 2026") %><%= render RubyUI::CalendarPrev.new %><%= render RubyUI::CalendarNext.new %><% end %> |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| <%= render RubyUI::Card.new do %><%= render RubyUI::CardHeader.new do %><%= render RubyUI::CardTitle.new do %>Create project<% end %><%= render RubyUI::CardDescription.new do %>Deploy your new project in one click.<% end %><% end %><%= render RubyUI::CardContent.new do %>Body<% end %><%= render RubyUI::CardFooter.new do %><%= render RubyUI::Button.new do %>Deploy<% end %><% end %><% end %> |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| <%= render RubyUI::Carousel.new(orientation: :horizontal) do %><%= render RubyUI::CarouselContent.new do %><%= render RubyUI::CarouselItem.new do %>1<% end %><%= render RubyUI::CarouselItem.new do %>2<% end %><% end %><%= render RubyUI::CarouselPrevious.new %><%= render RubyUI::CarouselNext.new %><% end %> |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| <%= render RubyUI::Carousel.new(orientation: :vertical) do %><%= render RubyUI::CarouselContent.new do %><%= render RubyUI::CarouselItem.new do %>1<% end %><%= render RubyUI::CarouselItem.new do %>2<% end %><% end %><%= render RubyUI::CarouselPrevious.new %><%= render RubyUI::CarouselNext.new %><% end %> |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| <%= render RubyUI::Carousel.new(options: {loop: true, align: "start"}) do %><%= render RubyUI::CarouselContent.new do %><%= render RubyUI::CarouselItem.new do %>1<% end %><% end %><% end %> |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| <%= render RubyUI::Chart.new(options: {type: "bar", data: {labels: ["Phlex", "ERB"], datasets: [{label: "render time (ms)", data: [100, 520]}]}, options: {indexAxis: "y", scales: {y: {beginAtZero: true}}}}) %> |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| <%= render RubyUI::Checkbox.new(name: "terms", checked: true, disabled: true) %> |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| <%= render RubyUI::Checkbox.new(name: "terms", value: "1") %> |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| <%= render RubyUI::CheckboxGroup.new do %><%= render RubyUI::Checkbox.new(name: "colors[]", value: "red") %><%= render RubyUI::Checkbox.new(name: "colors[]", value: "blue") %><% end %> |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| <%= render RubyUI::Clipboard.new(success: "Copiado!", error: "Falhou!") do %><%= render RubyUI::ClipboardSource.new do %>gem install ruby_ui<% end %><%= render RubyUI::ClipboardTrigger.new do %><%= render RubyUI::Button.new(icon: true) do %>C<% end %><% end %><% end %> |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| <%= render RubyUI::Clipboard.new %> |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| <%= render RubyUI::ClipboardPopover.new(type: :error) do %>error<% end %> |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| <%= render RubyUI::ClipboardPopover.new(type: :success) do %>success<% end %> | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. P2: This fixture renders a ClipboardPopover whose panel is hidden at initial render (parent div has class="hidden"), but the recorded snapshot freezes the panel in data-state="open". ContextMenu, HoverCard, and Popover all rest hidden panels in data-state="closed" (see context_menu_content.rb, hover_card_content.rb, popover_content.rb), and starting "open" leaves the animate-in classes active at rest when the panel is not visible. Since this PR records the golden snapshot for this scenario, set ClipboardPopover#default_attrs state to :closed so hidden popovers start closed, then re-record the snapshot. Prompt for AI agents |
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| <%= render RubyUI::Codeblock.new("def hello_world\n puts \"Hello, world!\"\nend\n", syntax: :ruby) %> |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| <%= render RubyUI::Codeblock.new("puts :ok\n", syntax: :ruby, clipboard: false) %> |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| <%= render RubyUI::Collapsible.new do %><%= render RubyUI::CollapsibleTrigger.new do %><%= render RubyUI::Button.new(variant: :ghost) do %>Toggle<% end %><% end %><%= render RubyUI::CollapsibleContent.new do %>Hidden body<% end %><% end %> |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| <%= render RubyUI::Collapsible.new(open: true) do %><%= render RubyUI::CollapsibleTrigger.new do %><%= render RubyUI::Button.new(variant: :ghost) do %>Toggle<% end %><% end %><%= render RubyUI::CollapsibleContent.new do %>Visible body<% end %><% end %> |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| <%= render RubyUI::ComboboxBadge.new do %>Rails<% end %> |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| <%= render RubyUI::ComboboxClearButton.new %> |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| <%= render RubyUI::ComboboxInputTrigger.new(placeholder: "Pick one") %> |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| <%= render RubyUI::Combobox.new(multiple: true, term: "frameworks", placement: "top-start") do %><%= render RubyUI::ComboboxBadgeTrigger.new(placeholder: "Select", clear_button: true) %><%= render RubyUI::ComboboxPopover.new do %><%= render RubyUI::ComboboxList.new do %><%= render RubyUI::ComboboxToggleAllCheckbox.new %><%= render RubyUI::ComboboxItem.new do %><%= render RubyUI::ComboboxCheckbox.new(name: "Rails", value: "rails") %><%= render RubyUI::ComboboxItemIndicator.new %><% end %><% end %><% end %><% end %> |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| <%= render RubyUI::Combobox.new(term: "frameworks") do %><%= render RubyUI::ComboboxTrigger.new(placeholder: "Select your framework") %><%= render RubyUI::ComboboxPopover.new do %><%= render RubyUI::ComboboxSearchInput.new(placeholder: "Type the framework name") %><%= render RubyUI::ComboboxList.new do %><%= render RubyUI::ComboboxEmptyState.new do %>No results<% end %><%= render RubyUI::ComboboxListGroup.new(label: "Ruby") do %><%= render RubyUI::ComboboxItem.new do %><%= render RubyUI::ComboboxRadio.new(name: "Rails", value: "rails") %><% end %><%= render RubyUI::ComboboxItem.new do %><%= render RubyUI::ComboboxRadio.new(name: "Hanami", value: "hanami") %><% end %><% end %><% end %><% end %><% end %> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
P3: The fix makes the Instrumenter deterministic on a single thread, but the pin state it relies on is not thread-local:
@active,@hex_calls, and@rand_callsare instance variables on theGolden::Harnessmodule, shared by every thread and reset by each render. If two threads render concurrently (the fresh-thread test ingem/test/golden/harness_test.rbis the first code path that exercises threads), the second thread'sActiveSupport::Notifications.instrumentercall can run while another thread has@active == true; itsSecureRandom.hex(10)then callsnext_hexand consumes a shared counter slot, shifting the ids of the in-flight render and of the new render. Each render also rewrites the shared counters and toggles@active, so one thread'sensureturns the pin off while another thread is still rendering — letting real randomness leak into a pinned render. The claimed "identical output on a fresh thread" property therefore holds only when renders across threads never overlap. Make the counters and@activethread-local (Thread.current) or serialize renders with a Mutex, or document that the harness is single-threaded-only.Prompt for AI agents