@toptal/picasso-page 5.0.7 → 5.1.1
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/dist-package/src/PageHead/PageHead.d.ts +1 -0
- package/dist-package/src/PageHead/PageHead.d.ts.map +1 -1
- package/dist-package/src/PageHead/PageHead.js +1 -0
- package/dist-package/src/PageHead/PageHead.js.map +1 -1
- package/dist-package/src/PageHeadBase/PageHeadBase.d.ts +30 -0
- package/dist-package/src/PageHeadBase/PageHeadBase.d.ts.map +1 -0
- package/dist-package/src/PageHeadBase/PageHeadBase.js +38 -0
- package/dist-package/src/PageHeadBase/PageHeadBase.js.map +1 -0
- package/dist-package/src/PageHeadBase/index.d.ts +5 -0
- package/dist-package/src/PageHeadBase/index.d.ts.map +1 -0
- package/dist-package/src/PageHeadBase/index.js +2 -0
- package/dist-package/src/PageHeadBase/index.js.map +1 -0
- package/dist-package/src/index.d.ts +1 -0
- package/dist-package/src/index.d.ts.map +1 -1
- package/dist-package/src/index.js +1 -0
- package/dist-package/src/index.js.map +1 -1
- package/package.json +12 -11
- package/src/PageAutocomplete/__snapshots__/test.tsx.snap +1 -1
- package/src/PageHead/PageHead.tsx +1 -0
- package/src/PageHead/story/index.jsx +1 -1
- package/src/PageHeadBase/PageHeadBase.tsx +127 -0
- package/src/PageHeadBase/index.ts +6 -0
- package/src/PageHeadBase/story/Blank.example.tsx +6 -0
- package/src/PageHeadBase/story/Default.example.tsx +56 -0
- package/src/PageHeadBase/story/Loading.example.tsx +23 -0
- package/src/PageHeadBase/story/NoBorder.example.tsx +43 -0
- package/src/PageHeadBase/story/Notification.example.tsx +14 -0
- package/src/PageHeadBase/story/NotificationAndTabs.example.tsx +30 -0
- package/src/PageHeadBase/story/Steps.example.tsx +15 -0
- package/src/PageHeadBase/story/Title.example.tsx +6 -0
- package/src/PageHeadBase/story/TitleAndBreadcrumbs.example.tsx +30 -0
- package/src/PageHeadBase/story/TitleAndButton.example.tsx +11 -0
- package/src/PageHeadBase/story/TitleAndTabs.example.tsx +24 -0
- package/src/PageHeadBase/story/WithRightPadding.example.tsx +22 -0
- package/src/PageHeadBase/story/index.jsx +58 -0
- package/src/PageTopBar/__snapshots__/test.tsx.snap +3 -3
- package/src/index.ts +1 -0
|
@@ -9,6 +9,7 @@ export interface Props extends BaseProps {
|
|
|
9
9
|
/** Whether it should hide bottom border */
|
|
10
10
|
noBorder?: boolean;
|
|
11
11
|
}
|
|
12
|
+
/** @deprecated Use `PageHeadBase` instead to conform to BASE. `PageHead` will be removed in a future major update of Picasso*/
|
|
12
13
|
export declare const PageHead: React.ForwardRefExoticComponent<Props & React.RefAttributes<HTMLDivElement>>;
|
|
13
14
|
declare const _default: React.ForwardRefExoticComponent<Props & React.RefAttributes<HTMLDivElement>> & {
|
|
14
15
|
Title: ({ titleCase, children, className, ...rest }: TextLabelProps & {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PageHead.d.ts","sourceRoot":"","sources":["../../../src/PageHead/PageHead.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACtC,OAAO,KAAqB,MAAM,OAAO,CAAA;AACzC,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAKvE,MAAM,WAAW,KAAM,SAAQ,SAAS;IACtC,cAAc;IACd,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,2CAA2C;IAC3C,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AA4ED,eAAO,MAAM,QAAQ,8EAoBnB,CAAA;;;;;;;;;;;;;;;;AASF,wBAKE"}
|
|
1
|
+
{"version":3,"file":"PageHead.d.ts","sourceRoot":"","sources":["../../../src/PageHead/PageHead.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACtC,OAAO,KAAqB,MAAM,OAAO,CAAA;AACzC,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAKvE,MAAM,WAAW,KAAM,SAAQ,SAAS;IACtC,cAAc;IACd,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,2CAA2C;IAC3C,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AA4ED,+HAA+H;AAC/H,eAAO,MAAM,QAAQ,8EAoBnB,CAAA;;;;;;;;;;;;;;;;AASF,wBAKE"}
|
|
@@ -38,6 +38,7 @@ const borderPseudoElement = [
|
|
|
38
38
|
'after:bg-gray-200',
|
|
39
39
|
'after:h-[1px]',
|
|
40
40
|
];
|
|
41
|
+
/** @deprecated Use `PageHeadBase` instead to conform to BASE. `PageHead` will be removed in a future major update of Picasso*/
|
|
41
42
|
export const PageHead = forwardRef(function PageHead(props, ref) {
|
|
42
43
|
const { children, noBorder, rightPadding, className } = props;
|
|
43
44
|
const withBorder = !noBorder;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PageHead.js","sourceRoot":"","sources":["../../../src/PageHead/PageHead.tsx"],"names":[],"mappings":";;;;;;;;;;;AACA,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAEzC,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAA;AAWxD,MAAM,KAAK,GAAG,CAAC,EAKwC,EAAE,EAAE;QAL5C,EACb,SAAS,EACT,QAAQ,EACR,SAAS,OAE4C,EADlD,IAAI,cAJM,sCAKd,CADQ;IAEP,OAAO,CACL,oBAAC,UAAU,kBACT,OAAO,EAAC,SAAS,EACjB,IAAI,EAAC,OAAO,EACZ,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,SAAS,IAChB,IAAI,GAEP,QAAQ,CACE,CACd,CAAA;AACH,CAAC,CAAA;AAED,MAAM,IAAI,GAAG,CAAC,EAIwB,EAAE,EAAE;QAJ5B,EACZ,QAAQ,EACR,SAAS,OAE2B,EADjC,IAAI,cAHK,yBAIb,CADQ;IAEP,OAAO,CACL,oBAAC,SAAS,kBAAC,SAAS,EAAE,SAAS,IAAM,IAAI,GACtC,QAAQ,CACC,CACb,CAAA;AACH,CAAC,CAAA;AAED,MAAM,IAAI,GAAG,CACX,KAAsE,EACtE,EAAE;IACF,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe,KAAc,KAAK,EAAd,IAAI,UAAK,KAAK,EAAzD,4CAAiD,CAAQ,CAAA;IAE/D,OAAO,CACL,oBAAC,SAAS,kBACR,IAAI,QACJ,cAAc,EAAC,eAAe,EAC9B,UAAU,EAAC,QAAQ,EACnB,SAAS,EAAE,OAAO,CAChB,eAAe,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,aAAa,EACxD,SAAS,CACV,IACG,IAAI,GAEP,QAAQ,CACC,CACb,CAAA;AACH,CAAC,CAAA;AAED,MAAM,OAAO,GAAG,CAAC,EAIqB,EAAE,EAAE;QAJzB,EACf,QAAQ,EACR,SAAS,OAE2B,EADjC,IAAI,cAHQ,yBAIhB,CADQ;IAEP,OAAO,CACL,oBAAC,SAAS,kBAAC,IAAI,QAAC,UAAU,EAAC,QAAQ,EAAC,SAAS,EAAE,SAAS,IAAM,IAAI,GAC/D,QAAQ,CACC,CACb,CAAA;AACH,CAAC,CAAA;AAED,MAAM,mBAAmB,GAAG;IAC1B,oBAAoB;IACpB,gBAAgB;IAChB,iBAAiB;IACjB,gBAAgB;IAChB,WAAW;IACX,mBAAmB;IACnB,eAAe;CAChB,CAAA;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG,UAAU,CAAwB,SAAS,QAAQ,CACzE,KAAK,EACL,GAAG;IAEH,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,KAAK,CAAA;IAC7D,MAAM,UAAU,GAAG,CAAC,QAAQ,CAAA;IAE5B,OAAO,CACL,oBAAC,SAAS,IACR,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,OAAO,CAChB,UAAU,EACV,UAAU,IAAI,mBAAmB,EACjC,YAAY,IAAI,MAAM,EACtB,SAAS,CACV,IAEA,QAAQ,CACC,CACb,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,YAAY,GAAG;IACtB,YAAY,EAAE,KAAK;IACnB,QAAQ,EAAE,KAAK;CAChB,CAAA;AAED,QAAQ,CAAC,WAAW,GAAG,UAAU,CAAA;AAEjC,eAAe,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE;IACrC,KAAK;IACL,IAAI;IACJ,IAAI;IACJ,OAAO;CACR,CAAC,CAAA"}
|
|
1
|
+
{"version":3,"file":"PageHead.js","sourceRoot":"","sources":["../../../src/PageHead/PageHead.tsx"],"names":[],"mappings":";;;;;;;;;;;AACA,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAEzC,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAA;AAWxD,MAAM,KAAK,GAAG,CAAC,EAKwC,EAAE,EAAE;QAL5C,EACb,SAAS,EACT,QAAQ,EACR,SAAS,OAE4C,EADlD,IAAI,cAJM,sCAKd,CADQ;IAEP,OAAO,CACL,oBAAC,UAAU,kBACT,OAAO,EAAC,SAAS,EACjB,IAAI,EAAC,OAAO,EACZ,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,SAAS,IAChB,IAAI,GAEP,QAAQ,CACE,CACd,CAAA;AACH,CAAC,CAAA;AAED,MAAM,IAAI,GAAG,CAAC,EAIwB,EAAE,EAAE;QAJ5B,EACZ,QAAQ,EACR,SAAS,OAE2B,EADjC,IAAI,cAHK,yBAIb,CADQ;IAEP,OAAO,CACL,oBAAC,SAAS,kBAAC,SAAS,EAAE,SAAS,IAAM,IAAI,GACtC,QAAQ,CACC,CACb,CAAA;AACH,CAAC,CAAA;AAED,MAAM,IAAI,GAAG,CACX,KAAsE,EACtE,EAAE;IACF,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe,KAAc,KAAK,EAAd,IAAI,UAAK,KAAK,EAAzD,4CAAiD,CAAQ,CAAA;IAE/D,OAAO,CACL,oBAAC,SAAS,kBACR,IAAI,QACJ,cAAc,EAAC,eAAe,EAC9B,UAAU,EAAC,QAAQ,EACnB,SAAS,EAAE,OAAO,CAChB,eAAe,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,aAAa,EACxD,SAAS,CACV,IACG,IAAI,GAEP,QAAQ,CACC,CACb,CAAA;AACH,CAAC,CAAA;AAED,MAAM,OAAO,GAAG,CAAC,EAIqB,EAAE,EAAE;QAJzB,EACf,QAAQ,EACR,SAAS,OAE2B,EADjC,IAAI,cAHQ,yBAIhB,CADQ;IAEP,OAAO,CACL,oBAAC,SAAS,kBAAC,IAAI,QAAC,UAAU,EAAC,QAAQ,EAAC,SAAS,EAAE,SAAS,IAAM,IAAI,GAC/D,QAAQ,CACC,CACb,CAAA;AACH,CAAC,CAAA;AAED,MAAM,mBAAmB,GAAG;IAC1B,oBAAoB;IACpB,gBAAgB;IAChB,iBAAiB;IACjB,gBAAgB;IAChB,WAAW;IACX,mBAAmB;IACnB,eAAe;CAChB,CAAA;AAED,+HAA+H;AAC/H,MAAM,CAAC,MAAM,QAAQ,GAAG,UAAU,CAAwB,SAAS,QAAQ,CACzE,KAAK,EACL,GAAG;IAEH,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,KAAK,CAAA;IAC7D,MAAM,UAAU,GAAG,CAAC,QAAQ,CAAA;IAE5B,OAAO,CACL,oBAAC,SAAS,IACR,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,OAAO,CAChB,UAAU,EACV,UAAU,IAAI,mBAAmB,EACjC,YAAY,IAAI,MAAM,EACtB,SAAS,CACV,IAEA,QAAQ,CACC,CACb,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,YAAY,GAAG;IACtB,YAAY,EAAE,KAAK;IACnB,QAAQ,EAAE,KAAK;CAChB,CAAA;AAED,QAAQ,CAAC,WAAW,GAAG,UAAU,CAAA;AAEjC,eAAe,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE;IACrC,KAAK;IACL,IAAI;IACJ,IAAI;IACJ,OAAO;CACR,CAAC,CAAA"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import type { BaseProps, TextLabelProps } from '@toptal/picasso-shared';
|
|
4
|
+
export interface Props extends BaseProps, TextLabelProps {
|
|
5
|
+
/**
|
|
6
|
+
* Buttons or other actions to be rendered on the right side of the title
|
|
7
|
+
*/
|
|
8
|
+
actions?: ReactNode;
|
|
9
|
+
/**
|
|
10
|
+
* Breadcrumbs component to be rendered above the title
|
|
11
|
+
*/
|
|
12
|
+
breadcrumbs?: ReactNode;
|
|
13
|
+
/** Whether it should have right padding */
|
|
14
|
+
rightPadding?: boolean;
|
|
15
|
+
/** Whether it should hide bottom border */
|
|
16
|
+
noBorder?: boolean;
|
|
17
|
+
/** Render components next to the title. */
|
|
18
|
+
titleAdornments?: ReactNode[];
|
|
19
|
+
/** Title */
|
|
20
|
+
title?: string;
|
|
21
|
+
/** Shows the loading skeleton when title is loading */
|
|
22
|
+
titleLoading?: boolean;
|
|
23
|
+
/** Subtitle */
|
|
24
|
+
subtitle?: string;
|
|
25
|
+
/** Shows the loading skeleton when subtitle is loading */
|
|
26
|
+
subtitleLoading?: boolean;
|
|
27
|
+
}
|
|
28
|
+
export declare const PageHeadBase: React.ForwardRefExoticComponent<Props & React.RefAttributes<HTMLDivElement>>;
|
|
29
|
+
export default PageHeadBase;
|
|
30
|
+
//# sourceMappingURL=PageHeadBase.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PageHeadBase.d.ts","sourceRoot":"","sources":["../../../src/PageHeadBase/PageHeadBase.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACtC,OAAO,KAAqB,MAAM,OAAO,CAAA;AACzC,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAKvE,MAAM,WAAW,KAAM,SAAQ,SAAS,EAAE,cAAc;IACtD;;OAEG;IACH,OAAO,CAAC,EAAE,SAAS,CAAA;IACnB;;OAEG;IACH,WAAW,CAAC,EAAE,SAAS,CAAA;IACvB,2CAA2C;IAC3C,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,2CAA2C;IAC3C,eAAe,CAAC,EAAE,SAAS,EAAE,CAAA;IAC7B,YAAY;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,uDAAuD;IACvD,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,eAAe;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,0DAA0D;IAC1D,eAAe,CAAC,EAAE,OAAO,CAAA;CAC1B;AAYD,eAAO,MAAM,YAAY,8EAgFxB,CAAA;AAID,eAAe,YAAY,CAAA"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import React, { forwardRef } from 'react';
|
|
2
|
+
import { Typography } from '@toptal/picasso-typography';
|
|
3
|
+
import { twMerge } from '@toptal/picasso-tailwind-merge';
|
|
4
|
+
import { SkeletonLoader } from '@toptal/picasso-skeleton-loader';
|
|
5
|
+
const borderPseudoElement = [
|
|
6
|
+
'after:content-[""]',
|
|
7
|
+
'after:absolute',
|
|
8
|
+
'after:inset-x-0',
|
|
9
|
+
'after:bottom-0',
|
|
10
|
+
'after:z-0',
|
|
11
|
+
'after:bg-gray-200',
|
|
12
|
+
'after:h-[1px]',
|
|
13
|
+
];
|
|
14
|
+
export const PageHeadBase = forwardRef(({ breadcrumbs, title, titleAdornments, titleCase, subtitle, actions, noBorder = false, rightPadding = false, titleLoading = false, subtitleLoading = false, className, }, ref) => {
|
|
15
|
+
const withBorder = !noBorder;
|
|
16
|
+
const getLoadingState = (loading) => {
|
|
17
|
+
if (loading) {
|
|
18
|
+
return React.createElement(SkeletonLoader.Header, null);
|
|
19
|
+
}
|
|
20
|
+
return true;
|
|
21
|
+
};
|
|
22
|
+
return (React.createElement("div", { className: twMerge('relative flex flex-col gap-6', ['py-3', rightPadding && 'pr-8'], withBorder && borderPseudoElement, className), ref: ref },
|
|
23
|
+
React.createElement("div", { className: 'flex flex-col gap-4' },
|
|
24
|
+
breadcrumbs,
|
|
25
|
+
React.createElement("div", { className: 'flex justify-between items-start gap-6 flex-wrap md:flex-nowrap' },
|
|
26
|
+
React.createElement("div", { className: 'flex flex-col gap-1 grow' },
|
|
27
|
+
title && (React.createElement("div", { className: 'flex items-center gap-2' },
|
|
28
|
+
titleLoading ? (getLoadingState(titleLoading)) : (React.createElement(Typography, { variant: 'heading', size: 'large', titleCase: titleCase, className: className }, title)),
|
|
29
|
+
titleAdornments)),
|
|
30
|
+
subtitleLoading
|
|
31
|
+
? getLoadingState(subtitleLoading)
|
|
32
|
+
: subtitle && (React.createElement("div", null,
|
|
33
|
+
React.createElement(Typography, { size: 'small' }, subtitle)))),
|
|
34
|
+
actions && (React.createElement("div", { className: 'flex items-center min-h-8 grow-0' }, actions))))));
|
|
35
|
+
});
|
|
36
|
+
PageHeadBase.displayName = 'PageHeadBase';
|
|
37
|
+
export default PageHeadBase;
|
|
38
|
+
//# sourceMappingURL=PageHeadBase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PageHeadBase.js","sourceRoot":"","sources":["../../../src/PageHeadBase/PageHeadBase.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAEzC,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAA;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAA;AA2BhE,MAAM,mBAAmB,GAAG;IAC1B,oBAAoB;IACpB,gBAAgB;IAChB,iBAAiB;IACjB,gBAAgB;IAChB,WAAW;IACX,mBAAmB;IACnB,eAAe;CAChB,CAAA;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,UAAU,CACpC,CACE,EACE,WAAW,EACX,KAAK,EACL,eAAe,EACf,SAAS,EACT,QAAQ,EACR,OAAO,EACP,QAAQ,GAAG,KAAK,EAChB,YAAY,GAAG,KAAK,EACpB,YAAY,GAAG,KAAK,EACpB,eAAe,GAAG,KAAK,EACvB,SAAS,GACV,EACD,GAAG,EACH,EAAE;IACF,MAAM,UAAU,GAAG,CAAC,QAAQ,CAAA;IAE5B,MAAM,eAAe,GAAG,CAAC,OAAiB,EAAE,EAAE;QAC5C,IAAI,OAAO,EAAE;YACX,OAAO,oBAAC,cAAc,CAAC,MAAM,OAAG,CAAA;SACjC;QAED,OAAO,IAAI,CAAA;IACb,CAAC,CAAA;IAED,OAAO,CACL,6BACE,SAAS,EAAE,OAAO,CAChB,8BAA8B,EAC9B,CAAC,MAAM,EAAE,YAAY,IAAI,MAAM,CAAC,EAChC,UAAU,IAAI,mBAAmB,EACjC,SAAS,CACV,EACD,GAAG,EAAE,GAAG;QAER,6BAAK,SAAS,EAAC,qBAAqB;YACjC,WAAW;YAGZ,6BAAK,SAAS,EAAC,iEAAiE;gBAE9E,6BAAK,SAAS,EAAC,0BAA0B;oBAEtC,KAAK,IAAI,CACR,6BAAK,SAAS,EAAC,yBAAyB;wBACrC,YAAY,CAAC,CAAC,CAAC,CACd,eAAe,CAAC,YAAY,CAAC,CAC9B,CAAC,CAAC,CAAC,CACF,oBAAC,UAAU,IACT,OAAO,EAAC,SAAS,EACjB,IAAI,EAAC,OAAO,EACZ,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,SAAS,IAEnB,KAAK,CACK,CACd;wBACA,eAAe,CACZ,CACP;oBACA,eAAe;wBACd,CAAC,CAAC,eAAe,CAAC,eAAe,CAAC;wBAClC,CAAC,CAAC,QAAQ,IAAI,CACV;4BACE,oBAAC,UAAU,IAAC,IAAI,EAAC,OAAO,IAAE,QAAQ,CAAc,CAC5C,CACP,CACD;gBAGL,OAAO,IAAI,CACV,6BAAK,SAAS,EAAC,kCAAkC,IAAE,OAAO,CAAO,CAClE,CACG,CACF,CACF,CACP,CAAA;AACH,CAAC,CACF,CAAA;AAED,YAAY,CAAC,WAAW,GAAG,cAAc,CAAA;AAEzC,eAAe,YAAY,CAAA"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { OmitInternalProps } from '@toptal/picasso-shared';
|
|
2
|
+
import type { Props } from './PageHeadBase';
|
|
3
|
+
export { default as PageHeadBase } from './PageHeadBase';
|
|
4
|
+
export declare type PageHeadBaseProps = OmitInternalProps<Props>;
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/PageHeadBase/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAE/D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAE3C,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAA;AACxD,oBAAY,iBAAiB,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/PageHeadBase/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAA;AACtB,cAAc,eAAe,CAAA;AAC7B,cAAc,oBAAoB,CAAA;AAClC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA;AAC5B,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAC7B,cAAc,sBAAsB,CAAA;AACpC,cAAc,cAAc,CAAA;AAC5B,cAAc,sBAAsB,CAAA;AACpC,cAAc,kBAAkB,CAAA;AAChC,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA;AAC5B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,YAAY,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAA;AACtB,cAAc,eAAe,CAAA;AAC7B,cAAc,oBAAoB,CAAA;AAClC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA;AAC5B,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAC7B,cAAc,sBAAsB,CAAA;AACpC,cAAc,cAAc,CAAA;AAC5B,cAAc,sBAAsB,CAAA;AACpC,cAAc,kBAAkB,CAAA;AAChC,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA;AAC5B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,YAAY,CAAA;AAC1B,cAAc,gBAAgB,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAA;AACtB,cAAc,eAAe,CAAA;AAC7B,cAAc,oBAAoB,CAAA;AAClC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA;AAC5B,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAC7B,cAAc,sBAAsB,CAAA;AACpC,cAAc,cAAc,CAAA;AAC5B,cAAc,sBAAsB,CAAA;AACpC,cAAc,kBAAkB,CAAA;AAChC,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA;AAC5B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,YAAY,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAA;AACtB,cAAc,eAAe,CAAA;AAC7B,cAAc,oBAAoB,CAAA;AAClC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA;AAC5B,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAC7B,cAAc,sBAAsB,CAAA;AACpC,cAAc,cAAc,CAAA;AAC5B,cAAc,sBAAsB,CAAA;AACpC,cAAc,kBAAkB,CAAA;AAChC,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA;AAC5B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,YAAY,CAAA;AAC1B,cAAc,gBAAgB,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@toptal/picasso-page",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.1.1",
|
|
4
4
|
"description": "Toptal UI components library - Page",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
@@ -22,22 +22,22 @@
|
|
|
22
22
|
},
|
|
23
23
|
"homepage": "https://github.com/toptal/picasso/tree/master/packages/picasso#readme",
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@toptal/picasso-accordion": "3.0.
|
|
26
|
-
"@toptal/picasso-autocomplete": "5.0.
|
|
27
|
-
"@toptal/picasso-avatar": "6.1.
|
|
25
|
+
"@toptal/picasso-accordion": "3.0.6",
|
|
26
|
+
"@toptal/picasso-autocomplete": "5.0.7",
|
|
27
|
+
"@toptal/picasso-avatar": "6.1.3",
|
|
28
28
|
"@toptal/picasso-badge": "3.0.1",
|
|
29
|
-
"@toptal/picasso-button": "4.0.
|
|
29
|
+
"@toptal/picasso-button": "4.0.7",
|
|
30
30
|
"@toptal/picasso-container": "3.1.0",
|
|
31
31
|
"@toptal/picasso-dropdown": "4.1.1",
|
|
32
|
-
"@toptal/picasso-icons": "1.
|
|
33
|
-
"@toptal/picasso-logo": "2.0.
|
|
34
|
-
"@toptal/picasso-menu": "3.0.
|
|
35
|
-
"@toptal/picasso-notification": "4.0.
|
|
32
|
+
"@toptal/picasso-icons": "1.7.0",
|
|
33
|
+
"@toptal/picasso-logo": "2.0.2",
|
|
34
|
+
"@toptal/picasso-menu": "3.0.6",
|
|
35
|
+
"@toptal/picasso-notification": "4.0.7",
|
|
36
36
|
"@toptal/picasso-shared": "15.0.0",
|
|
37
|
-
"@toptal/picasso-tag": "4.0.
|
|
37
|
+
"@toptal/picasso-tag": "4.0.2",
|
|
38
38
|
"@toptal/picasso-tooltip": "2.0.0",
|
|
39
39
|
"@toptal/picasso-typography": "4.0.1",
|
|
40
|
-
"@toptal/picasso-user-badge": "5.1.
|
|
40
|
+
"@toptal/picasso-user-badge": "5.1.3",
|
|
41
41
|
"@toptal/picasso-utils": "2.0.0",
|
|
42
42
|
"classnames": "^2.5.1"
|
|
43
43
|
},
|
|
@@ -51,6 +51,7 @@
|
|
|
51
51
|
"@toptal/picasso-provider": "*",
|
|
52
52
|
"react-dom": "^18.2.0",
|
|
53
53
|
"@toptal/picasso-tailwind": ">=2.7",
|
|
54
|
+
"@toptal/picasso-skeleton-loader": "^1.0.37",
|
|
54
55
|
"react": ">=16.12.0 < 19.0.0"
|
|
55
56
|
},
|
|
56
57
|
"devDependencies": {
|
|
@@ -33,7 +33,7 @@ exports[`PageAutocomplete renders 1`] = `
|
|
|
33
33
|
>
|
|
34
34
|
<button
|
|
35
35
|
aria-disabled="false"
|
|
36
|
-
class="base-Button text-lg inline-flex items-center justify-center select-none appearance-none m-0 relative normal-case align-middle transition-colors duration-350 ease-out shrink-0 outline-none [
|
|
36
|
+
class="base-Button text-lg inline-flex items-center justify-center select-none appearance-none m-0 relative normal-case align-middle transition-colors duration-350 ease-out shrink-0 outline-none [[data-component-type="button"]+&]:ml cursor-pointer rounded-full p-0 w-[1.5em] h-[1.5em] border-none text-graphite hover:bg-gray active:bg-gray focus-visible:shadow-[0_0_0_3px_rgba(32,78,207,0.48)] bg-transparent"
|
|
37
37
|
data-component-type="button"
|
|
38
38
|
role="reset"
|
|
39
39
|
tabindex="-1"
|
|
@@ -88,6 +88,7 @@ const borderPseudoElement = [
|
|
|
88
88
|
'after:h-[1px]',
|
|
89
89
|
]
|
|
90
90
|
|
|
91
|
+
/** @deprecated Use `PageHeadBase` instead to conform to BASE. `PageHead` will be removed in a future major update of Picasso*/
|
|
91
92
|
export const PageHead = forwardRef<HTMLDivElement, Props>(function PageHead(
|
|
92
93
|
props,
|
|
93
94
|
ref
|
|
@@ -24,6 +24,7 @@ page
|
|
|
24
24
|
'base/Page'
|
|
25
25
|
)
|
|
26
26
|
.addExample('PageHead/story/Title.example.tsx', 'Title', 'base/Page')
|
|
27
|
+
.addExample('PageHead/story/Steps.example.tsx', 'Steps', 'base/Page')
|
|
27
28
|
.addExample(
|
|
28
29
|
'PageHead/story/TitleAndButton.example.tsx',
|
|
29
30
|
'Title and button',
|
|
@@ -39,7 +40,6 @@ page
|
|
|
39
40
|
'Title and breadcrumbs',
|
|
40
41
|
'base/Page'
|
|
41
42
|
)
|
|
42
|
-
.addExample('PageHead/story/Steps.example.tsx', 'Steps', 'base/Page')
|
|
43
43
|
.addExample(
|
|
44
44
|
'PageHead/story/WithRightPadding.example.tsx',
|
|
45
45
|
'With right padding of the container',
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import type { ReactNode } from 'react'
|
|
2
|
+
import React, { forwardRef } from 'react'
|
|
3
|
+
import type { BaseProps, TextLabelProps } from '@toptal/picasso-shared'
|
|
4
|
+
import { Typography } from '@toptal/picasso-typography'
|
|
5
|
+
import { twMerge } from '@toptal/picasso-tailwind-merge'
|
|
6
|
+
import { SkeletonLoader } from '@toptal/picasso-skeleton-loader'
|
|
7
|
+
|
|
8
|
+
export interface Props extends BaseProps, TextLabelProps {
|
|
9
|
+
/**
|
|
10
|
+
* Buttons or other actions to be rendered on the right side of the title
|
|
11
|
+
*/
|
|
12
|
+
actions?: ReactNode
|
|
13
|
+
/**
|
|
14
|
+
* Breadcrumbs component to be rendered above the title
|
|
15
|
+
*/
|
|
16
|
+
breadcrumbs?: ReactNode
|
|
17
|
+
/** Whether it should have right padding */
|
|
18
|
+
rightPadding?: boolean
|
|
19
|
+
/** Whether it should hide bottom border */
|
|
20
|
+
noBorder?: boolean
|
|
21
|
+
/** Render components next to the title. */
|
|
22
|
+
titleAdornments?: ReactNode[]
|
|
23
|
+
/** Title */
|
|
24
|
+
title?: string
|
|
25
|
+
/** Shows the loading skeleton when title is loading */
|
|
26
|
+
titleLoading?: boolean
|
|
27
|
+
/** Subtitle */
|
|
28
|
+
subtitle?: string
|
|
29
|
+
/** Shows the loading skeleton when subtitle is loading */
|
|
30
|
+
subtitleLoading?: boolean
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const borderPseudoElement = [
|
|
34
|
+
'after:content-[""]',
|
|
35
|
+
'after:absolute',
|
|
36
|
+
'after:inset-x-0',
|
|
37
|
+
'after:bottom-0',
|
|
38
|
+
'after:z-0',
|
|
39
|
+
'after:bg-gray-200',
|
|
40
|
+
'after:h-[1px]',
|
|
41
|
+
]
|
|
42
|
+
|
|
43
|
+
export const PageHeadBase = forwardRef<HTMLDivElement, Props>(
|
|
44
|
+
(
|
|
45
|
+
{
|
|
46
|
+
breadcrumbs,
|
|
47
|
+
title,
|
|
48
|
+
titleAdornments,
|
|
49
|
+
titleCase,
|
|
50
|
+
subtitle,
|
|
51
|
+
actions,
|
|
52
|
+
noBorder = false,
|
|
53
|
+
rightPadding = false,
|
|
54
|
+
titleLoading = false,
|
|
55
|
+
subtitleLoading = false,
|
|
56
|
+
className,
|
|
57
|
+
},
|
|
58
|
+
ref
|
|
59
|
+
) => {
|
|
60
|
+
const withBorder = !noBorder
|
|
61
|
+
|
|
62
|
+
const getLoadingState = (loading?: boolean) => {
|
|
63
|
+
if (loading) {
|
|
64
|
+
return <SkeletonLoader.Header />
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
return true
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
return (
|
|
71
|
+
<div
|
|
72
|
+
className={twMerge(
|
|
73
|
+
'relative flex flex-col gap-6',
|
|
74
|
+
['py-3', rightPadding && 'pr-8'],
|
|
75
|
+
withBorder && borderPseudoElement,
|
|
76
|
+
className
|
|
77
|
+
)}
|
|
78
|
+
ref={ref}
|
|
79
|
+
>
|
|
80
|
+
<div className='flex flex-col gap-4'>
|
|
81
|
+
{breadcrumbs}
|
|
82
|
+
|
|
83
|
+
{/* main */}
|
|
84
|
+
<div className='flex justify-between items-start gap-6 flex-wrap md:flex-nowrap'>
|
|
85
|
+
{/* Title and Subtitle container */}
|
|
86
|
+
<div className='flex flex-col gap-1 grow'>
|
|
87
|
+
{/* Title container */}
|
|
88
|
+
{title && (
|
|
89
|
+
<div className='flex items-center gap-2'>
|
|
90
|
+
{titleLoading ? (
|
|
91
|
+
getLoadingState(titleLoading)
|
|
92
|
+
) : (
|
|
93
|
+
<Typography
|
|
94
|
+
variant='heading'
|
|
95
|
+
size='large'
|
|
96
|
+
titleCase={titleCase}
|
|
97
|
+
className={className}
|
|
98
|
+
>
|
|
99
|
+
{title}
|
|
100
|
+
</Typography>
|
|
101
|
+
)}
|
|
102
|
+
{titleAdornments}
|
|
103
|
+
</div>
|
|
104
|
+
)}
|
|
105
|
+
{subtitleLoading
|
|
106
|
+
? getLoadingState(subtitleLoading)
|
|
107
|
+
: subtitle && (
|
|
108
|
+
<div>
|
|
109
|
+
<Typography size='small'>{subtitle}</Typography>
|
|
110
|
+
</div>
|
|
111
|
+
)}
|
|
112
|
+
</div>
|
|
113
|
+
|
|
114
|
+
{/* Actions container */}
|
|
115
|
+
{actions && (
|
|
116
|
+
<div className='flex items-center min-h-8 grow-0'>{actions}</div>
|
|
117
|
+
)}
|
|
118
|
+
</div>
|
|
119
|
+
</div>
|
|
120
|
+
</div>
|
|
121
|
+
)
|
|
122
|
+
}
|
|
123
|
+
)
|
|
124
|
+
|
|
125
|
+
PageHeadBase.displayName = 'PageHeadBase'
|
|
126
|
+
|
|
127
|
+
export default PageHeadBase
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import { Button, Link, PageHeadBase, Breadcrumbs, Badge } from '@toptal/picasso'
|
|
3
|
+
import { TagRectangular } from '@toptal/picasso-tag'
|
|
4
|
+
|
|
5
|
+
const DefaultExample = () => {
|
|
6
|
+
const breadcrumbs = (
|
|
7
|
+
<Breadcrumbs>
|
|
8
|
+
<Breadcrumbs.Item
|
|
9
|
+
as={Link}
|
|
10
|
+
variant='action'
|
|
11
|
+
href='https://en.wikipedia.org/wiki/United_States'
|
|
12
|
+
>
|
|
13
|
+
USA
|
|
14
|
+
</Breadcrumbs.Item>
|
|
15
|
+
<Breadcrumbs.Item
|
|
16
|
+
as={Link}
|
|
17
|
+
variant='action'
|
|
18
|
+
href='https://en.wikipedia.org/wiki/Software'
|
|
19
|
+
>
|
|
20
|
+
Software
|
|
21
|
+
</Breadcrumbs.Item>
|
|
22
|
+
<Breadcrumbs.Item as={Link} variant='action' href='https://toptal.com'>
|
|
23
|
+
Toptal
|
|
24
|
+
</Breadcrumbs.Item>
|
|
25
|
+
</Breadcrumbs>
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
const actions = (
|
|
29
|
+
<>
|
|
30
|
+
<Button size='small' variant='secondary'>
|
|
31
|
+
Button
|
|
32
|
+
</Button>
|
|
33
|
+
<Button.Split size='small' variant='secondary'>
|
|
34
|
+
Button
|
|
35
|
+
</Button.Split>
|
|
36
|
+
<Button size='small' variant='secondary'>
|
|
37
|
+
Button
|
|
38
|
+
</Button>
|
|
39
|
+
</>
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
return (
|
|
43
|
+
<PageHeadBase
|
|
44
|
+
actions={actions}
|
|
45
|
+
breadcrumbs={breadcrumbs}
|
|
46
|
+
subtitle='Lorem ipsum dolor sit amet, consectetur adipiscing elit.'
|
|
47
|
+
title='Heading Large'
|
|
48
|
+
titleAdornments={[
|
|
49
|
+
<Badge variant='white' content={1} />,
|
|
50
|
+
<TagRectangular variant='green'>Label</TagRectangular>,
|
|
51
|
+
]}
|
|
52
|
+
/>
|
|
53
|
+
)
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export default DefaultExample
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import { Badge, PageHeadBase, SkeletonLoader } from '@toptal/picasso'
|
|
3
|
+
import { TagRectangular } from '@toptal/picasso-tag'
|
|
4
|
+
|
|
5
|
+
const isLoading = true
|
|
6
|
+
|
|
7
|
+
const Loading = () => (
|
|
8
|
+
<PageHeadBase
|
|
9
|
+
title='Heading large'
|
|
10
|
+
subtitle='Description'
|
|
11
|
+
subtitleLoading={isLoading}
|
|
12
|
+
titleAdornments={[
|
|
13
|
+
isLoading ? (
|
|
14
|
+
<SkeletonLoader.Typography style={{ width: '20px' }} />
|
|
15
|
+
) : (
|
|
16
|
+
<Badge variant='white' content={1} />
|
|
17
|
+
),
|
|
18
|
+
<TagRectangular variant='green'>Label</TagRectangular>,
|
|
19
|
+
]}
|
|
20
|
+
/>
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
export default Loading
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import {
|
|
3
|
+
Page,
|
|
4
|
+
Section,
|
|
5
|
+
PageHeadBase,
|
|
6
|
+
Typography,
|
|
7
|
+
Container,
|
|
8
|
+
Button,
|
|
9
|
+
} from '@toptal/picasso'
|
|
10
|
+
import { SPACING_4, SPACING_8 } from '@toptal/picasso-utils'
|
|
11
|
+
|
|
12
|
+
const BlankExample = () => (
|
|
13
|
+
<div>
|
|
14
|
+
<Page>
|
|
15
|
+
<Page.Content>
|
|
16
|
+
<Container>
|
|
17
|
+
<Page.Article>
|
|
18
|
+
<PageHeadBase noBorder title='Overview' />
|
|
19
|
+
</Page.Article>
|
|
20
|
+
<Page.Article style={{ marginTop: '1rem' }}>
|
|
21
|
+
<Section variant='bordered'>
|
|
22
|
+
<Container bottom={SPACING_4}>
|
|
23
|
+
<Typography variant='heading' size='large'>
|
|
24
|
+
Next step: Speak with ToptTal representative
|
|
25
|
+
</Typography>
|
|
26
|
+
</Container>
|
|
27
|
+
<Container bottom={SPACING_8}>
|
|
28
|
+
<Typography>
|
|
29
|
+
On this call, we will discuss the scope of the project and go
|
|
30
|
+
over how Toptal works to se if we can be a good fir to for
|
|
31
|
+
your project. This only takes approximately 15 minutes.
|
|
32
|
+
</Typography>
|
|
33
|
+
</Container>
|
|
34
|
+
<Button onClick={() => {}}>Request a Call</Button>
|
|
35
|
+
</Section>
|
|
36
|
+
</Page.Article>
|
|
37
|
+
</Container>
|
|
38
|
+
</Page.Content>
|
|
39
|
+
</Page>
|
|
40
|
+
</div>
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
export default BlankExample
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import { Notification, PageHeadBase } from '@toptal/picasso'
|
|
3
|
+
|
|
4
|
+
const NotificationExample = () => (
|
|
5
|
+
<>
|
|
6
|
+
<PageHeadBase title='Heading Large' noBorder />
|
|
7
|
+
|
|
8
|
+
<Notification>
|
|
9
|
+
Lorem ipsum dolor sit amet consectetur adipisicing elit.
|
|
10
|
+
</Notification>
|
|
11
|
+
</>
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
export default NotificationExample
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import { Notification, PageHeadBase, Tabs } from '@toptal/picasso'
|
|
3
|
+
|
|
4
|
+
const NotificationAndTabsExample = () => {
|
|
5
|
+
const [value, setValue] = React.useState(0)
|
|
6
|
+
|
|
7
|
+
const handleChange = (_: React.ChangeEvent<{}> | null, newValue: number) => {
|
|
8
|
+
setValue(newValue)
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
return (
|
|
12
|
+
<>
|
|
13
|
+
<PageHeadBase title='Heading Large' noBorder />
|
|
14
|
+
|
|
15
|
+
<div className='mb-3'>
|
|
16
|
+
<Notification>
|
|
17
|
+
Lorem ipsum dolor sit amet consectetur adipisicing elit.
|
|
18
|
+
</Notification>
|
|
19
|
+
</div>
|
|
20
|
+
|
|
21
|
+
<Tabs value={value} onChange={handleChange}>
|
|
22
|
+
<Tabs.Tab label='Label' />
|
|
23
|
+
<Tabs.Tab label='Label' />
|
|
24
|
+
<Tabs.Tab label='Label' />
|
|
25
|
+
</Tabs>
|
|
26
|
+
</>
|
|
27
|
+
)
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export default NotificationAndTabsExample
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import { PageHeadBase, Stepper } from '@toptal/picasso'
|
|
3
|
+
|
|
4
|
+
const steps = (
|
|
5
|
+
<Stepper
|
|
6
|
+
steps={['Availability', 'Details', 'Feedback', 'Position', 'Skills']}
|
|
7
|
+
overflowEllipsis
|
|
8
|
+
/>
|
|
9
|
+
)
|
|
10
|
+
|
|
11
|
+
const StepsExample = () => (
|
|
12
|
+
<PageHeadBase title='Heading Large' noBorder actions={steps} />
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
export default StepsExample
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import { Link, PageHeadBase, Breadcrumbs } from '@toptal/picasso'
|
|
3
|
+
|
|
4
|
+
const breadcrumbs = (
|
|
5
|
+
<Breadcrumbs>
|
|
6
|
+
<Breadcrumbs.Item
|
|
7
|
+
as={Link}
|
|
8
|
+
variant='action'
|
|
9
|
+
href='https://en.wikipedia.org/wiki/United_States'
|
|
10
|
+
>
|
|
11
|
+
USA
|
|
12
|
+
</Breadcrumbs.Item>
|
|
13
|
+
<Breadcrumbs.Item
|
|
14
|
+
as={Link}
|
|
15
|
+
variant='action'
|
|
16
|
+
href='https://en.wikipedia.org/wiki/Software'
|
|
17
|
+
>
|
|
18
|
+
Software
|
|
19
|
+
</Breadcrumbs.Item>
|
|
20
|
+
<Breadcrumbs.Item as={Link} variant='action' href='https://toptal.com'>
|
|
21
|
+
Toptal
|
|
22
|
+
</Breadcrumbs.Item>
|
|
23
|
+
</Breadcrumbs>
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
const TitleAndBreadcrumbsExample = () => (
|
|
27
|
+
<PageHeadBase breadcrumbs={breadcrumbs} title='Heading Large' />
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
export default TitleAndBreadcrumbsExample
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import { PageHeadBase, Button, Settings16 } from '@toptal/picasso'
|
|
3
|
+
|
|
4
|
+
const TitleAndButtonExample = () => (
|
|
5
|
+
<PageHeadBase
|
|
6
|
+
title='Heading Large'
|
|
7
|
+
actions={<Button.Circular variant='flat' icon={<Settings16 />} />}
|
|
8
|
+
/>
|
|
9
|
+
)
|
|
10
|
+
|
|
11
|
+
export default TitleAndButtonExample
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import { Tabs, PageHeadBase } from '@toptal/picasso'
|
|
3
|
+
|
|
4
|
+
const TitleAndTabsExample = () => {
|
|
5
|
+
const [value, setValue] = React.useState(0)
|
|
6
|
+
|
|
7
|
+
const handleChange = (_: React.ChangeEvent<{}> | null, newValue: number) => {
|
|
8
|
+
setValue(newValue)
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
return (
|
|
12
|
+
<>
|
|
13
|
+
<PageHeadBase title='Heading Large' noBorder />
|
|
14
|
+
|
|
15
|
+
<Tabs value={value} onChange={handleChange}>
|
|
16
|
+
<Tabs.Tab label='Label' />
|
|
17
|
+
<Tabs.Tab label='Label' />
|
|
18
|
+
<Tabs.Tab label='Label' />
|
|
19
|
+
</Tabs>
|
|
20
|
+
</>
|
|
21
|
+
)
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export default TitleAndTabsExample
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import { Button, PageHeadBase } from '@toptal/picasso'
|
|
3
|
+
|
|
4
|
+
const actions = (
|
|
5
|
+
<>
|
|
6
|
+
<Button size='small' variant='secondary'>
|
|
7
|
+
Button
|
|
8
|
+
</Button>
|
|
9
|
+
<Button size='small' variant='negative'>
|
|
10
|
+
Reject
|
|
11
|
+
</Button>
|
|
12
|
+
<Button size='small' variant='positive'>
|
|
13
|
+
Accept
|
|
14
|
+
</Button>
|
|
15
|
+
</>
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
const WithRightPaddingExample = () => (
|
|
19
|
+
<PageHeadBase rightPadding title='Heading Large' actions={actions} />
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
export default WithRightPaddingExample
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { PageHeadBase } from '../PageHeadBase'
|
|
2
|
+
import PicassoBook from '~/.storybook/components/PicassoBook'
|
|
3
|
+
|
|
4
|
+
const page = PicassoBook.section('Components').createPage(
|
|
5
|
+
'PageHeadBase',
|
|
6
|
+
`${PicassoBook.createSourceLink(__filename)}`
|
|
7
|
+
)
|
|
8
|
+
|
|
9
|
+
page
|
|
10
|
+
.createTabChapter('Props')
|
|
11
|
+
.addComponentDocs({ component: PageHeadBase, name: 'PageHeadBase' })
|
|
12
|
+
|
|
13
|
+
page
|
|
14
|
+
.createChapter()
|
|
15
|
+
.addExample('PageHeadBase/story/Default.example.tsx', 'Default', 'base/Page')
|
|
16
|
+
.addExample('PageHeadBase/story/Blank.example.tsx', 'Blank', 'base/Page')
|
|
17
|
+
.addExample(
|
|
18
|
+
'PageHeadBase/story/NoBorder.example.tsx',
|
|
19
|
+
{
|
|
20
|
+
title: 'No Border',
|
|
21
|
+
description:
|
|
22
|
+
'No border should be used only, when PageHead is followed by bordered section',
|
|
23
|
+
},
|
|
24
|
+
'base/Page'
|
|
25
|
+
)
|
|
26
|
+
.addExample('PageHeadBase/story/Title.example.tsx', 'Title', 'base/Page')
|
|
27
|
+
.addExample('PageHeadBase/story/Steps.example.tsx', 'Steps', 'base/Page')
|
|
28
|
+
.addExample('PageHeadBase/story/Loading.example.tsx', 'Loading', 'base/Page')
|
|
29
|
+
.addExample(
|
|
30
|
+
'PageHeadBase/story/TitleAndButton.example.tsx',
|
|
31
|
+
'Title and button',
|
|
32
|
+
'base/Page'
|
|
33
|
+
)
|
|
34
|
+
.addExample(
|
|
35
|
+
'PageHeadBase/story/TitleAndTabs.example.tsx',
|
|
36
|
+
'Title and tabs',
|
|
37
|
+
'base/Page'
|
|
38
|
+
)
|
|
39
|
+
.addExample(
|
|
40
|
+
'PageHeadBase/story/TitleAndBreadcrumbs.example.tsx',
|
|
41
|
+
'Title and breadcrumbs',
|
|
42
|
+
'base/Page'
|
|
43
|
+
)
|
|
44
|
+
.addExample(
|
|
45
|
+
'PageHeadBase/story/Notification.example.tsx',
|
|
46
|
+
'Notification',
|
|
47
|
+
'base/Page'
|
|
48
|
+
)
|
|
49
|
+
.addExample(
|
|
50
|
+
'PageHeadBase/story/NotificationAndTabs.example.tsx',
|
|
51
|
+
'NotificationAndTabs',
|
|
52
|
+
'base/Page'
|
|
53
|
+
)
|
|
54
|
+
.addExample(
|
|
55
|
+
'PageHeadBase/story/WithRightPadding.example.tsx',
|
|
56
|
+
'With right padding of the container',
|
|
57
|
+
'base/Page'
|
|
58
|
+
)
|
|
@@ -28,7 +28,7 @@ exports[`Page.TopBar render with custom logo 1`] = `
|
|
|
28
28
|
>
|
|
29
29
|
<button
|
|
30
30
|
aria-disabled="false"
|
|
31
|
-
class="base-Button text-lg inline-flex items-center justify-center select-none appearance-none m-0 relative normal-case align-middle transition-colors duration-350 ease-out shrink-0 outline-none [
|
|
31
|
+
class="base-Button text-lg inline-flex items-center justify-center select-none appearance-none m-0 relative normal-case align-middle transition-colors duration-350 ease-out shrink-0 outline-none [[data-component-type="button"]+&]:ml cursor-pointer rounded-full p-0 w-[1.5em] h-[1.5em] border-none text-white hover:bg-white/[0.08] active:bg-white/[0.16] focus-visible:shadow-[0_0_0_3px_rgba(255,255,255,0.48)] bg-transparent"
|
|
32
32
|
data-component-type="button"
|
|
33
33
|
role="button"
|
|
34
34
|
tabindex="0"
|
|
@@ -127,7 +127,7 @@ exports[`Page.TopBar render with link 1`] = `
|
|
|
127
127
|
>
|
|
128
128
|
<button
|
|
129
129
|
aria-disabled="false"
|
|
130
|
-
class="base-Button text-lg inline-flex items-center justify-center select-none appearance-none m-0 relative normal-case align-middle transition-colors duration-350 ease-out shrink-0 outline-none [
|
|
130
|
+
class="base-Button text-lg inline-flex items-center justify-center select-none appearance-none m-0 relative normal-case align-middle transition-colors duration-350 ease-out shrink-0 outline-none [[data-component-type="button"]+&]:ml cursor-pointer rounded-full p-0 w-[1.5em] h-[1.5em] border-none text-white hover:bg-white/[0.08] active:bg-white/[0.16] focus-visible:shadow-[0_0_0_3px_rgba(255,255,255,0.48)] bg-transparent"
|
|
131
131
|
data-component-type="button"
|
|
132
132
|
role="button"
|
|
133
133
|
tabindex="0"
|
|
@@ -252,7 +252,7 @@ exports[`Page.TopBar renders 1`] = `
|
|
|
252
252
|
>
|
|
253
253
|
<button
|
|
254
254
|
aria-disabled="false"
|
|
255
|
-
class="base-Button text-lg inline-flex items-center justify-center select-none appearance-none m-0 relative normal-case align-middle transition-colors duration-350 ease-out shrink-0 outline-none [
|
|
255
|
+
class="base-Button text-lg inline-flex items-center justify-center select-none appearance-none m-0 relative normal-case align-middle transition-colors duration-350 ease-out shrink-0 outline-none [[data-component-type="button"]+&]:ml cursor-pointer rounded-full p-0 w-[1.5em] h-[1.5em] border-none text-white hover:bg-white/[0.08] active:bg-white/[0.16] focus-visible:shadow-[0_0_0_3px_rgba(255,255,255,0.48)] bg-transparent"
|
|
256
256
|
data-component-type="button"
|
|
257
257
|
role="button"
|
|
258
258
|
tabindex="0"
|
package/src/index.ts
CHANGED