Skip to content

Commit 1741236

Browse files
committed
chore(www): add dom and component types
1 parent 9aeeeec commit 1741236

File tree

2 files changed

+78
-0
lines changed

2 files changed

+78
-0
lines changed

apps/www/types/component.ts

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
/**
2+
* MIT License
3+
*
4+
* Copyright (c) 2022, Brion Mario.
5+
*
6+
* Permission is hereby granted, free of charge, to any person obtaining a copy
7+
* of this software and associated documentation files (the "Software"), to deal
8+
* in the Software without restriction, including without limitation the rights
9+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10+
* copies of the Software, and to permit persons to whom the Software is
11+
* furnished to do so, subject to the following conditions:
12+
*
13+
* The above copyright notice and this permission notice shall be included in all
14+
* copies or substantial portions of the Software.
15+
*
16+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22+
* SOFTWARE.
23+
*/
24+
25+
import {ComponentPropsWithoutRef, ComponentPropsWithRef, ElementType} from 'react';
26+
27+
/**
28+
* Interface to be extended to make a component polymorphic.
29+
* i.e A polymorphic component is a component that can be rendered with a different container element / node.
30+
*
31+
* @example
32+
* ```jsx
33+
* <Avatar as='a' />
34+
* ```
35+
* In here, `Avatar` container will be an anchor element rather than the usual `div`.
36+
*/
37+
export type PolymorphicComponent<T extends ElementType> = ComponentPropsWithoutRef<T> & {
38+
as?: T;
39+
};
40+
41+
export type PolymorphicRef<T extends ElementType> = ComponentPropsWithRef<T>['ref'];

apps/www/types/dom.ts

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/**
2+
* MIT License
3+
*
4+
* Copyright (c) 2022, Brion Mario.
5+
*
6+
* Permission is hereby granted, free of charge, to any person obtaining a copy
7+
* of this software and associated documentation files (the "Software"), to deal
8+
* in the Software without restriction, including without limitation the rights
9+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10+
* copies of the Software, and to permit persons to whom the Software is
11+
* furnished to do so, subject to the following conditions:
12+
*
13+
* The above copyright notice and this permission notice shall be included in all
14+
* copies or substantial portions of the Software.
15+
*
16+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22+
* SOFTWARE.
23+
*/
24+
25+
/**
26+
* Interface to be extended to inherit props to uniquely identify an element in Test Executions.
27+
* @example
28+
* <div data-componentid="register-button" />
29+
*
30+
* // In Cypress Tests.
31+
* cy.dataComponentId("register-button");
32+
* // In React Unit Tests.
33+
* screen.getByTestId("register-button");
34+
*/
35+
export interface TestableComponent {
36+
'data-testid': string;
37+
}

0 commit comments

Comments
 (0)