ngx-json-ui
Version:
This project was generated using [Angular CLI](https://github.com/angular/angular-cli) version 19.2.0.
1 lines • 28.3 kB
Source Map (JSON)
{"version":3,"file":"ngx-json-ui.mjs","sources":["../../../projects/ngx-json-ui/src/lib/components/overlay/modal/modal.component.ts","../../../projects/ngx-json-ui/src/lib/components/overlay/modal/modal.component.html","../../../projects/ngx-json-ui/src/lib/components/overlay/toast/toast.component.ts","../../../projects/ngx-json-ui/src/lib/components/overlay/toast/toast.component.html","../../../projects/ngx-json-ui/src/lib/core/services/ngx-overlay.service.ts","../../../projects/ngx-json-ui/src/lib/form-builder.module.ts","../../../projects/ngx-json-ui/src/lib/shared/components/type-not-found/type-not-found.component.ts","../../../projects/ngx-json-ui/src/lib/tokens/component-mapping-config.token.ts","../../../projects/ngx-json-ui/src/lib/tokens/component-mappings.token.ts","../../../projects/ngx-json-ui/src/lib/core/services/component-mapping.service.ts","../../../projects/ngx-json-ui/src/lib/core/services/component-factory.service.ts","../../../projects/ngx-json-ui/src/public-api.ts","../../../projects/ngx-json-ui/src/ngx-json-ui.ts"],"sourcesContent":["import { Component, EventEmitter, Input, OnInit, Output, Renderer2, ViewChild, ViewContainerRef } from '@angular/core';\r\nimport { ComponentModel } from '../../../core/models/component.model';\r\n\r\n@Component({\r\n selector: 'nju-modal',\r\n templateUrl: './modal.component.html'\r\n})\r\nexport class ModalComponent implements OnInit {\r\n /**\r\n * Modal title that appears in the header.\r\n */\r\n @Input() title?: string;\r\n\r\n /**\r\n * Optional modal content. If not provided, content can be projected via ng-content.\r\n */\r\n @Input() content?: string;\r\n \r\n /**\r\n * Event emitted when the modal should be closed.\r\n */\r\n @Output() closeOverlay = new EventEmitter<void>();\r\n \r\n constructor() {}\r\n \r\n ngOnInit(): void {}\r\n \r\n /**\r\n * Called when the close button is clicked.\r\n */\r\n onClose(): void {\r\n this.closeOverlay.emit();\r\n }\r\n} ","<!-- modal.component.html -->\r\n<div role=\"dialog\" class=\"modal fade show\" tabindex=\"-1\" aria-hidden=\"true\" style=\"display: block;\">\r\n <div class=\"modal-dialog modal-lg modal-dialog-centered modal-dialog-scrollable\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <h5 class=\"modal-title\">Modal title</h5>\r\n <a type=\"button\" href=\"\" data-bs-dismiss=\"modal\" aria-label=\"Close\" (click)=\"onClose()\">\r\n <i class=\"ph ph-x color-subdued icon icon-sm icon-interactive\"></i>\r\n </a>\r\n </div>\r\n <div class=\"modal-body\">\r\n <h6>Default Modal: It closes automatically when clicked anywhere outside it or pressed escape key</h6>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-plain\" data-bs-dismiss=\"modal\">Cancel</button>\r\n <button type=\"button\" class=\"btn btn-primary\">Save changes</button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>","import { Component, HostBinding, Input, OnInit } from '@angular/core';\r\nimport { ComponentModel } from '../../../core/models/component.model';\r\n\r\n@Component({\r\n selector: 'nju-toast',\r\n templateUrl: './toast.component.html'\r\n})\r\nexport class ToastComponent implements OnInit{\r\n @Input() config!: ComponentModel; // Accept this field's JSON schema as input\r\n\r\n // Dynamic css styling control variabled \r\n @HostBinding('class') hostClasses = ''; // Binding class to overall component\r\n labelCssClassName: string='toast-container';\r\n cssClassName: string='toast toast-custom';\r\n cssStyle: any;\r\n\r\n // Lifecycle method in angular called when the component is initialized\r\n ngOnInit() {\r\n // Set css styling variable from json schema\r\n this.hostClasses = 'd-flex justify-content-center';\r\n \r\n this.labelCssClassName='toast-container';\r\n\r\n this.cssClassName='toast toast-custom fade show';\r\n this.cssStyle='';\r\n }\r\n}\r\n","<div [class]=\"labelCssClassName\">\r\n <div class=\"{{cssClassName}}\" role=\"alert\" aria-live=\"assertive\" aria-atomic=\"true\">\r\n Hello\r\n </div>\r\n</div>\r\n","import { Injectable, Injector } from '@angular/core';\r\nimport { Overlay, OverlayConfig, OverlayRef } from '@angular/cdk/overlay';\r\nimport { ComponentPortal } from '@angular/cdk/portal';\r\nimport { ModalComponent } from '../../components/overlay/modal/modal.component';\r\nimport { OverlayData } from '../models/overlay-data.model';\r\nimport { ToastComponent } from '../../components/overlay/toast/toast.component';\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class NgxOverlayService {\r\n constructor(private overlay: Overlay, private injector: Injector) {}\r\n\r\n /**\r\n * Opens a modal overlay.\r\n * @param data Data to pass to the ModalComponent.\r\n */\r\n openModal(data?: OverlayData): OverlayRef {\r\n const config = this.getDefaultConfig();\r\n const overlayRef = this.overlay.create(config);\r\n\r\n // Automatically close the modal when the backdrop is clicked.\r\n overlayRef.backdropClick().subscribe(() => overlayRef.dispose());\r\n\r\n const portal = new ComponentPortal(ModalComponent, null, this.createInjector(data));\r\n overlayRef.attach(portal);\r\n return overlayRef;\r\n }\r\n\r\n /**\r\n * Opens a toast overlay.\r\n * @param data Data to pass to the ToastComponent.\r\n */\r\n openToast(data?: OverlayData): OverlayRef {\r\n const config = this.getDefaultConfig({\r\n hasBackdrop: false,\r\n panelClass: 'nju-toast-overlay',\r\n positionStrategy: this.overlay\r\n .position()\r\n .global()\r\n .bottom('20px')\r\n .right('20px')\r\n });\r\n const overlayRef = this.overlay.create(config);\r\n const portal = new ComponentPortal(ToastComponent, null, this.createInjector(data));\r\n overlayRef.attach(portal);\r\n return overlayRef;\r\n }\r\n /**\r\n * Returns a default OverlayConfig object merged with any additional options.\r\n */\r\n private getDefaultConfig(options?: Partial<OverlayConfig>): OverlayConfig {\r\n const defaultConfig = new OverlayConfig({\r\n hasBackdrop: true,\r\n backdropClass: 'cdk-overlay-dark-backdrop',\r\n panelClass: 'nju-overlay-panel',\r\n scrollStrategy: this.overlay.scrollStrategies.block(),\r\n positionStrategy: this.overlay\r\n .position()\r\n .global()\r\n .centerHorizontally()\r\n .centerVertically()\r\n });\r\n return { ...defaultConfig, ...options };\r\n }\r\n\r\n /**\r\n * Creates a simple injector to pass data into the overlay component.\r\n * For more advanced data passing, you might create a custom InjectionToken and PortalInjector.\r\n */\r\n private createInjector(data?: OverlayData): Injector {\r\n // In this minimal implementation we simply return the root injector.\r\n // Extend this function if you need to pass custom tokens/data.\r\n return this.injector;\r\n }\r\n}","// File: src/lib/form-builder.module.ts\r\nimport { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { OverlayModule } from '@angular/cdk/overlay';\r\n\r\n// Import your ModalComponent\r\nimport { ModalComponent } from './components/overlay/modal/modal.component';\r\nimport { ToastComponent } from './components/overlay/toast/toast.component'; // Import your ToastComponent if needed\r\n\r\n// Import overlay service if you plan to provide it from this module\r\nimport { NgxOverlayService } from './core/services/ngx-overlay.service';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n OverlayModule,\r\n ModalComponent\r\n ],\r\n exports: [\r\n ModalComponent\r\n ],\r\n providers: [\r\n NgxOverlayService\r\n ]\r\n })\r\n export class FormBuilderModule {}","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'nju-type-not-found',\r\n template: `<div class=\"nju-error\">Component type not found.</div>`\r\n})\r\nexport class TypeNotFoundComponent {\r\n\r\n}\r\n","import { InjectionToken } from '@angular/core';\r\nimport { ComponentMappingConfig } from '../core/models/component-mapping-config';\r\n\r\nexport const COMPONENT_MAPPING_CONFIG = new InjectionToken<ComponentMappingConfig>(\r\n 'COMPONENT_MAPPING_CONFIG',\r\n {\r\n providedIn: 'root',\r\n factory: () => ({ useDefaultMappings: true }) // Defaults to using the built-in mappings.\r\n }\r\n);","import { InjectionToken } from '@angular/core';\r\nimport { ComponentMappingModel } from '../core/models/component-mapping.model';\r\n\r\nexport const COMPONENT_MAPPINGS = new InjectionToken<ComponentMappingModel[]>(\r\n 'COMPONENT_MAPPINGS'\r\n);","import { Inject, Injectable, Optional } from '@angular/core';\r\nimport { ComponentMappingModel } from '../models/component-mapping.model';\r\nimport { TypeNotFoundComponent } from '../../shared/components/type-not-found/type-not-found.component';\r\n// ... import additional components as needed\r\nimport { ModalComponent } from '../../components/overlay/modal/modal.component';\r\nimport { COMPONENT_MAPPING_CONFIG } from '../../tokens/component-mapping-config.token';\r\nimport { COMPONENT_MAPPINGS } from '../../tokens/component-mappings.token';\r\nimport { ComponentMappingConfig } from '../models/component-mapping-config';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ComponentMappingService {\r\n private mappings: { [key: string]: ComponentMappingModel } = {};\r\n\r\n constructor(\r\n @Optional() @Inject(COMPONENT_MAPPING_CONFIG) config: ComponentMappingConfig,\r\n @Optional() @Inject(COMPONENT_MAPPINGS) customMappings?: ComponentMappingModel[]\r\n ) {\r\n // Check configuration flag to decide whether to load default mappings.\r\n if (config?.useDefaultMappings ?? true) {\r\n this.mappings = {\r\n 'modal': { schema: 'overlay', alias: 'modal', component: ModalComponent }\r\n };\r\n }\r\n // Merge custom mappings (if any) into the mappings object.\r\n if (customMappings) {\r\n customMappings.forEach(mapping => {\r\n this.mappings[mapping.alias] = mapping;\r\n });\r\n }\r\n }\r\n\r\n public getMapping(type: string): ComponentMappingModel {\r\n return this.mappings[type] || {\r\n schema: 'atom',\r\n alias: 'unknown',\r\n component: TypeNotFoundComponent\r\n };\r\n }\r\n}","import { Injectable, ComponentRef, ViewContainerRef } from '@angular/core';\r\nimport { FormGroup, FormArray } from '@angular/forms';\r\nimport { ComponentMappingService } from './component-mapping.service';\r\nimport { ComponentModel } from '../models/component.model';\r\nimport { TypeNotFoundComponent } from '../../shared/components/type-not-found/type-not-found.component';\r\nimport { NgxOverlayService } from './ngx-overlay.service';\r\nimport { OverlayData } from '../models/overlay-data.model';\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ComponentFactoryService {\r\n constructor(private mappingService: ComponentMappingService,private overlayService: NgxOverlayService) {}\r\n\r\n /**\r\n * Loads one or more components based on the provided configuration.\r\n * @param config A single ComponentModel or an array of ComponentModel objects.\r\n * @param container The container (ViewContainerRef) where components should be added.\r\n * @param form (Optional) The parent FormGroup/FormArray for form components.\r\n * @param validationSchema (Optional) Validation configuration used for form controls.\r\n */\r\n loadComponents(\r\n config: ComponentModel | ComponentModel[],\r\n container: ViewContainerRef,\r\n form?: FormGroup | FormArray,\r\n validationSchema?: any\r\n ): void {\r\n if (Array.isArray(config)) {\r\n config.forEach(c => this.loadSingleComponent(c, container, form, validationSchema));\r\n } else {\r\n this.loadSingleComponent(config, container, form, validationSchema);\r\n }\r\n }\r\n\r\n /**\r\n * Loads a single component based on its configuration.\r\n * For 'formGroup' types, it recursively loads child components into the corresponding sub-form.\r\n * @param componentConfig The configuration for the component.\r\n * @param container The ViewContainerRef to create the component in.\r\n * @param form (Optional) The parent FormGroup/FormArray.\r\n * @param validationSchema (Optional) Validation configuration for form controls.\r\n */\r\n private loadSingleComponent(\r\n componentConfig: ComponentModel,\r\n container: ViewContainerRef,\r\n form?: FormGroup | FormArray,\r\n validationSchema?: any\r\n ): void {\r\n // Handle overlay types separately.\r\n // If the component type is 'modal', 'toast', 'alert', or 'offcanvas', use the overlay service.\r\n if (['modal', 'toast', 'alert', 'offcanvas'].includes(componentConfig.type)) {\r\n const overlayData: OverlayData = {\r\n config: componentConfig,\r\n form: form,\r\n validationSchema: validationSchema\r\n };\r\n\r\n switch (componentConfig.type) {\r\n case 'modal':\r\n this.overlayService.openModal(overlayData);\r\n break;\r\n case 'toast':\r\n this.overlayService.openToast(overlayData);\r\n break;\r\n default:\r\n console.error(`Unsupported overlay type: ${componentConfig.type}`);\r\n break;\r\n }\r\n return;\r\n }\r\n // If the component type is 'formGroup' and a form is provided, ensure a valid name exists.\r\n if (componentConfig.type === 'formGroup' && form) {\r\n if (!componentConfig?.name) {\r\n console.error(\r\n `FormGroup configuration error: 'name' property is missing. Received config: ${JSON.stringify(componentConfig)}`\r\n );\r\n return;\r\n }\r\n const childForm = form.get(componentConfig.name);\r\n if (!childForm) {\r\n console.error(`FormGroup not found for component name: ${componentConfig.name}`);\r\n return;\r\n }\r\n if (!(childForm instanceof FormGroup)) {\r\n console.error(`Expected a FormGroup for '${componentConfig.name}', but received a different control type.`);\r\n return;\r\n }\r\n // If there are child components, load them into the retrieved form group.\r\n if (Array.isArray(componentConfig?.components) && componentConfig.components.length > 0) {\r\n this.loadComponents(componentConfig.components, container, childForm, validationSchema);\r\n }\r\n return;\r\n }\r\n \r\n // Determine which component to load using safe navigation.\r\n const mapping = this.mappingService.getMapping(componentConfig?.type ?? '');\r\n const componentToLoad = mapping?.component || TypeNotFoundComponent;\r\n \r\n const componentRef: ComponentRef<any> = container.createComponent(componentToLoad);\r\n componentRef.instance.config = componentConfig;\r\n \r\n if (form) {\r\n componentRef.instance.form = form;\r\n }\r\n \r\n // Attach validationSchema for specific component types if provided.\r\n if (\r\n form &&\r\n ['formArray', 'formArraySelect', 'formArrayCheckbox', 'collapse'].includes(componentConfig?.type ?? '')\r\n ) {\r\n const schemaKey = componentConfig?.name;\r\n componentRef.instance.validationSchema = componentConfig.type === 'collapse'\r\n ? validationSchema\r\n : this.findValidationSchema(validationSchema, schemaKey ?? '');\r\n }\r\n \r\n // Recursively load nested child components, if any.\r\n if (Array.isArray(componentConfig?.components) && componentConfig.components.length > 0) {\r\n const nestedContainer: ViewContainerRef = componentRef.instance.viewContainerRef || container;\r\n this.loadComponents(componentConfig.components, nestedContainer, form, validationSchema);\r\n }\r\n }\r\n \r\n /**\r\n * Recursively searches a validation schema for a specific key.\r\n * @param schema The validation schema object.\r\n * @param key The key to search for.\r\n * @returns The matching schema section or null if not found.\r\n */\r\n private findValidationSchema(schema: any, key: string): any | null {\r\n if (!schema) return null;\r\n for (const k in schema) {\r\n if (k === 'default') continue;\r\n if (k === key) return schema[k];\r\n if (typeof schema[k] === 'object' && schema[k] !== null) {\r\n const result = this.findValidationSchema(schema[k], key);\r\n if (result) return result;\r\n }\r\n }\r\n return null;\r\n }\r\n}","/*\r\n * Public API Surface of ngx-json-ui\r\n */\r\n\r\n// public-api.ts\r\nexport * from './lib/form-builder.module';\r\nexport * from './lib/core/services/ngx-overlay.service';\r\nexport * from './lib/components/overlay/modal/modal.component';\r\nexport * from './lib/core/services/component-factory.service';\r\nexport * from './lib/core/models/component.model';\r\n\r\n/* Exporting the component mapping service and related models\r\n * This allows users to customize the component mappings used in the library.\r\n * The ComponentMappingService is responsible for managing these mappings.\r\n * The ComponentMappingModel defines the structure of a mapping, including the schema, alias, and component.\r\n * The ComponentMappingConfig interface allows users to configure whether to use default mappings or not.\r\n * The COMPONENT_MAPPING_CONFIG and COMPONENT_MAPPINGS tokens are used for dependency injection,\r\n providers: [\r\n // Disable default mappings.\r\n {\r\n provide: COMPONENT_MAPPING_CONFIG,\r\n useValue: { useDefaultMappings: false }\r\n },\r\n // Provide custom mapping for the \"label\" component.\r\n {\r\n provide: COMPONENT_MAPPINGS,\r\n useValue: <ComponentMappingModel>{\r\n schema: 'atom',\r\n alias: 'label',\r\n component: LabelComponent\r\n },\r\n multi: true\r\n },\r\n // Provide custom mapping for the \"field\" component.\r\n {\r\n provide: COMPONENT_MAPPINGS,\r\n useValue: <ComponentMappingModel>{\r\n schema: 'atom',\r\n alias: 'field',\r\n component: FieldComponent\r\n },\r\n multi: true\r\n }\r\n ],\r\n\r\n */\r\n\r\nexport * from './lib/core/services/component-mapping.service';\r\nexport * from './lib/core/models/component-mapping.model';\r\nexport * from './lib/core/models/component-mapping-config';\r\nexport * from './lib/tokens/component-mapping-config.token';\r\nexport * from './lib/tokens/component-mappings.token';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.ComponentMappingService","i2.NgxOverlayService"],"mappings":"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"}