@faskai/ui-commons 0.0.0-alpha.1 → 0.0.0-alpha.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/README.md CHANGED
@@ -1,17 +1,79 @@
1
1
  # Fask UI Commons
2
2
 
3
- A minimal package containing common UI components and utilities shared between Fask applications:
3
+ A collection of reusable React components for Fask applications built with Material-UI.
4
4
 
5
- * @/fask-web-app-v2 (B2C) is hosted at fask.ai
6
- * @/fask-biz-landing (B2B landing) is at fask.ai/business
7
- * @/powpal-web-app (B2B dashboard) is at biz.fask.ai
5
+ ## Components
6
+
7
+ ### BetaMarketingBanner
8
+
9
+ A modern marketing banner component that highlights USPs (Unique Selling Propositions) and Beta launch offer.
10
+
11
+ #### Features
12
+
13
+ - **Fastest AI Voice Chat** - Industry-leading response times
14
+ - **Self-Learning AI Agents** - Fine-tune with your data or bring your own LLM
15
+ - **Easiest Setup** - 1-click deployment worldwide
16
+ - **Any Language** - Human-sounding in 100+ languages
17
+ - **Truly Multi-Modal** - Voice, Video, and Text channels
18
+ - **Infinitely Scalable** - Grows with your business needs
19
+
20
+ #### Props
21
+
22
+ ```typescript
23
+ interface BetaMarketingBannerProps {
24
+ variant?: 'full' | 'compact'; // Layout variant (default: 'full')
25
+ showBetaOffer?: boolean; // Show/hide beta offer section (default: true)
26
+ className?: string; // Additional CSS classes
27
+ }
28
+ ```
29
+
30
+ #### Usage
31
+
32
+ ```tsx
33
+ import { BetaMarketingBanner } from 'fask-ui-commons';
34
+
35
+ // Full banner with beta offer
36
+ <BetaMarketingBanner />
37
+
38
+ // Without beta offer
39
+ <BetaMarketingBanner showBetaOffer={false} />
40
+
41
+ // With custom styling
42
+ <BetaMarketingBanner className="my-custom-class" />
43
+ ```
44
+
45
+ #### Beta Offer Details
46
+
47
+ - **50% OFF First Year** for limited customers
48
+ - Links to: `https://biz.fask.ai/billing?price-tier=beta&period=year`
49
+ - Includes animated "LIMITED TIME" chip
50
+ - Professional call-to-action button
51
+
52
+ #### Styling
53
+
54
+ The component uses Material-UI theming and includes:
55
+ - Gradient backgrounds and borders
56
+ - Hover animations and transitions
57
+ - Responsive design for mobile/desktop
58
+ - Modern glassmorphism effects
59
+ - Pulse animations for urgency
8
60
 
9
61
  ## Installation
10
62
 
11
63
  ```bash
12
- yarn add @faskai/ui-commons@0.0.0-alpha.01
64
+ npm install fask-ui-commons
13
65
  ```
14
66
 
67
+ ## Dependencies
68
+
69
+ - React 18+
70
+ - Material-UI 5+
71
+ - @mui/icons-material
72
+
73
+ ## License
74
+
75
+ Private - Fask AI
76
+
15
77
  ## Usage
16
78
 
17
79
  ### GTM Provider
@@ -1,18 +1,7 @@
1
1
  import { ReactNode } from 'react';
2
- declare global {
3
- interface Window {
4
- dataLayer: any[];
5
- gtag: (...args: any[]) => void;
6
- }
7
- }
8
2
  interface GTMProviderProps {
9
3
  gtmId: string;
10
4
  children: ReactNode;
11
- environment?: 'development' | 'production';
12
5
  }
13
- export declare function GTMProvider({ gtmId, children, environment }: GTMProviderProps): import("react/jsx-runtime").JSX.Element;
14
- export declare function trackEvent(eventName: string, parameters?: Record<string, any>): void;
15
- export declare function trackConversion(conversionId: string, conversionLabel?: string, value?: number): void;
16
- export declare function trackLinkedInConversion(conversionId: string, value?: number): void;
17
- export declare function trackLinkedInLead(): void;
6
+ export declare function GTMProvider({ gtmId, children }: GTMProviderProps): import("react/jsx-runtime").JSX.Element;
18
7
  export {};
@@ -1,72 +1,17 @@
1
- import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
2
- import { useEffect } from 'react';
3
- export function GTMProvider({ gtmId, children, environment = 'production' }) {
4
- useEffect(() => {
5
- // Initialize dataLayer
6
- window.dataLayer = window.dataLayer || [];
7
- // Load GTM script
8
- const script = document.createElement('script');
9
- script.innerHTML = `
10
- (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
11
- new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
12
- j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
13
- 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
14
- })(window,document,'script','dataLayer','${gtmId}');
15
- `;
16
- document.head.appendChild(script);
17
- // Add noscript iframe
18
- const noscript = document.createElement('noscript');
19
- const iframe = document.createElement('iframe');
20
- iframe.src = `https://www.googletagmanager.com/ns.html?id=${gtmId}`;
21
- iframe.height = '0';
22
- iframe.width = '0';
23
- iframe.style.display = 'none';
24
- iframe.style.visibility = 'hidden';
25
- noscript.appendChild(iframe);
26
- document.body.insertBefore(noscript, document.body.firstChild);
27
- return () => {
28
- // Cleanup
29
- if (script.parentNode) {
30
- script.parentNode.removeChild(script);
31
- }
32
- if (noscript.parentNode) {
33
- noscript.parentNode.removeChild(noscript);
34
- }
35
- };
36
- }, [gtmId]);
37
- return _jsx(_Fragment, { children: children });
38
- }
39
- // Helper function to track custom events
40
- export function trackEvent(eventName, parameters) {
41
- if (typeof window !== 'undefined' && window.dataLayer) {
42
- window.dataLayer.push({
43
- event: eventName,
44
- ...parameters,
45
- });
46
- }
47
- }
48
- // Helper function to track conversions
49
- export function trackConversion(conversionId, conversionLabel, value) {
50
- if (typeof window !== 'undefined' && window.gtag) {
51
- window.gtag('event', 'conversion', {
52
- send_to: conversionLabel ? `${conversionId}/${conversionLabel}` : conversionId,
53
- value: value,
54
- });
55
- }
56
- }
57
- // Helper function to track LinkedIn conversions
58
- export function trackLinkedInConversion(conversionId, value) {
59
- trackEvent('linkedin_conversion', {
60
- conversion_id: conversionId,
61
- value: value,
62
- });
63
- }
64
- // Helper function to track LinkedIn leads
65
- export function trackLinkedInLead() {
66
- if (typeof window !== 'undefined') {
67
- trackEvent('linkedin_lead', {
68
- page_location: window.location.href,
69
- page_title: document.title,
70
- });
71
- }
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.GTMProvider = GTMProvider;
7
+ const jsx_runtime_1 = require("react/jsx-runtime");
8
+ const script_1 = __importDefault(require("next/script"));
9
+ function GTMProvider({ gtmId, children }) {
10
+ return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(script_1.default, { id: "gtm-head", strategy: "afterInteractive", children: `
11
+ (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
12
+ new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
13
+ j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
14
+ 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
15
+ })(window,document,'script','dataLayer','${gtmId}');
16
+ ` }), (0, jsx_runtime_1.jsx)("noscript", { children: (0, jsx_runtime_1.jsx)("iframe", { src: `https://www.googletagmanager.com/ns.html?id=${gtmId}`, height: "0", width: "0", style: { display: 'none', visibility: 'hidden' } }) }), children] }));
72
17
  }
@@ -0,0 +1,2 @@
1
+ export { GTMProvider } from './gtm/gtm-provider';
2
+ export { default as BetaMarketingBanner } from './marketing/BetaMarketingBanner';
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.BetaMarketingBanner = exports.GTMProvider = void 0;
7
+ var gtm_provider_1 = require("./gtm/gtm-provider");
8
+ Object.defineProperty(exports, "GTMProvider", { enumerable: true, get: function () { return gtm_provider_1.GTMProvider; } });
9
+ var BetaMarketingBanner_1 = require("./marketing/BetaMarketingBanner");
10
+ Object.defineProperty(exports, "BetaMarketingBanner", { enumerable: true, get: function () { return __importDefault(BetaMarketingBanner_1).default; } });
@@ -0,0 +1,7 @@
1
+ interface BetaMarketingBannerProps {
2
+ variant?: 'full' | 'compact';
3
+ showBetaOffer?: boolean;
4
+ className?: string;
5
+ }
6
+ export default function BetaMarketingBanner({ variant, showBetaOffer, className, }: BetaMarketingBannerProps): import("react/jsx-runtime").JSX.Element;
7
+ export {};
@@ -0,0 +1,140 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.default = BetaMarketingBanner;
7
+ const jsx_runtime_1 = require("react/jsx-runtime");
8
+ const icons_material_1 = require("@mui/icons-material");
9
+ const material_1 = require("@mui/material");
10
+ const react_1 = __importDefault(require("react"));
11
+ const features = [
12
+ {
13
+ icon: (0, jsx_runtime_1.jsx)(icons_material_1.Speed, {}),
14
+ title: 'Fastest AI Voice Chat',
15
+ description: 'Industry-leading response times',
16
+ color: '#2196F3',
17
+ },
18
+ {
19
+ icon: (0, jsx_runtime_1.jsx)(icons_material_1.Psychology, {}),
20
+ title: 'Self-Learning AI Agents',
21
+ description: 'Fine-tune with your data or bring your own LLM',
22
+ color: '#9C27B0',
23
+ },
24
+ {
25
+ icon: (0, jsx_runtime_1.jsx)(icons_material_1.TouchApp, {}),
26
+ title: 'Easiest Setup',
27
+ description: '1-click deployment worldwide',
28
+ color: '#FF9800',
29
+ },
30
+ {
31
+ icon: (0, jsx_runtime_1.jsx)(icons_material_1.Language, {}),
32
+ title: 'Any Language',
33
+ description: 'Human-sounding in 100+ languages',
34
+ color: '#4CAF50',
35
+ },
36
+ {
37
+ icon: (0, jsx_runtime_1.jsx)(icons_material_1.Videocam, {}),
38
+ title: 'Truly Multi-Modal',
39
+ description: 'Voice, Video, and Text channels',
40
+ color: '#F44336',
41
+ },
42
+ {
43
+ icon: (0, jsx_runtime_1.jsx)(icons_material_1.TrendingUp, {}),
44
+ title: 'Infinitely Scalable',
45
+ description: 'Grows with your business needs',
46
+ color: '#795548',
47
+ },
48
+ ];
49
+ function BetaMarketingBanner({ variant = 'full', showBetaOffer = true, className, }) {
50
+ const theme = (0, material_1.useTheme)();
51
+ const handleSubscribeClick = () => {
52
+ window.open('https://biz.fask.ai/billing?price-tier=beta&period=year', '_blank');
53
+ };
54
+ return ((0, jsx_runtime_1.jsx)(material_1.Box, { className: className, sx: {
55
+ background: `linear-gradient(135deg, ${(0, material_1.alpha)(theme.palette.primary.main, 0.1)} 0%, ${(0, material_1.alpha)(theme.palette.secondary.main, 0.05)} 100%)`,
56
+ borderRadius: 3,
57
+ overflow: 'hidden',
58
+ position: 'relative',
59
+ '&::before': {
60
+ content: '""',
61
+ position: 'absolute',
62
+ top: 0,
63
+ left: 0,
64
+ right: 0,
65
+ height: '4px',
66
+ background: `linear-gradient(90deg, ${theme.palette.primary.main}, ${theme.palette.secondary.main})`,
67
+ },
68
+ }, children: (0, jsx_runtime_1.jsxs)(material_1.Container, { maxWidth: "lg", sx: { py: { xs: 4, md: 6 } }, children: [(0, jsx_runtime_1.jsxs)(material_1.Box, { textAlign: "center", sx: { mb: { xs: 4, md: 6 } }, children: [(0, jsx_runtime_1.jsx)(material_1.Typography, { variant: "h3", component: "h2", gutterBottom: true, sx: {
69
+ fontSize: { xs: '2rem', md: '2.5rem' },
70
+ fontWeight: 700,
71
+ background: `linear-gradient(45deg, ${theme.palette.primary.main}, ${theme.palette.secondary.main})`,
72
+ backgroundClip: 'text',
73
+ WebkitBackgroundClip: 'text',
74
+ WebkitTextFillColor: 'transparent',
75
+ mb: 2,
76
+ }, children: "Best-in-Class AI Features" }), (0, jsx_runtime_1.jsx)(material_1.Typography, { variant: "h6", color: "text.secondary", sx: { maxWidth: 600, mx: 'auto', lineHeight: 1.6 }, children: "Experience the future of customer engagement with our cutting-edge AI technology" })] }), (0, jsx_runtime_1.jsx)(material_1.Grid, { container: true, spacing: 3, sx: { mb: showBetaOffer ? 5 : 0 }, children: features.map((feature, index) => ((0, jsx_runtime_1.jsx)(material_1.Grid, { size: { xs: 12, sm: 6, md: 4 }, children: (0, jsx_runtime_1.jsx)(material_1.Card, { elevation: 0, sx: {
77
+ height: '100%',
78
+ background: (0, material_1.alpha)(theme.palette.background.paper, 0.8),
79
+ backdropFilter: 'blur(10px)',
80
+ border: `1px solid ${(0, material_1.alpha)(theme.palette.divider, 0.1)}`,
81
+ transition: 'all 0.3s ease-in-out',
82
+ '&:hover': {
83
+ transform: 'translateY(-4px)',
84
+ boxShadow: `0 8px 32px ${(0, material_1.alpha)(feature.color, 0.2)}`,
85
+ border: `1px solid ${(0, material_1.alpha)(feature.color, 0.3)}`,
86
+ },
87
+ }, children: (0, jsx_runtime_1.jsxs)(material_1.CardContent, { sx: { p: 3, textAlign: 'center' }, children: [(0, jsx_runtime_1.jsx)(material_1.Box, { sx: {
88
+ width: 56,
89
+ height: 56,
90
+ borderRadius: '50%',
91
+ background: `linear-gradient(135deg, ${feature.color}, ${(0, material_1.alpha)(feature.color, 0.7)})`,
92
+ display: 'flex',
93
+ alignItems: 'center',
94
+ justifyContent: 'center',
95
+ mx: 'auto',
96
+ mb: 2,
97
+ color: 'white',
98
+ }, children: react_1.default.cloneElement(feature.icon, { fontSize: 'large' }) }), (0, jsx_runtime_1.jsx)(material_1.Typography, { variant: "h6", component: "h3", gutterBottom: true, sx: { fontWeight: 600, color: 'text.primary' }, children: feature.title }), (0, jsx_runtime_1.jsx)(material_1.Typography, { variant: "body2", color: "text.secondary", sx: { lineHeight: 1.5 }, children: feature.description })] }) }) }, index))) }), showBetaOffer && ((0, jsx_runtime_1.jsx)(material_1.Card, { elevation: 0, sx: {
99
+ background: `linear-gradient(135deg, ${(0, material_1.alpha)(theme.palette.success.main, 0.1)}, ${(0, material_1.alpha)(theme.palette.primary.main, 0.05)})`,
100
+ border: `2px solid ${(0, material_1.alpha)(theme.palette.success.main, 0.2)}`,
101
+ borderRadius: 3,
102
+ overflow: 'hidden',
103
+ position: 'relative',
104
+ }, children: (0, jsx_runtime_1.jsxs)(material_1.CardContent, { sx: { p: { xs: 3, md: 4 }, textAlign: 'center' }, children: [(0, jsx_runtime_1.jsx)(material_1.Stack, { direction: "row", justifyContent: "center", sx: { mb: 2 }, children: (0, jsx_runtime_1.jsx)(material_1.Chip, { label: "LIMITED TIME", size: "small", sx: {
105
+ background: theme.palette.success.main,
106
+ color: 'white',
107
+ fontWeight: 600,
108
+ fontSize: '0.75rem',
109
+ animation: 'pulse 2s infinite',
110
+ '@keyframes pulse': {
111
+ '0%': { opacity: 1 },
112
+ '50%': { opacity: 0.8 },
113
+ '100%': { opacity: 1 },
114
+ },
115
+ } }) }), (0, jsx_runtime_1.jsx)(material_1.Typography, { variant: "h4", component: "h3", gutterBottom: true, sx: {
116
+ fontSize: { xs: '1.75rem', md: '2.25rem' },
117
+ fontWeight: 700,
118
+ color: 'text.primary',
119
+ mb: 1,
120
+ }, children: "\uD83D\uDE80 Beta Launch Special" }), (0, jsx_runtime_1.jsx)(material_1.Typography, { variant: "h5", sx: {
121
+ color: theme.palette.success.main,
122
+ fontWeight: 600,
123
+ mb: 2,
124
+ }, children: "50% OFF First Year" }), (0, jsx_runtime_1.jsx)(material_1.Typography, { variant: "body1", color: "text.secondary", sx: { mb: 3, maxWidth: 500, mx: 'auto', lineHeight: 1.6 }, children: "Join our exclusive Beta program and save 50% on your first year. Limited spots available for early adopters." }), (0, jsx_runtime_1.jsx)(material_1.Button, { variant: "contained", size: "large", onClick: handleSubscribeClick, sx: {
125
+ background: `linear-gradient(45deg, ${theme.palette.primary.main}, ${theme.palette.secondary.main})`,
126
+ color: 'white',
127
+ px: 4,
128
+ py: 1.5,
129
+ fontSize: '1.1rem',
130
+ fontWeight: 600,
131
+ borderRadius: 2,
132
+ boxShadow: `0 4px 20px ${(0, material_1.alpha)(theme.palette.primary.main, 0.4)}`,
133
+ transition: 'all 0.3s ease-in-out',
134
+ '&:hover': {
135
+ transform: 'translateY(-2px)',
136
+ boxShadow: `0 6px 28px ${(0, material_1.alpha)(theme.palette.primary.main, 0.5)}`,
137
+ background: `linear-gradient(45deg, ${theme.palette.primary.dark}, ${theme.palette.secondary.dark})`,
138
+ },
139
+ }, children: "Subscribe Now" }), (0, jsx_runtime_1.jsx)(material_1.Typography, { variant: "caption", display: "block", color: "text.secondary", sx: { mt: 2, opacity: 0.8 }, children: "* Billed annually. Offer valid for limited customers only." })] }) }))] }) }));
140
+ }
package/dist/index.d.ts CHANGED
@@ -1 +1 @@
1
- export { GTMProvider, trackConversion, trackEvent, trackLinkedInConversion, trackLinkedInLead } from './components/gtm/gtm-provider';
1
+ export * from './components';
package/dist/index.js CHANGED
@@ -1 +1,17 @@
1
- export { GTMProvider, trackConversion, trackEvent, trackLinkedInConversion, trackLinkedInLead } from './components/gtm/gtm-provider';
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./components"), exports);
package/package.json CHANGED
@@ -1,43 +1,35 @@
1
1
  {
2
2
  "name": "@faskai/ui-commons",
3
3
  "author": "Fask AI <arko@fask.ai>",
4
- "version": "0.0.0-alpha.01",
5
- "description": "Common UI components and utilities for Fask applications",
4
+ "version": "0.0.0-alpha.11",
5
+ "description": "Common UI components for Fask applications.",
6
6
  "private": false,
7
- "type": "module",
8
7
  "main": "dist/index.js",
9
- "module": "dist/index.esm.js",
10
8
  "types": "dist/index.d.ts",
11
- "browser": "dist/index.esm.js",
12
9
  "sideEffects": false,
13
10
  "files": [
14
11
  "dist"
15
12
  ],
16
- "exports": {
17
- ".": {
18
- "import": "./dist/index.esm.js",
19
- "require": "./dist/index.js",
20
- "types": "./dist/index.d.ts"
21
- }
22
- },
23
13
  "scripts": {
24
- "build": "tsc",
25
- "dev": "tsc --watch",
26
- "clean": "rm -rf dist",
27
- "prepare": "yarn build"
14
+ "build": "tsc"
28
15
  },
29
16
  "peerDependencies": {
30
- "next": "^14.0.0",
31
- "react": "^18.0.0",
32
- "react-dom": "^18.0.0"
17
+ "@emotion/react": ">=11.0.0",
18
+ "@emotion/styled": ">=11.0.0",
19
+ "@mui/icons-material": ">=5.0.0",
20
+ "@mui/material": ">=5.0.0",
21
+ "next": ">=13.0.0",
22
+ "react": ">=18.0.0"
33
23
  },
34
24
  "devDependencies": {
35
25
  "@types/react": "^18.0.0",
36
- "@types/react-dom": "^18.0.0",
37
- "@types/node": "^20.0.0",
38
- "typescript": "^5.0.0",
39
- "react": "^18.0.0",
40
- "react-dom": "^18.0.0"
26
+ "next": "^14.0.0",
27
+ "typescript": "^5.0.0"
41
28
  },
42
- "packageManager": "yarn@1.22.22"
43
- }
29
+ "dependencies": {
30
+ "@emotion/react": "^11.14.0",
31
+ "@emotion/styled": "^11.14.0",
32
+ "@mui/icons-material": "^7.1.2",
33
+ "@mui/material": "^7.1.2"
34
+ }
35
+ }