diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 628eedc..379a3f5 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -53,6 +53,8 @@ jobs: run: npm install - name: Build run: npm run build:ghpages + - name: Add SPA fallback for GitHub Pages + run: cp dist/vf-angular/index.html dist/vf-angular/404.html - name: Upload Build Artifacts uses: actions/upload-artifact@v4 with: diff --git a/angular.json b/angular.json index e4c7209..a7c635d 100644 --- a/angular.json +++ b/angular.json @@ -1,9 +1,15 @@ { "$schema": "./node_modules/@angular/cli/lib/config/schema.json", "version": 1, + "newProjectRoot": "projects", "projects": { - "vf-angular": { + "vf-angular-packages": { "projectType": "application", + "schematics": { + "@schematics/angular:component": { + "skipTests": true + } + }, "root": "", "sourceRoot": "src", "prefix": "app", @@ -11,56 +17,90 @@ "build": { "builder": "@angular-devkit/build-angular:browser", "options": { - "outputPath": "dist/vf-angular", + "outputPath": "dist/vf-angular-packages", "index": "src/index.html", "main": "src/main.ts", - "polyfills": "src/polyfills.ts", - "tsConfig": "tsconfig.json", - "aot": true, + "polyfills": [ + "zone.js" + ], + "tsConfig": "tsconfig.app.json", + "inlineStyleLanguage": "scss", "assets": [ "src/favicon.ico", - "src/assets" + "src/assets", + { + "glob": "**/*", + "input": "./node_modules/@visual-framework/vf-font-plex-mono/assets/IBM-Plex-Mono", + "output": "./assets/fonts/IBM-Plex-Mono" + }, + { + "glob": "**/*", + "input": "./node_modules/@visual-framework/vf-font-plex-sans/assets/IBM-Plex-Sans", + "output": "./assets/fonts/IBM-Plex-Sans" + } ], "styles": [ "src/styles.scss" ], "scripts": [ + "src/assets/vf-banner/vf-banner.js", "src/assets/vf-tabs/vf-tabs.js" ] }, "configurations": { "production": { - "optimization": true, - "outputHashing": "all", - "sourceMap": false, - "namedChunks": false, - "extractLicenses": true, - "vendorChunk": false, - "buildOptimizer": true + "budgets": [ + { + "type": "initial", + "maximumWarning": "500kb", + "maximumError": "1mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "2kb", + "maximumError": "4kb" + } + ], + "outputHashing": "all" + }, + "development": { + "buildOptimizer": false, + "optimization": false, + "vendorChunk": true, + "extractLicenses": false, + "sourceMap": true, + "namedChunks": true } - } + }, + "defaultConfiguration": "production" }, "serve": { "builder": "@angular-devkit/build-angular:dev-server", - "options": { - "browserTarget": "vf-angular:build" - }, "configurations": { "production": { - "browserTarget": "vf-angular:build:production" + "buildTarget": "vf-angular-packages:build:production" }, "development": { - "browserTarget": "vf-angular:build:development" + "buildTarget": "vf-angular-packages:build:development" } + }, + "defaultConfiguration": "development" + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "buildTarget": "vf-angular-packages:build:production" } }, "test": { "builder": "@angular-devkit/build-angular:karma", "options": { - "main": "src/test.ts", - "polyfills": "src/polyfills.ts", + "polyfills": [ + "zone.js", + "zone.js/testing" + ], "tsConfig": "tsconfig.spec.json", - "karmaConfig": "karma.conf.js", + "inlineStyleLanguage": "scss", "assets": [ "src/favicon.ico", "src/assets" @@ -72,6 +112,603 @@ } } } + }, + "vf-badge.angular": { + "projectType": "library", + "root": "projects/vf-badge.angular", + "sourceRoot": "projects/vf-badge.angular/src", + "prefix": "lib", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:ng-packager", + "options": { + "project": "projects/vf-badge.angular/ng-package.json" + }, + "configurations": { + "production": { + "tsConfig": "projects/vf-badge.angular/tsconfig.lib.prod.json" + }, + "development": { + "tsConfig": "projects/vf-badge.angular/tsconfig.lib.json" + } + }, + "defaultConfiguration": "production" + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "tsConfig": "projects/vf-badge.angular/tsconfig.spec.json", + "polyfills": [ + "zone.js", + "zone.js/testing" + ] + } + } + } + }, + "vf-banner.angular": { + "projectType": "library", + "root": "projects/vf-banner.angular", + "sourceRoot": "projects/vf-banner.angular/src", + "prefix": "lib", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:ng-packagr", + "options": { + "project": "projects/vf-banner.angular/ng-package.json" + }, + "configurations": { + "production": { + "tsConfig": "projects/vf-banner.angular/tsconfig.lib.prod.json" + }, + "development": { + "tsConfig": "projects/vf-banner.angular/tsconfig.lib.json" + } + }, + "defaultConfiguration": "production" + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "tsConfig": "projects/vf-banner.angular/tsconfig.spec.json", + "polyfills": [ + "zone.js", + "zone.js/testing" + ] + } + } + } + }, + "vf-hero.angular": { + "projectType": "library", + "root": "projects/vf-hero.angular", + "sourceRoot": "projects/vf-hero.angular/src", + "prefix": "lib", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:ng-packagr", + "options": { + "project": "projects/vf-hero.angular/ng-package.json" + }, + "configurations": { + "production": { + "tsConfig": "projects/vf-hero.angular/tsconfig.lib.prod.json" + }, + "development": { + "tsConfig": "projects/vf-hero.angular/tsconfig.lib.json" + } + }, + "defaultConfiguration": "production" + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "tsConfig": "projects/vf-hero.angular/tsconfig.spec.json", + "polyfills": [ + "zone.js", + "zone.js/testing" + ] + } + } + } + }, + "vf-blockquote.angular": { + "projectType": "library", + "root": "projects/vf-blockquote.angular", + "sourceRoot": "projects/vf-blockquote.angular/src", + "prefix": "lib", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:ng-packagr", + "options": { + "project": "projects/vf-blockquote.angular/ng-package.json" + }, + "configurations": { + "production": { + "tsConfig": "projects/vf-blockquote.angular/tsconfig.lib.prod.json" + }, + "development": { + "tsConfig": "projects/vf-blockquote.angular/tsconfig.lib.json" + } + }, + "defaultConfiguration": "production" + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "tsConfig": "projects/vf-blockquote.angular/tsconfig.spec.json", + "polyfills": [ + "zone.js", + "zone.js/testing" + ] + } + } + } + }, + "vf-button.angular": { + "projectType": "library", + "root": "projects/vf-button.angular", + "sourceRoot": "projects/vf-button.angular/src", + "prefix": "lib", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:ng-packagr", + "options": { + "project": "projects/vf-button.angular/ng-package.json" + }, + "configurations": { + "production": { + "tsConfig": "projects/vf-button.angular/tsconfig.lib.prod.json" + }, + "development": { + "tsConfig": "projects/vf-button.angular/tsconfig.lib.json" + } + }, + "defaultConfiguration": "production" + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "tsConfig": "projects/vf-button.angular/tsconfig.spec.json", + "polyfills": [ + "zone.js", + "zone.js/testing" + ] + } + } + } + }, + "vf-tabs.angular": { + "projectType": "library", + "root": "projects/vf-tabs.angular", + "sourceRoot": "projects/vf-tabs.angular/src", + "prefix": "lib", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:ng-packagr", + "options": { + "project": "projects/vf-tabs.angular/ng-package.json" + }, + "configurations": { + "production": { + "tsConfig": "projects/vf-tabs.angular/tsconfig.lib.prod.json" + }, + "development": { + "tsConfig": "projects/vf-tabs.angular/tsconfig.lib.json" + } + }, + "defaultConfiguration": "production" + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "tsConfig": "projects/vf-tabs.angular/tsconfig.spec.json", + "polyfills": [ + "zone.js", + "zone.js/testing" + ] + } + } + } + }, + "vf-back-to-top.angular": { + "projectType": "library", + "root": "projects/vf-back-to-top.angular", + "sourceRoot": "projects/vf-back-to-top.angular/src", + "prefix": "lib", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:ng-packagr", + "options": { + "project": "projects/vf-back-to-top.angular/ng-package.json" + }, + "configurations": { + "production": { + "tsConfig": "projects/vf-back-to-top.angular/tsconfig.lib.prod.json" + }, + "development": { + "tsConfig": "projects/vf-back-to-top.angular/tsconfig.lib.json" + } + }, + "defaultConfiguration": "production" + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "tsConfig": "projects/vf-back-to-top.angular/tsconfig.spec.json", + "polyfills": [ + "zone.js", + "zone.js/testing" + ] + } + } + } + }, + "vf-chatbot-action-prompt.angular": { + "projectType": "library", + "root": "projects/vf-chatbot-action-prompt.angular", + "sourceRoot": "projects/vf-chatbot-action-prompt.angular/src", + "prefix": "lib", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:ng-packagr", + "options": { + "project": "projects/vf-chatbot-action-prompt.angular/ng-package.json" + }, + "configurations": { + "production": { + "tsConfig": "projects/vf-chatbot-action-prompt.angular/tsconfig.lib.prod.json" + }, + "development": { + "tsConfig": "projects/vf-chatbot-action-prompt.angular/tsconfig.lib.json" + } + }, + "defaultConfiguration": "production" + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "tsConfig": "projects/vf-chatbot-action-prompt.angular/tsconfig.spec.json", + "polyfills": [ + "zone.js", + "zone.js/testing" + ] + } + } + } + }, + "vf-chatbot-selector.angular": { + "projectType": "library", + "root": "projects/vf-chatbot-selector.angular", + "sourceRoot": "projects/vf-chatbot-selector.angular/src", + "prefix": "lib", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:ng-packagr", + "options": { + "project": "projects/vf-chatbot-selector.angular/ng-package.json" + }, + "configurations": { + "production": { + "tsConfig": "projects/vf-chatbot-selector.angular/tsconfig.lib.prod.json" + }, + "development": { + "tsConfig": "projects/vf-chatbot-selector.angular/tsconfig.lib.json" + } + }, + "defaultConfiguration": "production" + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "tsConfig": "projects/vf-chatbot-selector.angular/tsconfig.spec.json", + "polyfills": [ + "zone.js", + "zone.js/testing" + ] + } + } + } + }, + "vf-chatbot-welcome-angular": { + "projectType": "library", + "root": "projects/vf-chatbot-welcome-angular", + "sourceRoot": "projects/vf-chatbot-welcome-angular/src", + "prefix": "lib", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:ng-packagr", + "options": { + "project": "projects/vf-chatbot-welcome-angular/ng-package.json" + }, + "configurations": { + "production": { + "tsConfig": "projects/vf-chatbot-welcome-angular/tsconfig.lib.prod.json" + }, + "development": { + "tsConfig": "projects/vf-chatbot-welcome-angular/tsconfig.lib.json" + } + }, + "defaultConfiguration": "production" + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "tsConfig": "projects/vf-chatbot-welcome-angular/tsconfig.spec.json", + "polyfills": [ + "zone.js", + "zone.js/testing" + ] + } + } + } + }, + "vf-chatbot-prompt.angular": { + "projectType": "library", + "root": "projects/vf-chatbot-prompt.angular", + "sourceRoot": "projects/vf-chatbot-prompt.angular/src", + "prefix": "lib", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:ng-packagr", + "options": { + "project": "projects/vf-chatbot-prompt.angular/ng-package.json" + }, + "configurations": { + "production": { + "tsConfig": "projects/vf-chatbot-prompt.angular/tsconfig.lib.prod.json" + }, + "development": { + "tsConfig": "projects/vf-chatbot-prompt.angular/tsconfig.lib.json" + } + }, + "defaultConfiguration": "production" + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "tsConfig": "projects/vf-chatbot-prompt.angular/tsconfig.spec.json", + "polyfills": [ + "zone.js", + "zone.js/testing" + ] + } + } + } + }, + "vf-chatbot-feedback.angular": { + "projectType": "library", + "root": "projects/vf-chatbot-feedback.angular", + "sourceRoot": "projects/vf-chatbot-feedback.angular/src", + "prefix": "lib", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:ng-packagr", + "options": { + "project": "projects/vf-chatbot-feedback.angular/ng-package.json" + }, + "configurations": { + "production": { + "tsConfig": "projects/vf-chatbot-feedback.angular/tsconfig.lib.prod.json" + }, + "development": { + "tsConfig": "projects/vf-chatbot-feedback.angular/tsconfig.lib.json" + } + }, + "defaultConfiguration": "production" + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "tsConfig": "projects/vf-chatbot-feedback.angular/tsconfig.spec.json", + "polyfills": [ + "zone.js", + "zone.js/testing" + ] + } + } + } + }, + "vf-chatbot-dialog.angular": { + "projectType": "library", + "root": "projects/vf-chatbot-dialog.angular", + "sourceRoot": "projects/vf-chatbot-dialog.angular/src", + "prefix": "lib", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:ng-packagr", + "options": { + "project": "projects/vf-chatbot-dialog.angular/ng-package.json" + }, + "configurations": { + "production": { + "tsConfig": "projects/vf-chatbot-dialog.angular/tsconfig.lib.prod.json" + }, + "development": { + "tsConfig": "projects/vf-chatbot-dialog.angular/tsconfig.lib.json" + } + }, + "defaultConfiguration": "production" + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "tsConfig": "projects/vf-chatbot-dialog.angular/tsconfig.spec.json", + "polyfills": [ + "zone.js", + "zone.js/testing" + ] + } + } + } + }, + "vf-chatbot-standalone.angular": { + "projectType": "library", + "root": "projects/vf-chatbot-standalone.angular", + "sourceRoot": "projects/vf-chatbot-standalone.angular/src", + "prefix": "lib", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:ng-packagr", + "options": { + "project": "projects/vf-chatbot-standalone.angular/ng-package.json" + }, + "configurations": { + "production": { + "tsConfig": "projects/vf-chatbot-standalone.angular/tsconfig.lib.prod.json" + }, + "development": { + "tsConfig": "projects/vf-chatbot-standalone.angular/tsconfig.lib.json" + } + }, + "defaultConfiguration": "production" + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "tsConfig": "projects/vf-chatbot-standalone.angular/tsconfig.spec.json", + "polyfills": [ + "zone.js", + "zone.js/testing" + ] + } + } + } + }, + "vf-chatbot-fab.angular": { + "projectType": "library", + "root": "projects/vf-chatbot-fab.angular", + "sourceRoot": "projects/vf-chatbot-fab.angular/src", + "prefix": "lib", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:ng-packagr", + "options": { + "project": "projects/vf-chatbot-fab.angular/ng-package.json" + }, + "configurations": { + "production": { + "tsConfig": "projects/vf-chatbot-fab.angular/tsconfig.lib.prod.json" + }, + "development": { + "tsConfig": "projects/vf-chatbot-fab.angular/tsconfig.lib.json" + } + }, + "defaultConfiguration": "production" + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "tsConfig": "projects/vf-chatbot-fab.angular/tsconfig.spec.json", + "polyfills": [ + "zone.js", + "zone.js/testing" + ] + } + } + } + }, + "vf-chatbot-sources.angular": { + "projectType": "library", + "root": "projects/vf-chatbot-sources.angular", + "sourceRoot": "projects/vf-chatbot-sources.angular/src", + "prefix": "lib", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:ng-packagr", + "options": { + "project": "projects/vf-chatbot-sources.angular/ng-package.json" + }, + "configurations": { + "production": { + "tsConfig": "projects/vf-chatbot-sources.angular/tsconfig.lib.prod.json" + }, + "development": { + "tsConfig": "projects/vf-chatbot-sources.angular/tsconfig.lib.json" + } + }, + "defaultConfiguration": "production" + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "tsConfig": "projects/vf-chatbot-sources.angular/tsconfig.spec.json", + "polyfills": [ + "zone.js", + "zone.js/testing" + ] + } + } + } + }, + "vf-chatbot-modal.angular": { + "projectType": "library", + "root": "projects/vf-chatbot-modal.angular", + "sourceRoot": "projects/vf-chatbot-modal.angular/src", + "prefix": "lib", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:ng-packagr", + "options": { + "project": "projects/vf-chatbot-modal.angular/ng-package.json" + }, + "configurations": { + "production": { + "tsConfig": "projects/vf-chatbot-modal.angular/tsconfig.lib.prod.json" + }, + "development": { + "tsConfig": "projects/vf-chatbot-modal.angular/tsconfig.lib.json" + } + }, + "defaultConfiguration": "production" + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "tsConfig": "projects/vf-chatbot-modal.angular/tsconfig.spec.json", + "polyfills": [ + "zone.js", + "zone.js/testing" + ] + } + } + } + }, + "vf-chatbot.angular": { + "projectType": "library", + "root": "projects/vf-chatbot.angular", + "sourceRoot": "projects/vf-chatbot.angular/src", + "prefix": "lib", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:ng-packagr", + "options": { + "project": "projects/vf-chatbot.angular/ng-package.json" + }, + "configurations": { + "production": { + "tsConfig": "projects/vf-chatbot.angular/tsconfig.lib.prod.json" + }, + "development": { + "tsConfig": "projects/vf-chatbot.angular/tsconfig.lib.json" + } + }, + "defaultConfiguration": "production" + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "tsConfig": "projects/vf-chatbot.angular/tsconfig.spec.json", + "polyfills": [ + "zone.js", + "zone.js/testing" + ] + } + } + } } + }, + "cli": { + "analytics": "ad354a12-40a4-4da7-a19c-b5f78051cdca" } } diff --git a/package.json b/package.json index 68033e1..4f1048a 100644 --- a/package.json +++ b/package.json @@ -1,74 +1,91 @@ { - "name": "visual-framework", + "name": "vf-angular-packages", "version": "0.0.0", "scripts": { "ng": "ng", "start": "ng serve", "build": "ng build", - "build:ghpages": "ng build --configuration production --base-href /vf-angular/", - "build:dev": "ng build --configuration development", "watch": "ng build --watch --configuration development", "test": "ng test", - "test:all": "gulp test:all", - "test:component": "gulp test:component", - "test:watch": "gulp test:watch", - "test:ci": "gulp test:ci", - "test:coverage": "ng test --no-watch --code-coverage", - "sonar": "sonar-scanner" + "test:all": "ng test --watch --browsers=ChromeHeadless --code-coverage" }, "private": true, "dependencies": { - "@angular/animations": "^16.1.0", - "@angular/common": "^16.1.0", - "@angular/compiler": "^16.1.0", - "@angular/core": "^16.1.0", - "@angular/forms": "^16.1.0", - "@angular/platform-browser": "^16.1.0", - "@angular/platform-browser-dynamic": "^16.1.0", - "@angular/router": "^16.1.0", + "@angular/animations": "^15.2.0 || ^18.0.0", + "@angular/common": "^15.2.0 || ^18.0.0", + "@angular/compiler": "^15.2.0 || ^18.0.0", + "@angular/core": "^15.2.0 || ^18.0.0", + "@angular/forms": "^15.2.0 || ^18.0.0", + "@angular/platform-browser": "^15.2.0 || ^18.0.0", + "@angular/platform-browser-dynamic": "^15.2.0 || ^18.0.0", + "@angular/router": "^15.2.0 || ^18.0.0", "@visual-framework/vf-back-to-top": "^1.0.1", "@visual-framework/vf-badge": "^3.0.3", - "@visual-framework/vf-banner": "2.0.3", + "@visual-framework/vf-banner": "^2.0.3", "@visual-framework/vf-blockquote": "^1.2.8", "@visual-framework/vf-body": "^1.2.0", "@visual-framework/vf-box": "^2.4.0", "@visual-framework/vf-button": "3.0.2", + "@visual-framework/vf-chatbot": "^1.0.0-beta.3", + "@visual-framework/vf-chatbot-action-prompt": "^1.0.0-beta.3", + "@visual-framework/vf-chatbot-dialog": "^1.0.0-beta.1", + "@visual-framework/vf-chatbot-fab": "^1.0.0-beta.3", + "@visual-framework/vf-chatbot-feedback": "^1.0.0-beta.4", + "@visual-framework/vf-chatbot-modal": "^1.0.0-beta.5", + "@visual-framework/vf-chatbot-prompt": "^1.0.0-beta.3", + "@visual-framework/vf-chatbot-selector": "^1.0.0-beta.3", + "@visual-framework/vf-chatbot-sources": "^1.0.0-beta.3", + "@visual-framework/vf-chatbot-standalone": "^1.0.0-beta.4", + "@visual-framework/vf-chatbot-welcome": "^1.0.0-beta.4", + "@visual-framework/vf-content": "^1.6.16", "@visual-framework/vf-content": "1.6.16", + "@visual-framework/vf-core": "2.2.47", + "@visual-framework/vf-extensions-react": "^0.0.8", + "@visual-framework/vf-font-plex-mono": "^1.1.3", + "@visual-framework/vf-font-plex-sans": "^1.1.3", + "@visual-framework/vf-footer": "^1.2.1", + "@visual-framework/vf-global-header": "^3.1.6", "@visual-framework/vf-grid": "^1.4.1", "@visual-framework/vf-hero": "^4.0.3", "@visual-framework/vf-link": "^2.0.2", "@visual-framework/vf-mega-menu": "^1.0.2", "@visual-framework/vf-profile": "^1.4.0", + "@visual-framework/vf-sass-config": "2.6.1", "@visual-framework/vf-sass-starter": "^0.1.30", "@visual-framework/vf-search": "^1.0.0", + "@visual-framework/vf-search-client-side": "^2.0.2", "@visual-framework/vf-stack": "^3.0.0", "@visual-framework/vf-tabs": "^2.1.5", "@visual-framework/vf-text": "^1.1.1", "@visual-framework/vf-u-fullbleed": "^1.2.2", + "gulp": "^5.0.1", + "@visual-framework/vf-utility-classes": "2.0.0", "rxjs": "~7.8.0", "tslib": "^2.3.0", - "zone.js": "~0.13.0" + "vf-badge.angular": "^0.0.1", + "zone.js": "~0.12.0" }, "devDependencies": { - "@angular-devkit/build-angular": "^16.1.0", - "@angular/cli": "~16.1.0", - "@angular/compiler-cli": "^16.1.0", + "@angular-devkit/build-angular": "^15.2.4 || ^18.0.0", + "@angular/cli": "~15.2.4 || ^18.0.0", + "@angular/compiler-cli": "^15.2.0 || ^18.0.0", "@types/jasmine": "~4.3.0", - "@types/node": "^18.19.124", - "@visual-framework/vf-config": "1.0.1-alpha.0", - "@visual-framework/vf-core": "2.2.47", - "glob": "^7.2.0", - "gulp": "^5.0.0", + "@visual-framework/vf-design-tokens": "^3.6.3", + "@visual-framework/vf-font-plex-mono": "^1.1.1", + "@visual-framework/vf-font-plex-sans": "^1.1.1", + "@visual-framework/vf-sass-config": "^2.7.1", + "@visual-framework/vf-sass-starter": "^0.1.28", + "@visual-framework/vf-sass-utilities": "^1.0.1", + "@visual-framework/vf-utility-classes": "^2.0.0", "gulp-shell": "^0.8.0", - "jasmine-core": "~4.6.0", - "karma": "~6.4.4", + "jasmine-core": "~4.5.0", + "karma": "~6.4.0", "karma-chrome-launcher": "~3.1.0", "karma-coverage": "~2.2.0", "karma-jasmine": "~5.1.0", "karma-jasmine-html-reporter": "~2.0.0", - "karma-junit-reporter": "^2.0.1", - "karma-sonarqube-unit-reporter": "^0.0.23", - "karma-spec-reporter": "^0.0.36", - "typescript": "~5.1.3" - } + "ng-packagr": "^15.2.2 || ^18.0.0", + "typescript": "~5.4.0" + }, + "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e" } diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts index 01bebbc..931aa27 100644 --- a/src/app/app-routing.module.ts +++ b/src/app/app-routing.module.ts @@ -6,11 +6,14 @@ import { VfBlockquoteComponent } from './components/vf-blockquote/vf-blockquote. import { VfButtonComponent } from './components/vf-button/vf-button.component'; import { VfHeroComponent } from './components/vf-hero/vf-hero.component'; import { VfTabsComponent } from './components/vf-tabs/vf-tabs.component'; +import { VfChatbotAngularComponent } from './components/vf-chatbot/vf-chatbot.angular.component'; import { VfBackToTopComponent } from './components/vf-back-to-top/vf-back-to-top.component'; import { HomeComponent } from './components/home/home.component'; +import { SearchComponent } from './components/search/search.component'; const routes: Routes = [ { path: '', component: HomeComponent }, + { path: 'search', component: SearchComponent }, { path: 'components/vf-back-to-top', component: VfBackToTopComponent }, { path: 'components/vf-badge', component: VfBadgeComponent }, { path: 'components/vf-banner', component: VfBannerComponent }, @@ -18,6 +21,7 @@ const routes: Routes = [ { path: 'components/vf-button', component: VfButtonComponent }, { path: 'components/vf-hero', component: VfHeroComponent }, { path: 'components/vf-tabs', component: VfTabsComponent }, + { path: 'components/vf-chatbot', component: VfChatbotAngularComponent }, { path: '**', redirectTo: '' } ]; diff --git a/src/app/app.component.ts b/src/app/app.component.ts index 3f7d083..561a216 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -5,12 +5,116 @@ import { Component } from '@angular/core'; template: ` + ` }) export class AppComponent { title = 'visual-framework'; + config = { + type: "modal", + title: "AI Assistant", + welcome_logo: true, + welcome_message: "Welcome! I'm here to help", + welcome_logo_alt: "AI Assistant", + welcome_suggestions_title: "Try asking me:", + input_placeholder: "Ask me ...", + welcome_max_suggestions: 4, + disclaimer: + 'Disclaimer: This chatbot is designed to assist you with general information and basic inquiries. See our disclaimer notes.', + footnote: + 'Review AI generated content for accuracy. Leave feedback.', + icons: { + assistant_avatar: + "../../assets/vf-chatbot/assets/vf-chatbot--icon-16x16-dark-green.svg", + user_avatar: + "../../assets/vf-chatbot/assets/vf-chatbot--avatar-user.svg", + send_button: "../../assets/vf-chatbot/assets/vf-chatbot--icon-send.svg", + main_logo_url: + "../../assets/vf-chatbot/assets/vf-chatbot--icon-32x32-dark-green.svg", + minimize: + "../../assets/vf-chatbot/assets/vf-chatbot--icon-minimize.svg", + close: "../../assets/vf-chatbot/assets/vf-chatbot--icon-close.svg" + }, + api: { + chat_endpoint: false, //"/api/chat", // Disabled to use fallback responses + feedback_endpoint: false, //"/api/feedback", + qa_data_url: "../../assets/vf-chatbot/assets/vf-chatbot-qa.json", + headers: { + "Content-Type": "application/json", + Authorization: "Bearer your-token" + }, + timeout: 10000 + }, + + features: { + enable_welcome: true, + enable_feedback: true, + enable_sources: true, + enable_sources_custom_format: false, + enable_welcome_suggestions: true, + enable_typing_indicator: true, + enable_disclaimer: true, + enable_predefined_qa: true, + enable_fallback_responses: true, + enable_qa_data_loading: true, + enable_instant_feedback: false + }, + + behavior: { + auto_scroll: true, + typing_delay: 800, + show_scrollbar: false + }, + + selectorContext: { + chatbotRoutes: { + multiSelect: true, + maxMultiSelect: 3, + showSearch: true, + showSearchThreshold: 5, + showAllServices: true, + showAllServicesSelected: true, + routes: + "../../assets/vf-chatbot/assets/vf-chatbot-selector-services.json", + placeholder: "Select services", + title: "Services", + selector_logo_url: + "../../assets/vf-chatbot/assets/vf-chatbot--icon-24x24-dark-green.svg", + selector_logo_title: "AI Assistant" + } + }, + + handlers: { + on_message_send: "handleMessageSend", + on_response_receive: "handleResponseReceive", + on_feedback_submit: "handleFeedbackSubmit", + on_suggestion_click: "handleSuggestionClick", + on_error: "handleError", + on_conversation_start: "handleConversationStart", + on_conversation_end: "handleConversationEnd", + on_fab_click: "handleFabClick", + on_dialog_confirm: "handleDialogConfirm", + on_dialog_cancel: "handleDialogCancel", + on_minimize: "handleMinimize" + }, + + feedback_options: { + positive: [ + { id: "accurate", label: "Accurate" }, + { id: "easy", label: "Easy to understand" }, + { id: "formatted", label: "Well formatted" } + ], + negative: [ + { id: "inaccurate", label: "Inaccurate answer" }, + { id: "nocontext", label: "Did not use context" }, + { id: "poorformat", label: "Poorly formatted" } + ] + }, + enable_session_persistence: true, + restore_minimized_state: true // If true, restore minimized state after navigation + }; changeOfRoutes() { // Remove vf-mega-menu element when route changes const vfMegaMenuContent = document.querySelector('.vf-mega-menu__content'); diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 6832230..8f359d2 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -8,6 +8,8 @@ import { AppRoutingModule } from './app-routing.module'; import { AppHeaderModule } from './components/header/header.module'; import { AppFooterModule } from './components/footer/footer.module'; import { VfComponentsModule } from './components/vf-components.module'; +import { HttpClientModule } from '@angular/common/http'; +import { SearchModule } from './components/search/search.module'; @NgModule({ declarations: [ AppComponent @@ -20,6 +22,8 @@ import { VfComponentsModule } from './components/vf-components.module'; AppHeaderModule, AppFooterModule, VfComponentsModule, + HttpClientModule + SearchModule, ], bootstrap: [AppComponent], schemas: [NO_ERRORS_SCHEMA] diff --git a/src/app/components/footer/footer.component.html b/src/app/components/footer/footer.component.html index 9164d02..8f97e9a 100644 --- a/src/app/components/footer/footer.component.html +++ b/src/app/components/footer/footer.component.html @@ -71,9 +71,6 @@