@equinor/fusion-framework-dev-portal 4.0.4 → 5.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,101 @@
1
1
  # @equinor/fusion-framework-dev-portal
2
2
 
3
+ ## 5.0.0
4
+
5
+ ### Major Changes
6
+
7
+ - abffa53: Major version bump for Fusion Framework React 19 release.
8
+
9
+ All packages are bumped to the next major version as part of the React 19 upgrade. This release drops support for React versions below 18 and includes breaking changes across the framework.
10
+
11
+ **Breaking changes:**
12
+ - Peer dependencies now require React 18 or 19 (`^18.0.0 || ^19.0.0`)
13
+ - React Router upgraded from v6 to v7
14
+ - Navigation module refactored with new history API
15
+ - `renderComponent` and `renderApp` now use `createRoot` API
16
+
17
+ **Migration:**
18
+ - Update your React version to 18.0.0 or higher before upgrading
19
+ - Replace `NavigationProvider.createRouter()` with `@equinor/fusion-framework-react-router`
20
+ - See individual package changelogs for package-specific migration steps
21
+
22
+ - abffa53: Upgrade to React 19 and remove support for React versions lower than 18.
23
+
24
+ **Breaking changes:**
25
+ - Peer dependencies now require React 18 or 19 (`^18.0.0 || ^19.0.0`)
26
+ - React 16 and 17 are no longer supported
27
+ - Dev dependencies upgraded to React 19.2.1 and @types/react 19.2.7
28
+
29
+ **Migration:**
30
+ - Update your React version to 18.0.0 or higher before upgrading these packages
31
+ - If using React 16 or 17, upgrade to React 18 or 19 first
32
+
33
+ Closes https://github.com/equinor/fusion-framework/issues/3504
34
+
35
+ ### Minor Changes
36
+
37
+ - abffa53: Update EDS (Equinor Design System) packages to latest versions: `@equinor/eds-core-react` to ^2.2.0, `@equinor/eds-icons` to ^1.1.0, `@equinor/eds-tokens` to ^2.1.1, and `@equinor/eds-utils` to ^2.0.0.
38
+
39
+ These are major version updates from the 0.x series. Consumers should verify compatibility with their applications, particularly if using `@equinor/fusion-react-side-sheet` which may require updates to support the new EDS versions.
40
+
41
+ ### Patch Changes
42
+
43
+ - abffa53: Render application content inside a stable `#app-section` container so browser-driven evaluation tools can target the app surface consistently.
44
+
45
+ This makes automated cookbook and dev-portal validation more reliable when using `agent-browser` and Copilot-based evaluation flows.
46
+
47
+ Refs https://github.com/equinor/fusion-core-tasks/issues/724
48
+
49
+ - abffa53: Upgrade dev-portal dependencies for React 19 compatibility.
50
+ - Upgrade `react-router` from v6 to v7.13 (backward-compatible, no code changes required)
51
+ - Upgrade `@equinor/fusion-react-styles` to 2.0.0 (removes `@material-ui/styles` dependency)
52
+ - Upgrade `@equinor/fusion-react-context-selector` to 2.0.1
53
+
54
+ This resolves the React 19 blocker identified in https://github.com/equinor/fusion-framework/issues/3698
55
+
56
+ - abffa53: Upgrade `react-router-dom` from v6 to v7.9.5 for React 19 compatibility.
57
+
58
+ This is a backward-compatible upgrade - all existing Router 6 patterns continue to work with Router 7. No code changes required.
59
+
60
+ - aa35c46: chore: bump @vitejs/plugin-react from 5.1.4 to 6.0.1
61
+ - 32bcf83: Bump `vite` from `7.3.1` to `8.0.0`.
62
+
63
+ Vite 8 replaces Rollup with Rolldown and esbuild with Oxc for faster builds.
64
+ No breaking API changes affect this codebase. The `dev-server` peerDependency
65
+ is widened to accept both Vite 7 and Vite 8.
66
+
67
+ - Updated dependencies [abffa53]
68
+ - Updated dependencies [abffa53]
69
+ - Updated dependencies [abffa53]
70
+ - Updated dependencies [abffa53]
71
+ - Updated dependencies [abffa53]
72
+ - Updated dependencies [aa35c46]
73
+ - Updated dependencies [abffa53]
74
+ - Updated dependencies [abffa53]
75
+ - Updated dependencies [abffa53]
76
+ - Updated dependencies [aaa3f74]
77
+ - Updated dependencies [abffa53]
78
+ - Updated dependencies [abffa53]
79
+ - Updated dependencies [32bcf83]
80
+ - @equinor/fusion-framework@8.0.0
81
+ - @equinor/fusion-framework-app@11.0.0
82
+ - @equinor/fusion-framework-dev-server@2.0.0
83
+ - @equinor/fusion-framework-module-ag-grid@36.0.0
84
+ - @equinor/fusion-framework-module-analytics@2.0.0
85
+ - @equinor/fusion-framework-module-app@8.0.0
86
+ - @equinor/fusion-framework-module-bookmark@4.0.0
87
+ - @equinor/fusion-framework-module-context@8.0.0
88
+ - @equinor/fusion-framework-module-feature-flag@2.0.0
89
+ - @equinor/fusion-framework-module-navigation@7.0.0
90
+ - @equinor/fusion-framework-module-services@8.0.0
91
+ - @equinor/fusion-framework-module-telemetry@5.0.0
92
+ - @equinor/fusion-framework-react@8.0.0
93
+ - @equinor/fusion-framework-react-components-bookmark@2.0.0
94
+ - @equinor/fusion-framework-react-components-people-provider@2.0.0
95
+ - @equinor/fusion-framework-react-module-bookmark@6.0.0
96
+ - @equinor/fusion-observable@9.0.0
97
+ - @equinor/fusion-query@7.0.0
98
+
3
99
  ## 4.0.4
4
100
 
5
101
  ### Patch Changes
@@ -144,7 +240,6 @@
144
240
  - [#3922](https://github.com/equinor/fusion-framework/pull/3922) [`d34ebd8`](https://github.com/equinor/fusion-framework/commit/d34ebd82c93acabc88f88e44a725f084af3af5ec) Thanks [@odinr](https://github.com/odinr)! - Enable AG Grid Enterprise license injection for the dev-portal by setting a global window key produced from the SPA template environment. The portal reads `window.FUSION_AG_GRID_KEY` to configure the AG Grid module and silence license warnings when a valid key is present. CLI docs now mention the license key setup.
145
241
 
146
242
  **Usage:**
147
-
148
243
  - In your SPA environment file, set `FUSION_SPA_AG_GRID_KEY=your-license-key-here`.
149
244
  - The SPA HTML template injects `window.FUSION_AG_GRID_KEY` before bootstrap runs, and the dev-portal picks it up automatically.
150
245
 
@@ -182,20 +277,17 @@
182
277
  ## New Features
183
278
 
184
279
  ### App Tag/Version Support
185
-
186
280
  - **App Client**: Added `getAppBuild` method to fetch build manifests by app key and tag
187
281
  - **App Module Provider**: Enhanced `getAppManifest` to accept optional tag parameter
188
282
  - **App Loading**: Modified `setCurrentApp` to support `AppReference` objects with tag specification
189
283
  - **URL Integration**: Added `getAppTagFromUrl` utility to extract app tags from URL parameters
190
284
 
191
285
  ### Enhanced Type System
192
-
193
286
  - Added `AppReference` type for specifying app key and optional tag
194
287
  - Extended `AppBundleState` to include optional `tag` property
195
288
  - Updated `AppBuildManifest` type definition for build-specific metadata
196
289
 
197
290
  ### API Improvements
198
-
199
291
  - **AppClient**: Updated interface to support tag-based manifest and build fetching
200
292
  - **App Class**: Added `tag` getter property for accessing current app tag
201
293
  - **Action System**: Enhanced `fetchManifest` action to handle tag parameters
@@ -203,7 +295,6 @@
203
295
  ## Changes by Package
204
296
 
205
297
  ### `@equinor/fusion-framework-module-app`
206
-
207
298
  - **AppClient.ts**: Added `getAppBuild` method with tag support and updated `getAppManifest` signature
208
299
  - **AppModuleProvider.ts**: Enhanced `setCurrentApp` method to handle `AppReference` objects with tags
209
300
  - **App.ts**: Added `tag` getter and improved error handling in initialization
@@ -212,7 +303,6 @@
212
303
  - **flows.ts**: Modified manifest fetching flow to handle tag-based requests
213
304
 
214
305
  ### `@equinor/fusion-framework-dev-portal`
215
-
216
306
  - **AppLoader.tsx**: Added `getAppTagFromUrl` utility function and integrated tag-based app loading
217
307
 
218
308
  ## Usage Examples
@@ -245,17 +335,14 @@
245
335
  ## Migration Guide
246
336
 
247
337
  ### For App Consumers
248
-
249
338
  - No breaking changes - existing code continues to work
250
339
  - Optionally use new tag-based loading for version-specific deployments
251
340
 
252
341
  ### For App Developers
253
-
254
342
  - Consider adding `&tag` URL parameter support for testing different versions
255
343
  - Use new `AppReference` type when programmatically setting current apps with tags
256
344
 
257
345
  ## Technical Details
258
-
259
346
  - **Backward Compatibility**: All changes are backward compatible
260
347
  - **Caching**: Tag-based manifests and builds are cached separately
261
348
  - **Error Handling**: Enhanced error handling for build and manifest loading failures
@@ -281,20 +368,17 @@
281
368
  This update addresses a security vulnerability in Vite's development server and includes bug fixes for improved compatibility. The update ensures secure development environments and better plugin ecosystem compatibility.
282
369
 
283
370
  **Changes:**
284
-
285
371
  - Updated Vite from v7.1.10 to v7.1.12
286
372
  - Includes security fix for development server file system checks
287
373
  - Includes compatibility fix for CommonJS plugin
288
374
  - No breaking changes or API modifications
289
375
 
290
376
  **Security Fix (v7.1.11):**
291
-
292
377
  - **dev**: trim trailing slash before `server.fs.deny` check ([#20968](https://github.com/vitejs/vite/issues/20968))
293
378
  - Prevents potential path traversal vulnerability in development server
294
379
  - Only affects development environment, not production builds
295
380
 
296
381
  **Bug Fix (v7.1.12):**
297
-
298
382
  - **deps**: downgrade commonjs plugin to 28.0.6 to avoid rollup/plugins issues ([#20990](https://github.com/vitejs/vite/issues/20990))
299
383
  - Improves compatibility with Rollup plugin ecosystem
300
384
  - Prevents potential build issues
@@ -314,12 +398,10 @@
314
398
  ### Patch Changes
315
399
 
316
400
  - [#3542](https://github.com/equinor/fusion-framework/pull/3542) [`2d4fd18`](https://github.com/equinor/fusion-framework/commit/2d4fd18394e8545b4616140a93a369d5ae77ccbc) Thanks [@eikeland](https://github.com/eikeland)! - Updated person component dependencies for improved functionality and bug fixes.
317
-
318
401
  - Updated `@equinor/fusion-react-person` from `^0.10.3` to `^0.10.10` in app-react-people cookbook
319
402
  - Updated `@equinor/fusion-wc-person` from `^3.1.8` to `^3.2.4` in dev-portal and people-resolver packages
320
403
 
321
404
  - [#3547](https://github.com/equinor/fusion-framework/pull/3547) [`99a3c26`](https://github.com/equinor/fusion-framework/commit/99a3c26275c2089c3708124f5819ce383d8dc3dc) Thanks [@odinr](https://github.com/odinr)! - Enhanced dev-portal with portal proxy service worker configuration ([Issue #3546](https://github.com/equinor/fusion-framework/issues/3546)).
322
-
323
405
  - Added `/portal-proxy` service worker resource configuration in dev-server.ts
324
406
  - Routes portal proxy requests to Fusion portal service API (`/@fusion-api/portals`)
325
407
  - Enables portal proxy functionality for testing against real portal environments
@@ -333,14 +415,12 @@
333
415
  - [#3522](https://github.com/equinor/fusion-framework/pull/3522) [`63ac6a1`](https://github.com/equinor/fusion-framework/commit/63ac6a1178fc6f6b0702f51a9c36a67db76b92cd) Thanks [@odinr](https://github.com/odinr)! - Add comprehensive telemetry integration to the Fusion Dev Portal.
334
416
 
335
417
  **New Features:**
336
-
337
418
  - Enable telemetry tracking for portal usage analytics and monitoring
338
419
  - Configure portal-specific metadata including version and name identification
339
420
  - Set up telemetry event scoping for portal-specific tracking
340
421
  - Attach framework configurator events for comprehensive telemetry coverage
341
422
 
342
423
  **Technical Implementation:**
343
-
344
424
  - Integrate `@equinor/fusion-framework-module-telemetry` module
345
425
  - Configure telemetry with portal metadata (`type: 'portal-telemetry'`)
346
426
  - Set default scope to `['portal']` for event categorization
@@ -348,7 +428,6 @@
348
428
  - Add TypeScript path references for telemetry module
349
429
 
350
430
  **Configuration Updates:**
351
-
352
431
  - Enhanced `config.ts` with detailed telemetry setup and documentation
353
432
  - Updated dependency versions to use `workspace:*` for better monorepo compatibility
354
433
  - Improved code documentation and developer experience features
@@ -360,14 +439,12 @@
360
439
  - [#3515](https://github.com/equinor/fusion-framework/pull/3515) [`6cb288b`](https://github.com/equinor/fusion-framework/commit/6cb288b9e1ec4fae68ae6899735c176837bb4275) Thanks [@odinr](https://github.com/odinr)! - ## Global Biome Configuration Modernization
361
440
 
362
441
  **Workspace-wide changes:**
363
-
364
442
  - Remove 19 rule overrides from `biome.json` to use Biome's strict "error" defaults
365
443
  - Enable `correctness/useUniqueElementIds` accessibility rule globally
366
444
  - Reduce configuration size by 40% (60+ → ~35 lines)
367
445
  - Eliminate all custom linting rule customizations
368
446
 
369
447
  **Package-specific changes:**
370
-
371
448
  - Replace static IDs with React `useId()` hooks in bookmark and dev-portal components
372
449
  - Fix `suspicious/noAssignInExpressions` violations in context, legacy-interopt, and observable packages
373
450
  - Update 11 React components for accessibility compliance
@@ -414,7 +491,6 @@
414
491
  - [#3349](https://github.com/equinor/fusion-framework/pull/3349) [`c511123`](https://github.com/equinor/fusion-framework/commit/c511123c835e24e9ddefcc4c47c2455f5df12087) Thanks [@dependabot](https://github.com/apps/dependabot)! - chore: bump vite from 6.x to 7.1.5
415
492
 
416
493
  Major version update of Vite build tool across all packages. This update includes:
417
-
418
494
  - Enhanced build performance and caching
419
495
  - Better error reporting with code frames
420
496
  - Improved TypeScript integration
@@ -422,14 +498,12 @@
422
498
  - New development server features
423
499
 
424
500
  ### Links
425
-
426
501
  - [Vite 7.1.5 Release Notes](https://github.com/vitejs/vite/releases/tag/v7.1.5)
427
502
  - [Vite 7.x Migration Guide](https://vitejs.dev/guide/migration)
428
503
 
429
504
  ### Patch Changes
430
505
 
431
506
  - [#3365](https://github.com/equinor/fusion-framework/pull/3365) [`6eeef2f`](https://github.com/equinor/fusion-framework/commit/6eeef2f2033dfacf7c972295c8c2cc2d4cd83976) Thanks [@dependabot](https://github.com/apps/dependabot)! - Updated @equinor/eds-tokens from 0.9.2 to 0.10.0
432
-
433
507
  - Added support for CSS custom properties via variables-static.css and variables-dynamic.css
434
508
  - Improved design token integration for better CSS compatibility
435
509
  - Updated dependencies and internal tooling (pnpm v10, node v22)
@@ -439,7 +513,6 @@
439
513
  - [#3400](https://github.com/equinor/fusion-framework/pull/3400) [`aed6c53`](https://github.com/equinor/fusion-framework/commit/aed6c5385df496a86d06dc0af9dacafc255ea605) Thanks [@dependabot](https://github.com/apps/dependabot)! - chore: bump @equinor/eds-core-react from 0.45.1 to 0.49.0
440
514
 
441
515
  ### New Features
442
-
443
516
  - ✨ Always show "add new option" in Autocomplete when onAddNewOption is provided
444
517
  - ✨ Tabs call onChange with provided value if present
445
518
  - ✨ Add disabled prop to Tooltip
@@ -447,7 +520,6 @@
447
520
  - ✨ Add support for adding new options in Autocomplete
448
521
 
449
522
  ### Bug Fixes
450
-
451
523
  - 🐛 Autocomplete - Don't call onOptionsChange when clicking "Add new"
452
524
  - 🐛 Table - Fix Firefox table header wrapping issue
453
525
  - 🐛 Tabs documentation type mismatch - update onChange parameter from number to number | string
@@ -459,28 +531,24 @@
459
531
  - 🐛 Menu: Ensure onClose is called when a MenuItem without onClick is clicked
460
532
 
461
533
  ### Links
462
-
463
534
  - [GitHub releases](https://github.com/equinor/design-system/releases/tag/eds-core-react%400.49.0)
464
535
  - [npm changelog](https://www.npmjs.com/package/@equinor/eds-core-react?activeTab=versions)
465
536
 
466
537
  - [#3366](https://github.com/equinor/fusion-framework/pull/3366) [`daa362e`](https://github.com/equinor/fusion-framework/commit/daa362e7d92ad362e46d666c434d0f09687abad5) Thanks [@dependabot](https://github.com/apps/dependabot)! - Update @equinor/eds-core-react from 0.48.0 to 0.49.0
467
538
 
468
539
  ### Changes
469
-
470
540
  - Updated @equinor/eds-core-react dependency to latest version across all packages
471
541
  - Fixed peerDependencies version mismatch in bookmark package
472
542
  - Includes bug fixes for Autocomplete and Table components
473
543
  - Adds new Autocomplete features for "add new option" functionality
474
544
 
475
545
  ### Affected Packages
476
-
477
546
  - packages/dev-portal
478
547
  - packages/react/components/bookmark
479
548
  - cookbooks/app-react-feature-flag
480
549
  - cookbooks/app-react-people
481
550
 
482
551
  ### Links
483
-
484
552
  - [GitHub releases](https://github.com/equinor/design-system/releases)
485
553
  - [Full Changelog](https://github.com/equinor/design-system/compare/eds-core-react@0.48.0...eds-core-react@0.49.0)
486
554
 
@@ -489,7 +557,6 @@
489
557
  ### Patch Changes
490
558
 
491
559
  - [#3381](https://github.com/equinor/fusion-framework/pull/3381) [`bae9c95`](https://github.com/equinor/fusion-framework/commit/bae9c9554f335d0384b864436874bded47d00ed8) Thanks [@dependabot](https://github.com/apps/dependabot)! - Update rollup from 4.49.0 to 4.50.2
492
-
493
560
  - Updated rollup dependency via vite transitive dependency
494
561
  - Includes bug fixes for tree-shaking array destructuring patterns
495
562
  - Performance improvements and platform support updates
@@ -517,7 +584,6 @@
517
584
  The refactor moves specific functionality and code related to the development portal into its own dedicated package to improve modularity and maintainability.
518
585
 
519
586
  **Features**
520
-
521
587
  - Development portal for the Fusion framework
522
588
  - Support for MSAL authentication
523
589
  - Integration with service discovery
@@ -552,7 +618,6 @@
552
618
  ### Patch Changes
553
619
 
554
620
  - [#3075](https://github.com/equinor/fusion-framework/pull/3075) [`84c16d7`](https://github.com/equinor/fusion-framework/commit/84c16d74c3235f809ce4c3e75868be12010ed695) Thanks [@odinr](https://github.com/odinr)! - Add `prepack` script to `dev-portal` and `dev-server` packages
555
-
556
621
  - Added a `prepack` script to `@equinor/fusion-framework-dev-portal` and `@equinor/fusion-framework-dev-server` to ensure the build runs before packaging.
557
622
  - This helps guarantee that the latest build artifacts are included when publishing these packages.
558
623
 
package/README.md CHANGED
@@ -1,11 +1,19 @@
1
- ## Dev Portal
1
+ # @equinor/fusion-framework-dev-portal
2
2
 
3
- This package provides a development portal for the Fusion framework.
3
+ Minimal development portal for building and testing Fusion Framework applications locally.
4
4
 
5
- This Portal only contains the bare minimum to get started with the Fusion Application development. Visuals might differ from the production portal.
5
+ ## What Is It?
6
6
 
7
- It is recommended to use the `@equinor/fusion-framework-dev-server` package for a more complete development experience.
8
- This package is a small part of the refactoring of the `@equinor/fusion-framework-cli` and is not intended for direct use in production.
7
+ `@equinor/fusion-framework-dev-portal` provides a lightweight portal shell that mirrors the production Fusion portal layout — header, context selector, bookmark side sheet, person settings, and application routing — without the full production overhead. It is the portal component loaded by `@equinor/fusion-framework-dev-server` and `@equinor/fusion-framework-cli` when running apps locally.
8
+
9
+ Use this package when you need a portal host for local app development. For the recommended development workflow, pair it with `@equinor/fusion-framework-dev-server`.
10
+
11
+ ## Key Concepts
12
+
13
+ - **Portal shell**: A React application that renders the top bar, context selector, and an app mounting area.
14
+ - **Application loader**: Dynamically initializes and mounts a Fusion app by its `appKey`, handling manifest resolution, script loading, and teardown.
15
+ - **Framework modules**: The portal pre-configures telemetry, navigation, bookmarks, feature flags, analytics, AG Grid, and service integrations so loaded apps inherit a realistic environment.
16
+ - **Context navigation**: When an app uses the context module, the portal synchronizes URL navigation with context changes automatically.
9
17
 
10
18
  ## Installation
11
19
 
@@ -15,55 +23,55 @@ pnpm add @equinor/fusion-framework-dev-portal
15
23
 
16
24
  ## Environment Variables
17
25
 
18
- The following environment variables must be set in `.env` or in the environment variables of the server:
26
+ Set these in a `.env` file or in your server environment:
19
27
 
20
- - FUSION_MSAL_CLIENT_ID: The client ID for MSAL authentication.
21
- - FUSION_MSAL_TENANT_ID: The tenant ID for MSAL authentication.
22
- - FUSION_SERVICE_DISCOVERY_URL: The URL for service discovery.
23
- - FUSION_SERVICE_SCOPE: The scopes for the service.
24
- - FUSION_SPA_AG_GRID_KEY: (Optional) AG Grid Enterprise license key for local development. When provided, this eliminates AG Grid license console warnings when running the portal locally with AG Grid-enabled features.
28
+ | Variable | Required | Description |
29
+ |---|---|---|
30
+ | `FUSION_MSAL_CLIENT_ID` | Yes | MSAL application client ID for authentication |
31
+ | `FUSION_MSAL_TENANT_ID` | Yes | Azure AD tenant ID for authentication |
32
+ | `FUSION_SERVICE_DISCOVERY_URL` | Yes | URL for the Fusion service discovery endpoint |
33
+ | `FUSION_SERVICE_SCOPE` | Yes | OAuth scopes for service requests |
34
+ | `FUSION_SPA_AG_GRID_KEY` | No | AG Grid Enterprise license key — silences console warnings locally |
25
35
 
26
- ### Local AG Grid Configuration
36
+ ### AG Grid License
27
37
 
28
- To use AG Grid Enterprise features without console warnings during local development:
38
+ To suppress AG Grid Enterprise license warnings during local development:
29
39
 
30
- 1. Obtain an AG Grid Enterprise license key from your organization
31
- 2. Add the key to your `.env` file:
32
- ```sh
33
- FUSION_SPA_AG_GRID_KEY=your-license-key-here
34
- ```
35
- 3. Start the dev portal:
36
- ```sh
37
- pnpm start
38
- ```
39
- 4. Verify the configuration by opening the portal and checking the browser console - there should be no AG Grid license warnings
40
+ 1. Add `FUSION_SPA_AG_GRID_KEY=<your-key>` to your `.env` file.
41
+ 2. Start the dev portal with `pnpm start`.
42
+ 3. Verify the browser console shows no AG Grid license warnings.
40
43
 
41
- **Note**: The license key is only used for local development and is never committed to the repository or deployed to production.
44
+ The license key is only used locally and must not be committed to the repository.
42
45
 
43
- ## Development
46
+ ## Quick Start
44
47
 
45
48
  ```sh
46
49
  pnpm start
47
50
  ```
48
51
 
49
- ## Usage
52
+ This launches the dev server with the portal loaded.
53
+
54
+ ## Public API
55
+
56
+ The package exports a single `render` function that mounts the portal into a DOM element:
50
57
 
51
58
  ```ts
52
- import { render } from "@equinor/fusion-framework-dev-portal";
59
+ import { render } from '@equinor/fusion-framework-dev-portal';
53
60
 
54
- const el = document.createElement("div");
55
- el.id = "dev-portal";
61
+ const el = document.createElement('div');
62
+ el.id = 'dev-portal';
56
63
  document.body.appendChild(el);
57
64
 
58
- const framework = /** Fusion Framework, [Service Discovery, MSAL] */;
59
-
60
- render(el, {ref: framework});
65
+ // `framework` is a pre-configured Fusion Framework instance with Service Discovery and MSAL
66
+ render(el, { ref: framework });
61
67
  ```
62
68
 
63
69
  ### Usage with `@equinor/fusion-framework-dev-server`
64
70
 
71
+ The dev server loads this portal automatically. A typical integration looks like:
72
+
65
73
  ```ts
66
- import { createDevServer } from "@equinor/fusion-framework-dev-server";
74
+ import { createDevServer } from '@equinor/fusion-framework-dev-server';
67
75
 
68
76
  const portalId = '@equinor/fusion-framework-dev-portal';
69
77
  const devServer = await createDevServer({
@@ -72,33 +80,31 @@ const devServer = await createDevServer({
72
80
  portal: {
73
81
  id: portalId,
74
82
  tag: 'latest',
75
- }
76
- /** --- Add any other environment variables you need here --- */
83
+ },
77
84
  },
78
85
  },
79
86
  api: {
80
- serviceDiscoveryUrl: "https://location.of.your.service.discovery",
81
- processServices: /** generate proxy routes */
82
- routes: [
83
- {
84
- // intercept for the dev-portal manifest
85
- match: `/PROXY_SERVICE_KEY/PROXY_PATH/${options.portal}{@:tag}`,
86
- middleware: async (req, res) => {
87
- res.writeHead(200, { 'content-type': 'application/json' });
88
- // resolve the local path to the dev-portal
89
- // __CWD__/node_modules/@equinor/fusion-framework-dev-portal/dist/main.js
90
- const path = fileURLToPath('/@fs' + import.meta.resolve(portalId));
91
- const manifest = {
92
- build: {
93
- entrypoint: new URL(path, req.headers.referer),
94
- }
95
- }
96
- res.end(JSON.stringify(manifest));
97
- },
98
- }
99
- ]
87
+ serviceDiscoveryUrl: 'https://location.of.your.service.discovery',
100
88
  },
101
89
  });
102
90
  ```
103
91
 
92
+ ## Architecture
93
+
94
+ The portal is composed of these internal parts:
95
+
96
+ - **`render`** — Entry point; creates a React root with theme, framework, and people-resolver providers.
97
+ - **`configure`** — Configures all framework modules (telemetry, navigation, bookmarks, feature flags, analytics, AG Grid, services).
98
+ - **`Router`** — Sets up routes with `react-router` via the navigation module; routes `/apps/:appKey/*` to the app loader.
99
+ - **`AppLoader`** — Resolves, initializes, and mounts a Fusion app by key; handles loading states and errors.
100
+ - **`Header`** — Top bar with the Fusion logo, context selector, bookmark toggle, and person settings.
101
+ - **`ContextSelector`** — Wired to the current app's context module for searching and selecting context items.
102
+ - **`useAppContextNavigation`** — Synchronizes URL pathname with context changes for apps that use the context module.
103
+
104
+ ## Constraints
105
+
106
+ - This portal is for **local development only** and is not intended for production deployment.
107
+ - Visuals may differ from the production Fusion portal.
108
+ - The portal assumes MSAL and service discovery are configured in the parent framework instance.
109
+
104
110