@atlaskit/app-provider 0.3.1 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,16 @@
1
1
  # @atlaskit/app-provider
2
2
 
3
+ ## 0.4.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#42305](https://bitbucket.org/atlassian/atlassian-frontend/pull-requests/42305) [`4c9d4a7be34`](https://bitbucket.org/atlassian/atlassian-frontend/commits/4c9d4a7be34) - - Router link components are now required to forward refs
8
+ - The `useRouterLink()` hook now supports generic router link configuration: `useRouterLink<YourLinkConfigObject>()`
9
+
10
+ ### Patch Changes
11
+
12
+ - [#42305](https://bitbucket.org/atlassian/atlassian-frontend/pull-requests/42305) [`4c9d4a7be34`](https://bitbucket.org/atlassian/atlassian-frontend/commits/4c9d4a7be34) - - Fixes a bug with router link component generic `href` prop typings where non-object types were allowed
13
+
3
14
  ## 0.3.1
4
15
 
5
16
  ### Patch Changes
@@ -9,11 +9,23 @@ var _index = require("../index");
9
9
  /**
10
10
  * __useRouterLink()__
11
11
  *
12
- * Hook: Returns app-configured router link component
12
+ * Hook: Returns app-configured router link component.
13
+ *
14
+ * A generic can be passed to define advanced link configuration:
15
+ * ```
16
+ * type MyRouterLinkConfig = {
17
+ * to: string;
18
+ * replace?: boolean;
19
+ * }
20
+ *
21
+ * const RouterLink = useRouterLink<MyRouterLinkConfig>();
22
+ * ```
13
23
  */
14
24
  var useRouterLink = function useRouterLink() {
15
25
  var _useContext = (0, _react.useContext)(_index.RouterLinkProviderContext),
16
26
  routerLinkComponent = _useContext.routerLinkComponent;
17
- return routerLinkComponent;
27
+ if (routerLinkComponent) {
28
+ return routerLinkComponent;
29
+ }
18
30
  };
19
31
  var _default = exports.default = useRouterLink;
@@ -4,12 +4,24 @@ import { RouterLinkProviderContext } from '../index';
4
4
  /**
5
5
  * __useRouterLink()__
6
6
  *
7
- * Hook: Returns app-configured router link component
7
+ * Hook: Returns app-configured router link component.
8
+ *
9
+ * A generic can be passed to define advanced link configuration:
10
+ * ```
11
+ * type MyRouterLinkConfig = {
12
+ * to: string;
13
+ * replace?: boolean;
14
+ * }
15
+ *
16
+ * const RouterLink = useRouterLink<MyRouterLinkConfig>();
17
+ * ```
8
18
  */
9
19
  const useRouterLink = () => {
10
20
  const {
11
21
  routerLinkComponent
12
22
  } = useContext(RouterLinkProviderContext);
13
- return routerLinkComponent;
23
+ if (routerLinkComponent) {
24
+ return routerLinkComponent;
25
+ }
14
26
  };
15
27
  export default useRouterLink;
@@ -4,11 +4,23 @@ import { RouterLinkProviderContext } from '../index';
4
4
  /**
5
5
  * __useRouterLink()__
6
6
  *
7
- * Hook: Returns app-configured router link component
7
+ * Hook: Returns app-configured router link component.
8
+ *
9
+ * A generic can be passed to define advanced link configuration:
10
+ * ```
11
+ * type MyRouterLinkConfig = {
12
+ * to: string;
13
+ * replace?: boolean;
14
+ * }
15
+ *
16
+ * const RouterLink = useRouterLink<MyRouterLinkConfig>();
17
+ * ```
8
18
  */
9
19
  var useRouterLink = function useRouterLink() {
10
20
  var _useContext = useContext(RouterLinkProviderContext),
11
21
  routerLinkComponent = _useContext.routerLinkComponent;
12
- return routerLinkComponent;
22
+ if (routerLinkComponent) {
23
+ return routerLinkComponent;
24
+ }
13
25
  };
14
26
  export default useRouterLink;
@@ -2,7 +2,17 @@ import { type RouterLinkComponent } from '../index';
2
2
  /**
3
3
  * __useRouterLink()__
4
4
  *
5
- * Hook: Returns app-configured router link component
5
+ * Hook: Returns app-configured router link component.
6
+ *
7
+ * A generic can be passed to define advanced link configuration:
8
+ * ```
9
+ * type MyRouterLinkConfig = {
10
+ * to: string;
11
+ * replace?: boolean;
12
+ * }
13
+ *
14
+ * const RouterLink = useRouterLink<MyRouterLinkConfig>();
15
+ * ```
6
16
  */
7
- declare const useRouterLink: () => RouterLinkComponent | undefined;
17
+ declare const useRouterLink: <RouterLinkConfig extends Record<string, any> = never>() => RouterLinkComponent<RouterLinkConfig> | undefined;
8
18
  export default useRouterLink;
@@ -1,25 +1,33 @@
1
1
  import React from 'react';
2
- export type RouterLinkComponent<RouterLinkConfig extends {} = {}> = React.ComponentType<RouterLinkComponentProps<RouterLinkConfig>>;
3
- export type RouterLinkComponentProps<RouterLinkConfig extends {} = {}> = {
2
+ export type RouterLinkComponent<RouterLinkConfig extends Record<string, any> = never> = React.ForwardRefExoticComponent<RouterLinkComponentProps<RouterLinkConfig> & React.RefAttributes<HTMLAnchorElement>>;
3
+ export type RouterLinkComponentProps<RouterLinkConfig extends Record<string, any> = never> = {
4
4
  /**
5
5
  * A string which can be mapped to the underlying router link,
6
6
  * or optionally a custom object defined in the generic type for advanced use.
7
7
  *
8
8
  * @example
9
9
  * ```
10
- * const MyRouterLink: RouterLinkComponent<{
11
- * to: string;
12
- * replace?: boolean;
13
- * }> ...
10
+ * const MyRouterLink = forwardRef(
11
+ * (
12
+ * {
13
+ * href,
14
+ * children,
15
+ * ...rest
16
+ * }: RouterLinkComponentProps<{
17
+ * href: string;
18
+ * replace: boolean;
19
+ * }>,
20
+ * ref: Ref<HTMLAnchorElement>,
21
+ * ) => { ...
14
22
  * ```
15
23
  */
16
24
  href: string | RouterLinkConfig;
17
25
  children: React.ReactNode;
18
26
  };
19
- export type RouterLinkProviderContextProps<RouterLinkConfig extends {} = {}> = {
27
+ export type RouterLinkProviderContextProps<RouterLinkConfig extends Record<string, any> = never> = {
20
28
  routerLinkComponent?: RouterLinkComponent<RouterLinkConfig>;
21
29
  };
22
- export declare const RouterLinkProviderContext: React.Context<RouterLinkProviderContextProps<{}>>;
30
+ export declare const RouterLinkProviderContext: React.Context<RouterLinkProviderContextProps<never>>;
23
31
  export type RouterLinkProviderProps = {
24
32
  /**
25
33
  * The rendering mechanism of router links within Design System components.
@@ -2,7 +2,17 @@ import { type RouterLinkComponent } from '../index';
2
2
  /**
3
3
  * __useRouterLink()__
4
4
  *
5
- * Hook: Returns app-configured router link component
5
+ * Hook: Returns app-configured router link component.
6
+ *
7
+ * A generic can be passed to define advanced link configuration:
8
+ * ```
9
+ * type MyRouterLinkConfig = {
10
+ * to: string;
11
+ * replace?: boolean;
12
+ * }
13
+ *
14
+ * const RouterLink = useRouterLink<MyRouterLinkConfig>();
15
+ * ```
6
16
  */
7
- declare const useRouterLink: () => RouterLinkComponent | undefined;
17
+ declare const useRouterLink: <RouterLinkConfig extends Record<string, any> = never>() => RouterLinkComponent<RouterLinkConfig> | undefined;
8
18
  export default useRouterLink;
@@ -1,25 +1,33 @@
1
1
  import React from 'react';
2
- export type RouterLinkComponent<RouterLinkConfig extends {} = {}> = React.ComponentType<RouterLinkComponentProps<RouterLinkConfig>>;
3
- export type RouterLinkComponentProps<RouterLinkConfig extends {} = {}> = {
2
+ export type RouterLinkComponent<RouterLinkConfig extends Record<string, any> = never> = React.ForwardRefExoticComponent<RouterLinkComponentProps<RouterLinkConfig> & React.RefAttributes<HTMLAnchorElement>>;
3
+ export type RouterLinkComponentProps<RouterLinkConfig extends Record<string, any> = never> = {
4
4
  /**
5
5
  * A string which can be mapped to the underlying router link,
6
6
  * or optionally a custom object defined in the generic type for advanced use.
7
7
  *
8
8
  * @example
9
9
  * ```
10
- * const MyRouterLink: RouterLinkComponent<{
11
- * to: string;
12
- * replace?: boolean;
13
- * }> ...
10
+ * const MyRouterLink = forwardRef(
11
+ * (
12
+ * {
13
+ * href,
14
+ * children,
15
+ * ...rest
16
+ * }: RouterLinkComponentProps<{
17
+ * href: string;
18
+ * replace: boolean;
19
+ * }>,
20
+ * ref: Ref<HTMLAnchorElement>,
21
+ * ) => { ...
14
22
  * ```
15
23
  */
16
24
  href: string | RouterLinkConfig;
17
25
  children: React.ReactNode;
18
26
  };
19
- export type RouterLinkProviderContextProps<RouterLinkConfig extends {} = {}> = {
27
+ export type RouterLinkProviderContextProps<RouterLinkConfig extends Record<string, any> = never> = {
20
28
  routerLinkComponent?: RouterLinkComponent<RouterLinkConfig>;
21
29
  };
22
- export declare const RouterLinkProviderContext: React.Context<RouterLinkProviderContextProps<{}>>;
30
+ export declare const RouterLinkProviderContext: React.Context<RouterLinkProviderContextProps<never>>;
23
31
  export type RouterLinkProviderProps = {
24
32
  /**
25
33
  * The rendering mechanism of router links within Design System components.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/app-provider",
3
- "version": "0.3.1",
3
+ "version": "0.4.0",
4
4
  "description": "A top level provider for the Design System.",
5
5
  "author": "Atlassian Pty Ltd",
6
6
  "license": "Apache-2.0",
package/report.api.md CHANGED
@@ -42,11 +42,16 @@ type ColorMode = 'auto' | 'dark' | 'light';
42
42
  type ReconciledColorMode = Exclude<ColorMode, 'auto'>;
43
43
 
44
44
  // @public (undocumented)
45
- type RouterLinkComponent<RouterLinkConfig extends {} = {}> =
46
- React_2.ComponentType<RouterLinkComponentProps<RouterLinkConfig>>;
45
+ type RouterLinkComponent<RouterLinkConfig extends Record<string, any> = never> =
46
+ React_2.ForwardRefExoticComponent<
47
+ RouterLinkComponentProps<RouterLinkConfig> &
48
+ React_2.RefAttributes<HTMLAnchorElement>
49
+ >;
47
50
 
48
51
  // @public (undocumented)
49
- export type RouterLinkComponentProps<RouterLinkConfig extends {} = {}> = {
52
+ export type RouterLinkComponentProps<
53
+ RouterLinkConfig extends Record<string, any> = never,
54
+ > = {
50
55
  href: RouterLinkConfig | string;
51
56
  children: React_2.ReactNode;
52
57
  };
@@ -58,7 +63,9 @@ type Theme = Omit<ThemeState, 'colorMode' | 'contrastMode'>;
58
63
  export function useColorMode(): ReconciledColorMode;
59
64
 
60
65
  // @public
61
- export const useRouterLink: () => RouterLinkComponent | undefined;
66
+ export const useRouterLink: <
67
+ RouterLinkConfig extends Record<string, any> = never,
68
+ >() => RouterLinkComponent<RouterLinkConfig> | undefined;
62
69
 
63
70
  // @public
64
71
  export function useSetColorMode(): (value: ColorMode) => void;
@@ -26,10 +26,10 @@ type ColorMode = 'auto' | 'dark' | 'light';
26
26
  type ReconciledColorMode = Exclude<ColorMode, 'auto'>;
27
27
 
28
28
  // @public (undocumented)
29
- type RouterLinkComponent<RouterLinkConfig extends {} = {}> = React_2.ComponentType<RouterLinkComponentProps<RouterLinkConfig>>;
29
+ type RouterLinkComponent<RouterLinkConfig extends Record<string, any> = never> = React_2.ForwardRefExoticComponent<RouterLinkComponentProps<RouterLinkConfig> & React_2.RefAttributes<HTMLAnchorElement>>;
30
30
 
31
31
  // @public (undocumented)
32
- export type RouterLinkComponentProps<RouterLinkConfig extends {} = {}> = {
32
+ export type RouterLinkComponentProps<RouterLinkConfig extends Record<string, any> = never> = {
33
33
  href: RouterLinkConfig | string;
34
34
  children: React_2.ReactNode;
35
35
  };
@@ -41,7 +41,7 @@ type Theme = Omit<ThemeState, 'colorMode' | 'contrastMode'>;
41
41
  export function useColorMode(): ReconciledColorMode;
42
42
 
43
43
  // @public
44
- export const useRouterLink: () => RouterLinkComponent | undefined;
44
+ export const useRouterLink: <RouterLinkConfig extends Record<string, any> = never>() => RouterLinkComponent<RouterLinkConfig> | undefined;
45
45
 
46
46
  // @public
47
47
  export function useSetColorMode(): (value: ColorMode) => void;