@lateralus-ai/shipping-ui 2.0.0-dev.0 → 2.0.0-dev.10
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/components/EmptyState.d.ts +1 -1
- package/dist/components/Entry.d.ts +27 -7
- package/dist/components/Modal.d.ts +36 -0
- package/dist/components/Tabs.d.ts +23 -8
- package/dist/components/index.d.ts +3 -2
- package/dist/index.cjs +32 -32
- package/dist/index.d.ts +2 -2
- package/dist/index.esm.js +4406 -3917
- package/dist/patterns/Search/ResultRow.d.ts +16 -7
- package/dist/patterns/Search/SearchModal.d.ts +84 -2
- package/dist/patterns/Search/index.d.ts +2 -2
- package/dist/primitives/Badge.d.ts +7 -4
- package/dist/primitives/Button.d.ts +17 -8
- package/dist/primitives/button-styles.d.ts +4 -0
- package/dist/primitives/index.d.ts +4 -2
- package/dist/style.css +1 -1
- package/dist/tailwind-theme.d.ts +4 -4
- package/dist/theme-entry-BUK3MJUJ.mjs +261 -0
- package/dist/theme-entry-ygTpGaNC.js +1 -0
- package/dist/theme-entry.d.ts +2 -0
- package/dist/theme.cjs +1 -0
- package/dist/theme.d.ts +2 -0
- package/dist/theme.esm.js +5 -0
- package/package.json +10 -3
- package/src/components/EmptyState.tsx +2 -2
- package/src/components/Entry.tsx +119 -45
- package/src/components/Modal.tsx +141 -0
- package/src/components/Tabs.tsx +146 -48
- package/src/components/index.ts +43 -13
- package/src/icons/arrow-paths.ts +8 -8
- package/src/icons/chevron-paths.ts +17 -17
- package/src/icons/icons-data.ts +656 -656
- package/src/index.ts +76 -50
- package/src/patterns/Search/ResultRow.tsx +44 -52
- package/src/patterns/Search/SearchModal.tsx +310 -88
- package/src/patterns/Search/index.ts +31 -5
- package/src/patterns/Sidebar/assets/logo-compliance-mark.png +5 -5
- package/src/patterns/Sidebar/assets/logo-compliance-mask.png +13 -13
- package/src/patterns/Sidebar/assets/logo-compliance.svg +17 -17
- package/src/patterns/Sidebar/assets/logo-technical-avatar.svg +17 -17
- package/src/patterns/Sidebar/assets/logo-technical-mark.png +5 -5
- package/src/patterns/Sidebar/assets/logo-technical.svg +16 -16
- package/src/patterns/Skeleton/Skeleton.tsx +56 -57
- package/src/primitives/Badge.tsx +20 -10
- package/src/primitives/Button.tsx +201 -37
- package/src/primitives/button-styles.ts +92 -0
- package/src/primitives/index.ts +7 -2
- package/src/stories/canvases/ButtonsCanvas.tsx +94 -44
- package/src/stories/canvases/ButtonsMatrixCanvas.tsx +8 -7
- package/src/stories/canvases/ContentCanvas.tsx +157 -88
- package/src/stories/canvases/SearchCanvas.tsx +150 -65
- package/src/stories/canvases/figma-buttons-layout.ts +83 -0
- package/src/stories/canvases/helpers.tsx +26 -43
- package/src/stories/components/Buttons.stories.tsx +11 -11
- package/src/stories/components/Chat.stories.tsx +11 -11
- package/src/stories/components/Content.stories.tsx +11 -11
- package/src/stories/components/Core.stories.tsx +11 -11
- package/src/stories/components/DomainForms.stories.tsx +11 -11
- package/src/stories/components/Filters.stories.tsx +11 -11
- package/src/stories/components/Forms.stories.tsx +11 -11
- package/src/stories/components/Icons.stories.tsx +11 -11
- package/src/stories/components/Illustrations.stories.tsx +11 -11
- package/src/stories/components/Library.stories.tsx +11 -11
- package/src/stories/components/Modals.stories.tsx +11 -11
- package/src/stories/components/Report.stories.tsx +11 -11
- package/src/stories/components/ReportLayout.stories.tsx +11 -11
- package/src/stories/components/Search.stories.tsx +11 -11
- package/src/stories/components/Settings.stories.tsx +11 -11
- package/src/stories/components/Ships.stories.tsx +11 -11
- package/src/stories/components/SidebarLayouts.stories.tsx +11 -11
- package/src/stories/components/Skeletons.stories.tsx +11 -11
- package/src/stories/components/Workflows.stories.tsx +11 -11
- package/src/stories/style-guide/Buttons.stories.tsx +11 -11
- package/src/stories/style-guide/ColorTokens.stories.tsx +11 -11
- package/src/stories/style-guide/Colors.stories.tsx +11 -11
- package/src/stories/style-guide/RaiseLevels.stories.tsx +11 -11
- package/src/stories/style-guide/Typography.stories.tsx +11 -11
- package/src/tailwind-theme.ts +4 -4
- package/src/theme-entry.ts +2 -0
- package/tailwind.config.ts +12 -0
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
export type ButtonHierarchy =
|
|
2
|
+
| "primary"
|
|
3
|
+
| "secondary"
|
|
4
|
+
| "tertiary"
|
|
5
|
+
| "quaternary"
|
|
6
|
+
| "destructive";
|
|
7
|
+
|
|
8
|
+
export type ButtonAppearance = "idle" | "hover" | "disabled";
|
|
9
|
+
|
|
10
|
+
type HierarchyStyleMap = Record<ButtonAppearance, string>;
|
|
11
|
+
|
|
12
|
+
const primaryStyles: HierarchyStyleMap = {
|
|
13
|
+
idle: "bg-action-primary-idle text-action-primary-on-idle",
|
|
14
|
+
hover: "bg-action-primary-hover text-action-primary-on-hover",
|
|
15
|
+
disabled: "bg-action-primary-disabled text-action-primary-on-disabled",
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
const secondaryStyles: HierarchyStyleMap = {
|
|
19
|
+
idle:
|
|
20
|
+
"border border-divider-primary bg-action-secondary-idle text-action-secondary-on-idle",
|
|
21
|
+
hover:
|
|
22
|
+
"border border-divider-secondary bg-action-secondary-hover text-action-secondary-on-hover",
|
|
23
|
+
disabled:
|
|
24
|
+
"border border-divider-primary bg-action-secondary-disabled text-action-secondary-on-disabled",
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
const tertiaryStyles: HierarchyStyleMap = {
|
|
28
|
+
idle: "bg-action-tertiary-idle text-action-tertiary-on-idle",
|
|
29
|
+
hover: "bg-action-tertiary-hover text-action-tertiary-on-hover",
|
|
30
|
+
disabled: "bg-action-tertiary-disabled text-action-tertiary-on-disabled",
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
const quaternaryStyles: HierarchyStyleMap = {
|
|
34
|
+
idle: "bg-action-quaternary-idle text-action-quaternary-on-idle",
|
|
35
|
+
hover: "bg-action-quaternary-hover text-action-quaternary-on-hover",
|
|
36
|
+
disabled: "bg-action-quaternary-disabled text-action-quaternary-on-disabled",
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
const destructiveStyles: HierarchyStyleMap = {
|
|
40
|
+
idle: "bg-action-destructive-idle text-action-destructive-on-idle",
|
|
41
|
+
hover: "bg-action-destructive-hover text-action-destructive-on-hover",
|
|
42
|
+
disabled:
|
|
43
|
+
"bg-action-destructive-disabled text-action-destructive-on-disabled",
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
const hierarchyStyles: Record<ButtonHierarchy, HierarchyStyleMap> = {
|
|
47
|
+
primary: primaryStyles,
|
|
48
|
+
secondary: secondaryStyles,
|
|
49
|
+
tertiary: tertiaryStyles,
|
|
50
|
+
quaternary: quaternaryStyles,
|
|
51
|
+
destructive: destructiveStyles,
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
const interactiveHierarchyStyles: Record<ButtonHierarchy, string> = {
|
|
55
|
+
primary:
|
|
56
|
+
"bg-action-primary-idle text-action-primary-on-idle hover:bg-action-primary-hover hover:text-action-primary-on-hover",
|
|
57
|
+
secondary:
|
|
58
|
+
"border border-divider-primary bg-action-secondary-idle text-action-secondary-on-idle hover:border-divider-secondary hover:bg-action-secondary-hover hover:text-action-secondary-on-hover",
|
|
59
|
+
tertiary:
|
|
60
|
+
"bg-action-tertiary-idle text-action-tertiary-on-idle hover:bg-action-tertiary-hover hover:text-action-tertiary-on-hover",
|
|
61
|
+
quaternary:
|
|
62
|
+
"bg-action-quaternary-idle text-action-quaternary-on-idle hover:bg-action-quaternary-hover hover:text-action-quaternary-on-hover",
|
|
63
|
+
destructive:
|
|
64
|
+
"bg-action-destructive-idle text-action-destructive-on-idle hover:bg-action-destructive-hover hover:text-action-destructive-on-hover",
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
const disabledHierarchyStyles: Record<ButtonHierarchy, string> = {
|
|
68
|
+
primary: "bg-action-primary-disabled text-action-primary-on-disabled",
|
|
69
|
+
secondary:
|
|
70
|
+
"border border-divider-primary bg-action-secondary-disabled text-action-secondary-on-disabled",
|
|
71
|
+
tertiary: "bg-action-tertiary-disabled text-action-tertiary-on-disabled",
|
|
72
|
+
quaternary:
|
|
73
|
+
"bg-action-quaternary-disabled text-action-quaternary-on-disabled",
|
|
74
|
+
destructive:
|
|
75
|
+
"bg-action-destructive-disabled text-action-destructive-on-disabled",
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
export const getButtonAppearanceClasses = (
|
|
79
|
+
hierarchy: ButtonHierarchy,
|
|
80
|
+
appearance: ButtonAppearance,
|
|
81
|
+
) => hierarchyStyles[hierarchy][appearance];
|
|
82
|
+
|
|
83
|
+
export const getButtonInteractiveClasses = (
|
|
84
|
+
hierarchy: ButtonHierarchy,
|
|
85
|
+
disabled: boolean,
|
|
86
|
+
) => {
|
|
87
|
+
if (disabled) {
|
|
88
|
+
return disabledHierarchyStyles[hierarchy];
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
return interactiveHierarchyStyles[hierarchy];
|
|
92
|
+
};
|
package/src/primitives/index.ts
CHANGED
|
@@ -1,4 +1,9 @@
|
|
|
1
|
-
export
|
|
1
|
+
export type {
|
|
2
|
+
ButtonAppearance,
|
|
3
|
+
ButtonHierarchy,
|
|
4
|
+
} from "./button-styles";
|
|
5
|
+
export type { ButtonProps, ButtonDropdownOption } from "./Button";
|
|
6
|
+
export { Button } from "./Button";
|
|
2
7
|
export { IconButton, type IconButtonProps } from "./IconButton";
|
|
3
8
|
export { Logo, type LogoProps } from "./Logo";
|
|
4
9
|
export { Avatar, type AvatarProps } from "./Avatar";
|
|
@@ -9,5 +14,5 @@ export { Tooltip, TooltipProvider, type TooltipProps, type TooltipSide } from ".
|
|
|
9
14
|
export { ThinkingDot, type ThinkingDotProps } from "./ThinkingDot";
|
|
10
15
|
export { Count, type CountProps } from "./Count";
|
|
11
16
|
export { Switch, type SwitchProps } from "./Switch";
|
|
12
|
-
export { Badge, type BadgeProps } from "./Badge";
|
|
17
|
+
export { Badge, type BadgeProps, type BadgeColor, type BadgeType } from "./Badge";
|
|
13
18
|
export { Callout, type CalloutProps } from "./Callout";
|
|
@@ -1,57 +1,107 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
FigmaPage,
|
|
5
|
-
FigmaSection,
|
|
6
|
-
} from "../_layout";
|
|
7
|
-
import { ButtonSnapshot } from "./helpers";
|
|
1
|
+
import { AttachmentIcon } from "../../icons";
|
|
2
|
+
import { Button } from "../../primitives";
|
|
3
|
+
import { FigmaContent, FigmaPage, FigmaSection } from "../_layout";
|
|
8
4
|
import { FIGMA_WIDTHS } from "./figma-widths";
|
|
5
|
+
import {
|
|
6
|
+
BUTTON_VARIANT_SLOTS,
|
|
7
|
+
FIGMA_BUTTON_SLOTS,
|
|
8
|
+
FIGMA_BUTTONS_CANVAS,
|
|
9
|
+
FIGMA_BUTTONS_GRID,
|
|
10
|
+
type ButtonVisualState,
|
|
11
|
+
} from "./figma-buttons-layout";
|
|
12
|
+
import { IconButtonSnapshot } from "./helpers";
|
|
13
|
+
|
|
14
|
+
const demoDropdownOptions = [
|
|
15
|
+
{ label: "Option A", onSelect: () => undefined },
|
|
16
|
+
{ label: "Option B", onSelect: () => undefined },
|
|
17
|
+
];
|
|
9
18
|
|
|
10
|
-
const
|
|
19
|
+
const slotProps = (visualState: ButtonVisualState) => ({
|
|
20
|
+
forcedState: visualState === "idle" ? undefined : visualState,
|
|
21
|
+
disabled: visualState === "disabled",
|
|
22
|
+
});
|
|
11
23
|
|
|
12
24
|
export const ButtonsCanvas = () => (
|
|
13
25
|
<FigmaPage title="Buttons" width={FIGMA_WIDTHS.buttons}>
|
|
14
|
-
<FigmaContent>
|
|
15
|
-
<
|
|
16
|
-
<
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
26
|
+
<FigmaContent padding={0}>
|
|
27
|
+
<div className="px-8 pb-8 pt-6">
|
|
28
|
+
<FigmaSection label="Button">
|
|
29
|
+
<div
|
|
30
|
+
className="relative"
|
|
31
|
+
style={{
|
|
32
|
+
width: FIGMA_BUTTONS_CANVAS.width,
|
|
33
|
+
height: FIGMA_BUTTONS_CANVAS.height,
|
|
34
|
+
}}
|
|
35
|
+
>
|
|
36
|
+
<div
|
|
37
|
+
data-figma-buttons-grid
|
|
38
|
+
className="absolute left-0 top-0"
|
|
39
|
+
style={{
|
|
40
|
+
width: FIGMA_BUTTONS_GRID.width,
|
|
41
|
+
height: FIGMA_BUTTONS_GRID.height,
|
|
42
|
+
}}
|
|
43
|
+
>
|
|
44
|
+
{FIGMA_BUTTON_SLOTS.map((slot) => (
|
|
45
|
+
<div
|
|
46
|
+
key={`${slot.hierarchy}-${slot.visualState}`}
|
|
47
|
+
className="absolute"
|
|
48
|
+
style={{ left: slot.x, top: slot.y }}
|
|
49
|
+
>
|
|
50
|
+
<Button
|
|
51
|
+
hierarchy={slot.hierarchy}
|
|
52
|
+
icon={AttachmentIcon}
|
|
53
|
+
dropdownOptions={demoDropdownOptions}
|
|
54
|
+
{...slotProps(slot.visualState)}
|
|
55
|
+
>
|
|
56
|
+
Button
|
|
57
|
+
</Button>
|
|
58
|
+
</div>
|
|
21
59
|
))}
|
|
22
60
|
</div>
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
61
|
+
|
|
62
|
+
{BUTTON_VARIANT_SLOTS.map((slot) => (
|
|
63
|
+
<div
|
|
64
|
+
key={`${slot.hierarchy}-${slot.variant}`}
|
|
65
|
+
data-visual-test-only
|
|
66
|
+
className="absolute"
|
|
67
|
+
style={{ left: slot.x, top: slot.y }}
|
|
68
|
+
>
|
|
69
|
+
{slot.variant === "noIcon" ? (
|
|
70
|
+
<Button
|
|
71
|
+
hierarchy={slot.hierarchy}
|
|
72
|
+
dropdownOptions={demoDropdownOptions}
|
|
73
|
+
>
|
|
74
|
+
Button
|
|
75
|
+
</Button>
|
|
76
|
+
) : (
|
|
77
|
+
<Button hierarchy={slot.hierarchy} icon={AttachmentIcon}>
|
|
78
|
+
Button
|
|
79
|
+
</Button>
|
|
80
|
+
)}
|
|
81
|
+
</div>
|
|
32
82
|
))}
|
|
33
83
|
</div>
|
|
34
|
-
</
|
|
35
|
-
</FigmaSection>
|
|
84
|
+
</FigmaSection>
|
|
36
85
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
86
|
+
<FigmaSection label="Icon Button" className="mt-8">
|
|
87
|
+
<div className="flex flex-wrap items-center gap-6">
|
|
88
|
+
<IconButtonSnapshot hierarchy="tertiary" visualState="idle" />
|
|
89
|
+
<IconButtonSnapshot hierarchy="tertiary" visualState="hover" />
|
|
90
|
+
<IconButtonSnapshot hierarchy="quaternary" visualState="idle" />
|
|
91
|
+
<IconButtonSnapshot hierarchy="quaternary" visualState="hover" />
|
|
92
|
+
<IconButtonSnapshot
|
|
93
|
+
hierarchy="quaternary"
|
|
94
|
+
visualState="idle"
|
|
95
|
+
size="small"
|
|
96
|
+
/>
|
|
97
|
+
<IconButtonSnapshot
|
|
98
|
+
hierarchy="quaternary"
|
|
99
|
+
visualState="hover"
|
|
100
|
+
size="small"
|
|
101
|
+
/>
|
|
102
|
+
</div>
|
|
103
|
+
</FigmaSection>
|
|
104
|
+
</div>
|
|
55
105
|
</FigmaContent>
|
|
56
106
|
</FigmaPage>
|
|
57
107
|
);
|
|
@@ -9,7 +9,13 @@ import {
|
|
|
9
9
|
import { ButtonSnapshot } from "./helpers";
|
|
10
10
|
import { FIGMA_WIDTHS } from "./figma-widths";
|
|
11
11
|
|
|
12
|
-
const hierarchies = [
|
|
12
|
+
const hierarchies = [
|
|
13
|
+
"primary",
|
|
14
|
+
"secondary",
|
|
15
|
+
"tertiary",
|
|
16
|
+
"quaternary",
|
|
17
|
+
"destructive",
|
|
18
|
+
] as const;
|
|
13
19
|
const columnLabels = ["Primary", "Secondary", "Tertiary", "Quaternary", "Destructive"];
|
|
14
20
|
const rowLabels = ["Idle", "Hover", "Disabled"];
|
|
15
21
|
|
|
@@ -36,17 +42,12 @@ export const ButtonsMatrixCanvas = () => (
|
|
|
36
42
|
visualState={rowLabel.toLowerCase() as "idle" | "hover" | "disabled"}
|
|
37
43
|
/>
|
|
38
44
|
))}
|
|
39
|
-
<ButtonSnapshot
|
|
40
|
-
hierarchy="primary"
|
|
41
|
-
outcome="destructive"
|
|
42
|
-
visualState={rowLabel.toLowerCase() as "idle" | "hover" | "disabled"}
|
|
43
|
-
/>
|
|
44
45
|
</FigmaRow>
|
|
45
46
|
))}
|
|
46
47
|
|
|
47
48
|
<FigmaRow label="Idle" gap={24}>
|
|
48
49
|
<div className="w-24" />
|
|
49
|
-
<Button
|
|
50
|
+
<Button icon={<AddIcon size="small" />} className="min-w-[304px]">
|
|
50
51
|
New chat
|
|
51
52
|
</Button>
|
|
52
53
|
</FigmaRow>
|
|
@@ -1,88 +1,157 @@
|
|
|
1
|
-
import { Button } from "../../primitives";
|
|
2
|
-
import {
|
|
3
|
-
EmptyState,
|
|
4
|
-
Entry,
|
|
5
|
-
Header,
|
|
6
|
-
Tab,
|
|
7
|
-
Tabs,
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
1
|
+
import { Badge, Button } from "../../primitives";
|
|
2
|
+
import {
|
|
3
|
+
EmptyState,
|
|
4
|
+
Entry,
|
|
5
|
+
Header,
|
|
6
|
+
Tab,
|
|
7
|
+
Tabs,
|
|
8
|
+
TabsContent,
|
|
9
|
+
TabsList,
|
|
10
|
+
TabsTrigger,
|
|
11
|
+
} from "../../components";
|
|
12
|
+
import { TickIcon } from "../../icons";
|
|
13
|
+
import { WorkflowsIllustration } from "../../illustrations";
|
|
14
|
+
import {
|
|
15
|
+
FigmaContent,
|
|
16
|
+
FigmaGrid,
|
|
17
|
+
FigmaPage,
|
|
18
|
+
FigmaSection,
|
|
19
|
+
FigmaVariant,
|
|
20
|
+
} from "../_layout";
|
|
21
|
+
import { FIGMA_WIDTHS } from "./figma-widths";
|
|
22
|
+
|
|
23
|
+
export const ContentCanvas = () => (
|
|
24
|
+
<FigmaPage title="Content" width={FIGMA_WIDTHS.content}>
|
|
25
|
+
<FigmaContent>
|
|
26
|
+
<FigmaSection label="Tab">
|
|
27
|
+
<FigmaGrid gap={16}>
|
|
28
|
+
<Tab label="Overview" />
|
|
29
|
+
<Tab label="Tasks" state="active" />
|
|
30
|
+
<Tab label="Reports" className="bg-background-hover" />
|
|
31
|
+
</FigmaGrid>
|
|
32
|
+
</FigmaSection>
|
|
33
|
+
|
|
34
|
+
<FigmaSection label="Tabs">
|
|
35
|
+
<div className="max-w-xl space-y-8">
|
|
36
|
+
<FigmaVariant label="Underline">
|
|
37
|
+
<Tabs defaultValue="all" type="tabs">
|
|
38
|
+
<TabsList>
|
|
39
|
+
<TabsTrigger value="all">All</TabsTrigger>
|
|
40
|
+
<TabsTrigger value="reports">Reports</TabsTrigger>
|
|
41
|
+
<TabsTrigger value="issues">Issues</TabsTrigger>
|
|
42
|
+
</TabsList>
|
|
43
|
+
<TabsContent value="all" className="pt-3 text-caption-2 text-display-on-light-secondary">
|
|
44
|
+
All content
|
|
45
|
+
</TabsContent>
|
|
46
|
+
<TabsContent value="reports" className="pt-3 text-caption-2 text-display-on-light-secondary">
|
|
47
|
+
Reports content
|
|
48
|
+
</TabsContent>
|
|
49
|
+
<TabsContent value="issues" className="pt-3 text-caption-2 text-display-on-light-secondary">
|
|
50
|
+
Issues content
|
|
51
|
+
</TabsContent>
|
|
52
|
+
</Tabs>
|
|
53
|
+
</FigmaVariant>
|
|
54
|
+
<FigmaVariant label="Pills · soft">
|
|
55
|
+
<Tabs defaultValue="active" type="pills" appearance="soft">
|
|
56
|
+
<TabsList>
|
|
57
|
+
<TabsTrigger value="active">Active</TabsTrigger>
|
|
58
|
+
<TabsTrigger value="completed">
|
|
59
|
+
Completed
|
|
60
|
+
<Badge color="blue">3</Badge>
|
|
61
|
+
</TabsTrigger>
|
|
62
|
+
</TabsList>
|
|
63
|
+
<TabsContent value="active" className="pt-3 text-caption-2 text-display-on-light-secondary">
|
|
64
|
+
Active content
|
|
65
|
+
</TabsContent>
|
|
66
|
+
<TabsContent value="completed" className="pt-3 text-caption-2 text-display-on-light-secondary">
|
|
67
|
+
Completed content
|
|
68
|
+
</TabsContent>
|
|
69
|
+
</Tabs>
|
|
70
|
+
</FigmaVariant>
|
|
71
|
+
<FigmaVariant label="Pills · solid">
|
|
72
|
+
<Tabs defaultValue="chat" type="pills" appearance="solid">
|
|
73
|
+
<TabsList>
|
|
74
|
+
<TabsTrigger value="chat">Chat</TabsTrigger>
|
|
75
|
+
<TabsTrigger value="questions">
|
|
76
|
+
Questions
|
|
77
|
+
<Badge color="grey">208</Badge>
|
|
78
|
+
</TabsTrigger>
|
|
79
|
+
<TabsTrigger value="review">
|
|
80
|
+
Review
|
|
81
|
+
<Badge color="green" type="icon">
|
|
82
|
+
<TickIcon size="xs" />
|
|
83
|
+
</Badge>
|
|
84
|
+
</TabsTrigger>
|
|
85
|
+
<TabsTrigger value="gaps">
|
|
86
|
+
Gaps
|
|
87
|
+
<Badge color="grey">47</Badge>
|
|
88
|
+
</TabsTrigger>
|
|
89
|
+
</TabsList>
|
|
90
|
+
</Tabs>
|
|
91
|
+
</FigmaVariant>
|
|
92
|
+
</div>
|
|
93
|
+
</FigmaSection>
|
|
94
|
+
|
|
95
|
+
<FigmaSection label="Header">
|
|
96
|
+
<div className="max-w-xl space-y-4">
|
|
97
|
+
<Header title="Fleet overview" />
|
|
98
|
+
<Header
|
|
99
|
+
variant="nested"
|
|
100
|
+
title="Outstanding actions"
|
|
101
|
+
actions={<Button hierarchy="primary">Add</Button>}
|
|
102
|
+
/>
|
|
103
|
+
</div>
|
|
104
|
+
</FigmaSection>
|
|
105
|
+
|
|
106
|
+
<FigmaSection label="Entry">
|
|
107
|
+
<div className="max-w-xl space-y-2">
|
|
108
|
+
<Entry
|
|
109
|
+
variant="chat"
|
|
110
|
+
title="Hull inspection report"
|
|
111
|
+
subtitle="We’ve got a persistent oil leak from the fuel pump."
|
|
112
|
+
/>
|
|
113
|
+
<Entry
|
|
114
|
+
variant="chat"
|
|
115
|
+
state="active"
|
|
116
|
+
title="Ballast Pump Not Starting"
|
|
117
|
+
subtitle="The fuel pump won’t start consistently."
|
|
118
|
+
trailing={<span className="text-display-on-light-secondary">···</span>}
|
|
119
|
+
/>
|
|
120
|
+
<Entry
|
|
121
|
+
variant="issue"
|
|
122
|
+
title="Excessive Rust on Fuel Pump"
|
|
123
|
+
subtitle="Created by Jake Silva on March 28"
|
|
124
|
+
count={3}
|
|
125
|
+
/>
|
|
126
|
+
<Entry
|
|
127
|
+
variant="report"
|
|
128
|
+
title="Engine Room Oil Leak"
|
|
129
|
+
subtitle="We’ve spotted a steady oil leak near the fuel pump."
|
|
130
|
+
/>
|
|
131
|
+
</div>
|
|
132
|
+
</FigmaSection>
|
|
133
|
+
|
|
134
|
+
<FigmaSection label="Empty State">
|
|
135
|
+
<FigmaGrid gap={32}>
|
|
136
|
+
<FigmaVariant label="Default">
|
|
137
|
+
<div className="w-80">
|
|
138
|
+
<EmptyState
|
|
139
|
+
title="No workflows yet"
|
|
140
|
+
description="Create your first workflow to get started."
|
|
141
|
+
/>
|
|
142
|
+
</div>
|
|
143
|
+
</FigmaVariant>
|
|
144
|
+
<FigmaVariant label="With illustration">
|
|
145
|
+
<div className="w-80">
|
|
146
|
+
<EmptyState
|
|
147
|
+
title="No reports"
|
|
148
|
+
illustration={<WorkflowsIllustration className="mx-auto h-24 w-32" />}
|
|
149
|
+
action={{ children: "Create report", hierarchy: "primary" }}
|
|
150
|
+
/>
|
|
151
|
+
</div>
|
|
152
|
+
</FigmaVariant>
|
|
153
|
+
</FigmaGrid>
|
|
154
|
+
</FigmaSection>
|
|
155
|
+
</FigmaContent>
|
|
156
|
+
</FigmaPage>
|
|
157
|
+
);
|