From a51533740fca9120561e2b53adb76e0335728033 Mon Sep 17 00:00:00 2001 From: Lingfan Gao Date: Tue, 11 Feb 2025 14:18:16 +0000 Subject: [PATCH 1/9] feat: Add Button component for teams-components package Adds strict Button API that: * restricts appearance * supports and enforces tooltip for icon buttons * enforces strics CSS classes * supports strict icon and toltip slots with lightweight types that are compatible with Fluent UI slots --- packages/teams-components/jest.config.ts | 3 +- .../src/components/Button/Button.test.tsx | 34 +++++++++ .../src/components/Button/Button.tsx | 69 +++++++++++++++++++ .../src/components/Button/index.ts | 1 + packages/teams-components/src/index.ts | 1 + packages/teams-components/src/strictSlot.ts | 26 +++++++ .../stories/Button/Default.stories.tsx | 49 +++++++++++++ .../stories/Button/index.stories.tsx | 10 +++ 8 files changed, 191 insertions(+), 2 deletions(-) create mode 100644 packages/teams-components/src/components/Button/Button.test.tsx create mode 100644 packages/teams-components/src/components/Button/Button.tsx create mode 100644 packages/teams-components/src/components/Button/index.ts create mode 100644 packages/teams-components/src/strictSlot.ts create mode 100644 packages/teams-components/stories/Button/Default.stories.tsx create mode 100644 packages/teams-components/stories/Button/index.stories.tsx diff --git a/packages/teams-components/jest.config.ts b/packages/teams-components/jest.config.ts index c9c5d90c..7ca0bf13 100644 --- a/packages/teams-components/jest.config.ts +++ b/packages/teams-components/jest.config.ts @@ -24,7 +24,6 @@ export default { transform: { '^.+\\.[tj]s$': ['@swc/jest', swcJestConfig], }, - moduleFileExtensions: ['ts', 'js', 'html'], - testEnvironment: 'jsdom', + moduleFileExtensions: ['ts', 'tsx', 'js', 'html'], coverageDirectory: '../../coverage/packages/teams-components', }; diff --git a/packages/teams-components/src/components/Button/Button.test.tsx b/packages/teams-components/src/components/Button/Button.test.tsx new file mode 100644 index 00000000..e23ef562 --- /dev/null +++ b/packages/teams-components/src/components/Button/Button.test.tsx @@ -0,0 +1,34 @@ +import * as React from 'react'; +import { fireEvent, render, screen, act } from '@testing-library/react'; +import { Button } from './Button'; + +describe('Button', () => { + beforeEach(() => { + console.error = jest.fn(); + }); + + it('should throw error for icon button if no tooltip is provided', () => { + console.error = jest.fn(); + expect(() => render( + + + + + + - -