trepur_components 2.3.9 → 2.3.11
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/lib/_virtual/react.js +4 -0
- package/lib/components/Accordion/Accordion.stories.d.ts +47 -0
- package/lib/components/Accordion/const.d.ts +31 -0
- package/lib/components/Accordion/index.d.ts +5 -0
- package/lib/components/Accordion/index.js +9 -0
- package/lib/components/AlertBar/AlertBar.stories.d.ts +25 -0
- package/lib/components/AlertBar/index.d.ts +15 -0
- package/lib/components/AlertBar/index.js +66 -0
- package/lib/components/Avatar/Avatar.stories.d.ts +10 -0
- package/lib/components/Avatar/index.d.ts +3 -0
- package/lib/components/Breadcrumbs/Breadcrumbs.stories.d.ts +18 -0
- package/lib/components/Breadcrumbs/index.d.ts +15 -0
- package/lib/components/Breadcrumbs/index.js +49 -0
- package/lib/components/Button/Button.stories.d.ts +24 -0
- package/lib/components/Button/index.d.ts +14 -0
- package/lib/components/Button/index.js +43 -0
- package/lib/components/Calendar/Calendar.stories.d.ts +11 -0
- package/lib/components/Calendar/index.d.ts +14 -0
- package/lib/components/Calendar/index.js +49 -0
- package/lib/components/Calendar/style.css.js +1 -0
- package/lib/components/Card/Card.stories.d.ts +11 -0
- package/lib/components/Card/index.d.ts +2 -0
- package/lib/components/Card/index.js +25 -0
- package/lib/components/Carousel/Carousel.stories.d.ts +23 -0
- package/lib/components/Carousel/index.d.ts +70 -0
- package/lib/components/Carousel/index.js +159 -0
- package/lib/components/Carousel/utils.d.ts +1 -0
- package/lib/components/Carousel/utils.js +38 -0
- package/lib/components/CarouselThumbnail/CarouselThumbnail.stories.d.ts +22 -0
- package/lib/components/CarouselThumbnail/const.d.ts +1 -0
- package/lib/components/CarouselThumbnail/const.js +20 -0
- package/lib/components/CarouselThumbnail/index.d.ts +51 -0
- package/lib/components/CarouselThumbnail/index.js +74 -0
- package/lib/components/CarouselThumbnail/utils.d.ts +2 -0
- package/lib/components/CarouselThumbnail/utils.js +65 -0
- package/lib/components/Checkbox/Checkbox.stories.d.ts +17 -0
- package/lib/components/Checkbox/index.d.ts +11 -0
- package/lib/components/Checkbox/index.js +28 -0
- package/lib/components/Collapsible/Collapsible.stories.d.ts +57 -0
- package/lib/components/Collapsible/index.d.ts +19 -0
- package/lib/components/Collapsible/index.js +87 -0
- package/lib/components/Counter/Counter.stories.d.ts +17 -0
- package/lib/components/Counter/index.d.ts +14 -0
- package/lib/components/Counter/index.js +49 -0
- package/lib/components/DetailUpdater/DetailUpdater.stories.d.ts +20 -0
- package/lib/components/DetailUpdater/index.d.ts +18 -0
- package/lib/components/DetailUpdater/index.js +63 -0
- package/lib/components/Dialog/Dialog.stories.d.ts +15 -0
- package/lib/components/Dialog/index.d.ts +12 -0
- package/lib/components/Dialog/index.js +16 -0
- package/lib/components/Dropdown/Dropdown.stories.d.ts +17 -0
- package/lib/components/Dropdown/index.d.ts +13 -0
- package/lib/components/Dropdown/index.js +66 -0
- package/lib/components/Dropdown/utils.d.ts +1 -0
- package/lib/components/Dropdown/utils.js +14 -0
- package/lib/components/FileUploader/FilePreview.d.ts +8 -0
- package/lib/components/FileUploader/FileUploader.stories.d.ts +52 -0
- package/lib/components/FileUploader/index.d.ts +15 -0
- package/lib/components/Footer/Footer.stories.d.ts +19 -0
- package/lib/components/Footer/index.d.ts +16 -0
- package/lib/components/Footer/index.js +36 -0
- package/lib/components/FooterNav/FooterNav.stories.d.ts +22 -0
- package/lib/components/FooterNav/index.d.ts +15 -0
- package/lib/components/FooterNav/index.js +38 -0
- package/lib/components/Form/Form.stories.d.ts +117 -0
- package/lib/components/Form/index.d.ts +13 -0
- package/lib/components/Form/index.js +17 -0
- package/lib/components/Gallery/Gallery.stories.d.ts +16 -0
- package/lib/components/Gallery/index.d.ts +7 -0
- package/lib/components/Greeting/Greeting.stories.d.ts +13 -0
- package/lib/components/Greeting/index.d.ts +7 -0
- package/lib/components/Greeting/index.js +20 -0
- package/lib/components/HamburgerIcon/HamburgerIcon.stories.d.ts +10 -0
- package/lib/components/HamburgerIcon/index.d.ts +2 -0
- package/lib/components/HamburgerIcon/index.js +78 -0
- package/lib/components/Icon/Icon.stories.d.ts +16 -0
- package/lib/components/Icon/index.d.ts +10 -0
- package/lib/components/Icon/index.js +23 -0
- package/lib/components/Image/Image.stories.d.ts +13 -0
- package/lib/components/Image/index.d.ts +5 -0
- package/lib/components/Image/index.js +17 -0
- package/lib/components/ImageCard/ImageCard.stories.d.ts +19 -0
- package/lib/components/ImageCard/index.d.ts +11 -0
- package/lib/components/ImageCard/index.js +32 -0
- package/lib/components/Input/Input.stories.d.ts +22 -0
- package/lib/components/Input/index.d.ts +33 -0
- package/lib/components/Input/index.js +83 -0
- package/lib/components/MenuButton/MenuButton.stories.d.ts +76 -0
- package/lib/components/MenuButton/index.d.ts +14 -0
- package/lib/components/MenuButton/index.js +56 -0
- package/lib/components/Modal/Modal.stories.d.ts +67 -0
- package/lib/components/Modal/index.d.ts +10 -0
- package/lib/components/Modal/index.js +45 -0
- package/lib/components/Nav/Nav.stories.d.ts +31 -0
- package/lib/components/Nav/index.d.ts +20 -0
- package/lib/components/Nav/index.js +81 -0
- package/lib/components/NavItem/NavItem.stories.d.ts +17 -0
- package/lib/components/NavItem/index.d.ts +8 -0
- package/lib/components/NavItem/index.js +31 -0
- package/lib/components/Pill/Pill.stories.d.ts +22 -0
- package/lib/components/Pill/index.d.ts +17 -0
- package/lib/components/Pill/index.js +30 -0
- package/lib/components/Search/Search.stories.d.ts +86 -0
- package/lib/components/Search/index.d.ts +12 -0
- package/lib/components/Search/index.js +42 -0
- package/lib/components/Select/Select.stories.d.ts +56 -0
- package/lib/components/Select/index.d.ts +11 -0
- package/lib/components/Select/index.js +68 -0
- package/lib/components/Showcase/Showcase.stories.d.ts +55 -0
- package/lib/components/Showcase/index.d.ts +15 -0
- package/lib/components/SideNav/SideNav.stories.d.ts +80 -0
- package/lib/components/SideNav/index.d.ts +12 -0
- package/lib/components/SocialButton/SocialButton.stories.d.ts +130 -0
- package/lib/components/SocialButton/index.d.ts +12 -0
- package/lib/components/SplitCard/SplitCard.stories.d.ts +21 -0
- package/lib/components/SplitCard/index.d.ts +14 -0
- package/lib/components/Stars/Star.stories.d.ts +14 -0
- package/lib/components/Stars/index.d.ts +8 -0
- package/lib/components/Stars/index.js +22 -0
- package/lib/components/Testimonial/Testimonial.stories.d.ts +21 -0
- package/lib/components/Testimonial/index.d.ts +13 -0
- package/lib/components/Testimonial/index.js +42 -0
- package/lib/components/TextArea/TextArea.stories.d.ts +21 -0
- package/lib/components/TextArea/index.d.ts +33 -0
- package/lib/components/TextArea/index.js +76 -0
- package/lib/components/Timeline/Timeline.stories.d.ts +21 -0
- package/lib/components/Timeline/index.d.ts +11 -0
- package/lib/components/Timeline/index.js +31 -0
- package/lib/components/Tubestops/Tubestops.stories.d.ts +19 -0
- package/lib/components/Tubestops/index.d.ts +15 -0
- package/lib/components/Tubestops/index.js +77 -0
- package/lib/components/Video/Video.stories.d.ts +23 -0
- package/lib/components/Video/index.d.ts +18 -0
- package/lib/components/Video/index.js +32 -0
- package/{src/components/index.ts → lib/components/index.d.ts} +35 -71
- package/lib/documentation/assets/index.d.ts +3 -0
- package/lib/documentation/typography/Fonts/Fonts.d.ts +2 -0
- package/lib/documentation/typography/Fonts/Fonts.stories.d.ts +10 -0
- package/lib/index.js +72 -0
- package/lib/node_modules/keen-slider/keen-slider.min.css.js +1 -0
- package/lib/node_modules/keen-slider/react.js +591 -0
- package/lib/style.css +1 -0
- package/lib/styles/global.css +19 -0
- package/{src → lib}/styles/themes/local.css +9 -1
- package/lib/styles/themes/penrithmrt.css +101 -0
- package/{tailwind → lib/tailwind}/colors.ts +12 -1
- package/lib/utils/controls.d.ts +36 -0
- package/lib/utils/matchMedia.d.ts +2 -0
- package/lib/utils/screens.d.ts +7 -0
- package/package.json +4 -1
- package/.eslintrc.cjs +0 -72
- package/.husky/pre-commit +0 -4
- package/.prettierignore +0 -10
- package/.prettierrc.json +0 -22
- package/postcss.config.js +0 -8
- package/src/components/Accordion/Accordion.stories.tsx +0 -39
- package/src/components/Accordion/const.tsx +0 -34
- package/src/components/Accordion/index.tsx +0 -22
- package/src/components/AlertBar/AlertBar.stories.tsx +0 -89
- package/src/components/AlertBar/index.tsx +0 -82
- package/src/components/Avatar/Avatar.stories.tsx +0 -14
- package/src/components/Avatar/index.tsx +0 -492
- package/src/components/Breadcrumbs/Breadcrumbs.stories.tsx +0 -29
- package/src/components/Breadcrumbs/index.tsx +0 -89
- package/src/components/Button/Button.stories.tsx +0 -24
- package/src/components/Button/index.tsx +0 -59
- package/src/components/Calendar/Calendar.stories.tsx +0 -21
- package/src/components/Calendar/index.tsx +0 -92
- package/src/components/Calendar/style.css +0 -233
- package/src/components/Card/Card.stories.tsx +0 -14
- package/src/components/Card/index.tsx +0 -39
- package/src/components/Carousel/Carousel.stories.tsx +0 -44
- package/src/components/Carousel/index.tsx +0 -301
- package/src/components/Carousel/utils.ts +0 -53
- package/src/components/CarouselThumbnail/CarouselThumbnail.stories.tsx +0 -29
- package/src/components/CarouselThumbnail/const.ts +0 -17
- package/src/components/CarouselThumbnail/index.tsx +0 -169
- package/src/components/CarouselThumbnail/utils.ts +0 -87
- package/src/components/Checkbox/Checkbox.mdx +0 -33
- package/src/components/Checkbox/Checkbox.stories.tsx +0 -27
- package/src/components/Checkbox/index.tsx +0 -44
- package/src/components/Collapsible/Collapsible.stories.tsx +0 -67
- package/src/components/Collapsible/index.tsx +0 -169
- package/src/components/Counter/Counter.stories.tsx +0 -20
- package/src/components/Counter/index.tsx +0 -98
- package/src/components/DetailUpdater/DetailUpdater.stories.tsx +0 -37
- package/src/components/DetailUpdater/index.tsx +0 -107
- package/src/components/Dialog/Dialog.stories.tsx +0 -65
- package/src/components/Dialog/index.tsx +0 -29
- package/src/components/Dropdown/Dropdown.stories.tsx +0 -22
- package/src/components/Dropdown/index.tsx +0 -117
- package/src/components/Dropdown/utils.ts +0 -15
- package/src/components/FileUploader/FilePreview.tsx +0 -45
- package/src/components/FileUploader/FileUploader.stories.tsx +0 -28
- package/src/components/FileUploader/index.tsx +0 -177
- package/src/components/Footer/Footer.stories.tsx +0 -47
- package/src/components/Footer/index.tsx +0 -96
- package/src/components/FooterNav/FooterNav.stories.tsx +0 -32
- package/src/components/FooterNav/index.tsx +0 -75
- package/src/components/Form/Form.stories.tsx +0 -86
- package/src/components/Form/index.tsx +0 -41
- package/src/components/Gallery/Gallery.stories.tsx +0 -39
- package/src/components/Gallery/index.tsx +0 -31
- package/src/components/Greeting/Greeting.stories.tsx +0 -16
- package/src/components/Greeting/index.tsx +0 -49
- package/src/components/HamburgerIcon/HamburgerIcon.stories.tsx +0 -14
- package/src/components/HamburgerIcon/index.tsx +0 -75
- package/src/components/Icon/Icon.stories.tsx +0 -41
- package/src/components/Icon/index.tsx +0 -33
- package/src/components/Image/Image.stories.tsx +0 -17
- package/src/components/Image/index.tsx +0 -25
- package/src/components/ImageCard/ImageCard.stories.tsx +0 -29
- package/src/components/ImageCard/index.tsx +0 -75
- package/src/components/Input/Input.stories.tsx +0 -25
- package/src/components/Input/index.tsx +0 -139
- package/src/components/MenuButton/MenuButton.stories.tsx +0 -46
- package/src/components/MenuButton/index.tsx +0 -66
- package/src/components/Modal/Modal.stories.tsx +0 -82
- package/src/components/Modal/index.tsx +0 -71
- package/src/components/Nav/Nav.stories.tsx +0 -80
- package/src/components/Nav/index.tsx +0 -171
- package/src/components/NavItem/NavItem.stories.tsx +0 -17
- package/src/components/NavItem/index.tsx +0 -39
- package/src/components/Pill/Pill.stories.tsx +0 -51
- package/src/components/Pill/index.tsx +0 -69
- package/src/components/Search/Search.stories.tsx +0 -63
- package/src/components/Search/index.tsx +0 -64
- package/src/components/Select/Select.stories.tsx +0 -55
- package/src/components/Select/index.tsx +0 -97
- package/src/components/Showcase/Showcase.stories.tsx +0 -31
- package/src/components/Showcase/index.tsx +0 -62
- package/src/components/SideNav/SideNav.stories.tsx +0 -50
- package/src/components/SideNav/index.tsx +0 -39
- package/src/components/SocialButton/SocialButton.stories.tsx +0 -88
- package/src/components/SocialButton/index.tsx +0 -63
- package/src/components/SplitCard/SplitCard.stories.tsx +0 -34
- package/src/components/SplitCard/index.tsx +0 -132
- package/src/components/Stars/Star.stories.tsx +0 -18
- package/src/components/Stars/index.tsx +0 -38
- package/src/components/Testimonial/Testimonial.stories.tsx +0 -37
- package/src/components/Testimonial/index.tsx +0 -123
- package/src/components/TextArea/TextArea.stories.tsx +0 -24
- package/src/components/TextArea/index.tsx +0 -133
- package/src/components/Timeline/Timeline.stories.tsx +0 -45
- package/src/components/Timeline/index.tsx +0 -65
- package/src/components/Tubestops/Tubestops.stories.tsx +0 -22
- package/src/components/Tubestops/index.tsx +0 -132
- package/src/components/Video/Video.stories.tsx +0 -58
- package/src/components/Video/assets/example.mp4 +0 -0
- package/src/components/Video/assets/example.ogv +0 -0
- package/src/components/Video/assets/example.webm +0 -0
- package/src/components/Video/index.tsx +0 -92
- package/src/custom.d.ts +0 -14
- package/src/documentation/Colours.mdx +0 -192
- package/src/documentation/Introduction.mdx +0 -13
- package/src/documentation/assets/index.ts +0 -3
- package/src/documentation/assets/trepurComponentsLogo.svg +0 -32
- package/src/documentation/typography/Fonts/Fonts.stories.tsx +0 -14
- package/src/documentation/typography/Fonts/Fonts.tsx +0 -73
- package/src/fonts/Sora/OFL.txt +0 -93
- package/src/fonts/Sora/README.txt +0 -70
- package/src/fonts/Sora/Sora-VariableFont_wght.ttf +0 -0
- package/src/fonts/Sora/static/Sora-Bold.ttf +0 -0
- package/src/fonts/Sora/static/Sora-ExtraBold.ttf +0 -0
- package/src/fonts/Sora/static/Sora-ExtraLight.ttf +0 -0
- package/src/fonts/Sora/static/Sora-Light.ttf +0 -0
- package/src/fonts/Sora/static/Sora-Medium.ttf +0 -0
- package/src/fonts/Sora/static/Sora-Regular.ttf +0 -0
- package/src/fonts/Sora/static/Sora-SemiBold.ttf +0 -0
- package/src/fonts/Sora/static/Sora-Thin.ttf +0 -0
- package/src/styles/global.css +0 -75
- package/src/styles/themes/test.css +0 -28
- package/src/utils/controls.ts +0 -44
- package/src/utils/matchMedia.ts +0 -9
- package/src/utils/screens.ts +0 -7
- package/tailwind.config.ts +0 -13
- package/tsconfig.json +0 -49
- package/tsconfig.node.json +0 -12
- package/vite.config.mjs +0 -64
- /package/{src/index.ts → lib/index.d.ts} +0 -0
- /package/{tailwind → lib/tailwind}/boxShadow.ts +0 -0
- /package/{tailwind → lib/tailwind}/container.ts +0 -0
- /package/{tailwind → lib/tailwind}/preset.ts +0 -0
- /package/{tailwind → lib/tailwind}/spacing.ts +0 -0
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import { items } from '@components/Accordion/const';
|
|
2
|
-
import { Collapsible } from '@components/Collapsible';
|
|
3
|
-
import { Meta, StoryObj } from '@storybook/react';
|
|
4
|
-
|
|
5
|
-
import { Timeline } from '.';
|
|
6
|
-
|
|
7
|
-
const meta = {
|
|
8
|
-
title: 'V2Components/Timeline',
|
|
9
|
-
component: Timeline,
|
|
10
|
-
parameters: {},
|
|
11
|
-
args: {
|
|
12
|
-
children: items.map((item, i) => {
|
|
13
|
-
return (
|
|
14
|
-
<Timeline.Item>
|
|
15
|
-
<Timeline.Dot
|
|
16
|
-
className="bg-primary"
|
|
17
|
-
index={i}
|
|
18
|
-
length={items.length}
|
|
19
|
-
/>
|
|
20
|
-
<Timeline.Content>
|
|
21
|
-
<Collapsible>
|
|
22
|
-
<Collapsible.Header>
|
|
23
|
-
{item.image && <Collapsible.Image src={item.image} />}
|
|
24
|
-
<Collapsible.HeaderContent>
|
|
25
|
-
<Collapsible.Label>{item.label}</Collapsible.Label>
|
|
26
|
-
<Collapsible.Title>{item.title}</Collapsible.Title>
|
|
27
|
-
<Collapsible.Subtitle>{item.subtitle}</Collapsible.Subtitle>
|
|
28
|
-
</Collapsible.HeaderContent>
|
|
29
|
-
</Collapsible.Header>
|
|
30
|
-
<Collapsible.Content>
|
|
31
|
-
<Collapsible.Text>{item.content}</Collapsible.Text>
|
|
32
|
-
</Collapsible.Content>
|
|
33
|
-
</Collapsible>
|
|
34
|
-
</Timeline.Content>
|
|
35
|
-
</Timeline.Item>
|
|
36
|
-
);
|
|
37
|
-
}),
|
|
38
|
-
},
|
|
39
|
-
} satisfies Meta<typeof Timeline>;
|
|
40
|
-
|
|
41
|
-
export default meta;
|
|
42
|
-
|
|
43
|
-
type Story = StoryObj<typeof Timeline>;
|
|
44
|
-
|
|
45
|
-
export const Default: Story = {};
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import { forwardRef, HTMLAttributes } from 'react';
|
|
2
|
-
|
|
3
|
-
import clsx from 'clsx';
|
|
4
|
-
|
|
5
|
-
const TimelineComponent = forwardRef<
|
|
6
|
-
HTMLDivElement,
|
|
7
|
-
HTMLAttributes<HTMLDivElement>
|
|
8
|
-
>(({ id, className, children }, ref) => {
|
|
9
|
-
return (
|
|
10
|
-
<div ref={ref} id={id} className={className}>
|
|
11
|
-
{children}
|
|
12
|
-
</div>
|
|
13
|
-
);
|
|
14
|
-
});
|
|
15
|
-
|
|
16
|
-
const TimelineItem = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(
|
|
17
|
-
({ id, children }, ref) => {
|
|
18
|
-
return (
|
|
19
|
-
<div ref={ref} id={id} className="flex">
|
|
20
|
-
{children}
|
|
21
|
-
</div>
|
|
22
|
-
);
|
|
23
|
-
},
|
|
24
|
-
);
|
|
25
|
-
|
|
26
|
-
const TimelineDot = forwardRef<
|
|
27
|
-
HTMLDivElement,
|
|
28
|
-
HTMLAttributes<HTMLDivElement> & { index: number; length: number }
|
|
29
|
-
>(({ className, index, length }) => {
|
|
30
|
-
return (
|
|
31
|
-
<div className="hidden sm:block">
|
|
32
|
-
<p
|
|
33
|
-
className={clsx('z-10 m-auto mt-12 h-4 w-4 rounded-full', className)}
|
|
34
|
-
/>
|
|
35
|
-
<div
|
|
36
|
-
className={
|
|
37
|
-
index !== length - 1
|
|
38
|
-
? clsx('m-auto h-full w-1', className)
|
|
39
|
-
: 'border-r-2 border-transparent'
|
|
40
|
-
}
|
|
41
|
-
/>
|
|
42
|
-
</div>
|
|
43
|
-
);
|
|
44
|
-
});
|
|
45
|
-
|
|
46
|
-
const TimelineContent = forwardRef<
|
|
47
|
-
HTMLDivElement,
|
|
48
|
-
HTMLAttributes<HTMLDivElement>
|
|
49
|
-
>(({ children }) => {
|
|
50
|
-
return <div className="my-2 w-full sm:ml-8">{children}</div>;
|
|
51
|
-
});
|
|
52
|
-
|
|
53
|
-
TimelineComponent.displayName = 'Timeline';
|
|
54
|
-
|
|
55
|
-
TimelineItem.displayName = 'Timeline.Item';
|
|
56
|
-
TimelineDot.displayName = 'Timeline.Dot';
|
|
57
|
-
TimelineContent.displayName = 'Timeline.Content';
|
|
58
|
-
|
|
59
|
-
const Timeline = Object.assign(TimelineComponent, {
|
|
60
|
-
Item: TimelineItem,
|
|
61
|
-
Dot: TimelineDot,
|
|
62
|
-
Content: TimelineContent,
|
|
63
|
-
});
|
|
64
|
-
|
|
65
|
-
export { Timeline };
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { Meta, StoryObj } from '@storybook/react';
|
|
2
|
-
|
|
3
|
-
import { Tubestops } from '.';
|
|
4
|
-
|
|
5
|
-
const meta = {
|
|
6
|
-
title: 'V2Components/Tubestops',
|
|
7
|
-
component: Tubestops,
|
|
8
|
-
args: {
|
|
9
|
-
activeStop: 3,
|
|
10
|
-
children: [...Array(5)].map((_, i) => (
|
|
11
|
-
<Tubestops.Stop stopId={i + 1}>
|
|
12
|
-
<Tubestops.Text>{`Stop ${i + 1}`}</Tubestops.Text>
|
|
13
|
-
</Tubestops.Stop>
|
|
14
|
-
)),
|
|
15
|
-
},
|
|
16
|
-
} satisfies Meta<typeof Tubestops>;
|
|
17
|
-
|
|
18
|
-
export default meta;
|
|
19
|
-
|
|
20
|
-
type Story = StoryObj<typeof Tubestops>;
|
|
21
|
-
|
|
22
|
-
export const Default: Story = {};
|
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
Children,
|
|
3
|
-
createContext,
|
|
4
|
-
forwardRef,
|
|
5
|
-
HTMLAttributes,
|
|
6
|
-
useContext,
|
|
7
|
-
useMemo,
|
|
8
|
-
useState,
|
|
9
|
-
} from 'react';
|
|
10
|
-
|
|
11
|
-
import clsx from 'clsx';
|
|
12
|
-
|
|
13
|
-
export interface TubestopsContextProps {
|
|
14
|
-
stops?: number;
|
|
15
|
-
activeStop?: number;
|
|
16
|
-
currentStop?: number;
|
|
17
|
-
setCurrentStop?: (stop: number) => void;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
interface TubestopsStopContextProps {
|
|
21
|
-
stopNumber: number;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
const TubestopsContext = createContext<TubestopsContextProps | null>(null);
|
|
25
|
-
const TubestopsStopContext = createContext<TubestopsStopContextProps | null>(
|
|
26
|
-
null,
|
|
27
|
-
);
|
|
28
|
-
|
|
29
|
-
const TubestopsComponent = forwardRef<
|
|
30
|
-
HTMLDivElement,
|
|
31
|
-
HTMLAttributes<HTMLDivElement> & TubestopsContextProps
|
|
32
|
-
>(({ className, children, activeStop = 0 }, ref) => {
|
|
33
|
-
const [currentStop, setCurrentStop] = useState(activeStop);
|
|
34
|
-
const totalStops = Children.count(children);
|
|
35
|
-
|
|
36
|
-
const state = useMemo(
|
|
37
|
-
() => ({
|
|
38
|
-
stops: totalStops ?? 0,
|
|
39
|
-
currentStop,
|
|
40
|
-
setCurrentStop,
|
|
41
|
-
}),
|
|
42
|
-
[currentStop, setCurrentStop],
|
|
43
|
-
);
|
|
44
|
-
|
|
45
|
-
return (
|
|
46
|
-
<TubestopsContext.Provider value={state}>
|
|
47
|
-
<div ref={ref} className={clsx('flex py-4', className)}>
|
|
48
|
-
{children}
|
|
49
|
-
</div>
|
|
50
|
-
</TubestopsContext.Provider>
|
|
51
|
-
);
|
|
52
|
-
});
|
|
53
|
-
|
|
54
|
-
const TubestopsStop = forwardRef<
|
|
55
|
-
HTMLDivElement,
|
|
56
|
-
HTMLAttributes<HTMLDivElement> & { stopId: number }
|
|
57
|
-
>(({ className, stopId = 0, children }, ref) => {
|
|
58
|
-
const { currentStop = 0, stops = 0 } = useContext(TubestopsContext) || {};
|
|
59
|
-
const [stopNumber] = useState(stopId);
|
|
60
|
-
|
|
61
|
-
const state = useMemo(
|
|
62
|
-
() => ({
|
|
63
|
-
stopNumber,
|
|
64
|
-
}),
|
|
65
|
-
[stopNumber],
|
|
66
|
-
);
|
|
67
|
-
|
|
68
|
-
return (
|
|
69
|
-
<TubestopsStopContext.Provider value={state}>
|
|
70
|
-
<div ref={ref} className={clsx(className, 'w-full min-w-[120px]')}>
|
|
71
|
-
<div
|
|
72
|
-
className={clsx({
|
|
73
|
-
'mt-4 h-1 w-full translate-x-1/2 bg-tubestop-line-future':
|
|
74
|
-
stopId >= currentStop && stopId < stops,
|
|
75
|
-
'mt-4 h-1 w-full translate-x-1/2 bg-tubestop-line-complete':
|
|
76
|
-
stopId < currentStop && stopId < stops,
|
|
77
|
-
})}
|
|
78
|
-
/>
|
|
79
|
-
<p
|
|
80
|
-
className={clsx(
|
|
81
|
-
{
|
|
82
|
-
'relative z-20 -mt-4 bg-tubestop-station-complete':
|
|
83
|
-
stopId < currentStop,
|
|
84
|
-
'relative z-20 -mt-4 bg-tubestop-station-active':
|
|
85
|
-
currentStop === stopId,
|
|
86
|
-
'relative z-20 -mt-4 bg-tubestop-station-future':
|
|
87
|
-
stopId > currentStop,
|
|
88
|
-
'mt-1': stopId === stops,
|
|
89
|
-
},
|
|
90
|
-
'z-10 mx-auto h-6 w-6 rounded-full',
|
|
91
|
-
)}
|
|
92
|
-
/>
|
|
93
|
-
{children}
|
|
94
|
-
</div>
|
|
95
|
-
</TubestopsStopContext.Provider>
|
|
96
|
-
);
|
|
97
|
-
});
|
|
98
|
-
|
|
99
|
-
const TubestopsText = forwardRef<
|
|
100
|
-
HTMLParagraphElement,
|
|
101
|
-
HTMLAttributes<HTMLParagraphElement>
|
|
102
|
-
>(({ className, children }, ref) => {
|
|
103
|
-
const { currentStop = 0 } = useContext(TubestopsContext) || {};
|
|
104
|
-
const { stopNumber = 0 } = useContext(TubestopsStopContext) || {};
|
|
105
|
-
return (
|
|
106
|
-
<p
|
|
107
|
-
ref={ref}
|
|
108
|
-
className={clsx(
|
|
109
|
-
'mt-2 text-center',
|
|
110
|
-
{
|
|
111
|
-
'font-medium text-tubestop-text-complete': stopNumber < currentStop,
|
|
112
|
-
'font-bold text-tubestop-text-active': currentStop === stopNumber,
|
|
113
|
-
'font-medium text-tubestop-text-future': stopNumber > currentStop,
|
|
114
|
-
},
|
|
115
|
-
className,
|
|
116
|
-
)}
|
|
117
|
-
>
|
|
118
|
-
{children}
|
|
119
|
-
</p>
|
|
120
|
-
);
|
|
121
|
-
});
|
|
122
|
-
|
|
123
|
-
TubestopsComponent.displayName = 'Tubestop';
|
|
124
|
-
TubestopsStop.displayName = 'Tubestops.Stop';
|
|
125
|
-
TubestopsText.displayName = 'Tubestops.Text';
|
|
126
|
-
|
|
127
|
-
const Tubestops = Object.assign(TubestopsComponent, {
|
|
128
|
-
Stop: TubestopsStop,
|
|
129
|
-
Text: TubestopsText,
|
|
130
|
-
});
|
|
131
|
-
|
|
132
|
-
export { Tubestops };
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import { Video } from './';
|
|
2
|
-
import { Meta, StoryObj } from '@storybook/react';
|
|
3
|
-
|
|
4
|
-
import Mp4File from './assets/example.mp4';
|
|
5
|
-
import WebmFile from './assets/example.webm';
|
|
6
|
-
|
|
7
|
-
const meta = {
|
|
8
|
-
title: 'V2Components/Video',
|
|
9
|
-
component: Video,
|
|
10
|
-
args: {
|
|
11
|
-
children: [<Video.File src={WebmFile} type="video/webm" />],
|
|
12
|
-
},
|
|
13
|
-
} satisfies Meta<typeof Video>;
|
|
14
|
-
|
|
15
|
-
export default meta;
|
|
16
|
-
|
|
17
|
-
type Story = StoryObj<typeof Video>;
|
|
18
|
-
|
|
19
|
-
export const Default: Story = {};
|
|
20
|
-
|
|
21
|
-
export const Mp4: Story = {
|
|
22
|
-
...Default,
|
|
23
|
-
args: {
|
|
24
|
-
children: [<Video.File src={Mp4File} type="video/mp4" />],
|
|
25
|
-
},
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
export const withControls: Story = {
|
|
29
|
-
...Default,
|
|
30
|
-
args: {
|
|
31
|
-
withControls: true,
|
|
32
|
-
children: [<Video.File src={Mp4File} type="video/mp4" />],
|
|
33
|
-
},
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
export const Muted: Story = {
|
|
37
|
-
...Default,
|
|
38
|
-
args: {
|
|
39
|
-
muted: true,
|
|
40
|
-
children: [<Video.File src={Mp4File} type="video/mp4" />],
|
|
41
|
-
},
|
|
42
|
-
};
|
|
43
|
-
|
|
44
|
-
export const autoPlay: Story = {
|
|
45
|
-
...Default,
|
|
46
|
-
args: {
|
|
47
|
-
autoPlay: true,
|
|
48
|
-
children: [<Video.File src={Mp4File} type="video/mp4" />],
|
|
49
|
-
},
|
|
50
|
-
};
|
|
51
|
-
|
|
52
|
-
export const withPoster: Story = {
|
|
53
|
-
...Default,
|
|
54
|
-
args: {
|
|
55
|
-
withPoster: true,
|
|
56
|
-
children: [<Video.File src={Mp4File} type="video/mp4" />],
|
|
57
|
-
},
|
|
58
|
-
};
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
import { forwardRef, HTMLAttributes } from 'react';
|
|
2
|
-
|
|
3
|
-
export interface VideoProps {
|
|
4
|
-
autoPlay?: boolean;
|
|
5
|
-
muted?: boolean;
|
|
6
|
-
poster?: string;
|
|
7
|
-
mp4File?: string;
|
|
8
|
-
webmFile?: string;
|
|
9
|
-
withControls?: boolean;
|
|
10
|
-
withPoster?: boolean;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
const VideoComponent = forwardRef<
|
|
14
|
-
HTMLVideoElement,
|
|
15
|
-
HTMLAttributes<HTMLVideoElement> & VideoProps
|
|
16
|
-
>(
|
|
17
|
-
(
|
|
18
|
-
{
|
|
19
|
-
children,
|
|
20
|
-
poster,
|
|
21
|
-
withControls = false,
|
|
22
|
-
autoPlay = false,
|
|
23
|
-
muted = false,
|
|
24
|
-
...props
|
|
25
|
-
},
|
|
26
|
-
ref,
|
|
27
|
-
) => {
|
|
28
|
-
return (
|
|
29
|
-
<video
|
|
30
|
-
className="h-full w-full max-w-[800px]"
|
|
31
|
-
ref={ref}
|
|
32
|
-
poster={poster}
|
|
33
|
-
controls={withControls}
|
|
34
|
-
autoPlay={autoPlay}
|
|
35
|
-
muted={muted}
|
|
36
|
-
{...props}
|
|
37
|
-
>
|
|
38
|
-
{children}
|
|
39
|
-
</video>
|
|
40
|
-
);
|
|
41
|
-
},
|
|
42
|
-
);
|
|
43
|
-
|
|
44
|
-
const VideoFile = forwardRef<
|
|
45
|
-
HTMLSourceElement,
|
|
46
|
-
HTMLAttributes<HTMLSourceElement> & {
|
|
47
|
-
src: string;
|
|
48
|
-
type: 'video/mp4' | 'video/webm' | 'video/ogv';
|
|
49
|
-
}
|
|
50
|
-
>(({ src, type, ...props }, ref) => {
|
|
51
|
-
return <source ref={ref} src={src} type={type} {...props} />;
|
|
52
|
-
});
|
|
53
|
-
|
|
54
|
-
VideoComponent.displayName = 'Video';
|
|
55
|
-
VideoFile.displayName = 'Video.File';
|
|
56
|
-
|
|
57
|
-
const Video = Object.assign(VideoComponent, {
|
|
58
|
-
File: VideoFile,
|
|
59
|
-
});
|
|
60
|
-
|
|
61
|
-
export { Video };
|
|
62
|
-
|
|
63
|
-
// export const Video = ({
|
|
64
|
-
// id,
|
|
65
|
-
// className,
|
|
66
|
-
// autoPlay,
|
|
67
|
-
// muted,
|
|
68
|
-
// poster,
|
|
69
|
-
// mp4File,
|
|
70
|
-
// webmFile,
|
|
71
|
-
// ogvFile,
|
|
72
|
-
// height,
|
|
73
|
-
// width,
|
|
74
|
-
// withControls,
|
|
75
|
-
// }: Props) => {
|
|
76
|
-
// return (
|
|
77
|
-
// <video
|
|
78
|
-
// id={id}
|
|
79
|
-
// className={className}
|
|
80
|
-
// poster={poster}
|
|
81
|
-
// width={width}
|
|
82
|
-
// height={height}
|
|
83
|
-
// controls={withControls}
|
|
84
|
-
// autoPlay={autoPlay}
|
|
85
|
-
// muted={muted}
|
|
86
|
-
// >
|
|
87
|
-
// <source src={mp4File} type="video/mp4" />
|
|
88
|
-
// {webmFile !== null && <source src={webmFile} type="video/webm" />}
|
|
89
|
-
// {ogvFile !== undefined && <source src={ogvFile} type="video/ogg" />}
|
|
90
|
-
// </video>
|
|
91
|
-
// );
|
|
92
|
-
// }
|
package/src/custom.d.ts
DELETED
|
@@ -1,192 +0,0 @@
|
|
|
1
|
-
import { Meta, Unstyled } from '@storybook/blocks';
|
|
2
|
-
|
|
3
|
-
<Meta title="colour/ThemeColours" />
|
|
4
|
-
|
|
5
|
-
<Unstyled>
|
|
6
|
-
<div className='px-4 grid grid-cols-1 gap-12'>
|
|
7
|
-
<div>
|
|
8
|
-
<h2 className='py-4 font-bold underline'>Defaults</h2>
|
|
9
|
-
<div className='grid grid-cols-4 gap-6'>
|
|
10
|
-
<div className='grid grid-cols-1 gap-1'>
|
|
11
|
-
<p>Primary</p>
|
|
12
|
-
<div className='h-6 rounded-md bg-primary' />
|
|
13
|
-
</div>
|
|
14
|
-
|
|
15
|
-
<div className='grid grid-cols-1 gap-1'>
|
|
16
|
-
<p>Secondary</p>
|
|
17
|
-
<div className='h-6 rounded-md bg-secondary' />
|
|
18
|
-
</div>
|
|
19
|
-
|
|
20
|
-
<div className='grid grid-cols-1 gap-1'>
|
|
21
|
-
<p>Tertiary</p>
|
|
22
|
-
<div className='h-6 rounded-md bg-tertiary' />
|
|
23
|
-
</div>
|
|
24
|
-
|
|
25
|
-
<div className='grid grid-cols-1 gap-1'>
|
|
26
|
-
<p>White</p>
|
|
27
|
-
<div className='h-6 rounded-md bg-white' />
|
|
28
|
-
</div>
|
|
29
|
-
|
|
30
|
-
<div className='grid grid-cols-1 gap-1'>
|
|
31
|
-
<p>Black</p>
|
|
32
|
-
<div className='h-6 rounded-md bg-black' />
|
|
33
|
-
</div>
|
|
34
|
-
|
|
35
|
-
<div className='grid grid-cols-1 gap-1'>
|
|
36
|
-
<p>Grey</p>
|
|
37
|
-
<div className='h-6 rounded-md bg-grey' />
|
|
38
|
-
</div>
|
|
39
|
-
|
|
40
|
-
<div className='grid grid-cols-1 gap-1'>
|
|
41
|
-
<p>Light Grey</p>
|
|
42
|
-
<div className='h-6 rounded-md bg-light-grey' />
|
|
43
|
-
</div>
|
|
44
|
-
|
|
45
|
-
<div className='grid grid-cols-1 gap-1'>
|
|
46
|
-
<p>Lightest Grey</p>
|
|
47
|
-
<div className='h-6 rounded-md bg-lightest-grey' />
|
|
48
|
-
</div>
|
|
49
|
-
|
|
50
|
-
<div className='grid grid-cols-1 gap-1'>
|
|
51
|
-
<p>Border</p>
|
|
52
|
-
<div className='h-6 rounded-md bg-border' />
|
|
53
|
-
</div>
|
|
54
|
-
|
|
55
|
-
<div className='grid grid-cols-1 gap-1'>
|
|
56
|
-
<p>Border Light</p>
|
|
57
|
-
<div className='h-6 rounded-md bg-border-light' />
|
|
58
|
-
</div>
|
|
59
|
-
|
|
60
|
-
<div className='grid grid-cols-1 gap-1'>
|
|
61
|
-
<p>Border Lightest</p>
|
|
62
|
-
<div className='h-6 rounded-md bg-border-lightest' />
|
|
63
|
-
</div>
|
|
64
|
-
|
|
65
|
-
<div className='grid grid-cols-1 gap-1'>
|
|
66
|
-
<p>Border Dark</p>
|
|
67
|
-
<div className='h-6 rounded-md bg-border-dark' />
|
|
68
|
-
</div>
|
|
69
|
-
|
|
70
|
-
<div className='grid grid-cols-1 gap-1'>
|
|
71
|
-
<p>Primary Strict</p>
|
|
72
|
-
<div className='h-6 rounded-md bg-primary-strict' />
|
|
73
|
-
</div>
|
|
74
|
-
|
|
75
|
-
<div className='grid grid-cols-1 gap-1'>
|
|
76
|
-
<p>Red</p>
|
|
77
|
-
<div className='h-6 rounded-md bg-red' />
|
|
78
|
-
</div>
|
|
79
|
-
|
|
80
|
-
<div className='grid grid-cols-1 gap-1'>
|
|
81
|
-
<p>Gold</p>
|
|
82
|
-
<div className='h-6 rounded-md bg-gold' />
|
|
83
|
-
</div>
|
|
84
|
-
|
|
85
|
-
<div className='grid grid-cols-1 gap-1'>
|
|
86
|
-
<p>Ink</p>
|
|
87
|
-
<div className='h-6 rounded-md bg-ink' />
|
|
88
|
-
</div>
|
|
89
|
-
</div>
|
|
90
|
-
</div>
|
|
91
|
-
<div>
|
|
92
|
-
<h2 className='py-4 font-bold underline'>Status Colours</h2>
|
|
93
|
-
<div className='grid grid-cols-4 gap-6'>
|
|
94
|
-
<div className='grid grid-cols-1 gap-1'>
|
|
95
|
-
<p>Success Default</p>
|
|
96
|
-
<div className='h-6 rounded-md bg-success-default' />
|
|
97
|
-
</div>
|
|
98
|
-
<div className='grid grid-cols-1 gap-1'>
|
|
99
|
-
<p>Error Default</p>
|
|
100
|
-
<div className='h-6 rounded-md bg-error-default' />
|
|
101
|
-
</div>
|
|
102
|
-
<div className='grid grid-cols-1 gap-1'>
|
|
103
|
-
<p>Warning Default</p>
|
|
104
|
-
<div className='h-6 rounded-md bg-warning-default' />
|
|
105
|
-
</div>
|
|
106
|
-
<div className='grid grid-cols-1 gap-1'>
|
|
107
|
-
<p>Info Default</p>
|
|
108
|
-
<div className='h-6 rounded-md bg-info-default' />
|
|
109
|
-
</div>
|
|
110
|
-
<div className='grid grid-cols-1 gap-1'>
|
|
111
|
-
<p>Success Light</p>
|
|
112
|
-
<div className='h-6 rounded-md bg-success-light' />
|
|
113
|
-
</div>
|
|
114
|
-
<div className='grid grid-cols-1 gap-1'>
|
|
115
|
-
<p>Error Light</p>
|
|
116
|
-
<div className='h-6 rounded-md bg-error-light' />
|
|
117
|
-
</div>
|
|
118
|
-
<div className='grid grid-cols-1 gap-1'>
|
|
119
|
-
<p>Warning Light</p>
|
|
120
|
-
<div className='h-6 rounded-md bg-warning-light' />
|
|
121
|
-
</div>
|
|
122
|
-
<div className='grid grid-cols-1 gap-1'>
|
|
123
|
-
<p>Info Light</p>
|
|
124
|
-
<div className='h-6 rounded-md bg-info-light' />
|
|
125
|
-
</div>
|
|
126
|
-
</div>
|
|
127
|
-
</div>
|
|
128
|
-
<div>
|
|
129
|
-
<h2 className='py-4 font-bold underline'>Socials</h2>
|
|
130
|
-
<div className='grid grid-cols-4 gap-6'>
|
|
131
|
-
<div className='grid grid-cols-1 gap-1'>
|
|
132
|
-
<div className='h-6 rounded-md bg-facebook' />
|
|
133
|
-
<p>Facebook</p>
|
|
134
|
-
</div>
|
|
135
|
-
<div className='grid grid-cols-1 gap-1'>
|
|
136
|
-
<div className='h-6 rounded-md bg-linkedin' />
|
|
137
|
-
<p>Linkedin</p>
|
|
138
|
-
</div>
|
|
139
|
-
<div className='grid grid-cols-1 gap-1'>
|
|
140
|
-
<div className='h-6 rounded-md bg-email' />
|
|
141
|
-
<p>Email</p>
|
|
142
|
-
</div>
|
|
143
|
-
<div className='grid grid-cols-1 gap-1'>
|
|
144
|
-
<div className='h-6 rounded-md bg-github' />
|
|
145
|
-
<p>Github</p>
|
|
146
|
-
</div>
|
|
147
|
-
<div className='grid grid-cols-1 gap-1'>
|
|
148
|
-
<div className='h-6 rounded-md bg-whatsapp' />
|
|
149
|
-
<p>Whatsapp</p>
|
|
150
|
-
</div>
|
|
151
|
-
<div className='grid grid-cols-1 gap-1'>
|
|
152
|
-
<div className='h-6 rounded-md bg-twitter' />
|
|
153
|
-
<p>Twitter</p>
|
|
154
|
-
</div>
|
|
155
|
-
<div className='grid grid-cols-1 gap-1'>
|
|
156
|
-
<div className='h-6 rounded-md bg-instagram' />
|
|
157
|
-
<p>Instagram</p>
|
|
158
|
-
</div>
|
|
159
|
-
</div>
|
|
160
|
-
</div>
|
|
161
|
-
<div>
|
|
162
|
-
<h2 className='py-4'>Interactive Socials</h2>
|
|
163
|
-
<div className='grid grid-cols-4 gap-6'>
|
|
164
|
-
<div className='grid grid-cols-1 gap-1'>
|
|
165
|
-
<div className='h-6 rounded-md bg-interactive-facebook' />
|
|
166
|
-
<p>Interactive Facebook</p>
|
|
167
|
-
</div>
|
|
168
|
-
<div className='grid grid-cols-1 gap-1'>
|
|
169
|
-
<div className='h-6 rounded-md bg-interactive-linkedin' />
|
|
170
|
-
<p>Interactive Linkedin</p>
|
|
171
|
-
</div>
|
|
172
|
-
<div className='grid grid-cols-1 gap-1'>
|
|
173
|
-
<div className='h-6 rounded-md bg-interactive-email' />
|
|
174
|
-
<p>Interactive Email</p>
|
|
175
|
-
</div>
|
|
176
|
-
<div className='grid grid-cols-1 gap-1'>
|
|
177
|
-
<div className='h-6 rounded-md bg-interactive-github' />
|
|
178
|
-
<p>Interactive Github</p>
|
|
179
|
-
</div>
|
|
180
|
-
<div className='grid grid-cols-1 gap-1'>
|
|
181
|
-
<div className='h-6 rounded-md bg-interactive-whatsapp' />
|
|
182
|
-
<p>Interactive Whatsapp</p>
|
|
183
|
-
</div>
|
|
184
|
-
<div className='grid grid-cols-1 gap-1'>
|
|
185
|
-
<div className='h-6 rounded-md bg-interactive-twitter' />
|
|
186
|
-
<p>Interactive Twitter</p>
|
|
187
|
-
</div>
|
|
188
|
-
</div>
|
|
189
|
-
</div>
|
|
190
|
-
</div>
|
|
191
|
-
|
|
192
|
-
</Unstyled>
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { Meta, Unstyled } from '@storybook/blocks';
|
|
2
|
-
|
|
3
|
-
import { TrepurComponentsLogo } from './assets';
|
|
4
|
-
|
|
5
|
-
<Meta title="guides/Introduction" />
|
|
6
|
-
|
|
7
|
-
<Unstyled>
|
|
8
|
-
<div>
|
|
9
|
-
<img className="mx-auto" src={TrepurComponentsLogo} width="200" />
|
|
10
|
-
<h1 className="font-semiBold py-4 text-center">Trepur Components</h1>
|
|
11
|
-
<p>Welcome to Trepur Components, the design system for Trepur Tech</p>
|
|
12
|
-
</div>
|
|
13
|
-
</Unstyled>
|