From e7af9f7ab894eedee79be5f75870f4ca4d4fb8ea Mon Sep 17 00:00:00 2001 From: Konstantin Dinev Date: Wed, 13 May 2026 15:15:22 +0300 Subject: [PATCH 01/10] feat(storybook): adding Blazing Story storybook --- .agents/skills/blazing-story-story/SKILL.md | 147 +++++++++++++++ IgniteUI.Blazor.Lite.csproj | 15 +- IgniteUI.Blazor.Lite.sln | 17 ++ package-lock.json | 171 ++++++++++-------- package.json | 18 +- stories/Components/App.razor | 2 + stories/Components/Pages/IFramePage.razor | 41 +++++ stories/Components/Pages/IndexPage.razor | 36 ++++ .../Stories/Accordion.stories.razor | 42 +++++ .../Components/Stories/Avatar.stories.razor | 48 +++++ .../Components/Stories/Badge.stories.razor | 44 +++++ .../Components/Stories/Banner.stories.razor | 21 +++ .../Components/Stories/Button.stories.razor | 54 ++++++ .../Stories/ButtonGroup.stories.razor | 47 +++++ .../Components/Stories/Calendar.stories.razor | 58 ++++++ stories/Components/Stories/Card.stories.razor | 40 ++++ .../Components/Stories/Carousel.stories.razor | 68 +++++++ .../Components/Stories/Checkbox.stories.razor | 65 +++++++ stories/Components/Stories/Chip.stories.razor | 44 +++++ .../Stories/CircularProgress.stories.razor | 29 +++ .../Stories/DatePicker.stories.razor | 40 ++++ .../Stories/DateRangePicker.stories.razor | 39 ++++ .../Stories/DateTimeInput.stories.razor | 15 ++ .../Components/Stories/Dialog.stories.razor | 44 +++++ .../Components/Stories/Divider.stories.razor | 48 +++++ .../Components/Stories/Dropdown.stories.razor | 28 +++ .../Stories/ExpansionPanel.stories.razor | 46 +++++ stories/Components/Stories/Icon.stories.razor | 27 +++ .../Stories/IconButton.stories.razor | 41 +++++ .../Components/Stories/Input.stories.razor | 54 ++++++ .../Stories/LinearProgress.stories.razor | 47 +++++ stories/Components/Stories/List.stories.razor | 31 ++++ .../Stories/MaskInput.stories.razor | 28 +++ .../Stories/NavDrawer.stories.razor | 35 ++++ .../Components/Stories/Navbar.stories.razor | 20 ++ .../Components/Stories/Radio.stories.razor | 35 ++++ .../Stories/RangeSlider.stories.razor | 37 ++++ .../Components/Stories/Rating.stories.razor | 54 ++++++ .../Components/Stories/Ripple.stories.razor | 14 ++ .../Components/Stories/Select.stories.razor | 52 ++++++ .../Components/Stories/Slider.stories.razor | 51 ++++++ .../Components/Stories/Snackbar.stories.razor | 25 +++ .../Components/Stories/Stepper.stories.razor | 58 ++++++ .../Components/Stories/Switch.stories.razor | 44 +++++ stories/Components/Stories/Tabs.stories.razor | 37 ++++ .../Components/Stories/Textarea.stories.razor | 42 +++++ .../Stories/TileManager.stories.razor | 74 ++++++++ .../Components/Stories/Toast.stories.razor | 24 +++ .../Stories/ToggleButton.stories.razor | 40 ++++ .../Components/Stories/Tooltip.stories.razor | 26 +++ stories/Components/Stories/Tree.stories.razor | 42 +++++ stories/Components/Stories/Welcome.md | 35 ++++ stories/Components/_Imports.razor | 15 ++ stories/IgniteUI.Blazor.Stories.csproj | 25 +++ stories/IgniteUI.Blazor.Stories.csproj.user | 6 + stories/Program.cs | 33 ++++ stories/Properties/launchSettings.json | 22 +++ stories/appsettings.Development.json | 8 + stories/appsettings.json | 9 + 59 files changed, 2269 insertions(+), 89 deletions(-) create mode 100644 .agents/skills/blazing-story-story/SKILL.md create mode 100644 stories/Components/App.razor create mode 100644 stories/Components/Pages/IFramePage.razor create mode 100644 stories/Components/Pages/IndexPage.razor create mode 100644 stories/Components/Stories/Accordion.stories.razor create mode 100644 stories/Components/Stories/Avatar.stories.razor create mode 100644 stories/Components/Stories/Badge.stories.razor create mode 100644 stories/Components/Stories/Banner.stories.razor create mode 100644 stories/Components/Stories/Button.stories.razor create mode 100644 stories/Components/Stories/ButtonGroup.stories.razor create mode 100644 stories/Components/Stories/Calendar.stories.razor create mode 100644 stories/Components/Stories/Card.stories.razor create mode 100644 stories/Components/Stories/Carousel.stories.razor create mode 100644 stories/Components/Stories/Checkbox.stories.razor create mode 100644 stories/Components/Stories/Chip.stories.razor create mode 100644 stories/Components/Stories/CircularProgress.stories.razor create mode 100644 stories/Components/Stories/DatePicker.stories.razor create mode 100644 stories/Components/Stories/DateRangePicker.stories.razor create mode 100644 stories/Components/Stories/DateTimeInput.stories.razor create mode 100644 stories/Components/Stories/Dialog.stories.razor create mode 100644 stories/Components/Stories/Divider.stories.razor create mode 100644 stories/Components/Stories/Dropdown.stories.razor create mode 100644 stories/Components/Stories/ExpansionPanel.stories.razor create mode 100644 stories/Components/Stories/Icon.stories.razor create mode 100644 stories/Components/Stories/IconButton.stories.razor create mode 100644 stories/Components/Stories/Input.stories.razor create mode 100644 stories/Components/Stories/LinearProgress.stories.razor create mode 100644 stories/Components/Stories/List.stories.razor create mode 100644 stories/Components/Stories/MaskInput.stories.razor create mode 100644 stories/Components/Stories/NavDrawer.stories.razor create mode 100644 stories/Components/Stories/Navbar.stories.razor create mode 100644 stories/Components/Stories/Radio.stories.razor create mode 100644 stories/Components/Stories/RangeSlider.stories.razor create mode 100644 stories/Components/Stories/Rating.stories.razor create mode 100644 stories/Components/Stories/Ripple.stories.razor create mode 100644 stories/Components/Stories/Select.stories.razor create mode 100644 stories/Components/Stories/Slider.stories.razor create mode 100644 stories/Components/Stories/Snackbar.stories.razor create mode 100644 stories/Components/Stories/Stepper.stories.razor create mode 100644 stories/Components/Stories/Switch.stories.razor create mode 100644 stories/Components/Stories/Tabs.stories.razor create mode 100644 stories/Components/Stories/Textarea.stories.razor create mode 100644 stories/Components/Stories/TileManager.stories.razor create mode 100644 stories/Components/Stories/Toast.stories.razor create mode 100644 stories/Components/Stories/ToggleButton.stories.razor create mode 100644 stories/Components/Stories/Tooltip.stories.razor create mode 100644 stories/Components/Stories/Tree.stories.razor create mode 100644 stories/Components/Stories/Welcome.md create mode 100644 stories/Components/_Imports.razor create mode 100644 stories/IgniteUI.Blazor.Stories.csproj create mode 100644 stories/IgniteUI.Blazor.Stories.csproj.user create mode 100644 stories/Program.cs create mode 100644 stories/Properties/launchSettings.json create mode 100644 stories/appsettings.Development.json create mode 100644 stories/appsettings.json diff --git a/.agents/skills/blazing-story-story/SKILL.md b/.agents/skills/blazing-story-story/SKILL.md new file mode 100644 index 0000000..53a62db --- /dev/null +++ b/.agents/skills/blazing-story-story/SKILL.md @@ -0,0 +1,147 @@ +--- +allowed-tools: Glob Grep Read Write +compatibility: Designed for Blazing Story projects (a Blazor-based Storybook clone for .NET). Requires a .Stories project referencing BlazingStory NuGet packages. +description: Implement a Blazing Story story file (.stories.razor) for a Blazor UI component. Use when the user says "create a story for component X", "add stories for X", or similar requests in a Blazing Story (.NET / Blazor / Storybook) project. +license: Unlicense +metadata: + author: jsakamoto + github-path: skills/blazing-story-story + github-ref: refs/tags/v1.0.2 + github-repo: https://github.com/BlazingStory/agent-skills + github-tree-sha: 36d13a0943547a646a3d91de27c9d8870b951cbd +name: blazing-story-story +--- +# Blazing Story — Story Implementation + +Create a `.stories.razor` file for a Blazor component in the currently open Blazing Story project. + +## Investigation policy + +The main goal of this policy is to free the developer from the hassle of approving "may I run this command?" prompts one by one. Many of those prompts come from operations that poke around outside the project — and most of the knowledge needed to write a story file is already available without them. + +Implement the story relying primarily on: + +- The guidance in this skill file +- Your own knowledge of C#, .NET, Blazor, and general web/UI development +- Other relevant skills available in this environment +- Already-configured MCP servers and tools +- Read-only exploration of the current project (`ls`, `Glob`, `Grep`, `Read`) + +**Avoid** operations that inspect the NuGet package cache folder, decompile Blazing Story DLLs, or otherwise probe the installed package contents. These are slow, require the developer's per-command approval, and disrupt the flow of work. + +If implementation details that are not covered above become necessary, consult the published source code on GitHub at https://github.com/jsakamoto/BlazingStory **instead of** digging into the local NuGet cache or decompiling DLLs. + +This policy may be relaxed only when strictly unavoidable. + +## Step 1: Identify the target component + +From `$ARGUMENTS` or the user's message, determine the component name (e.g., `Button`, `Rating`). + +## Step 2: Locate the component file + +Search the workspace for a `.razor` file matching the component name (e.g., `Button.razor`). Read it to understand: + +- All `[Parameter]` properties and their types +- Any `RenderFragment` parameters (e.g., `ChildContent`) +- Enum types used by parameters + +## Step 3: Locate the stories project + +Find the stories project directory — it is typically a separate project named `*.Stories` or containing a `Stories/` subfolder. Look for existing `.stories.razor` files to confirm the correct location and the `@using` conventions used. + +## Step 4: Determine the story file path + +Place the new file inside the `Stories/` folder of the stories project, mirroring the category structure if one already exists. Name the file `ComponentName.stories.razor`. + +Example: `MyApp.Stories/Stories/Components/Button.stories.razor` + +## Step 5: Write the story file + +Use the following structure: + +```razor +@attribute [Stories("Category/ComponentName")] + + + + + + + + + + + + + + + +@code { + private RenderFragment _content = @Label; +} +``` + +### Rules + +**File naming** +- Must end in `.stories.razor` to enable the "Show code" feature in Blazing Story. + +**`[Stories("...")]` path** +- Use `/` as separator. The path becomes the sidebar navigation tree. +- Mirror the folder path under `Stories/` (e.g., file at `Stories/Components/Button.stories.razor` → `[Stories("Components/Button")]`). + +**``** +- `TComponent` is the Blazor component type. +- `Layout` is optional. Common choices: + - `Centered` — centers the component horizontally and vertically (good default for most UI components). + - `FullScreen` — fills the entire canvas (good for page-level components). + - `MarginedFrame` — adds a margin around the component. + - Omit `Layout` entirely if you are unsure or if the project has no custom layouts. + +**``** +- Controls how a parameter appears in the Controls panel. +- Available `ControlType` values: + - `ControlType.Default` — auto-detected from the parameter type (no need to specify explicitly). + - `ControlType.Radio` — radio buttons; good for enums with 2–4 values. + - `ControlType.Select` — dropdown; good for enums with 5+ values. + - `ControlType.Color` — color picker; use for `string` or `Color` parameters representing a color. + +**``** +- Each `` represents one variant shown in the sidebar. +- Always include a `"Default"` story as the baseline. +- Add further stories for meaningful parameter combinations (e.g., `"Large"`, `"Disabled"`, `"With Icon"`). + +**`` and ``** +- Use `` to set initial parameter values for a story. +- For `RenderFragment` parameters, define the value in the `@code` block and reference it via ``: + ```razor + + + @code { + private RenderFragment _content = @Click me; + } + ``` +- Do **not** hardcode `RenderFragment` content directly in the `