@rangertechnologies/ngnxt 2.1.128 → 2.1.130

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 (30) hide show
  1. package/esm2022/environments/version.mjs +2 -2
  2. package/esm2022/lib/components/custom-rich-text/custom-rich-text.component.mjs +1 -5
  3. package/esm2022/lib/components/datatable/datatable.component.mjs +65 -32
  4. package/esm2022/lib/nxt-app.module.mjs +6 -3
  5. package/esm2022/lib/pages/booklet/booklet.component.mjs +8 -2
  6. package/esm2022/lib/pages/builder/element/element.component.mjs +34 -28
  7. package/esm2022/lib/pages/builder/form/form.component.mjs +13 -3
  8. package/esm2022/lib/pages/builder/properties/properties.component.mjs +125 -87
  9. package/esm2022/lib/pages/builder/templates/templates.component.mjs +35 -0
  10. package/esm2022/lib/pages/questionbook/questionbook.component.mjs +15 -12
  11. package/esm2022/lib/pages/questionnaire/questionnaire.component.mjs +1 -1
  12. package/esm2022/lib/services/data.service.mjs +14 -2
  13. package/esm2022/lib/services/form-builder.service.mjs +12 -3
  14. package/esm2022/lib/services/template.service.mjs +350 -0
  15. package/esm2022/public-api.mjs +1 -1
  16. package/fesm2022/rangertechnologies-ngnxt.mjs +655 -162
  17. package/fesm2022/rangertechnologies-ngnxt.mjs.map +1 -1
  18. package/lib/components/datatable/datatable.component.d.ts +5 -3
  19. package/lib/nxt-app.module.d.ts +22 -21
  20. package/lib/pages/booklet/booklet.component.d.ts +2 -1
  21. package/lib/pages/builder/element/element.component.d.ts +9 -2
  22. package/lib/pages/builder/form/form.component.d.ts +5 -1
  23. package/lib/pages/builder/properties/properties.component.d.ts +53 -15
  24. package/lib/pages/builder/templates/templates.component.d.ts +16 -0
  25. package/lib/services/data.service.d.ts +2 -0
  26. package/lib/services/form-builder.service.d.ts +1 -0
  27. package/lib/services/template.service.d.ts +84 -0
  28. package/package.json +1 -1
  29. package/rangertechnologies-ngnxt-2.1.130.tgz +0 -0
  30. package/rangertechnologies-ngnxt-2.1.128.tgz +0 -0
@@ -0,0 +1,35 @@
1
+ import { Component, Output, EventEmitter } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "../../../services/template.service";
4
+ import * as i2 from "@angular/common";
5
+ export class AppTemplatesComponent {
6
+ templateService;
7
+ templateSelected = new EventEmitter();
8
+ templates = [];
9
+ sections = { templates: false };
10
+ constructor(templateService) {
11
+ this.templateService = templateService;
12
+ this.templates = this.templateService.getTemplates(); // Load template list
13
+ }
14
+ toggleSection(section) {
15
+ this.sections[section] = !this.sections[section];
16
+ }
17
+ selectTemplate(templateId) {
18
+ const selectedTemplate = this.templates.find(t => t.templateId === templateId);
19
+ if (!selectedTemplate)
20
+ return;
21
+ // Convert template element data to form elements
22
+ const elements = selectedTemplate.elements.map((el, index) => this.templateService.initializeElementFromTemplate(el, index));
23
+ // Emit data to parent
24
+ this.templateSelected.emit({ selectedTemplate, elements });
25
+ }
26
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppTemplatesComponent, deps: [{ token: i1.TemplateService }], target: i0.ɵɵFactoryTarget.Component });
27
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AppTemplatesComponent, selector: "app-templates", outputs: { templateSelected: "templateSelected" }, ngImport: i0, template: "<!-- AP-08APR25 -->\n<!-- Templates Section Toggle -->\n<div class=\"field-container\" (click)=\"toggleSection('templates')\"\n style=\"background-color: #EFF8FF; border: 1px solid #E6F3FF; margin-bottom: 10px; display: flex; justify-content: space-between; padding: 10px; cursor: pointer;\">\n <div class=\"label-container\">\n <div class=\"head-elements\" style=\"font-weight: bold;\">Templates</div>\n </div>\n <img [src]=\"sections.templates ? '../assets/icons/arrow-down.svg' : '../assets/icons/arrow-right.svg'\"\n alt=\"Toggle Arrow\" class=\"arrow-icon\" />\n</div>\n\n<!-- Template List Section -->\n<div *ngIf=\"sections.templates\" class=\"template-container\">\n <div *ngFor=\"let template of templates\" class=\"field-container template-card\"\n (click)=\"selectTemplate(template.templateId)\"\n style=\"border: 1px solid #dbeafe; padding: 12px; margin-bottom: 10px; cursor: pointer; border-radius: 10px; background-color: #f8fafc;\">\n \n <div class=\"label-container\" style=\"display: flex; justify-content: space-between;\">\n <div>\n <label class=\"template-header\" style=\"font-weight: 600;\">{{ template.templateName }}</label>\n </div>\n </div>\n <div class=\"template-content\" style=\"margin-top: 5px; color: #555;\">{{ template.content }}</div>\n </div>\n</div>\n", styles: [".toggle-header{display:flex;align-items:center;justify-content:space-between;cursor:pointer;padding:10px}.head-elements{font-size:17px;font-weight:600}.arrow-icon{width:19px;height:23px;transition:transform .3s ease}.toggle-header:hover .arrow-icon{transform:scale(1.1)}.template-card{border:1px solid #ddd;padding:10px;margin:10px 0;cursor:pointer;background-color:#f9f9f9;transition:background-color .3s}.template-card:hover{background-color:#eff8ff}.template-header{font-size:18px;font-weight:700}.template-content{font-size:14px;color:#555}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
28
+ }
29
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppTemplatesComponent, decorators: [{
30
+ type: Component,
31
+ args: [{ selector: 'app-templates', template: "<!-- AP-08APR25 -->\n<!-- Templates Section Toggle -->\n<div class=\"field-container\" (click)=\"toggleSection('templates')\"\n style=\"background-color: #EFF8FF; border: 1px solid #E6F3FF; margin-bottom: 10px; display: flex; justify-content: space-between; padding: 10px; cursor: pointer;\">\n <div class=\"label-container\">\n <div class=\"head-elements\" style=\"font-weight: bold;\">Templates</div>\n </div>\n <img [src]=\"sections.templates ? '../assets/icons/arrow-down.svg' : '../assets/icons/arrow-right.svg'\"\n alt=\"Toggle Arrow\" class=\"arrow-icon\" />\n</div>\n\n<!-- Template List Section -->\n<div *ngIf=\"sections.templates\" class=\"template-container\">\n <div *ngFor=\"let template of templates\" class=\"field-container template-card\"\n (click)=\"selectTemplate(template.templateId)\"\n style=\"border: 1px solid #dbeafe; padding: 12px; margin-bottom: 10px; cursor: pointer; border-radius: 10px; background-color: #f8fafc;\">\n \n <div class=\"label-container\" style=\"display: flex; justify-content: space-between;\">\n <div>\n <label class=\"template-header\" style=\"font-weight: 600;\">{{ template.templateName }}</label>\n </div>\n </div>\n <div class=\"template-content\" style=\"margin-top: 5px; color: #555;\">{{ template.content }}</div>\n </div>\n</div>\n", styles: [".toggle-header{display:flex;align-items:center;justify-content:space-between;cursor:pointer;padding:10px}.head-elements{font-size:17px;font-weight:600}.arrow-icon{width:19px;height:23px;transition:transform .3s ease}.toggle-header:hover .arrow-icon{transform:scale(1.1)}.template-card{border:1px solid #ddd;padding:10px;margin:10px 0;cursor:pointer;background-color:#f9f9f9;transition:background-color .3s}.template-card:hover{background-color:#eff8ff}.template-header{font-size:18px;font-weight:700}.template-content{font-size:14px;color:#555}\n"] }]
32
+ }], ctorParameters: () => [{ type: i1.TemplateService }], propDecorators: { templateSelected: [{
33
+ type: Output
34
+ }] } });
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGVzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9wYWdlcy9idWlsZGVyL3RlbXBsYXRlcy90ZW1wbGF0ZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LWFwcC9zcmMvbGliL3BhZ2VzL2J1aWxkZXIvdGVtcGxhdGVzL3RlbXBsYXRlcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7QUFRaEUsTUFBTSxPQUFPLHFCQUFxQjtJQUtaO0lBSlYsZ0JBQWdCLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztJQUNyRCxTQUFTLEdBQUcsRUFBRSxDQUFDO0lBQ2YsUUFBUSxHQUFHLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDO0lBRWhDLFlBQW9CLGVBQWdDO1FBQWhDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNsRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxxQkFBcUI7SUFDN0UsQ0FBQztJQUVELGFBQWEsQ0FBQyxPQUFvQjtRQUNoQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQsY0FBYyxDQUFDLFVBQWtCO1FBQy9CLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxLQUFLLFVBQVUsQ0FBQyxDQUFDO1FBQy9FLElBQUksQ0FBQyxnQkFBZ0I7WUFBRSxPQUFPO1FBRTlCLGlEQUFpRDtRQUNqRCxNQUFNLFFBQVEsR0FBRyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQzNELElBQUksQ0FBQyxlQUFlLENBQUMsNkJBQTZCLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUM5RCxDQUFDO1FBRUYsc0JBQXNCO1FBQ3RCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQzdELENBQUM7d0dBeEJVLHFCQUFxQjs0RkFBckIscUJBQXFCLHdHQ1JsQyxxMENBeUJBOzs0RkRqQmEscUJBQXFCO2tCQUxqQyxTQUFTOytCQUNFLGVBQWU7b0ZBS2YsZ0JBQWdCO3NCQUF6QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGVtcGxhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdGVtcGxhdGUuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC10ZW1wbGF0ZXMnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGVtcGxhdGVzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGVtcGxhdGVzLmNvbXBvbmVudC5jc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBBcHBUZW1wbGF0ZXNDb21wb25lbnQge1xuICBAT3V0cHV0KCkgdGVtcGxhdGVTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICB0ZW1wbGF0ZXMgPSBbXTtcbiAgc2VjdGlvbnMgPSB7IHRlbXBsYXRlczogZmFsc2UgfTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHRlbXBsYXRlU2VydmljZTogVGVtcGxhdGVTZXJ2aWNlKSB7XG4gICAgdGhpcy50ZW1wbGF0ZXMgPSB0aGlzLnRlbXBsYXRlU2VydmljZS5nZXRUZW1wbGF0ZXMoKTsgLy8gTG9hZCB0ZW1wbGF0ZSBsaXN0XG4gIH1cblxuICB0b2dnbGVTZWN0aW9uKHNlY3Rpb246ICd0ZW1wbGF0ZXMnKSB7XG4gICAgdGhpcy5zZWN0aW9uc1tzZWN0aW9uXSA9ICF0aGlzLnNlY3Rpb25zW3NlY3Rpb25dO1xuICB9XG5cbiAgc2VsZWN0VGVtcGxhdGUodGVtcGxhdGVJZDogbnVtYmVyKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWRUZW1wbGF0ZSA9IHRoaXMudGVtcGxhdGVzLmZpbmQodCA9PiB0LnRlbXBsYXRlSWQgPT09IHRlbXBsYXRlSWQpO1xuICAgIGlmICghc2VsZWN0ZWRUZW1wbGF0ZSkgcmV0dXJuO1xuXG4gICAgLy8gQ29udmVydCB0ZW1wbGF0ZSBlbGVtZW50IGRhdGEgdG8gZm9ybSBlbGVtZW50c1xuICAgIGNvbnN0IGVsZW1lbnRzID0gc2VsZWN0ZWRUZW1wbGF0ZS5lbGVtZW50cy5tYXAoKGVsLCBpbmRleCkgPT5cbiAgICAgIHRoaXMudGVtcGxhdGVTZXJ2aWNlLmluaXRpYWxpemVFbGVtZW50RnJvbVRlbXBsYXRlKGVsLCBpbmRleClcbiAgICApO1xuXG4gICAgLy8gRW1pdCBkYXRhIHRvIHBhcmVudFxuICAgIHRoaXMudGVtcGxhdGVTZWxlY3RlZC5lbWl0KHsgc2VsZWN0ZWRUZW1wbGF0ZSwgZWxlbWVudHMgfSk7XG4gIH1cbn0iLCI8IS0tIEFQLTA4QVBSMjUgLS0+XG48IS0tIFRlbXBsYXRlcyBTZWN0aW9uIFRvZ2dsZSAtLT5cbjxkaXYgY2xhc3M9XCJmaWVsZC1jb250YWluZXJcIiAoY2xpY2spPVwidG9nZ2xlU2VjdGlvbigndGVtcGxhdGVzJylcIlxuICAgICBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICNFRkY4RkY7IGJvcmRlcjogMXB4IHNvbGlkICNFNkYzRkY7IG1hcmdpbi1ib3R0b206IDEwcHg7IGRpc3BsYXk6IGZsZXg7IGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsgcGFkZGluZzogMTBweDsgY3Vyc29yOiBwb2ludGVyO1wiPlxuICA8ZGl2IGNsYXNzPVwibGFiZWwtY29udGFpbmVyXCI+XG4gICAgPGRpdiBjbGFzcz1cImhlYWQtZWxlbWVudHNcIiBzdHlsZT1cImZvbnQtd2VpZ2h0OiBib2xkO1wiPlRlbXBsYXRlczwvZGl2PlxuICA8L2Rpdj5cbiAgPGltZyBbc3JjXT1cInNlY3Rpb25zLnRlbXBsYXRlcyA/ICcuLi9hc3NldHMvaWNvbnMvYXJyb3ctZG93bi5zdmcnIDogJy4uL2Fzc2V0cy9pY29ucy9hcnJvdy1yaWdodC5zdmcnXCJcbiAgICAgICBhbHQ9XCJUb2dnbGUgQXJyb3dcIiBjbGFzcz1cImFycm93LWljb25cIiAvPlxuPC9kaXY+XG5cbjwhLS0gVGVtcGxhdGUgTGlzdCBTZWN0aW9uIC0tPlxuPGRpdiAqbmdJZj1cInNlY3Rpb25zLnRlbXBsYXRlc1wiIGNsYXNzPVwidGVtcGxhdGUtY29udGFpbmVyXCI+XG4gIDxkaXYgKm5nRm9yPVwibGV0IHRlbXBsYXRlIG9mIHRlbXBsYXRlc1wiIGNsYXNzPVwiZmllbGQtY29udGFpbmVyIHRlbXBsYXRlLWNhcmRcIlxuICAgICAgIChjbGljayk9XCJzZWxlY3RUZW1wbGF0ZSh0ZW1wbGF0ZS50ZW1wbGF0ZUlkKVwiXG4gICAgICAgc3R5bGU9XCJib3JkZXI6IDFweCBzb2xpZCAjZGJlYWZlOyBwYWRkaW5nOiAxMnB4OyBtYXJnaW4tYm90dG9tOiAxMHB4OyBjdXJzb3I6IHBvaW50ZXI7IGJvcmRlci1yYWRpdXM6IDEwcHg7IGJhY2tncm91bmQtY29sb3I6ICNmOGZhZmM7XCI+XG4gICAgXG4gICAgPGRpdiBjbGFzcz1cImxhYmVsLWNvbnRhaW5lclwiIHN0eWxlPVwiZGlzcGxheTogZmxleDsganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1wiPlxuICAgICAgPGRpdj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwidGVtcGxhdGUtaGVhZGVyXCIgc3R5bGU9XCJmb250LXdlaWdodDogNjAwO1wiPnt7IHRlbXBsYXRlLnRlbXBsYXRlTmFtZSB9fTwvbGFiZWw+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwidGVtcGxhdGUtY29udGVudFwiIHN0eWxlPVwibWFyZ2luLXRvcDogNXB4OyBjb2xvcjogIzU1NTtcIj57eyB0ZW1wbGF0ZS5jb250ZW50IH19PC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=