diff --git a/packages/storybook/stories/additional-docs.js b/packages/storybook/stories/additional-docs.js index ec83589a78..4da059fc00 100644 --- a/packages/storybook/stories/additional-docs.js +++ b/packages/storybook/stories/additional-docs.js @@ -53,7 +53,7 @@ export const additionalDocs = { 'Tag': { guidanceHref: 'tag', guidanceName: 'Tag', - maturityCategory: USE, - maturityLevel: DEPLOYED, + maturityCategory: DONT_USE, + maturityLevel: DEPRECATED, }, }; diff --git a/packages/storybook/stories/tag.mdx b/packages/storybook/stories/tag.mdx index 3ed6ae863a..60e3dc32d0 100644 --- a/packages/storybook/stories/tag.mdx +++ b/packages/storybook/stories/tag.mdx @@ -18,4 +18,4 @@ import * as TagStories from './tag.stories'; - + \ No newline at end of file diff --git a/packages/storybook/stories/tag.stories.js b/packages/storybook/stories/tag.stories.js index 6eeb2f6cc4..30b6ccba30 100644 --- a/packages/storybook/stories/tag.stories.js +++ b/packages/storybook/stories/tag.stories.js @@ -1,9 +1,12 @@ export default { - title: 'Components/Tag', + title: 'Deprecated/Tag', id: 'components/tag', + parameters: { + chromatic: { disableSnapshot: true }, + }, }; export const Default = { render: () => New, name: 'Default', -}; +}; \ No newline at end of file diff --git a/packages/storybook/stories/va-tag.stories.tsx b/packages/storybook/stories/va-tag.stories.tsx new file mode 100644 index 0000000000..3d1f04f3e3 --- /dev/null +++ b/packages/storybook/stories/va-tag.stories.tsx @@ -0,0 +1,36 @@ +import { getWebComponentDocs, propStructure, StoryDocs } from './wc-helpers'; + +const tagDocs = getWebComponentDocs('va-tag'); + +export default { + title: 'Components/Tag', + id: 'components/va-tag', + component: 'va-tag', + decorators: [ + (Story) => ( +
+ +
+ ), + ], + parameters: { + componentSubtitle: 'va-tag web component', + docs: { + page: () => , + }, + }, + argTypes: { + ...propStructure(tagDocs), + } +}; + +const Template = (args) => { + return ( + + ); +}; + +export const Default = Template.bind({}); +Default.args = { + text: 'New', +}; diff --git a/packages/web-components/src/components.d.ts b/packages/web-components/src/components.d.ts index 8b89068a94..c47b462d01 100644 --- a/packages/web-components/src/components.d.ts +++ b/packages/web-components/src/components.d.ts @@ -2004,6 +2004,17 @@ export namespace Components { */ "label": string; } + /** + * @componentName Tag + * @maturityCategory caution + * @maturityLevel candidate + */ + interface VaTag { + /** + * The text to be displayed in the tag element. + */ + "text": string; + } /** * @componentName Telephone * @maturityCategory use @@ -3679,6 +3690,17 @@ declare global { prototype: HTMLVaTabsElement; new (): HTMLVaTabsElement; }; + /** + * @componentName Tag + * @maturityCategory caution + * @maturityLevel candidate + */ + interface HTMLVaTagElement extends Components.VaTag, HTMLStencilElement { + } + var HTMLVaTagElement: { + prototype: HTMLVaTagElement; + new (): HTMLVaTagElement; + }; interface HTMLVaTelephoneElementEventMap { "component-library-analytics": any; } @@ -3843,6 +3865,7 @@ declare global { "va-table-inner": HTMLVaTableInnerElement; "va-table-row": HTMLVaTableRowElement; "va-tabs": HTMLVaTabsElement; + "va-tag": HTMLVaTagElement; "va-telephone": HTMLVaTelephoneElement; "va-telephone-input": HTMLVaTelephoneInputElement; "va-text-input": HTMLVaTextInputElement; @@ -6136,6 +6159,17 @@ declare namespace LocalJSX { */ "label"?: string; } + /** + * @componentName Tag + * @maturityCategory caution + * @maturityLevel candidate + */ + interface VaTag { + /** + * The text to be displayed in the tag element. + */ + "text": string; + } /** * @componentName Telephone * @maturityCategory use @@ -6529,6 +6563,7 @@ declare namespace LocalJSX { "va-table-inner": VaTableInner; "va-table-row": VaTableRow; "va-tabs": VaTabs; + "va-tag": VaTag; "va-telephone": VaTelephone; "va-telephone-input": VaTelephoneInput; "va-text-input": VaTextInput; @@ -6917,6 +6952,12 @@ declare module "@stencil/core" { * @maturityLevel candidate */ "va-tabs": LocalJSX.VaTabs & JSXBase.HTMLAttributes; + /** + * @componentName Tag + * @maturityCategory caution + * @maturityLevel candidate + */ + "va-tag": LocalJSX.VaTag & JSXBase.HTMLAttributes; /** * @componentName Telephone * @maturityCategory use diff --git a/packages/web-components/src/components/va-tag/test/va-tag.e2e.ts b/packages/web-components/src/components/va-tag/test/va-tag.e2e.ts new file mode 100644 index 0000000000..c85cf25e3b --- /dev/null +++ b/packages/web-components/src/components/va-tag/test/va-tag.e2e.ts @@ -0,0 +1,27 @@ +import { newE2EPage } from '@stencil/core/testing'; +import { axeCheck } from '../../../testing/test-helpers'; + +describe('va-tag', () => { + it('renders', async () => { + const page = await newE2EPage(); + await page.setContent(''); + + const element = await page.find('va-tag'); + expect(element).toHaveClass('hydrated'); + }); + + it('passes accessibility tests', async () => { + const page = await newE2EPage(); + await page.setContent(''); + + await axeCheck(page); + }); + + it('respect the text prop', async () => { + const page = await newE2EPage(); + await page.setContent(''); + + const element = await page.find('va-tag'); + expect(element.shadowRoot.querySelector('span').innerHTML).toBe('Test tag'); + }); +}); diff --git a/packages/web-components/src/components/va-tag/va-tag.scss b/packages/web-components/src/components/va-tag/va-tag.scss new file mode 100644 index 0000000000..f4c0a699a5 --- /dev/null +++ b/packages/web-components/src/components/va-tag/va-tag.scss @@ -0,0 +1,3 @@ +@forward 'settings'; + +@use 'usa-tag/src/styles/usa-tag'; diff --git a/packages/web-components/src/components/va-tag/va-tag.tsx b/packages/web-components/src/components/va-tag/va-tag.tsx new file mode 100644 index 0000000000..16a8d00a13 --- /dev/null +++ b/packages/web-components/src/components/va-tag/va-tag.tsx @@ -0,0 +1,36 @@ +import { + Component, + Element, + Host, + Prop, + h, +} from '@stencil/core'; + +/** + * @componentName Tag + * @maturityCategory caution + * @maturityLevel candidate + */ +@Component({ + tag: 'va-tag', + styleUrl: 'va-tag.scss', + shadow: true, +}) +export class VaTag { + @Element() el: HTMLElement; + + /** + * The text to be displayed in the tag element. + */ + @Prop() text!: string; + + render() { + const { text } = this; + + return ( + + {text} + + ); + } +}