feat(generators): core-ui-component template files (component + stories + test + barrel)

This commit is contained in:
2026-05-11 09:16:41 +02:00
parent 76e7242c3d
commit 9108122d00
4 changed files with 48 additions and 0 deletions

View File

@@ -0,0 +1,13 @@
import type { Meta, StoryObj } from "@storybook/react";
import { {{pascalCase name}} } from "./{{kebabCase name}}";
const meta = {
title: "{{tierTitle}}/{{pascalCase name}}",
component: {{pascalCase name}},
tags: ["autodocs"],
} satisfies Meta<typeof {{pascalCase name}}>;
export default meta;
type Story = StoryObj<typeof meta>;
export const Default: Story = { args: {} };

View File

@@ -0,0 +1,23 @@
import { describe, it, expect } from "vitest";
import { createRef } from "react";
import { renderWithProviders } from "@repo/core-testing/react";
import { screen } from "@testing-library/react";
import { {{pascalCase name}} } from "./{{kebabCase name}}";
describe("{{pascalCase name}}", () => {
it("renders without crashing", () => {
renderWithProviders(<{{pascalCase name}} data-testid="root" />);
expect(screen.getByTestId("root")).toBeInTheDocument();
});
it("applies a passed className alongside its own", () => {
renderWithProviders(<{{pascalCase name}} data-testid="root" className="custom" />);
expect(screen.getByTestId("root")).toHaveClass("custom");
});
it("forwards ref to the underlying element", () => {
const ref = createRef<HTMLDivElement>();
renderWithProviders(<{{pascalCase name}} ref={ref} />);
expect(ref.current).toBeInstanceOf(HTMLDivElement);
});
});

View File

@@ -0,0 +1,11 @@
import { forwardRef, type HTMLAttributes } from "react";
import { cn } from "../../lib/utils";
export interface {{pascalCase name}}Props extends HTMLAttributes<HTMLDivElement> {}
export const {{pascalCase name}} = forwardRef<HTMLDivElement, {{pascalCase name}}Props>(
({ className, ...props }, ref) => (
<div ref={ref} className={cn("", className)} {...props} />
),
);
{{pascalCase name}}.displayName = "{{pascalCase name}}";

View File

@@ -0,0 +1 @@
export { {{pascalCase name}}, type {{pascalCase name}}Props } from "./{{kebabCase name}}";