@unisphere/nx 3.14.0 → 3.16.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.
Files changed (112) hide show
  1. package/dist/generators/add-documentation/USAGE.md +64 -0
  2. package/dist/generators/add-documentation/add-documentation.d.ts +1 -1
  3. package/dist/generators/add-documentation/add-documentation.d.ts.map +1 -1
  4. package/dist/generators/add-documentation/add-documentation.js +80 -41
  5. package/dist/generators/add-documentation/schema.d.ts +4 -1
  6. package/dist/generators/add-documentation/schema.json +19 -10
  7. package/dist/generators/add-documentation/templates/babel.config.js +3 -0
  8. package/dist/generators/add-documentation/templates/docs/api/overview.md +8 -0
  9. package/dist/generators/add-documentation/templates/docs/changelog/overview.md +8 -0
  10. package/dist/generators/add-documentation/templates/docs/getting-started/overview.md +8 -0
  11. package/dist/generators/add-documentation/templates/docusaurus.config.ts.template +116 -0
  12. package/dist/generators/add-documentation/templates/package.json.template +57 -0
  13. package/dist/generators/add-documentation/templates/postcss.config.js +6 -0
  14. package/dist/generators/add-documentation/templates/sidebars.ts +9 -0
  15. package/dist/generators/add-documentation/templates/src/components/demo-placeholder-card.tsx +33 -0
  16. package/dist/generators/add-documentation/templates/src/components/guides/experiences/genie/integrate-genie-guide.tsx +149 -0
  17. package/dist/generators/add-documentation/templates/src/components/guides/experiences/notifications/notifications-react-guide.tsx +211 -0
  18. package/dist/generators/add-documentation/templates/src/components/homepage-features/index.tsx +239 -0
  19. package/dist/generators/add-documentation/templates/src/components/homepage-features/styles.module.css +87 -0
  20. package/dist/generators/add-documentation/templates/src/components/homepage-modules/index.tsx +76 -0
  21. package/dist/generators/add-documentation/templates/src/components/homepage-modules/styles.module.css +120 -0
  22. package/dist/generators/add-documentation/templates/src/components/homepage-start-now/index.tsx +22 -0
  23. package/dist/generators/add-documentation/templates/src/components/homepage-start-now/styles.module.css +38 -0
  24. package/dist/generators/add-documentation/templates/src/components/interactive-code-panel.tsx +258 -0
  25. package/dist/generators/add-documentation/templates/src/components/introductions/developer-toolbox-experience.tsx +84 -0
  26. package/dist/generators/add-documentation/templates/src/components/introductions/hello-world-experience.tsx +130 -0
  27. package/dist/generators/add-documentation/templates/src/components/introductions/notificaitons-experience.tsx +635 -0
  28. package/dist/generators/add-documentation/templates/src/components/introductions/reactions-experience.tsx +117 -0
  29. package/dist/generators/add-documentation/templates/src/components/ui-shared/introduction-card.tsx +117 -0
  30. package/dist/generators/add-documentation/templates/src/components/ui-shared/playground-card.tsx +67 -0
  31. package/dist/generators/add-documentation/templates/src/components/ui-shared/use-color-mode.ts +20 -0
  32. package/dist/generators/add-documentation/templates/src/components/ui-shared/utils.ts +8 -0
  33. package/dist/generators/add-documentation/templates/src/css/custom.css +487 -0
  34. package/dist/generators/add-documentation/templates/src/css/hero.module.css +190 -0
  35. package/dist/generators/add-documentation/templates/src/pages/index.module.css +59 -0
  36. package/dist/generators/add-documentation/templates/src/pages/index.tsx.template +191 -0
  37. package/dist/generators/add-documentation/templates/src/theme/Navbar/Content/index.tsx +145 -0
  38. package/dist/generators/add-documentation/templates/src/theme/Navbar/Content/styles.module.css +132 -0
  39. package/dist/generators/add-documentation/templates/src/theme/Navbar/MobileSidebar/Header/index.tsx +45 -0
  40. package/dist/generators/add-documentation/templates/static/.nojekyll +0 -0
  41. package/dist/generators/add-documentation/templates/static/docs/overview/unisphere-for-dummies-1.png +0 -0
  42. package/dist/generators/add-documentation/templates/static/docs/overview/unisphere-for-dummies-2.png +0 -0
  43. package/dist/generators/add-documentation/templates/static/docs/overview/unisphere-for-dummies-3.png +0 -0
  44. package/dist/generators/add-documentation/templates/static/docs/overview/unisphere-for-dummies-4.png +0 -0
  45. package/dist/generators/add-documentation/templates/static/homepage/divider.svg +5 -0
  46. package/dist/generators/add-documentation/templates/static/homepage/icons/Architecture.svg +4 -0
  47. package/dist/generators/add-documentation/templates/static/homepage/icons/Cost.svg +4 -0
  48. package/dist/generators/add-documentation/templates/static/homepage/icons/ExternalLink.svg +3 -0
  49. package/dist/generators/add-documentation/templates/static/homepage/icons/Infra.svg +8 -0
  50. package/dist/generators/add-documentation/templates/static/homepage/icons/Redundancies.svg +6 -0
  51. package/dist/generators/add-documentation/templates/static/homepage/icons/Speed.svg +6 -0
  52. package/dist/generators/add-documentation/templates/static/homepage/icons/Standards.svg +4 -0
  53. package/dist/generators/add-documentation/templates/static/homepage/icons/Unified.svg +12 -0
  54. package/dist/generators/add-documentation/templates/static/homepage/services/custo.jpg +0 -0
  55. package/dist/generators/add-documentation/templates/static/homepage/services/flame.jpg +0 -0
  56. package/dist/generators/add-documentation/templates/static/homepage/services/keepr.jpg +0 -0
  57. package/dist/generators/add-documentation/templates/static/homepage/services/loggi.jpg +0 -0
  58. package/dist/generators/add-documentation/templates/static/homepage/services/palleto.jpg +0 -0
  59. package/dist/generators/add-documentation/templates/static/homepage/services/publi.jpg +0 -0
  60. package/dist/generators/add-documentation/templates/static/homepage/services/tinker.jpg +0 -0
  61. package/dist/generators/add-documentation/templates/static/img/favicon.ico +0 -0
  62. package/dist/generators/add-documentation/templates/static/img/logo.svg +6 -0
  63. package/dist/generators/add-documentation/templates/static/img/logo_big.svg +12 -0
  64. package/dist/generators/add-documentation/templates/static/img/logo_big_dark.svg +12 -0
  65. package/dist/generators/add-documentation/templates/static/img/logo_dark.svg +6 -0
  66. package/dist/generators/add-documentation/templates/static/img/unisphere-social-card.jpg +0 -0
  67. package/dist/generators/add-documentation/templates/static/llm/INTEGRATE.md +497 -0
  68. package/dist/generators/add-documentation/templates/static/robots.txt +5 -0
  69. package/dist/generators/add-documentation/templates/static/team/amirc.jpeg +0 -0
  70. package/dist/generators/add-documentation/templates/static/team/erans.jpeg +0 -0
  71. package/dist/generators/add-documentation/templates/static/team/hadass.jpeg +0 -0
  72. package/dist/generators/add-documentation/templates/static/team/hillelc.jpeg +0 -0
  73. package/dist/generators/add-documentation/templates/static/team/idoz.jpeg +0 -0
  74. package/dist/generators/add-documentation/templates/static/team/lianb.jpeg +0 -0
  75. package/dist/generators/add-documentation/templates/static/team/nirb.jpeg +0 -0
  76. package/dist/generators/add-documentation/templates/static/team/nivs.jpeg +0 -0
  77. package/dist/generators/add-documentation/templates/static/team/omric.jpeg +0 -0
  78. package/dist/generators/add-documentation/templates/static/team/roeed.jpeg +0 -0
  79. package/dist/generators/add-documentation/templates/static/team/sivana.jpeg +0 -0
  80. package/dist/generators/add-documentation/templates/static/team/stask.png +0 -0
  81. package/dist/generators/add-documentation/templates/static/team/tanyal.jpeg +0 -0
  82. package/dist/generators/add-documentation/templates/static/team/tomere.jpeg +0 -0
  83. package/dist/generators/add-documentation/templates/static/team/tornikem.jpeg +0 -0
  84. package/dist/generators/add-documentation/templates/static/team/yairn.jpeg +0 -0
  85. package/dist/generators/add-documentation/templates/tailwind.config.js +30 -0
  86. package/dist/generators/add-documentation/templates/tsconfig.json +7 -0
  87. package/dist/generators/add-package/add-package.d.ts.map +1 -1
  88. package/dist/generators/add-package/add-package.js +9 -4
  89. package/dist/generators/add-package/schema.d.ts +1 -1
  90. package/dist/generators/add-package/schema.json +18 -10
  91. package/dist/generators/rename-package/rename-package.d.ts.map +1 -1
  92. package/dist/generators/rename-package/rename-package.js +12 -0
  93. package/dist/generators/utils.d.ts +1 -1
  94. package/dist/generators/utils.d.ts.map +1 -1
  95. package/dist/generators/utils.js +8 -10
  96. package/dist/migrations/3-15-0/add-experience-documentation.d.ts +10 -0
  97. package/dist/migrations/3-15-0/add-experience-documentation.d.ts.map +1 -0
  98. package/dist/migrations/3-15-0/add-experience-documentation.js +20 -0
  99. package/dist/migrations/3-16-0/remove-rollup-patch.d.ts +10 -0
  100. package/dist/migrations/3-16-0/remove-rollup-patch.d.ts.map +1 -0
  101. package/dist/migrations/3-16-0/remove-rollup-patch.js +32 -0
  102. package/dist/migrations/3-6-3/remove-rollup-patch.d.ts +1 -1
  103. package/dist/migrations/3-6-3/remove-rollup-patch.d.ts.map +1 -1
  104. package/dist/migrations/3-6-3/remove-rollup-patch.js +16 -6
  105. package/dist/migrations/3-7-0/update-gitignore-claude-exclusions.d.ts +9 -0
  106. package/dist/migrations/3-7-0/update-gitignore-claude-exclusions.d.ts.map +1 -0
  107. package/dist/migrations/3-7-0/update-gitignore-claude-exclusions.js +68 -0
  108. package/dist/shared.d.ts +4 -2
  109. package/dist/shared.d.ts.map +1 -1
  110. package/dist/shared.js +3 -1
  111. package/migrations.json +35 -0
  112. package/package.json +1 -1
@@ -0,0 +1,149 @@
1
+ import React from 'react';
2
+ import { Tab, InteractiveCodePanel } from '../../../interactive-code-panel';
3
+
4
+ export const IntegrateGenieGuide: React.FC = () => {
5
+ const tabs: Tab[] = [
6
+ {
7
+ id: 'verify-setup',
8
+ title: '1. Verify Setup',
9
+ icon: '✅',
10
+ language: 'bash',
11
+ content: ``,
12
+ description: `Ensure your Unisphere workspace is properly set up before integrating Genie.`
13
+ },
14
+ {
15
+ id: 'install-genie',
16
+ title: '2. Install Genie Types',
17
+ icon: '📦',
18
+ language: 'bash',
19
+ content: `npm i @unisphere/genie-core`,
20
+ description: `Install the Genie core package to access Genie functionality.`
21
+ },
22
+ {
23
+ id: 'configure-genie',
24
+ title: '3. Load Genie',
25
+ icon: '⚙️',
26
+ language: 'typescript',
27
+ content: `import { GenieSettings } from '@unisphere/genie-core';
28
+
29
+ // Extract settings to a const using the Genie type
30
+ const genieSettings: GenieSettings = {
31
+ getSourceUrl: ({ entryId, startTime }) => {
32
+ return ""; // return your entry URL
33
+ },
34
+ kalturaServerURI: "https://www.kaltura.com",
35
+ ks: "",
36
+ partnerId: "",
37
+ uiconfId: "",
38
+ };
39
+
40
+ // Genie experience configuration
41
+ const genieExperience = {
42
+ widgetName: "unisphere.widget.genie",
43
+ runtimeName: "chat",
44
+ settings: genieSettings,
45
+ visuals: [
46
+ {
47
+ type: "page",
48
+ target: "class-genie-container",
49
+ settings: {},
50
+ },
51
+ ],
52
+ };`,
53
+ description: `The settings are extracted to a const using the GenieSettings type for better type safety. Copy it to your workspace configuration.`
54
+ },
55
+ {
56
+ id: 'render-genie',
57
+ title: '4. Render Genie',
58
+ icon: '🚀',
59
+ language: 'html',
60
+ content: `
61
+ <style>
62
+ :root {
63
+ --host-header-height: 4rem;
64
+ }
65
+
66
+ body {
67
+ margin: 0;
68
+ }
69
+
70
+ .host-root-container {
71
+ width: 100vw;
72
+ height: calc(100vh - var(--host-header-height));
73
+ overflow-x: hidden;
74
+ overflow-y: auto;
75
+ padding-top: var(--host-header-height);
76
+ }
77
+
78
+ .host-root-header {
79
+ z-index: 10;
80
+ position: fixed;
81
+ top: 0;
82
+ left: 0;
83
+ height: var(--host-header-height);
84
+ width: 100%;
85
+ background: navy;
86
+ color: white;
87
+ display: flex;
88
+ align-items: center;
89
+ padding: 0 2rem;
90
+ }
91
+
92
+ .host-root-content {
93
+ width: 100%;
94
+ height: 100%;
95
+ display: flex;
96
+ justify-content: center;
97
+ align-items: center;
98
+ }
99
+
100
+ #class-genie-container {
101
+ display: flex;
102
+ width: 100%;
103
+ height: 100%;
104
+ min-height: calc(100vh - var(--host-header-height));
105
+ }
106
+ </style>
107
+
108
+
109
+ <body>
110
+ <div class="host-root-container">
111
+ <header class="host-root-header">Genie Expo</header>
112
+ <main class="host-root-content">
113
+ <div id="class-genie-container"></div>
114
+ </main>
115
+ </div>
116
+ </body>
117
+ `,
118
+ description: `Copy the HTML code to your application. Make sure you style as shown above`
119
+ },
120
+ ];
121
+
122
+ return (
123
+ <>
124
+ <style>{`
125
+ @media (max-width: 768px) {
126
+ .tab-navigation {
127
+ flex-direction: column !important;
128
+ }
129
+ .tab-navigation button {
130
+ flex: none !important;
131
+ border-bottom: 1px solid var(--ifm-color-emphasis-300) !important;
132
+ border-right: none !important;
133
+ }
134
+ .tab-navigation button:last-child {
135
+ border-bottom: none !important;
136
+ }
137
+ }
138
+ `}</style>
139
+ <InteractiveCodePanel
140
+ title="🧞 Integrate Genie Experience"
141
+ description="Complete guide for integrating Genie AI assistant into your Unisphere application"
142
+ tabs={tabs}
143
+ defaultTab="verify-setup"
144
+ defaultExpanded={false}
145
+ showCopyButton={true}
146
+ />
147
+ </>
148
+ );
149
+ };
@@ -0,0 +1,211 @@
1
+ import React from 'react';
2
+ import { Tab, InteractiveCodePanel } from '../../../interactive-code-panel';
3
+
4
+ export const NotificationsReactGuide: React.FC = () => {
5
+ const tabs: Tab[] = [
6
+ {
7
+ id: 'verify-setup',
8
+ title: '1. Verify Setup',
9
+ icon: '✅',
10
+ language: 'bash',
11
+ content: ``,
12
+ description: `Ensure your Unisphere workspace is properly set up before integrating notifications.`
13
+ },
14
+ {
15
+ id: 'install-runtime',
16
+ title: '2. Install Runtime',
17
+ icon: '📦',
18
+ language: 'bash',
19
+ content: `npm install @unisphere/runtime-react`,
20
+ description: `Install the React-optimized Unisphere runtime package for host applications.`
21
+ },
22
+ {
23
+ id: 'configure-provider',
24
+ title: '3. Configure Provider',
25
+ icon: '⚙️',
26
+ language: 'tsx',
27
+ content: `import React from 'react';
28
+ import { UnisphereProvider } from '@unisphere/runtime-react';
29
+
30
+ function HostAppComponent() {
31
+ const unisphereConfiguration = React.useMemo(() => ({
32
+ serverUrl: process.env.REACT_APP_UNISPHERE_SERVER_URL,
33
+ runtimes: [{
34
+ widgetName: 'unisphere.widget.notifications',
35
+ runtimeName: 'notifications',
36
+ settings: {},
37
+ runtimeArea: { target: 'body' }
38
+ }]
39
+ }), []);
40
+
41
+ return (
42
+ <UnisphereProvider initialConfiguration={unisphereConfiguration}>
43
+ <MyApplication />
44
+ </UnisphereProvider>
45
+ );
46
+ }
47
+
48
+ export default HostAppComponent;`,
49
+ description: `Configure the UnisphereProvider with notifications runtime. Replace serverUrl with your actual Unisphere server URL.`
50
+ },
51
+ {
52
+ id: 'install-notifications',
53
+ title: '4. Install Notifications',
54
+ icon: '🔔',
55
+ language: 'bash',
56
+ content: `npm install @unisphere/notifications-runtime-react @unisphere/notifications-core`,
57
+ description: `Install the React notifications runtime and core packages.`
58
+ },
59
+ {
60
+ id: 'setup-notifications-provider',
61
+ title: '5. Setup Provider',
62
+ icon: '🔧',
63
+ language: 'tsx',
64
+ content: `import React from 'react';
65
+ import { UnisphereProvider } from '@unisphere/runtime-react';
66
+ import { UnisphereNotificationsProvider } from '@unisphere/notifications-runtime-react';
67
+
68
+ function App() {
69
+ const unisphereConfiguration = React.useMemo(() => ({
70
+ serverUrl: process.env.REACT_APP_UNISPHERE_SERVER_URL,
71
+ runtimes: [{
72
+ widgetName: 'unisphere.widget.notifications',
73
+ runtimeName: 'notifications',
74
+ settings: {},
75
+ runtimeArea: { target: 'body' }
76
+ }]
77
+ }), []);
78
+
79
+ return (
80
+ <UnisphereProvider initialConfiguration={unisphereConfiguration}>
81
+ <UnisphereNotificationsProvider>
82
+ <MyApplication />
83
+ </UnisphereNotificationsProvider>
84
+ </UnisphereProvider>
85
+ );
86
+ }
87
+
88
+ export default App;`,
89
+ description: `Wrap your app with both UnisphereProvider and UnisphereNotificationsProvider for complete setup.`
90
+ },
91
+ {
92
+ id: 'show-notifications',
93
+ title: '6. Show Notifications',
94
+ icon: '✨',
95
+ language: 'tsx',
96
+ content: `import React, { useContext } from 'react';
97
+ import { UnisphereNotificationsContext, NotificationTypes } from '@unisphere/notifications-runtime-react';
98
+
99
+ function MyComponent() {
100
+ const { addNotification } = useContext(UnisphereNotificationsContext);
101
+
102
+ const showNotification = () => {
103
+ addNotification({
104
+ type: NotificationTypes.Toast,
105
+ content: { message: "Hello everyone!" },
106
+ author: {
107
+ name: "Brian Dennis",
108
+ position: "Director of Brand, Kaltura",
109
+ url: "https://avatar.com",
110
+ },
111
+ buttons: [{
112
+ id: 'btn-1',
113
+ type: 'link',
114
+ label: 'Read Post',
115
+ url: 'www.example.com'
116
+ }]
117
+ });
118
+ };
119
+
120
+ return (
121
+ <button onClick={showNotification}>
122
+ Show Notification
123
+ </button>
124
+ );
125
+ }`,
126
+ description: `Use the notifications context to display toast notifications with author information and action buttons.`
127
+ },
128
+ {
129
+ id: 'custom-hook',
130
+ title: '7. Custom Hook',
131
+ icon: '🎣',
132
+ language: 'tsx',
133
+ content: `import { useContext, useCallback } from 'react';
134
+ import { UnisphereNotificationsContext, NotificationTypes } from '@unisphere/notifications-runtime-react';
135
+
136
+ // Custom hook for common notification patterns
137
+ export const useNotifications = () => {
138
+ const { addNotification } = useContext(UnisphereNotificationsContext);
139
+
140
+ const showSuccess = useCallback((message: string, options?: any) => {
141
+ addNotification({
142
+ type: NotificationTypes.Toast,
143
+ content: { message, title: "Success" },
144
+ author: { name: "System", position: "Success Handler" },
145
+ duration: 3000,
146
+ priority: 'normal',
147
+ ...options
148
+ });
149
+ }, [addNotification]);
150
+
151
+ const showError = useCallback((message: string, options?: any) => {
152
+ addNotification({
153
+ type: NotificationTypes.Toast,
154
+ content: { message, title: "Error" },
155
+ author: { name: "System", position: "Error Handler" },
156
+ persistent: true,
157
+ priority: 'urgent',
158
+ ...options
159
+ });
160
+ }, [addNotification]);
161
+
162
+ return { showSuccess, showError, addNotification };
163
+ };
164
+
165
+ // Usage in component
166
+ function MyComponent() {
167
+ const { showSuccess, showError } = useNotifications();
168
+
169
+ const handleSave = async () => {
170
+ try {
171
+ await saveData();
172
+ showSuccess("Data saved successfully!");
173
+ } catch (error) {
174
+ showError("Failed to save data. Please try again.");
175
+ }
176
+ };
177
+
178
+ return <button onClick={handleSave}>Save Data</button>;
179
+ }`,
180
+ description: `Create reusable custom hooks for common notification patterns with success, error, and info helpers.`
181
+ }
182
+ ];
183
+
184
+ return (
185
+ <>
186
+ <style>{`
187
+ @media (max-width: 768px) {
188
+ .tab-navigation {
189
+ flex-direction: column !important;
190
+ }
191
+ .tab-navigation button {
192
+ flex: none !important;
193
+ border-bottom: 1px solid var(--ifm-color-emphasis-300) !important;
194
+ border-right: none !important;
195
+ }
196
+ .tab-navigation button:last-child {
197
+ border-bottom: none !important;
198
+ }
199
+ }
200
+ `}</style>
201
+ <InteractiveCodePanel
202
+ title="Integrate Notifications Experience - React"
203
+ description="Complete guide for integrating Unisphere notifications into your React application"
204
+ tabs={tabs}
205
+ defaultTab="verify-setup"
206
+ defaultExpanded={false}
207
+ showCopyButton={true}
208
+ />
209
+ </>
210
+ );
211
+ };
@@ -0,0 +1,239 @@
1
+ import clsx from 'clsx';
2
+ import Heading from '@theme/Heading';
3
+ import styles from './styles.module.css';
4
+
5
+ type FeatureItem = {
6
+ title: string;
7
+ target: string;
8
+ description: JSX.Element;
9
+ Svg: React.ComponentType<React.ComponentProps<'svg'>>;
10
+ };
11
+
12
+ const FeatureList: FeatureItem[] = [
13
+ {
14
+ title: 'Robust Documentation',
15
+ target: 'Everyone',
16
+ Svg: require('@site/static/homepage/icons/Infra.svg').default,
17
+ description: (
18
+ <>
19
+ Access detailed guides, tutorials, and examples to get started quickly,
20
+ whether you're new to web development or an experienced developer.
21
+ </>
22
+ ),
23
+ },
24
+ {
25
+ title: 'Compliance and Standards',
26
+ target: 'Product managers',
27
+ Svg: require('@site/static/homepage/icons/Standards.svg').default,
28
+ description: (
29
+ <>
30
+ Ensure all modules adhere to essential standards and regulations,
31
+ including accessibility, terms of conditions, theming, language support,
32
+ and recovery handling, providing a robust and compliant platform
33
+ experience.
34
+ </>
35
+ ),
36
+ },
37
+ {
38
+ title: 'Reusable Experiences',
39
+ target: 'Product managers & developers',
40
+ Svg: require('@site/static/homepage/icons/Infra.svg').default,
41
+ description: (
42
+ <>
43
+ Benefit from highly reusable components and modules designed to ensure
44
+ consistency and reduce development time.
45
+ </>
46
+ ),
47
+ },
48
+ {
49
+ title: 'Kaltura Player Integration',
50
+ target: 'Product managers',
51
+ Svg: require('@site/static/homepage/icons/Architecture.svg').default,
52
+ description: (
53
+ <>
54
+ Leverage deep integration with the Kaltura player, allowing seamless
55
+ synchronization between the player’s current time and Unisphere modules.
56
+ This enables displaying visual elements on the player area, player seek
57
+ bar, and content modules based on the current playback time.
58
+ </>
59
+ ),
60
+ },
61
+ {
62
+ title: 'Dynamic Workspaces',
63
+ target: 'Product managers & professional services',
64
+ Svg: require('@site/static/homepage/icons/Redundancies.svg').default,
65
+ description: (
66
+ <>
67
+ Effortlessly create and configure an Unisphere workspace at runtime in
68
+ the application, allowing you to adapt to changes and updates without
69
+ significant code modifications.
70
+ </>
71
+ ),
72
+ },
73
+ {
74
+ title: 'Enhanced Developer Experience',
75
+ target: 'Developers',
76
+ Svg: require('@site/static/homepage/icons/Unified.svg').default,
77
+ description: (
78
+ <>
79
+ Take advantage of a robust suite of tools tailored to streamline your
80
+ development workflow. This includes generators, boilerplates, CLI,
81
+ playground applications, Storybook integration, and runtime features
82
+ like theming and translation infrastructure.
83
+ </>
84
+ ),
85
+ },
86
+ {
87
+ title: 'Advanced Customization',
88
+ target: 'Developers',
89
+ Svg: require('@site/static/homepage/icons/Architecture.svg').default,
90
+ description: (
91
+ <>
92
+ For more advanced needs, directly consume components and modules from
93
+ NPM or Yarn. Customize these elements to perfectly suit your specific
94
+ requirements.
95
+ </>
96
+ ),
97
+ },
98
+ {
99
+ title: 'Version Control',
100
+ target: 'Developers',
101
+ Svg: require('@site/static/homepage/icons/Architecture.svg').default,
102
+ description: (
103
+ <>
104
+ Grow confidently with versioned components and modules that effectively
105
+ manage dependencies and ensure backward compatibility.
106
+ </>
107
+ ),
108
+ },
109
+ {
110
+ title: 'Dynamic Workspaces',
111
+ target: 'Professional services',
112
+ Svg: require('@site/static/homepage/icons/Infra.svg').default,
113
+ description: (
114
+ <>
115
+ Effortlessly create and configure an Unisphere workspace at runtime in
116
+ the application, allowing you to adapt to changes and updates without
117
+ significant code modifications.
118
+ </>
119
+ ),
120
+ },
121
+ {
122
+ title: 'Streamlined Delivery',
123
+ target: 'Professional services',
124
+ Svg: require('@site/static/homepage/icons/Speed.svg').default,
125
+ description: (
126
+ <>
127
+ Leverage our platform to accelerate project delivery, minimize risks,
128
+ and ensure successful implementations.
129
+ </>
130
+ ),
131
+ },
132
+ {
133
+ title: 'Enhanced Client Value',
134
+ target: 'Professional services',
135
+ Svg: require('@site/static/homepage/icons/Cost.svg').default,
136
+ description: (
137
+ <>
138
+ Deliver exceptional value to your clients by creating tailored,
139
+ innovative solutions that exceed their expectations.
140
+ </>
141
+ ),
142
+ },
143
+ ];
144
+
145
+ function Feature({ title, target, Svg, description }: FeatureItem) {
146
+ return (
147
+ <div className="group relative bg-white dark:bg-gray-800 rounded-2xl p-8 shadow-sm hover:shadow-xl border border-gray-100 dark:border-gray-700 transition-all duration-300 hover:-translate-y-1">
148
+ {/* Gradient background on hover */}
149
+ <div className="absolute inset-0 bg-gradient-to-br from-blue-50/50 to-purple-100/50 dark:from-blue-900/20 dark:to-purple-800/20 rounded-2xl opacity-0 group-hover:opacity-100 transition-opacity duration-300"></div>
150
+
151
+ <div className="relative z-10">
152
+ {/* Icon with modern styling */}
153
+ <div className="w-16 h-16 mb-6 bg-gradient-to-br from-blue-500 to-purple-400 rounded-xl flex items-center justify-center shadow-lg group-hover:shadow-xl transition-shadow duration-300">
154
+ <Svg className="w-8 h-8 text-white" role="img" />
155
+ </div>
156
+
157
+ {/* Content */}
158
+ <div className="space-y-4">
159
+ <div>
160
+ <Heading as="h3" className="text-xl font-bold text-gray-900 dark:text-white mb-2 group-hover:text-blue-600 dark:group-hover:text-blue-400 transition-colors duration-200">
161
+ {title}
162
+ </Heading>
163
+ <div className="inline-flex items-center px-3 py-1 bg-blue-50 dark:bg-blue-900/30 text-blue-700 dark:text-blue-300 text-sm font-medium rounded-full">
164
+ <svg className="w-4 h-4 mr-1" fill="none" stroke="currentColor" viewBox="0 0 24 24">
165
+ <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M4.318 6.318a4.5 4.5 0 000 6.364L12 20.364l7.682-7.682a4.5 4.5 0 00-6.364-6.364L12 7.636l-1.318-1.318a4.5 4.5 0 00-6.364 0z" />
166
+ </svg>
167
+ {target} love this
168
+ </div>
169
+ </div>
170
+
171
+ <div className="text-gray-600 dark:text-gray-300 leading-relaxed">
172
+ {description}
173
+ </div>
174
+ </div>
175
+ </div>
176
+ </div>
177
+ );
178
+ }
179
+
180
+ export default function HomepageFeatures(): JSX.Element {
181
+ return (
182
+ <section className="py-20 px-4 max-w-7xl mx-auto">
183
+ {/* Modern section header */}
184
+ <div className="text-center mb-16">
185
+ <Heading as="h2" className="text-4xl md:text-5xl font-bold text-gray-900 dark:text-white mb-4">
186
+ <span className="text-transparent bg-clip-text bg-gradient-to-r from-blue-600 to-purple-400 dark:from-blue-400 dark:to-purple-300">
187
+ The Unisphere
188
+ </span>
189
+ {' '}
190
+ <span className="text-transparent bg-clip-text bg-gradient-to-r from-purple-400 to-pink-400 dark:from-purple-300 dark:to-pink-300">
191
+ Advantage
192
+ </span>
193
+ </Heading>
194
+ <p className="text-xl text-gray-600 dark:text-gray-300 max-w-3xl mx-auto leading-relaxed">
195
+ Discover the powerful features that make Unisphere the perfect choice for modern development teams
196
+ </p>
197
+ </div>
198
+
199
+ {/* Features grid with modern responsive design */}
200
+ <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8">
201
+ {FeatureList.map((props, idx) => (
202
+ <Feature key={idx} {...props} />
203
+ ))}
204
+ </div>
205
+
206
+ {/* Call-to-action section */}
207
+ <div className="mt-16 text-center">
208
+ <div className="bg-gradient-to-r from-blue-50 to-purple-100 dark:from-gray-800 dark:to-gray-700 rounded-2xl p-8">
209
+ <h3 className="text-2xl font-bold text-gray-900 dark:text-white mb-4">
210
+ Ready to get started?
211
+ </h3>
212
+ <p className="text-gray-600 dark:text-gray-300 mb-6 max-w-2xl mx-auto">
213
+ Join thousands of developers who are already building amazing applications with Unisphere
214
+ </p>
215
+ <div className="flex flex-col sm:flex-row gap-4 justify-center">
216
+ <a
217
+ href="/docs/documentation/overview"
218
+ className="inline-flex items-center px-6 py-3 bg-gradient-to-r from-blue-600 to-blue-700 hover:from-blue-700 hover:to-blue-800 text-white font-semibold rounded-lg shadow-md hover:shadow-lg transition-all duration-200 transform hover:-translate-y-0.5"
219
+ >
220
+ <svg className="w-5 h-5 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24">
221
+ <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M13 10V3L4 14h7v7l9-11h-7z" />
222
+ </svg>
223
+ Get Started
224
+ </a>
225
+ <a
226
+ href="/docs/documentation/overview"
227
+ className="inline-flex items-center px-6 py-3 bg-white dark:bg-gray-600 text-gray-700 dark:text-gray-200 font-semibold rounded-lg border border-gray-200 dark:border-gray-500 hover:border-gray-300 dark:hover:border-gray-400 shadow-md hover:shadow-lg transition-all duration-200 transform hover:-translate-y-0.5"
228
+ >
229
+ <svg className="w-5 h-5 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24">
230
+ <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z" />
231
+ </svg>
232
+ Learn About Unisphere
233
+ </a>
234
+ </div>
235
+ </div>
236
+ </div>
237
+ </section>
238
+ );
239
+ }
@@ -0,0 +1,87 @@
1
+ .features {
2
+ display: flex;
3
+ align-items: center;
4
+ flex-direction: column;
5
+ gap: 2.5rem;
6
+ padding: 2rem 0;
7
+ width: 100%;
8
+ max-width: 64rem;
9
+ margin: 0 auto;
10
+ }
11
+
12
+ .featuresContainer {
13
+ display: grid;
14
+ grid-template-columns: repeat(3, 1fr);
15
+ gap: 1rem;
16
+ }
17
+
18
+ @media screen and (max-width: 1023px) {
19
+ .featuresContainer {
20
+ grid-template-columns: repeat(2, 1fr);
21
+ }
22
+ }
23
+
24
+
25
+ @media screen and (max-width: 768px) {
26
+ .featuresContainer {
27
+ grid-template-columns: repeat(1, 1fr);
28
+ }
29
+ }
30
+
31
+
32
+ .featuresContainer :last-child:nth-last-child(1):nth-child(3n + 1) {
33
+ grid-column: 2;
34
+ }
35
+
36
+ .featureText {
37
+ font-size: 1.125rem;
38
+ line-height: 1.35rem;
39
+ font-weight: 500;
40
+ }
41
+
42
+ .featureCard {
43
+ gap: 1.5rem;
44
+ padding: 1.5rem;
45
+ border: thin solid var(--uc-border-color);
46
+ box-shadow: none;
47
+ }
48
+
49
+ .featureHeader, .featureBody {
50
+ padding: 0;
51
+ }
52
+
53
+ .featureTarget {
54
+ color: #888888;
55
+ font-style: italic;
56
+ }
57
+
58
+ .featureTitle {
59
+ font-size: 1.125rem;
60
+ line-height: 1.35rem;
61
+ font-weight: 700;
62
+ margin-bottom: 0.75rem;
63
+ }
64
+
65
+ .featureIcon {
66
+ width: 5.25rem;
67
+ height: 5.25rem;
68
+ }
69
+
70
+ .heading {
71
+ font-size: 3.5rem;
72
+ font-weight: 500;
73
+ font-style: italic;
74
+ line-height: 4.375rem;
75
+ }
76
+
77
+ @media screen and (max-width: 489px) {
78
+ .heading {
79
+ font-size: 2.5rem;
80
+ }
81
+ }
82
+
83
+ @media screen and (max-width: 369px) {
84
+ .heading {
85
+ font-size: 1.5rem;
86
+ }
87
+ }