@lateralus-ai/shipping-ui 1.4.13 → 1.4.14
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 +108 -108
- package/dist/index.cjs +38 -38
- package/dist/index.esm.js +4495 -4489
- package/dist/tailwind-theme.d.ts +12 -0
- package/package.json +99 -99
- package/src/components/DocumentEditor/DocumentEditor.tsx +871 -871
- package/src/components/HelloWorld.tsx +3 -3
- package/src/components/InputPrompt.tsx +96 -96
- package/src/components/ModalPanel.tsx +49 -49
- package/src/components/PdfViewer/ImageViewer.tsx +211 -211
- package/src/components/PdfViewer/PdfViewer.tsx +232 -232
- package/src/components/PdfViewer/index.ts +2 -2
- package/src/components/PdfViewer/usePageManagement.ts +32 -32
- package/src/components/PdfViewer/usePanning.ts +42 -42
- package/src/components/PdfViewer/useRefDimensions.ts +16 -16
- package/src/components/PdfViewer/useRotation.ts +13 -13
- package/src/components/PdfViewer/useZoom.ts +26 -26
- package/src/components/SearchModal.tsx +320 -320
- package/src/components/Sidebar/Button.tsx +20 -20
- package/src/components/Sidebar/Container.tsx +31 -31
- package/src/components/Sidebar/Item.tsx +39 -39
- package/src/components/Sidebar/Layout.tsx +32 -32
- package/src/components/Sidebar/Provider.tsx +47 -47
- package/src/components/Sidebar/SecondaryItem.tsx +39 -39
- package/src/components/Sidebar/SideContainer.tsx +31 -31
- package/src/components/Sidebar/ToggleCollapseButton.tsx +24 -24
- package/src/components/Sidebar/index.ts +8 -8
- package/src/components/Tabs.tsx +43 -43
- package/src/components/icons/CloseSidebarIcon.tsx +19 -19
- package/src/components/icons/CloseSidebarMidIcon.tsx +19 -19
- package/src/components/icons/ExpandIcon.tsx +21 -21
- package/src/components/icons/SendArrowIcon.tsx +23 -23
- package/src/components/icons/SendArrowIconGreen.tsx +17 -17
- package/src/components/icons/SettingsIcon.tsx +33 -33
- package/src/components/icons/XIcon.tsx +21 -21
- package/src/components/index.ts +6 -6
- package/src/index.ts +4 -4
- package/src/material-theme.ts +477 -477
- package/src/stories/Buttons.stories.tsx +15 -15
- package/src/stories/Buttons.tsx +52 -52
- package/src/stories/Checkbox.stories.tsx +15 -15
- package/src/stories/Checkbox.tsx +56 -56
- package/src/stories/ColorPalette.stories.tsx +15 -15
- package/src/stories/ColorPalette.tsx +85 -72
- package/src/stories/DocumentEditor.stories.tsx +287 -287
- package/src/stories/Dropdowns.stories.tsx +15 -15
- package/src/stories/Dropdowns.tsx +52 -52
- package/src/stories/InputPrompt.stories.tsx +15 -15
- package/src/stories/InputPrompt.tsx +63 -63
- package/src/stories/ModalHeader.stories.tsx +35 -35
- package/src/stories/PDFViewer.stories.tsx +39 -39
- package/src/stories/SearchModal.stories.tsx +132 -132
- package/src/stories/SearchModal.tsx +82 -82
- package/src/stories/Sidebar.stories.tsx +15 -15
- package/src/stories/Sidebar.tsx +108 -108
- package/src/stories/Tabs.stories.tsx +51 -51
- package/src/stories/Typography.stories.tsx +15 -15
- package/src/stories/Typography.tsx +110 -110
- package/src/style.css +2 -2
- package/src/styles/tabs.css +55 -55
- package/src/tailwind-theme.ts +243 -231
- package/src/types/documentEditor.ts +55 -55
- package/src/utils/checkboxModule.ts +241 -241
- package/src/utils/cn.ts +11 -11
|
@@ -1,51 +1,51 @@
|
|
|
1
|
-
import type { Meta, StoryObj } from "@storybook/react";
|
|
2
|
-
import {
|
|
3
|
-
Tabs,
|
|
4
|
-
TabsHeader,
|
|
5
|
-
Tab,
|
|
6
|
-
TabsBody,
|
|
7
|
-
TabPanel,
|
|
8
|
-
} from "@material-tailwind/react";
|
|
9
|
-
import { SettingsIcon } from "../components/icons/SettingsIcon";
|
|
10
|
-
|
|
11
|
-
const TabsComponent = () => (
|
|
12
|
-
<Tabs value="chats" className="w-[800px]">
|
|
13
|
-
<TabsHeader>
|
|
14
|
-
<Tab value="chats">Chats</Tab>
|
|
15
|
-
<Tab value="issues">Issues</Tab>
|
|
16
|
-
|
|
17
|
-
<button className="cursor-pointer mb-2 ml-auto rounded p-1 hover:bg-gray-100">
|
|
18
|
-
<SettingsIcon className="size-4" />
|
|
19
|
-
</button>
|
|
20
|
-
</TabsHeader>
|
|
21
|
-
|
|
22
|
-
<TabsBody>
|
|
23
|
-
<TabPanel value="chats">
|
|
24
|
-
Chats panel orem ipsum dolor sit, amet consectetur adipisicing elit.
|
|
25
|
-
Saepe deserunt officiis tempora accusamus sunt illo quae placeat velit
|
|
26
|
-
eius maiores, iste ipsa alias quos similique dolores odio? Magnam, quia
|
|
27
|
-
deleniti?
|
|
28
|
-
</TabPanel>
|
|
29
|
-
<TabPanel value="issues">
|
|
30
|
-
Issues panel orem ipsum dolor sit, amet consectetur adipisicing elit.
|
|
31
|
-
Saepe deserunt officiis tempora accusamus sunt illo quae placeat velit
|
|
32
|
-
eius maiores, iste ipsa alias quos similique dolores odio? Magnam, quia
|
|
33
|
-
deleniti?
|
|
34
|
-
</TabPanel>
|
|
35
|
-
</TabsBody>
|
|
36
|
-
</Tabs>
|
|
37
|
-
);
|
|
38
|
-
|
|
39
|
-
const meta = {
|
|
40
|
-
title: "Design System/Tabs",
|
|
41
|
-
component: TabsComponent,
|
|
42
|
-
parameters: {
|
|
43
|
-
layout: "centered",
|
|
44
|
-
},
|
|
45
|
-
tags: ["autodocs"],
|
|
46
|
-
} satisfies Meta<typeof TabsComponent>;
|
|
47
|
-
|
|
48
|
-
export default meta;
|
|
49
|
-
type Story = StoryObj<typeof meta>;
|
|
50
|
-
|
|
51
|
-
export const Default: Story = {};
|
|
1
|
+
import type { Meta, StoryObj } from "@storybook/react";
|
|
2
|
+
import {
|
|
3
|
+
Tabs,
|
|
4
|
+
TabsHeader,
|
|
5
|
+
Tab,
|
|
6
|
+
TabsBody,
|
|
7
|
+
TabPanel,
|
|
8
|
+
} from "@material-tailwind/react";
|
|
9
|
+
import { SettingsIcon } from "../components/icons/SettingsIcon";
|
|
10
|
+
|
|
11
|
+
const TabsComponent = () => (
|
|
12
|
+
<Tabs value="chats" className="w-[800px]">
|
|
13
|
+
<TabsHeader>
|
|
14
|
+
<Tab value="chats">Chats</Tab>
|
|
15
|
+
<Tab value="issues">Issues</Tab>
|
|
16
|
+
|
|
17
|
+
<button className="cursor-pointer mb-2 ml-auto rounded p-1 hover:bg-gray-100">
|
|
18
|
+
<SettingsIcon className="size-4" />
|
|
19
|
+
</button>
|
|
20
|
+
</TabsHeader>
|
|
21
|
+
|
|
22
|
+
<TabsBody>
|
|
23
|
+
<TabPanel value="chats">
|
|
24
|
+
Chats panel orem ipsum dolor sit, amet consectetur adipisicing elit.
|
|
25
|
+
Saepe deserunt officiis tempora accusamus sunt illo quae placeat velit
|
|
26
|
+
eius maiores, iste ipsa alias quos similique dolores odio? Magnam, quia
|
|
27
|
+
deleniti?
|
|
28
|
+
</TabPanel>
|
|
29
|
+
<TabPanel value="issues">
|
|
30
|
+
Issues panel orem ipsum dolor sit, amet consectetur adipisicing elit.
|
|
31
|
+
Saepe deserunt officiis tempora accusamus sunt illo quae placeat velit
|
|
32
|
+
eius maiores, iste ipsa alias quos similique dolores odio? Magnam, quia
|
|
33
|
+
deleniti?
|
|
34
|
+
</TabPanel>
|
|
35
|
+
</TabsBody>
|
|
36
|
+
</Tabs>
|
|
37
|
+
);
|
|
38
|
+
|
|
39
|
+
const meta = {
|
|
40
|
+
title: "Design System/Tabs",
|
|
41
|
+
component: TabsComponent,
|
|
42
|
+
parameters: {
|
|
43
|
+
layout: "centered",
|
|
44
|
+
},
|
|
45
|
+
tags: ["autodocs"],
|
|
46
|
+
} satisfies Meta<typeof TabsComponent>;
|
|
47
|
+
|
|
48
|
+
export default meta;
|
|
49
|
+
type Story = StoryObj<typeof meta>;
|
|
50
|
+
|
|
51
|
+
export const Default: Story = {};
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import type { Meta, StoryObj } from "@storybook/react";
|
|
2
|
-
import { Typography } from "./Typography";
|
|
3
|
-
|
|
4
|
-
const meta = {
|
|
5
|
-
title: "Design System/Typography",
|
|
6
|
-
component: Typography,
|
|
7
|
-
parameters: {
|
|
8
|
-
layout: "fullscreen",
|
|
9
|
-
},
|
|
10
|
-
} satisfies Meta<typeof Typography>;
|
|
11
|
-
|
|
12
|
-
export default meta;
|
|
13
|
-
type Story = StoryObj<typeof meta>;
|
|
14
|
-
|
|
15
|
-
export const Default: Story = {};
|
|
1
|
+
import type { Meta, StoryObj } from "@storybook/react";
|
|
2
|
+
import { Typography } from "./Typography";
|
|
3
|
+
|
|
4
|
+
const meta = {
|
|
5
|
+
title: "Design System/Typography",
|
|
6
|
+
component: Typography,
|
|
7
|
+
parameters: {
|
|
8
|
+
layout: "fullscreen",
|
|
9
|
+
},
|
|
10
|
+
} satisfies Meta<typeof Typography>;
|
|
11
|
+
|
|
12
|
+
export default meta;
|
|
13
|
+
type Story = StoryObj<typeof meta>;
|
|
14
|
+
|
|
15
|
+
export const Default: Story = {};
|
|
@@ -1,110 +1,110 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
|
|
3
|
-
export const Typography = () => {
|
|
4
|
-
return (
|
|
5
|
-
<div className="p-8 space-y-8">
|
|
6
|
-
<section>
|
|
7
|
-
<h2 className="text-2xl font-bold mb-4">Typography Styles</h2>
|
|
8
|
-
|
|
9
|
-
<div className="space-y-4">
|
|
10
|
-
<div className="border-b pb-2">
|
|
11
|
-
<p className="text-caption-2 text-gray-500 mb-1">Subheader</p>
|
|
12
|
-
<p className="text-subheader">This is subheader text (18px/28px)</p>
|
|
13
|
-
</div>
|
|
14
|
-
|
|
15
|
-
<div className="border-b pb-2">
|
|
16
|
-
<p className="text-caption-2 text-gray-500 mb-1">
|
|
17
|
-
Subheader Emphasized
|
|
18
|
-
</p>
|
|
19
|
-
<p className="text-subheader-em">
|
|
20
|
-
This is emphasized subheader text (18px/28px, 500 weight)
|
|
21
|
-
</p>
|
|
22
|
-
</div>
|
|
23
|
-
|
|
24
|
-
<div className="border-b pb-2">
|
|
25
|
-
<p className="text-caption-2 text-gray-500 mb-1">Body</p>
|
|
26
|
-
<p className="text-body">This is body text (16px/28px)</p>
|
|
27
|
-
</div>
|
|
28
|
-
|
|
29
|
-
<div className="border-b pb-2">
|
|
30
|
-
<p className="text-caption-2 text-gray-500 mb-1">Body Emphasized</p>
|
|
31
|
-
<p className="text-body-em">
|
|
32
|
-
This is emphasized body text (16px/28px, 500 weight)
|
|
33
|
-
</p>
|
|
34
|
-
</div>
|
|
35
|
-
|
|
36
|
-
<div className="border-b pb-2">
|
|
37
|
-
<p className="text-caption-2 text-gray-500 mb-1">Caption 1</p>
|
|
38
|
-
<p className="text-caption-1">This is caption-1 text (16px/22px)</p>
|
|
39
|
-
</div>
|
|
40
|
-
|
|
41
|
-
<div className="border-b pb-2">
|
|
42
|
-
<p className="text-caption-2 text-gray-500 mb-1">
|
|
43
|
-
Caption 1 Emphasized
|
|
44
|
-
</p>
|
|
45
|
-
<p className="text-caption-1-em">
|
|
46
|
-
This is emphasized caption-1 text (16px/22px, 500 weight)
|
|
47
|
-
</p>
|
|
48
|
-
</div>
|
|
49
|
-
|
|
50
|
-
<div className="border-b pb-2">
|
|
51
|
-
<p className="text-caption-2 text-gray-500 mb-1">Caption 2</p>
|
|
52
|
-
<p className="text-caption-2">This is caption-2 text (14px/20px)</p>
|
|
53
|
-
</div>
|
|
54
|
-
|
|
55
|
-
<div className="border-b pb-2">
|
|
56
|
-
<p className="text-caption-2 text-gray-500 mb-1">
|
|
57
|
-
Caption 2 Emphasized
|
|
58
|
-
</p>
|
|
59
|
-
<p className="text-caption-2-em">
|
|
60
|
-
This is emphasized caption-2 text (14px/20px, 500 weight)
|
|
61
|
-
</p>
|
|
62
|
-
</div>
|
|
63
|
-
|
|
64
|
-
<div className="border-b pb-2">
|
|
65
|
-
<p className="text-caption-2 text-gray-500 mb-1">Footnote</p>
|
|
66
|
-
<p className="text-footnote">This is footnote text (13px/17px)</p>
|
|
67
|
-
</div>
|
|
68
|
-
|
|
69
|
-
<div className="border-b pb-2">
|
|
70
|
-
<p className="text-caption-2 text-gray-500 mb-1">
|
|
71
|
-
Footnote Emphasized
|
|
72
|
-
</p>
|
|
73
|
-
<p className="text-footnote-em">
|
|
74
|
-
This is emphasized footnote text (13px/17px, 500 weight)
|
|
75
|
-
</p>
|
|
76
|
-
</div>
|
|
77
|
-
</div>
|
|
78
|
-
</section>
|
|
79
|
-
|
|
80
|
-
<section>
|
|
81
|
-
<h2 className="text-2xl font-bold mb-4">Font Families</h2>
|
|
82
|
-
|
|
83
|
-
<div className="space-y-4">
|
|
84
|
-
<div className="border-b pb-2">
|
|
85
|
-
<p className="text-caption-2 text-gray-500 mb-1">
|
|
86
|
-
Sans (Work Sans)
|
|
87
|
-
</p>
|
|
88
|
-
<p className="font-sans text-body">
|
|
89
|
-
The quick brown fox jumps over the lazy dog
|
|
90
|
-
</p>
|
|
91
|
-
</div>
|
|
92
|
-
|
|
93
|
-
<div className="border-b pb-2">
|
|
94
|
-
<p className="text-caption-2 text-gray-500 mb-1">
|
|
95
|
-
Mono (Roboto Mono)
|
|
96
|
-
</p>
|
|
97
|
-
<p className="font-mono text-body">const code = "Hello, World!";</p>
|
|
98
|
-
</div>
|
|
99
|
-
|
|
100
|
-
<div className="border-b pb-2">
|
|
101
|
-
<p className="text-caption-2 text-gray-500 mb-1">
|
|
102
|
-
Signature (Cursive)
|
|
103
|
-
</p>
|
|
104
|
-
<p className="font-signature text-body">John Doe</p>
|
|
105
|
-
</div>
|
|
106
|
-
</div>
|
|
107
|
-
</section>
|
|
108
|
-
</div>
|
|
109
|
-
);
|
|
110
|
-
};
|
|
1
|
+
import React from "react";
|
|
2
|
+
|
|
3
|
+
export const Typography = () => {
|
|
4
|
+
return (
|
|
5
|
+
<div className="p-8 space-y-8">
|
|
6
|
+
<section>
|
|
7
|
+
<h2 className="text-2xl font-bold mb-4">Typography Styles</h2>
|
|
8
|
+
|
|
9
|
+
<div className="space-y-4">
|
|
10
|
+
<div className="border-b pb-2">
|
|
11
|
+
<p className="text-caption-2 text-gray-500 mb-1">Subheader</p>
|
|
12
|
+
<p className="text-subheader">This is subheader text (18px/28px)</p>
|
|
13
|
+
</div>
|
|
14
|
+
|
|
15
|
+
<div className="border-b pb-2">
|
|
16
|
+
<p className="text-caption-2 text-gray-500 mb-1">
|
|
17
|
+
Subheader Emphasized
|
|
18
|
+
</p>
|
|
19
|
+
<p className="text-subheader-em">
|
|
20
|
+
This is emphasized subheader text (18px/28px, 500 weight)
|
|
21
|
+
</p>
|
|
22
|
+
</div>
|
|
23
|
+
|
|
24
|
+
<div className="border-b pb-2">
|
|
25
|
+
<p className="text-caption-2 text-gray-500 mb-1">Body</p>
|
|
26
|
+
<p className="text-body">This is body text (16px/28px)</p>
|
|
27
|
+
</div>
|
|
28
|
+
|
|
29
|
+
<div className="border-b pb-2">
|
|
30
|
+
<p className="text-caption-2 text-gray-500 mb-1">Body Emphasized</p>
|
|
31
|
+
<p className="text-body-em">
|
|
32
|
+
This is emphasized body text (16px/28px, 500 weight)
|
|
33
|
+
</p>
|
|
34
|
+
</div>
|
|
35
|
+
|
|
36
|
+
<div className="border-b pb-2">
|
|
37
|
+
<p className="text-caption-2 text-gray-500 mb-1">Caption 1</p>
|
|
38
|
+
<p className="text-caption-1">This is caption-1 text (16px/22px)</p>
|
|
39
|
+
</div>
|
|
40
|
+
|
|
41
|
+
<div className="border-b pb-2">
|
|
42
|
+
<p className="text-caption-2 text-gray-500 mb-1">
|
|
43
|
+
Caption 1 Emphasized
|
|
44
|
+
</p>
|
|
45
|
+
<p className="text-caption-1-em">
|
|
46
|
+
This is emphasized caption-1 text (16px/22px, 500 weight)
|
|
47
|
+
</p>
|
|
48
|
+
</div>
|
|
49
|
+
|
|
50
|
+
<div className="border-b pb-2">
|
|
51
|
+
<p className="text-caption-2 text-gray-500 mb-1">Caption 2</p>
|
|
52
|
+
<p className="text-caption-2">This is caption-2 text (14px/20px)</p>
|
|
53
|
+
</div>
|
|
54
|
+
|
|
55
|
+
<div className="border-b pb-2">
|
|
56
|
+
<p className="text-caption-2 text-gray-500 mb-1">
|
|
57
|
+
Caption 2 Emphasized
|
|
58
|
+
</p>
|
|
59
|
+
<p className="text-caption-2-em">
|
|
60
|
+
This is emphasized caption-2 text (14px/20px, 500 weight)
|
|
61
|
+
</p>
|
|
62
|
+
</div>
|
|
63
|
+
|
|
64
|
+
<div className="border-b pb-2">
|
|
65
|
+
<p className="text-caption-2 text-gray-500 mb-1">Footnote</p>
|
|
66
|
+
<p className="text-footnote">This is footnote text (13px/17px)</p>
|
|
67
|
+
</div>
|
|
68
|
+
|
|
69
|
+
<div className="border-b pb-2">
|
|
70
|
+
<p className="text-caption-2 text-gray-500 mb-1">
|
|
71
|
+
Footnote Emphasized
|
|
72
|
+
</p>
|
|
73
|
+
<p className="text-footnote-em">
|
|
74
|
+
This is emphasized footnote text (13px/17px, 500 weight)
|
|
75
|
+
</p>
|
|
76
|
+
</div>
|
|
77
|
+
</div>
|
|
78
|
+
</section>
|
|
79
|
+
|
|
80
|
+
<section>
|
|
81
|
+
<h2 className="text-2xl font-bold mb-4">Font Families</h2>
|
|
82
|
+
|
|
83
|
+
<div className="space-y-4">
|
|
84
|
+
<div className="border-b pb-2">
|
|
85
|
+
<p className="text-caption-2 text-gray-500 mb-1">
|
|
86
|
+
Sans (Work Sans)
|
|
87
|
+
</p>
|
|
88
|
+
<p className="font-sans text-body">
|
|
89
|
+
The quick brown fox jumps over the lazy dog
|
|
90
|
+
</p>
|
|
91
|
+
</div>
|
|
92
|
+
|
|
93
|
+
<div className="border-b pb-2">
|
|
94
|
+
<p className="text-caption-2 text-gray-500 mb-1">
|
|
95
|
+
Mono (Roboto Mono)
|
|
96
|
+
</p>
|
|
97
|
+
<p className="font-mono text-body">const code = "Hello, World!";</p>
|
|
98
|
+
</div>
|
|
99
|
+
|
|
100
|
+
<div className="border-b pb-2">
|
|
101
|
+
<p className="text-caption-2 text-gray-500 mb-1">
|
|
102
|
+
Signature (Cursive)
|
|
103
|
+
</p>
|
|
104
|
+
<p className="font-signature text-body">John Doe</p>
|
|
105
|
+
</div>
|
|
106
|
+
</div>
|
|
107
|
+
</section>
|
|
108
|
+
</div>
|
|
109
|
+
);
|
|
110
|
+
};
|
package/src/style.css
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
@import url(https://tools-static.wmflabs.org/fontcdn/css?family=Work+Sans:400,500,600);
|
|
2
|
-
@import url(https://tools-static.wmflabs.org/fontcdn/css?family=Alex+Brush);
|
|
1
|
+
@import url(https://tools-static.wmflabs.org/fontcdn/css?family=Work+Sans:400,500,600);
|
|
2
|
+
@import url(https://tools-static.wmflabs.org/fontcdn/css?family=Alex+Brush);
|
package/src/styles/tabs.css
CHANGED
|
@@ -1,55 +1,55 @@
|
|
|
1
|
-
.tabs-container {
|
|
2
|
-
width: 100%;
|
|
3
|
-
min-width: 400px;
|
|
4
|
-
}
|
|
5
|
-
|
|
6
|
-
.tabs-header {
|
|
7
|
-
display: flex;
|
|
8
|
-
border-bottom: 2px solid #e5e7eb;
|
|
9
|
-
margin-bottom: 16px;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
.tab-button {
|
|
13
|
-
padding: 12px 24px;
|
|
14
|
-
background: none;
|
|
15
|
-
border: none;
|
|
16
|
-
cursor: pointer;
|
|
17
|
-
font-size: 14px;
|
|
18
|
-
font-weight: 500;
|
|
19
|
-
color: #6b7280;
|
|
20
|
-
position: relative;
|
|
21
|
-
transition: color 0.2s;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
.tab-button:hover {
|
|
25
|
-
color: #374151;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
.tab-button.active {
|
|
29
|
-
color: #3b82f6;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
.tab-button.active::after {
|
|
33
|
-
content: "";
|
|
34
|
-
position: absolute;
|
|
35
|
-
bottom: -2px;
|
|
36
|
-
left: 0;
|
|
37
|
-
right: 0;
|
|
38
|
-
height: 2px;
|
|
39
|
-
background-color: #3b82f6;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
.tab-content {
|
|
43
|
-
animation: fadeIn 0.3s ease-in-out;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
@keyframes fadeIn {
|
|
47
|
-
from {
|
|
48
|
-
opacity: 0;
|
|
49
|
-
transform: translateY(4px);
|
|
50
|
-
}
|
|
51
|
-
to {
|
|
52
|
-
opacity: 1;
|
|
53
|
-
transform: translateY(0);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
1
|
+
.tabs-container {
|
|
2
|
+
width: 100%;
|
|
3
|
+
min-width: 400px;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
.tabs-header {
|
|
7
|
+
display: flex;
|
|
8
|
+
border-bottom: 2px solid #e5e7eb;
|
|
9
|
+
margin-bottom: 16px;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
.tab-button {
|
|
13
|
+
padding: 12px 24px;
|
|
14
|
+
background: none;
|
|
15
|
+
border: none;
|
|
16
|
+
cursor: pointer;
|
|
17
|
+
font-size: 14px;
|
|
18
|
+
font-weight: 500;
|
|
19
|
+
color: #6b7280;
|
|
20
|
+
position: relative;
|
|
21
|
+
transition: color 0.2s;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.tab-button:hover {
|
|
25
|
+
color: #374151;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.tab-button.active {
|
|
29
|
+
color: #3b82f6;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
.tab-button.active::after {
|
|
33
|
+
content: "";
|
|
34
|
+
position: absolute;
|
|
35
|
+
bottom: -2px;
|
|
36
|
+
left: 0;
|
|
37
|
+
right: 0;
|
|
38
|
+
height: 2px;
|
|
39
|
+
background-color: #3b82f6;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.tab-content {
|
|
43
|
+
animation: fadeIn 0.3s ease-in-out;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
@keyframes fadeIn {
|
|
47
|
+
from {
|
|
48
|
+
opacity: 0;
|
|
49
|
+
transform: translateY(4px);
|
|
50
|
+
}
|
|
51
|
+
to {
|
|
52
|
+
opacity: 1;
|
|
53
|
+
transform: translateY(0);
|
|
54
|
+
}
|
|
55
|
+
}
|