Skip to content

polish: component quality bundle — DataTable server-side, TypedSelect, Sonner variants, overlay + dropdown UX - #27

Merged
Shewart merged 10 commits into
mainfrom
polish/component-quality
Jul 23, 2026
Merged

polish: component quality bundle — DataTable server-side, TypedSelect, Sonner variants, overlay + dropdown UX#27
Shewart merged 10 commits into
mainfrom
polish/component-quality

Conversation

@Shewart

@Shewart Shewart commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

Summary

Polish + quality-of-life bundle on top of the DataPicker (#25) and Chart (#26) releases, targeting v0.3.0. Groups a handful of separately-tractable changes into one release cut so the CLI templates only re-sync once.

New capabilities

  • DataTable server-side mode — new ServerSide + OnDataRequest parameters delegate paging/sort/filter to the caller; adds DataTableRequest / DataTableResponse<TItem> models.
  • TypedSelect — generic Select over string, enum, Guid, bool, int, decimal with InvariantCulture round-tripping. Inline SVG chevron (no Material Symbols dependency).
  • Sonner variantsInfo / Warning alongside existing Default / Success / Error; SonnerService queues toasts and auto-dismisses via AutoDismissAsync.

Overlay UX

  • Body-scroll lock on Dialog / Drawer / Sheet with a JS ref counter — nested modals (Dialog opens Drawer opens Sheet) don't prematurely unlock when the innermost closes.
  • Overlay demo fix — Drawer / Sheet in OverlayDemo.razor were missing Compositional="true", so header rendered but body did not.

Dropdown UX

  • Close-on-scroll opt-in (CloseOnScroll=false by default) on Combobox, DataPicker, MultiSelect, DatePicker, DateRangePicker.
  • Bubble-phase window listener — scrolling inside the option list no longer dismisses. Register/unregister lifecycle uses a Guid handle so multiple dropdowns don't clobber each other's listeners.

Bug fixes

  • Stepper active-state — removed IsFixed="true" from the parent CascadingValue. StepperStep children now re-render when the parent's _activeStep changes, so the current-step highlight updates live instead of only after close/reopen. Applies to both compositional (StepperStep) and data-driven (StepItems) modes.

Housekeeping

  • Deleted NET10/ShellUI.Preview/ project — superseded by ShellDocs for the docs surface.
  • Deleted .github/workflows/preview-pages.yml (fed the preview project).
  • CLI templates re-synced with live components (drift + Roslyn tests green).

Test plan

  • dotnet build shellui.sln — 0 errors
  • dotnet test shellui.sln — 80/80 passing
  • Demo: open Dialog, scroll the page — body should not scroll
  • Demo: open nested overlays (Drawer inside Dialog) — page scroll stays locked, unlocks only after both close
  • Demo: Stepper Wizard inside Dialog — click Next / Previous, current-step highlight updates without closing
  • Demo: dropdowns default — scrolling inside the option list does not dismiss
  • Demo: set CloseOnScroll="true" on a Combobox — page scroll dismisses the dropdown
  • Demo: trigger SonnerService.Info(...) and .Warning(...) — correct styling, auto-dismisses after default duration
  • Demo: DataTable in ServerSide mode with an async OnDataRequest — paging, sort, filter round-trip through the callback
  • Demo: TypedSelect bound to an enum — value round-trips correctly under a non-invariant culture (e.g. de-DE)

Shewart added 10 commits July 23, 2026 22:24
Added `CloseOnScroll` parameter to various UI components (e.g., Combobox, DatePicker, MultiSelect) to control dropdown dismissal on page scroll, aligning with shadcn/Radix behavior. Implemented async disposal and JS interop for managing dismiss events. Updated Drawer and Sheet components to support compositional behavior. Enhanced DataTable with server-side data handling capabilities, including new request and response models for better data management.
Deleted the `preview-pages.yml` workflow file, which was responsible for deploying the ShellUI Preview to GitHub Pages. This change simplifies the CI/CD setup by removing an unused workflow.
Added `CloseOnScroll` parameter to Combobox, DatePicker, MultiSelect, and other components to control dropdown dismissal on page scroll, aligning with shadcn/Radix behavior. Implemented async disposal and JavaScript interop for managing dismiss events. Enhanced DataTable with server-side data handling capabilities, including new request and response models for better data management.
…ponents

Enhanced UI components such as Combobox, DatePicker, MultiSelect, and others with a new `CloseOnScroll` parameter to control dropdown dismissal on page scroll, aligning with shadcn/Radix behavior. Implemented async disposal and JavaScript interop for managing dismiss events. Improved DataTable with server-side data handling capabilities, introducing new request and response models for better data management.
Introduced the `typed-select` component to the ComponentRegistry, enhancing the template options available for UI components. This addition improves the flexibility and usability of the ShellUI framework.
…de data handling

Introduced new `DataTableRequest` and `DataTableResponse<TItem>` classes to facilitate server-side data management in the DataTable component. These models support pagination, sorting, and filtering, enhancing the framework's capability to handle data efficiently.
Updated the SonnerService to support customizable toast durations and added methods for different toast types (Success, Error, Info, Warning). This enhancement allows for more flexible toast notifications, including auto-dismiss functionality based on specified durations.
Implemented a body scroll lock mechanism to prevent premature unlocking of nested modals and added event handling for dismiss events on window scroll and resize. This enhancement improves the user experience by ensuring modals behave correctly during interactions. Additionally, updated shellui-classes with new utility classes for motion reduction and text styling.
…ing classes

Added new safelist entries for motion reduction animations and text foreground variations to enhance the styling capabilities of ShellUI components. This update improves accessibility and visual consistency across the UI.
Updated the PROJECT_STATUS.md to reflect the fix for the stepper active-state highlighting, ensuring that the active step now correctly takes precedence over completed steps for both fill and icon. This change enhances the visual clarity of the component during use.
@Shewart
Shewart merged commit 7c02941 into main Jul 23, 2026
1 check passed
@Shewart
Shewart deleted the polish/component-quality branch July 23, 2026 20:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant