From 6bf7fb3d95b42142c3b3d5384e8ce0fa9444ce83 Mon Sep 17 00:00:00 2001 From: Lee-Dongwook Date: Wed, 29 Jul 2026 10:40:38 +0900 Subject: [PATCH] feat: Dialog Hero Header --- .changeset/dialog-hero-header.md | 6 + .../stories/DialogHeroHeader.stories.tsx | 162 +++++++++++ packages/cli/lib/xle/registry-core.mjs | 173 +++++++++--- .../DialogHeroHeaderBasic.doc.mjs | 14 + .../DialogHeroHeaderBasic.tsx | 47 ++++ .../DialogHeroHeaderShowcase.doc.mjs | 15 + .../DialogHeroHeaderShowcase.tsx | 35 +++ packages/core/src/Dialog/Dialog.doc.mjs | 243 +++++++++++++--- .../core/src/Dialog/DialogHeroHeader.doc.mjs | 186 ++++++++++++ .../core/src/Dialog/DialogHeroHeader.test.tsx | 179 ++++++++++++ packages/core/src/Dialog/DialogHeroHeader.tsx | 265 ++++++++++++++++++ packages/core/src/Dialog/index.ts | 5 +- 12 files changed, 1247 insertions(+), 83 deletions(-) create mode 100644 .changeset/dialog-hero-header.md create mode 100644 apps/storybook/stories/DialogHeroHeader.stories.tsx create mode 100644 packages/cli/templates/blocks/components/DialogHeroHeader/DialogHeroHeaderBasic.doc.mjs create mode 100644 packages/cli/templates/blocks/components/DialogHeroHeader/DialogHeroHeaderBasic.tsx create mode 100644 packages/cli/templates/blocks/components/DialogHeroHeader/DialogHeroHeaderShowcase.doc.mjs create mode 100644 packages/cli/templates/blocks/components/DialogHeroHeader/DialogHeroHeaderShowcase.tsx create mode 100644 packages/core/src/Dialog/DialogHeroHeader.doc.mjs create mode 100644 packages/core/src/Dialog/DialogHeroHeader.test.tsx create mode 100644 packages/core/src/Dialog/DialogHeroHeader.tsx diff --git a/.changeset/dialog-hero-header.md b/.changeset/dialog-hero-header.md new file mode 100644 index 0000000000000..8bd09e6af46d4 --- /dev/null +++ b/.changeset/dialog-hero-header.md @@ -0,0 +1,6 @@ +--- +'@astryxdesign/core': patch +--- + +[feat] DialogHeroHeader: prominent, hero-style header for Dialog — the high-emphasis sibling of DialogHeader. Adds an optional media/visual slot and eyebrow above a display-scale title, centered by default (`align="start"` for left alignment), with the same onOpenChange-driven close button and aria-labelledby title behavior. For featured, marketing, or onboarding dialogs. +@Lee-Dongwook diff --git a/apps/storybook/stories/DialogHeroHeader.stories.tsx b/apps/storybook/stories/DialogHeroHeader.stories.tsx new file mode 100644 index 0000000000000..1fadd96442609 --- /dev/null +++ b/apps/storybook/stories/DialogHeroHeader.stories.tsx @@ -0,0 +1,162 @@ +// Copyright (c) Meta Platforms, Inc. and affiliates. + +import {useState} from 'react'; +import type {Meta, StoryObj} from '@storybook/react'; +import {Dialog, DialogHeroHeader} from '@astryxdesign/core/Dialog'; +import { + Layout, + LayoutContent, + LayoutFooter, + HStack, +} from '@astryxdesign/core/Layout'; +import {Button} from '@astryxdesign/core/Button'; +import {Icon} from '@astryxdesign/core/Icon'; +import {Text} from '@astryxdesign/core/Text'; + +const meta: Meta = { + title: 'Core/DialogHeroHeader', + component: DialogHeroHeader, + tags: ['autodocs'], + argTypes: { + align: { + control: 'inline-radio', + options: ['center', 'start'], + description: 'Horizontal alignment of the hero content', + }, + hasDivider: { + control: 'boolean', + description: 'Adds a border at the bottom edge', + }, + }, +}; + +export default meta; +type Story = StoryObj; + +/** + * The prominent hero treatment: media, eyebrow, display-scale title, and + * supporting text, centered by default. Actions live in LayoutFooter. + */ +function CenteredExample() { + const [isOpen, setIsOpen] = useState(false); + + return ( + <> +