@maycolem/stories 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,2 @@
1
+ declare function App(): import("react/jsx-runtime").JSX.Element;
2
+ export default App;
@@ -0,0 +1,11 @@
1
+ import { IBettingStory, IPromoStory, IStory } from '../types/types';
2
+ declare const ManagmentStoryComponent: ({ story }: {
3
+ story: IStory;
4
+ }) => import("react/jsx-runtime").JSX.Element;
5
+ export default ManagmentStoryComponent;
6
+ export declare const PromoStory: ({ story }: {
7
+ story: IPromoStory;
8
+ }) => import("react/jsx-runtime").JSX.Element;
9
+ export declare const BetCouponStory: ({ story }: {
10
+ story: IBettingStory;
11
+ }) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,4 @@
1
+ declare const ProfileStories: ({ className }: {
2
+ className?: string | undefined;
3
+ }) => import("react/jsx-runtime").JSX.Element;
4
+ export default ProfileStories;
@@ -0,0 +1,10 @@
1
+ interface Props {
2
+ image: any;
3
+ title?: any;
4
+ color: any;
5
+ className?: any;
6
+ onProfileClick?: any;
7
+ width?: string;
8
+ }
9
+ declare const ProfileStory: ({ image, title, color, className, onProfileClick, width, }: Props) => import("react/jsx-runtime").JSX.Element;
10
+ export default ProfileStory;
@@ -0,0 +1,7 @@
1
+ declare const StoryHeaderPlayer: ({ story, onProfileClick, color, image, }: {
2
+ story: any;
3
+ onProfileClick?: (() => null) | undefined;
4
+ color: any;
5
+ image: any;
6
+ }) => import("react/jsx-runtime").JSX.Element;
7
+ export default StoryHeaderPlayer;
@@ -0,0 +1,11 @@
1
+ import { default as React } from 'react';
2
+ import { StoriesProps } from './StoryPlayerTypes';
3
+ interface Props extends StoriesProps {
4
+ loop?: boolean;
5
+ currentIndex?: any;
6
+ onAllStoriesEnd?: any;
7
+ onOverlayClick?: any;
8
+ inline?: boolean;
9
+ }
10
+ declare const StoryPlayer: React.FC<Props>;
11
+ export default StoryPlayer;
@@ -0,0 +1,118 @@
1
+ import { default as React } from 'react';
2
+ /**
3
+ * Interface de cada objeto de historia que acepta <Stories stories={[ ... ]} />
4
+ */
5
+ export interface IStoryObject {
6
+ /** Tipo de historia:
7
+ * - `"image"` → renderiza una imagen con `url`
8
+ * - `"video"` → renderiza un reproductor de video con `url`
9
+ * - `"component"` → renderiza un componente React personalizado (campo `component`)
10
+ */
11
+ type: "image" | "video" | "component";
12
+ /** URL de la imagen o video (solo para `type: "image" | "video"`) */
13
+ url?: string;
14
+ /** Duración en milisegundos de este slide. Si no se define, se usa `defaultDuration`. */
15
+ duration?: number;
16
+ /** Componente React a renderizar cuando `type: "component"` */
17
+ component?: React.ComponentType<any>;
18
+ /** Componente React que se muestra como cabecera de la story (por arriba) */
19
+ header?: React.ReactNode;
20
+ /**
21
+ * Texto, booleano o componente que activa “See More”.
22
+ * - Si es `string`, se muestra ese texto como enlace.
23
+ * - Si es `boolean` (`true`), aparece un “See More” genérico.
24
+ * - Si es componente React, se renderiza directamente.
25
+ */
26
+ seeMore?: string | boolean | React.ReactNode;
27
+ /** Componente React que se monta en un overlay al hacer click en “See More” */
28
+ seeMoreComponent?: React.ReactNode;
29
+ /** Callback que se dispara al hacer click en “See More”. Recibe el índice actual (número). */
30
+ onSeeMoreClick?: (index: number) => void;
31
+ }
32
+ /**
33
+ * Interfaz para sobreescribir nombres de clase en distintas secciones de Stories
34
+ */
35
+ export interface IStoryClassNames {
36
+ /** Clase para el contenedor principal de todo el componente Stories */
37
+ main?: string;
38
+ /** Clase para el contenedor que engloba la línea de progreso */
39
+ progressContainer?: string;
40
+ /** Clase para cada “caja” de progreso individual */
41
+ progressBarContainer?: string;
42
+ /** Clase para la propia barra de progreso (el elemento que crece) */
43
+ progressBar?: string;
44
+ /** Clase para el contenedor de cada historia (imagen/video/componente) */
45
+ storyContainer?: string;
46
+ }
47
+ /**
48
+ * Props que acepta el componente <Stories /> de stories-react
49
+ */
50
+ export interface StoriesProps {
51
+ /** Arreglo de objetos de historia a renderizar (IStoryObject[]) */
52
+ stories: IStoryObject[];
53
+ /**
54
+ * Altura del contenedor de historias.
55
+ * Puede ser "100%" (por defecto) u otra unidad CSS (ej. "400px").
56
+ * @default "100%"
57
+ */
58
+ height?: string;
59
+ /**
60
+ * Ancho del contenedor de historias.
61
+ * Puede ser "100%" (por defecto) u otra unidad CSS (ej. "300px").
62
+ * @default "100%"
63
+ */
64
+ width?: string;
65
+ /**
66
+ * Callback que se llama cada vez que cambia la historia, recibiendo
67
+ * el índice (número) de la story que acaba de mostrarse.
68
+ */
69
+ onStoryChange?: (index: number) => void;
70
+ /**
71
+ * Callback que se llama una sola vez, cuando se renderiza la primera story.
72
+ * Útil para inicializar lógica de “comienzo”.
73
+ */
74
+ onStoriesStart?: () => void;
75
+ /**
76
+ * Callback que se dispara una sola vez cuando se completa la última historia
77
+ * del arreglo.
78
+ */
79
+ onAllStoriesEnd?: () => void;
80
+ /**
81
+ * Índice de la historia que debe mostrarse primero.
82
+ * Si se pasa, arranca en esa posición en lugar de en 0.
83
+ */
84
+ currentIndex?: number;
85
+ /**
86
+ * Duración por defecto (en milisegundos) que se usará cuando un IStoryObject
87
+ * no especifique `duration`.
88
+ * @default 10000
89
+ */
90
+ defaultDuration?: number;
91
+ /**
92
+ * Permite sobreescribir las clases CSS en distintas secciones internas
93
+ * usando la interfaz IStoryClassNames.
94
+ * @default {}
95
+ */
96
+ classNames?: IStoryClassNames;
97
+ /**
98
+ * Si se pone `false`, el slide sigue avanzando aunque el usuario cambie de pestaña
99
+ * o minimice la ventana. Por defecto está en `true` (pausa cuando la ventana no está activa).
100
+ * @default true
101
+ */
102
+ pauseStoryWhenInActiveWindow?: boolean;
103
+ }
104
+ /**
105
+ * Props que recibe un “componente personalizado” cuando lo usas como `type: "component"`.
106
+ * ReactInstaStories le inyecta estas propiedades para que controle
107
+ * pausa/reproducción desde dentro del componente.
108
+ */
109
+ export interface CustomStoryComponentProps {
110
+ /** Llamar para pausar la historia actual desde el componente */
111
+ pause: () => void;
112
+ /** Llamar para reanudar la historia actual desde el componente */
113
+ resume: () => void;
114
+ /** Objeto IStoryObject con los datos de la historia actual */
115
+ story: IStoryObject;
116
+ /** Indica si la story está actualmente en pausa (`true`) o reproduciéndose (`false`) */
117
+ isPaused: boolean;
118
+ }
@@ -0,0 +1,2 @@
1
+ import { IStoriesProfile } from '../types/types';
2
+ export declare const storiesDataAll: IStoriesProfile[];
@@ -0,0 +1,6 @@
1
+ export { default as MyStory } from './App';
2
+ export { default as ProfileStories } from './components/ProfileStories';
3
+ export { default as StoryPlayer } from './components/StoryPlayer';
4
+ export { default as ProfileStory } from './components/ProfileStory';
5
+ export { default as ManagmentStoryComponent } from './components/ManagmentStoryComponent';
6
+ export { default as StoryHeaderPlayer } from './components/StoryHeaderPlayer';
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,150 @@
1
+ export interface IStoriesProfile {
2
+ id: string;
3
+ stories: IStory[];
4
+ is_published: boolean;
5
+ show_red_chip: boolean;
6
+ order_index: number;
7
+ avatar: string;
8
+ name: string;
9
+ description: string;
10
+ color: string;
11
+ }
12
+ export type IStory = IBettingStory | IPromoStory;
13
+ export interface IBaseStory {
14
+ id: string;
15
+ title: string;
16
+ description: string;
17
+ image: string;
18
+ duration: number;
19
+ clicks: number | null;
20
+ views: number | null;
21
+ type: string;
22
+ }
23
+ export interface IBettingStory extends IBaseStory {
24
+ type: "betting";
25
+ btn_text: string;
26
+ matches: string[];
27
+ markets: string[];
28
+ results: string[];
29
+ coupon: string;
30
+ coupon_title: string;
31
+ coupon_result: CouponResult;
32
+ }
33
+ export interface IPromoStory extends IBaseStory {
34
+ type: "promo";
35
+ btn_text: string;
36
+ btn_url: string;
37
+ }
38
+ export interface CouponResult {
39
+ stakes: Stake[];
40
+ selections: Selection[];
41
+ betType: number;
42
+ stakeAdjustment: StakeAdjustment;
43
+ fullCoverData: FullCoverData;
44
+ }
45
+ export interface Stake {
46
+ value: number;
47
+ preciseValue: number;
48
+ type: number;
49
+ isEnabled: boolean;
50
+ isHighlighted: boolean;
51
+ }
52
+ export interface Selection {
53
+ odd: Odd;
54
+ event: Event;
55
+ status: number;
56
+ isBanker: boolean;
57
+ isEnabled: boolean;
58
+ sport: Sport;
59
+ category: Category;
60
+ competitors: Competitor[];
61
+ championship: Championship;
62
+ market: Market;
63
+ widgetInfo: WidgetInfo;
64
+ }
65
+ export interface Odd {
66
+ typeId: number;
67
+ price: number;
68
+ isMB: boolean;
69
+ oddStatus: number;
70
+ id: number;
71
+ name: string;
72
+ shouldUpdate: boolean;
73
+ lineDir?: number;
74
+ priceDir?: number;
75
+ }
76
+ export interface Event {
77
+ marketIds: number[];
78
+ isBooked: boolean;
79
+ isParlay: boolean;
80
+ offers?: {
81
+ type: number;
82
+ }[];
83
+ code: number;
84
+ hasStream: boolean;
85
+ extId: string;
86
+ sc: number;
87
+ rc: boolean;
88
+ pId: number;
89
+ et: number;
90
+ competitorIds: number[];
91
+ sportId: number;
92
+ catId: number;
93
+ champId: number;
94
+ status: number;
95
+ startDate: string;
96
+ id: number;
97
+ name: string;
98
+ liveTime?: string;
99
+ }
100
+ export interface Sport {
101
+ catIds: number[];
102
+ typeId: number;
103
+ iconName: string;
104
+ hasLiveEvents: boolean;
105
+ id: number;
106
+ name: string;
107
+ }
108
+ export interface Category {
109
+ champIds: number[];
110
+ iso?: string;
111
+ hasLiveEvents: boolean;
112
+ id: number;
113
+ name: string;
114
+ }
115
+ export interface Competitor {
116
+ id: number;
117
+ name: string;
118
+ }
119
+ export interface Championship {
120
+ offers?: {
121
+ type: number;
122
+ }[];
123
+ hasLiveEvents: boolean;
124
+ id: number;
125
+ name: string;
126
+ category: Category;
127
+ sport: Sport;
128
+ }
129
+ export interface Market {
130
+ oddIds: number[];
131
+ typeId: number;
132
+ isMB: boolean;
133
+ sportMarketId: number;
134
+ id: number;
135
+ name: string;
136
+ }
137
+ export interface WidgetInfo {
138
+ widget: number;
139
+ page: number;
140
+ tabIndex: number | null;
141
+ tipsterId: number | null;
142
+ }
143
+ export interface StakeAdjustment {
144
+ type: number;
145
+ value: number;
146
+ }
147
+ export interface FullCoverData {
148
+ type: number;
149
+ label: string | null;
150
+ }
@@ -0,0 +1 @@
1
+ @import"https://fonts.googleapis.com/css2?family=Antonio:wght@100..700&family=Rubik:ital,wght@0,300..900;1,300..900&display=swap";.App{padding:1rem}html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{margin:0;padding:0;border:0;font-size:100%;font:inherit;font-family:inherit;vertical-align:baseline}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}body,html{line-height:1;width:100%;height:100%;font-family:Rubik}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:before,blockquote:after,q:before,q:after{content:"";content:none}table{border-collapse:collapse;border-spacing:0}._ProfileStories_1akh2_1{display:flex;padding:1rem;gap:.75rem;justify-items:center;overflow:auto}._ScrollMenu_1akh2_9{position:relative}._scrollContainerClassName_1akh2_13{padding:16px 14px 14px;scrollbar-width:none;-ms-overflow-style:none}._scrollContainerClassName_1akh2_13::-webkit-scrollbar{display:none}._itemClassName_1akh2_22{padding-right:10px}._itemClassName_1akh2_22:last-child{padding-right:0}._ProfileStory_1ug8f_1{display:flex;flex-direction:column;width:var(--story-width);cursor:pointer;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}._ProfileStoryWrap_1ug8f_11{border:2px solid var(--story-color);box-shadow:0 0 3px var(--story-color),0 0 10px var(--story-color);aspect-ratio:1;border-radius:50%;position:relative;padding:2px}._ProfileStory__wrapImage_1ug8f_20{width:100%;height:100%;border-radius:50%;background:linear-gradient(to top,#535353,#d5d5d5,transparent)}._ProfileStory__image_1ug8f_27{position:absolute;height:auto;width:100%;top:0;right:0;bottom:0;left:0;display:flex;justify-content:center}._ProfileStory__image_1ug8f_27>img{position:absolute;bottom:0;height:125%;width:auto;object-fit:cover;-webkit-user-drag:none}._ProfileStory__title_1ug8f_44{color:#222;font-size:calc(calc((var(--story-width) / 60) * 10));width:100%;text-align:center;margin:auto;margin-top:.5rem}.react-horizontal-scrolling-menu--scroll-container{display:flex;height:max-content;overflow-y:hidden;position:relative;width:100%}.react-horizontal-scrolling-menu--scroll-container.rtl{direction:rtl}.react-horizontal-scrolling-menu--inner-wrapper{display:flex;overflow-y:hidden}.react-horizontal-scrolling-menu--wrapper{display:flex;flex-direction:column}.react-horizontal-scrolling-menu--footer,.react-horizontal-scrolling-menu--header{width:100%}.react-horizontal-scrolling-menu--arrow-left,.react-horizontal-scrolling-menu--arrow-right{display:flex}.Actions-styles_left__eky50{left:0}.Actions-styles_left__eky50,.Actions-styles_right__zguoH{bottom:0;height:100%;position:absolute;top:0;width:50%;z-index:1}.Actions-styles_right__zguoH{right:0}.ProgressBar-styles_wrapper__oqUCo{background-color:#6a6a6a;border-radius:2px;height:2px;position:relative}.ProgressBar-styles_bar__x0O50{background-color:#eae8e8;border-radius:2px;bottom:0;height:2px;left:0;position:absolute;right:0;top:0;width:0}.progress-styles_wrapper__qQPyW{grid-gap:4px;display:grid;height:2px;left:0;padding:4px;position:absolute;right:0;top:0}.Story-styles_wrapper__oJP7j{align-content:center;align-items:center;display:flex;height:100%;width:100%}.Story-styles_header__-rnWL{left:0;position:absolute;right:0;top:12px}.Image-styles_image__gnfW1{height:100%;-o-object-fit:cover;object-fit:cover;width:100%}.Video-styles_video__BykuO{max-height:100%;max-width:100%;-o-object-fit:cover;object-fit:cover;width:100%}.Video-styles_loaderWrapper__TqVWk{align-content:center;align-items:center;bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0}.Video-styles_loader__FxxSV{animation:Video-styles_spin__ilbIB 1s linear infinite;border:4px solid #f3f3f3;border-radius:50%;border-top-color:#a5b0b7;height:40px;width:40px}.Video-styles_soundIcon__ZvYXE{background:transparent;border:none;cursor:pointer;outline:none;padding:16px;position:absolute;right:0;top:0;z-index:2}@keyframes Video-styles_spin__ilbIB{0%{transform:rotate(0)}to{transform:rotate(1turn)}}.CustomComponents-styles_component__w87Wx{height:100%;width:100%}.SeeMore-styles_seeMoreWrapper__kwjif{background-color:inherit;border:none;bottom:24px;cursor:pointer;display:flex;justify-content:center;left:0;outline:none;position:absolute;right:0;width:100%;z-index:2}.SeeMore-styles_defaultSeeMore__-B1QW{align-items:center;color:#fff;display:flex;flex-direction:column;font-size:14px;font-weight:600;justify-content:center;line-height:.8;width:100%}.SeeMore-styles_defaultSeeMore__-B1QW p{margin:0;padding:0}.SeeMoreComponent-styles_seeMoreComponentWrapper__0T6Ap{animation:SeeMoreComponent-styles_up__sRaEA .2s ease-in-out;animation-fill-mode:forwards;background-color:#fff;bottom:0;left:0;max-height:100%;overflow-y:auto;position:absolute;right:0;top:0;z-index:3}.SeeMoreComponent-styles_closeIcon__LMm3b{background-color:inherit;background:transparent;border:none;cursor:pointer;font-size:16px;outline:none;padding:16px;position:absolute;right:0;top:0}@keyframes SeeMoreComponent-styles_up__sRaEA{0%{transform:translateY(10%)}to{transform:translateY(0)}}.styles_main__-0FEu{-webkit-touch-callout:none;background-color:#000;position:relative;touch-action:manipulation;-webkit-user-select:none;-moz-user-select:none;user-select:none}._StoryPlayer_1720k_1{position:fixed;top:0;left:0;width:100vw;height:100vh;display:flex;justify-content:center;align-items:center;z-index:1000}._Overlay_1720k_13{background:#000000d9;height:100%;width:100%;position:absolute;left:0;top:0;cursor:pointer}._StoryPlayer__Wrap_1720k_23{position:relative;width:100%;height:100%}@media screen and (min-width: 600px){._StoryPlayer__Wrap_1720k_23{height:90dvh;height:90vh;width:initial;aspect-ratio:9 / 16}}._progressContainer_1720k_35{z-index:2}._StoryPlayer_1720k_1._inline_1720k_40{position:relative;width:100%;height:auto;max-width:350px;aspect-ratio:9 / 16}._StoryPlayer_1720k_1._inline_1720k_40 ._Overlay_1720k_13{display:none}@media screen and (min-width: 600px){._StoryPlayer_1720k_1._inline_1720k_40 ._StoryPlayer__Wrap_1720k_23{height:100%;width:100%;aspect-ratio:initial}}._story_ds79x_1{height:100%;width:100%;position:relative}._story_ds79x_1>img{width:100%;height:100%;object-fit:cover}._Button_ds79x_12{position:absolute;bottom:1rem;width:60%;left:20%;padding:.7rem;background:#fb3333;border:0;outline:0;color:#fff;font-weight:500;font-size:1rem;transform:skew(-10deg);z-index:2;cursor:pointer}._StoryHeaderPlayer_1hpyb_1{padding:5px 10px;display:flex;align-items:center;gap:.5rem;position:relative}._StoryHeaderPlayer_1hpyb_1:before{content:"";position:absolute;height:200%;width:100%;background:linear-gradient(to top,transparent,#000);left:0}._StoryHeaderPlayer__ProfileStory_1hpyb_18{width:30px;height:30px;z-index:2}._StoryHeaderPlayer__title_1hpyb_24{color:#fff;font-size:13px;font-weight:500;z-index:2}
@@ -0,0 +1,2 @@
1
+ declare const _default: import('vite').UserConfig;
2
+ export default _default;
package/dist/vite.svg ADDED
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>
package/package.json ADDED
@@ -0,0 +1,40 @@
1
+ {
2
+ "name": "@maycolem/stories",
3
+ "version": "1.0.0",
4
+ "main": "dist/index.cjs.js",
5
+ "module": "dist/index.esm.js",
6
+ "types": "dist/index.d.ts",
7
+ "files": [
8
+ "dist"
9
+ ],
10
+ "scripts": {
11
+ "dev": "vite",
12
+ "build": "tsc -b && vite build",
13
+ "lint": "eslint .",
14
+ "preview": "vite preview"
15
+ },
16
+ "devDependencies": {
17
+ "@eslint/js": "^9.25.0",
18
+ "@types/node": "^22.15.29",
19
+ "@types/react": "^17.0.87",
20
+ "@types/react-dom": "^17.0.26",
21
+ "@vitejs/plugin-react": "^4.4.1",
22
+ "eslint": "^9.25.0",
23
+ "eslint-plugin-react-hooks": "^5.2.0",
24
+ "eslint-plugin-react-refresh": "^0.4.19",
25
+ "globals": "^16.0.0",
26
+ "typescript": "~5.8.3",
27
+ "typescript-eslint": "^8.30.1",
28
+ "vite": "^6.3.5",
29
+ "vite-plugin-dts": "^4.5.4"
30
+ },
31
+ "dependencies": {
32
+ "@faker-js/faker": "^9.8.0",
33
+ "classnames": "^2.5.1",
34
+ "react": "^17.0.2",
35
+ "react-dom": "^17.0.2",
36
+ "react-horizontal-scrolling-menu": "^7.1.1",
37
+ "react-insta-stories": "^2.8.0",
38
+ "stories-react": "^1.1.2"
39
+ }
40
+ }