@seamapi/react 1.1.0 → 1.3.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/README.md CHANGED
@@ -13,7 +13,7 @@ with everything you need to get started with [Seam].
13
13
  Play with them live in the [Storybook]!
14
14
 
15
15
  [Seam]: https://www.seam.co/
16
- [Storybook]: https://seam-react.vercel.app/
16
+ [Storybook]: https://react.seam.co/
17
17
 
18
18
  ## Installation
19
19
 
@@ -34,8 +34,6 @@ $ npm install @seamapi/react
34
34
  3. Drop in Seam components.
35
35
 
36
36
  ```ts
37
- import '@seamapi/react/index.css'
38
-
39
37
  import { SeamProvider, DeviceTable } from '@seamapi/react'
40
38
 
41
39
  export const App = () => {
@@ -52,10 +50,40 @@ export const App = () => {
52
50
 
53
51
  [Seam Console]: https://console.seam.co/
54
52
 
53
+ ### Styles
54
+
55
+ > CSS is automatically included unless using `<SeamProvider disableCssInjection />`.
56
+
57
+ Components are styled with plain Cascading Style Sheets (CSS).
58
+ All styles are prefixed with `seam-` to avoid name collisions.
59
+
60
+ By default, the `SeamProvider` will inject a link tag into the document head to load the CSS.
61
+ If you prefer to manually load the CSS,
62
+ this behavior may be disabled with the `disableCssInjection` prop.
63
+ Then, either import the CSS using a supported bundler with
64
+
65
+ ```ts
66
+ import '@seamapi/react/index.css'
67
+ ```
68
+
69
+ or place the following in the `<head>` tag:
70
+
71
+ > You must match the version string below with the exact version of this package used by your application.
72
+
73
+ ```html
74
+ <link rel="stylesheet" href="https://react.seam.co/v/1.0.0/index.min.css" />
75
+ ```
76
+
55
77
  ### Fonts
56
78
 
79
+ > Fonts are automatically included unless using `<SeamProvider disableFontInjection />`.
80
+
57
81
  The components are optimized for use with [Source Sans Pro], but will fallback to other system sans-serif fonts.
58
- Load the font from Google Fonts by placing the following in the `<head>` tag:
82
+
83
+ By default, the `SeamProvider` will inject a link tag into the document head to load the font.
84
+ If you prefer to manually provide the font,
85
+ this behavior may be disabled with the `disableFontInjection` prop.
86
+ Then, load it from Google Fonts by placing the following in the `<head>` tag:
59
87
 
60
88
  ```html
61
89
  <link
@@ -10,7 +10,7 @@ export interface SeamContext {
10
10
  userIdentifierKey?: string | undefined;
11
11
  clientSessionToken?: string | undefined;
12
12
  }
13
- type SeamProviderProps = SeamProviderPropsWithClient | (SeamProviderPropsWithPublishableKey & AllowedSeamClientOptions) | (SeamProviderPropsWithClientSessionToken & AllowedSeamClientOptions);
13
+ type SeamProviderProps = SeamProviderBaseProps & (SeamProviderPropsWithClient | (SeamProviderPropsWithPublishableKey & AllowedSeamClientOptions) | (SeamProviderPropsWithClientSessionToken & AllowedSeamClientOptions));
14
14
  interface SeamProviderPropsWithClient {
15
15
  client: Seam;
16
16
  }
@@ -21,8 +21,13 @@ interface SeamProviderPropsWithPublishableKey {
21
21
  interface SeamProviderPropsWithClientSessionToken {
22
22
  clientSessionToken: string;
23
23
  }
24
+ interface SeamProviderBaseProps {
25
+ disableCssInjection?: boolean | undefined;
26
+ disableFontInjection?: boolean | undefined;
27
+ useUnminifiedCss?: boolean | undefined;
28
+ }
24
29
  type AllowedSeamClientOptions = Pick<SeamClientOptions, 'endpoint'>;
25
- export declare function SeamProvider({ children, ...props }: PropsWithChildren<SeamProviderProps>): JSX.Element;
30
+ export declare function SeamProvider({ children, disableCssInjection, disableFontInjection, useUnminifiedCss, ...props }: PropsWithChildren<SeamProviderProps>): JSX.Element;
26
31
  export declare const seamContext: import("react").Context<SeamContext>;
27
32
  export declare function useSeamContext(): SeamContext;
28
33
  export {};
@@ -2,7 +2,9 @@
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
3
  import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
4
4
  import { createContext, useContext, useRef, } from 'react';
5
- export function SeamProvider({ children, ...props }) {
5
+ import { useSeamFont } from './seam/use-seam-font.js';
6
+ import { useSeamStyles } from './seam/use-seam-styles.js';
7
+ export function SeamProvider({ children, disableCssInjection = false, disableFontInjection = false, useUnminifiedCss = false, ...props }) {
6
8
  const { Provider } = seamContext;
7
9
  const queryClientRef = useRef(new QueryClient());
8
10
  const contextRef = useRef(createSeamContextValue(props));
@@ -16,6 +18,8 @@ export function SeamProvider({ children, ...props }) {
16
18
  contextRef.current.clientSessionToken == null) {
17
19
  throw new Error(`Must provide either a Seam client, clientSessionToken or a publishableKey.`);
18
20
  }
21
+ useSeamStyles({ disabled: disableCssInjection, unminified: useUnminifiedCss });
22
+ useSeamFont({ disabled: disableFontInjection });
19
23
  return (_jsx("div", { className: 'seam-components', children: _jsx(QueryClientProvider, { client: queryClientRef.current, children: _jsx(Provider, { value: { ...contextRef.current }, children: children }) }) }));
20
24
  }
21
25
  const createDefaultSeamContextValue = () => {
@@ -1 +1 @@
1
- {"version":3,"file":"SeamProvider.js","sourceRoot":"","sources":["../src/lib/SeamProvider.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SeamProvider.js","sourceRoot":"","sources":["../src/lib/SeamProvider.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare const useSeamFont: ({ disabled }: {
2
+ disabled?: boolean | undefined;
3
+ }) => void;
@@ -0,0 +1,19 @@
1
+ import { useEffect } from 'react';
2
+ const fontUrl = 'https://fonts.googleapis.com/css2?family=Source+Sans+Pro:wght@400;600;700&display=swap';
3
+ export const useSeamFont = ({ disabled = false }) => {
4
+ useEffect(() => {
5
+ if (disabled)
6
+ return;
7
+ if (globalThis.document == null)
8
+ return;
9
+ const linkEl = globalThis.document.querySelector(`link[href="${fontUrl}"]`);
10
+ if (linkEl != null)
11
+ return;
12
+ const link = globalThis.document.createElement('link');
13
+ link.rel = 'stylesheet';
14
+ link.type = 'text/css';
15
+ link.href = fontUrl;
16
+ globalThis.document.head.appendChild(link);
17
+ }, [disabled]);
18
+ };
19
+ //# sourceMappingURL=use-seam-font.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-seam-font.js","sourceRoot":"","sources":["../../src/lib/seam/use-seam-font.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEjC,MAAM,OAAO,GACX,wFAAwF,CAAA;AAE1F,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,EAAE,QAAQ,GAAG,KAAK,EAA0B,EAAE,EAAE;IAC1E,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,QAAQ;YAAE,OAAM;QACpB,IAAI,UAAU,CAAC,QAAQ,IAAI,IAAI;YAAE,OAAM;QAEvC,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC,cAAc,OAAO,IAAI,CAAC,CAAA;QAC3E,IAAI,MAAM,IAAI,IAAI;YAAE,OAAM;QAE1B,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;QACtD,IAAI,CAAC,GAAG,GAAG,YAAY,CAAA;QACvB,IAAI,CAAC,IAAI,GAAG,UAAU,CAAA;QACtB,IAAI,CAAC,IAAI,GAAG,OAAO,CAAA;QACnB,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;IAC5C,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAA;AAChB,CAAC,CAAA"}
@@ -0,0 +1,4 @@
1
+ export declare const useSeamStyles: ({ disabled, unminified, }: {
2
+ unminified?: boolean | undefined;
3
+ disabled?: boolean | undefined;
4
+ }) => void;
@@ -0,0 +1,24 @@
1
+ import { useEffect } from 'react';
2
+ import version from '../../lib/version.js';
3
+ const origin = 'https://react.seam.co';
4
+ export const useSeamStyles = ({ disabled = false, unminified = false, }) => {
5
+ const ext = `${unminified ? '' : 'min.'}css`;
6
+ const cssUrl = `${origin}/v/${version ?? ''}/index.${ext}`;
7
+ useEffect(() => {
8
+ if (version === null)
9
+ return;
10
+ if (disabled)
11
+ return;
12
+ if (globalThis.document == null)
13
+ return;
14
+ const linkEl = globalThis.document.querySelector(`link[href="${cssUrl}"]`);
15
+ if (linkEl != null)
16
+ return;
17
+ const link = globalThis.document.createElement('link');
18
+ link.rel = 'stylesheet';
19
+ link.type = 'text/css';
20
+ link.href = cssUrl;
21
+ globalThis.document.head.appendChild(link);
22
+ }, [disabled, cssUrl]);
23
+ };
24
+ //# sourceMappingURL=use-seam-styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-seam-styles.js","sourceRoot":"","sources":["../../src/lib/seam/use-seam-styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEjC,OAAO,OAAO,MAAM,gBAAgB,CAAA;AAEpC,MAAM,MAAM,GAAG,uBAAuB,CAAA;AAEtC,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,EAC5B,QAAQ,GAAG,KAAK,EAChB,UAAU,GAAG,KAAK,GAInB,EAAE,EAAE;IACH,MAAM,GAAG,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,CAAA;IAC5C,MAAM,MAAM,GAAG,GAAG,MAAM,MAAM,OAAO,IAAI,EAAE,UAAU,GAAG,EAAE,CAAA;IAE1D,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,OAAO,KAAK,IAAI;YAAE,OAAM;QAC5B,IAAI,QAAQ;YAAE,OAAM;QACpB,IAAI,UAAU,CAAC,QAAQ,IAAI,IAAI;YAAE,OAAM;QAEvC,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC,cAAc,MAAM,IAAI,CAAC,CAAA;QAC1E,IAAI,MAAM,IAAI,IAAI;YAAE,OAAM;QAE1B,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;QACtD,IAAI,CAAC,GAAG,GAAG,YAAY,CAAA;QACvB,IAAI,CAAC,IAAI,GAAG,UAAU,CAAA;QACtB,IAAI,CAAC,IAAI,GAAG,MAAM,CAAA;QAClB,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;IAC5C,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAA;AACxB,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ declare const _default: null;
2
+ export default _default;
package/lib/version.js ADDED
@@ -0,0 +1 @@
1
+ export default '1.3.0'
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/lib/version.ts"],"names":[],"mappings":"AAAA,eAAe,IAAI,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seamapi/react",
3
- "version": "1.1.0",
3
+ "version": "1.3.0",
4
4
  "description": "Seam React component library.",
5
5
  "type": "module",
6
6
  "main": "index.js",
@@ -65,6 +65,7 @@
65
65
  "lint": "eslint --ignore-path .gitignore --ext .js,.cjs,.mjs,.ts,.tsx .",
66
66
  "prelint": "prettier --check --ignore-path .gitignore .",
67
67
  "postlint": "stylelint '**/*.scss'",
68
+ "prepack": "echo \"export default '$(jq -r .version < package.json)'\" > lib/version.js",
68
69
  "postversion": "git push --follow-tags",
69
70
  "storybook": "storybook dev --port 6006",
70
71
  "storybook:docs": "storybook dev --docs --port 6007",
@@ -9,6 +9,9 @@ import {
9
9
  } from 'react'
10
10
  import type { Seam, SeamClientOptions } from 'seamapi'
11
11
 
12
+ import { useSeamFont } from './seam/use-seam-font.js'
13
+ import { useSeamStyles } from './seam/use-seam-styles.js'
14
+
12
15
  declare global {
13
16
  // eslint-disable-next-line no-var
14
17
  var seam: SeamProviderProps | undefined
@@ -22,10 +25,12 @@ export interface SeamContext {
22
25
  clientSessionToken?: string | undefined
23
26
  }
24
27
 
25
- type SeamProviderProps =
26
- | SeamProviderPropsWithClient
27
- | (SeamProviderPropsWithPublishableKey & AllowedSeamClientOptions)
28
- | (SeamProviderPropsWithClientSessionToken & AllowedSeamClientOptions)
28
+ type SeamProviderProps = SeamProviderBaseProps &
29
+ (
30
+ | SeamProviderPropsWithClient
31
+ | (SeamProviderPropsWithPublishableKey & AllowedSeamClientOptions)
32
+ | (SeamProviderPropsWithClientSessionToken & AllowedSeamClientOptions)
33
+ )
29
34
 
30
35
  interface SeamProviderPropsWithClient {
31
36
  client: Seam
@@ -40,10 +45,19 @@ interface SeamProviderPropsWithClientSessionToken {
40
45
  clientSessionToken: string
41
46
  }
42
47
 
48
+ interface SeamProviderBaseProps {
49
+ disableCssInjection?: boolean | undefined
50
+ disableFontInjection?: boolean | undefined
51
+ useUnminifiedCss?: boolean | undefined
52
+ }
53
+
43
54
  type AllowedSeamClientOptions = Pick<SeamClientOptions, 'endpoint'>
44
55
 
45
56
  export function SeamProvider({
46
57
  children,
58
+ disableCssInjection = false,
59
+ disableFontInjection = false,
60
+ useUnminifiedCss = false,
47
61
  ...props
48
62
  }: PropsWithChildren<SeamProviderProps>): JSX.Element {
49
63
  const { Provider } = seamContext
@@ -69,6 +83,9 @@ export function SeamProvider({
69
83
  )
70
84
  }
71
85
 
86
+ useSeamStyles({ disabled: disableCssInjection, unminified: useUnminifiedCss })
87
+ useSeamFont({ disabled: disableFontInjection })
88
+
72
89
  return (
73
90
  <div className='seam-components'>
74
91
  <QueryClientProvider client={queryClientRef.current}>
@@ -0,0 +1,20 @@
1
+ import { useEffect } from 'react'
2
+
3
+ const fontUrl =
4
+ 'https://fonts.googleapis.com/css2?family=Source+Sans+Pro:wght@400;600;700&display=swap'
5
+
6
+ export const useSeamFont = ({ disabled = false }: { disabled?: boolean }) => {
7
+ useEffect(() => {
8
+ if (disabled) return
9
+ if (globalThis.document == null) return
10
+
11
+ const linkEl = globalThis.document.querySelector(`link[href="${fontUrl}"]`)
12
+ if (linkEl != null) return
13
+
14
+ const link = globalThis.document.createElement('link')
15
+ link.rel = 'stylesheet'
16
+ link.type = 'text/css'
17
+ link.href = fontUrl
18
+ globalThis.document.head.appendChild(link)
19
+ }, [disabled])
20
+ }
@@ -0,0 +1,31 @@
1
+ import { useEffect } from 'react'
2
+
3
+ import version from 'lib/version.js'
4
+
5
+ const origin = 'https://react.seam.co'
6
+
7
+ export const useSeamStyles = ({
8
+ disabled = false,
9
+ unminified = false,
10
+ }: {
11
+ unminified?: boolean
12
+ disabled?: boolean
13
+ }) => {
14
+ const ext = `${unminified ? '' : 'min.'}css`
15
+ const cssUrl = `${origin}/v/${version ?? ''}/index.${ext}`
16
+
17
+ useEffect(() => {
18
+ if (version === null) return
19
+ if (disabled) return
20
+ if (globalThis.document == null) return
21
+
22
+ const linkEl = globalThis.document.querySelector(`link[href="${cssUrl}"]`)
23
+ if (linkEl != null) return
24
+
25
+ const link = globalThis.document.createElement('link')
26
+ link.rel = 'stylesheet'
27
+ link.type = 'text/css'
28
+ link.href = cssUrl
29
+ globalThis.document.head.appendChild(link)
30
+ }, [disabled, cssUrl])
31
+ }
@@ -0,0 +1 @@
1
+ export default null