orque-ui 0.0.1
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/README.md +64 -0
- package/fesm2022/orque-ui.mjs +1970 -0
- package/fesm2022/orque-ui.mjs.map +1 -0
- package/package.json +24 -0
- package/types/orque-ui.d.ts +673 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orque-ui.mjs","sources":["../../../projects/o-ui/src/lib/o-ui.ts","../../../projects/o-ui/src/lib/models/page.model.ts","../../../projects/o-ui/src/lib/components/context-switcher/context-switcher.ts","../../../projects/o-ui/src/lib/components/context-switcher/context-switcher.html","../../../projects/o-ui/src/lib/components/toggle-tabs/toggle-tabs.ts","../../../projects/o-ui/src/lib/components/toggle-tabs/toggle-tabs.component.html","../../../projects/o-ui/src/lib/components/data-table/data-table.ts","../../../projects/o-ui/src/lib/components/data-table/data-table.component.html","../../../projects/o-ui/src/lib/components/o-license-modules/o-license-modules.component.ts","../../../projects/o-ui/src/lib/components/o-license-modules/o-license-modules.component.html","../../../projects/o-ui/src/lib/components/o-status-toggle/o-status-toggle.component.ts","../../../projects/o-ui/src/lib/components/o-status-toggle/o-status-toggle.component.html","../../../projects/o-ui/src/lib/components/form-drawer/form-drawer.ts","../../../projects/o-ui/src/lib/components/form-drawer/form-drawer.component.html","../../../projects/o-ui/src/lib/components/context-menu/context-menu.ts","../../../projects/o-ui/src/lib/components/context-menu/context-menu.component.html","../../../projects/o-ui/src/lib/components/o-side-panel/o-side-panel.component.ts","../../../projects/o-ui/src/lib/components/o-side-panel/o-side-panel.component.html","../../../projects/o-ui/src/lib/components/o-table-tools/o-table-tools.component.ts","../../../projects/o-ui/src/lib/components/o-table-tools/o-table-tools.component.html","../../../projects/o-ui/src/lib/components/page-renderer/page-renderer.ts","../../../projects/o-ui/src/lib/components/page-renderer/page-renderer.component.html","../../../projects/o-ui/src/lib/components/page-header/page-header.ts","../../../projects/o-ui/src/lib/components/page-header/page-header.component.html","../../../projects/o-ui/src/lib/components/side-nav/side-nav.ts","../../../projects/o-ui/src/lib/components/side-nav/side-nav.component.html","../../../projects/o-ui/src/lib/components/search-filter/search-filter.ts","../../../projects/o-ui/src/lib/components/search-filter/search-filter.component.html","../../../projects/o-ui/src/lib/components/confirmation-dialog/confirmation-dialog.ts","../../../projects/o-ui/src/lib/components/confirmation-dialog/confirmation-dialog.component.html","../../../projects/o-ui/src/lib/components/o-table/o-table.component.ts","../../../projects/o-ui/src/lib/components/o-table/o-table.component.html","../../../projects/o-ui/src/lib/components/o-toggle-button/o-toggle-button.component.ts","../../../projects/o-ui/src/lib/components/o-toggle-button/o-toggle-button.component.html","../../../projects/o-ui/src/lib/components/o-dialog/o-dialog.component.ts","../../../projects/o-ui/src/lib/components/o-dialog/o-dialog.component.html","../../../projects/o-ui/src/lib/components/o-dots-action/o-dots-action.component.ts","../../../projects/o-ui/src/lib/components/o-dots-action/o-dots-action.component.html","../../../projects/o-ui/src/lib/components/o-toast/o-toast.service.ts","../../../projects/o-ui/src/lib/components/o-toast/o-toast.component.ts","../../../projects/o-ui/src/lib/components/o-toast/o-toast.component.html","../../../projects/o-ui/src/lib/components/o-select/o-select.component.ts","../../../projects/o-ui/src/lib/components/o-select/o-select.component.html","../../../projects/o-ui/src/public-api.ts","../../../projects/o-ui/src/orque-ui.ts"],"sourcesContent":["import { Component } from '@angular/core';\n\n@Component({\n selector: 'o-o-ui',\n standalone: true,\n imports: [],\n template: '',\n})\nexport class OUi {}\n","/**\n * OPAC JSON Page Rendering Model\n */\n\nexport interface FormField {\n name: string;\n label: string;\n type?: 'input' | 'select' | 'date' | 'textarea' | 'hidden' | 'licenseModules' | 'roleActions';\n inputType?: string; // text, email, number, date, password\n isView?: boolean; // show in form\n isDisabled?: boolean;\n required?: boolean;\n options?: { label: string; value: any }[]; // for select fields\n sectionName?: string; // group header inside the step\n placeholder?: string;\n colSpan?: 'col-1' | 'col-2' | 'col-3';\n configPath?: string; // path to JSON config (used by licenseModules type)\n [key: string]: any; // allow extra properties from JSON\n}\n\nexport interface FormStep {\n stepName: string;\n label: string;\n index: number;\n fields: FormField[];\n}\n\nexport interface TableColumn {\n name: string;\n label: string;\n isHeaderView?: boolean;\n columnView?: boolean;\n pipe?: string; // e.g. 'date', 'status'\n width?: string;\n}\n\nexport interface ToggleTab {\n label: string;\n value: string; // maps to status values via statusMap in page\n isDefault?: boolean;\n}\n\nexport interface ContextMenuAction {\n label: string;\n action: string; // 'view' | 'edit' | 'submit' | 'approve' | 'reject' | 'return' | custom\n icon?: string;\n showWhen?: string[]; // list of row.status values that show this action\n type?: 'license' | 'tenant' | 'any';\n subActions?: { label: string; action: string }[]; // hover fly-out sub-menu items\n}\n\nexport interface TableToolConfig {\n add?: boolean;\n edit?: boolean;\n refresh?: boolean;\n clear?: boolean;\n export?: boolean;\n import?: boolean;\n print?: boolean;\n duplicate?: boolean;\n}\n\nexport interface PageConfig {\n title: string;\n name: string;\n store: string; // unique key, used to look up API endpoint\n api: string; // backend REST endpoint e.g. /api/tenants\n workflowApiBase?: string; // base path for workflow actions e.g. /api/tenants\n tableUniqueFieldName?: string; // defaults to 'uuid'\n toggleButton?: {\n elements: ToggleTab[];\n statusMap?: Record<string, string[]>; // tab value -> list of backend statuses\n };\n tableList?: TableColumn[];\n steps?: FormStep[];\n contextMenuActions?: ContextMenuAction[];\n tableTool?: TableToolConfig;\n}\n","import { Component, Input, Output, EventEmitter, HostListener, ElementRef } from '@angular/core';\n\n\n@Component({\n selector: 'o-context-switcher',\n standalone: true,\n imports: [],\n templateUrl: './context-switcher.html',\n styleUrls: ['./context-switcher.css']\n})\nexport class ContextSwitcherComponent {\n @Input() currentContext: string = 'OPAC';\n @Input() activeTenant: any = null;\n\n @Output() contextChange = new EventEmitter<string>();\n\n dropdownOpen = false;\n\n constructor(private elementRef: ElementRef) {}\n\n toggleDropdown() {\n this.dropdownOpen = !this.dropdownOpen;\n }\n\n isLicensed(product: string): boolean {\n if (product === 'OPAC') return true;\n if (!this.activeTenant || !this.activeTenant.settings_json) return false;\n \n let settings = this.activeTenant.settings_json;\n if (typeof settings === 'string') {\n try {\n settings = JSON.parse(settings);\n } catch (e) {\n return false;\n }\n }\n const licensed = settings.licensedProducts || {};\n return !!(licensed[product] && licensed[product].enabled);\n }\n\n switchContext(product: string) {\n if (!this.isLicensed(product)) return;\n this.currentContext = product;\n this.dropdownOpen = false;\n this.contextChange.emit(product);\n }\n\n getContextLabel(): string {\n if (this.currentContext === 'OPAC') {\n return 'OPAC Administration';\n }\n return `Orque ${this.currentContext}`;\n }\n\n @HostListener('document:click', ['$event'])\n onClickOutside(event: MouseEvent) {\n if (!this.elementRef.nativeElement.contains(event.target)) {\n this.dropdownOpen = false;\n }\n }\n}\n","<div class=\"context-switcher\">\n <button class=\"context-btn\" (click)=\"toggleDropdown()\">\n {{ getContextLabel() }}\n </button>\n <div class=\"context-dropdown\" [class.active]=\"dropdownOpen\">\n <div class=\"context-item\" [class.active]=\"currentContext === 'OPAC'\" (click)=\"switchContext('OPAC')\">\n <span class=\"context-item-title\">OPAC Administration</span>\n <span class=\"context-item-desc\">Master control panel</span>\n </div>\n @if (isLicensed('ERP')) {\n <div class=\"context-item\"\n [class.active]=\"currentContext === 'ERP'\"\n (click)=\"switchContext('ERP')\">\n <span class=\"context-item-title\">Orque ERP</span>\n <span class=\"context-item-desc\">Enterprise Resource Planning</span>\n </div>\n }\n @if (isLicensed('CRM')) {\n <div class=\"context-item\"\n [class.active]=\"currentContext === 'CRM'\"\n (click)=\"switchContext('CRM')\">\n <span class=\"context-item-title\">Orque CRM</span>\n <span class=\"context-item-desc\">Customer Relationship Management</span>\n </div>\n }\n @if (isLicensed('IMS')) {\n <div class=\"context-item\"\n [class.active]=\"currentContext === 'IMS'\"\n (click)=\"switchContext('IMS')\">\n <span class=\"context-item-title\">Orque IMS</span>\n <span class=\"context-item-desc\">Inventory Management System</span>\n </div>\n }\n </div>\n</div>\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { ToggleTab } from '../../models/page.model';\n\n@Component({\n selector: 'o-toggle-tabs',\n standalone: true,\n imports: [],\n templateUrl: './toggle-tabs.component.html',\n styleUrls: ['./toggle-tabs.component.scss']\n})\nexport class ToggleTabsComponent {\n @Input() tabs: ToggleTab[] = [];\n @Input() activeTab: string = '';\n @Output() tabChange = new EventEmitter<string>();\n\n select(value: string) {\n this.activeTab = value;\n this.tabChange.emit(value);\n }\n}\n","<div class=\"o-btn-group\">\n @for (tab of tabs; track tab.value) {\n <button\n class=\"o-btn-group__btn\"\n [class.o-btn-group__btn--active]=\"activeTab === tab.value\"\n (click)=\"select(tab.value)\"\n type=\"button\">\n {{ tab.label }}\n </button>\n }\n</div>\n","\nimport {\n Component,\n EventEmitter,\n Input,\n Output,\n OnChanges\n} from '@angular/core';\nimport { DatePipe } from '@angular/common';\nimport { TableColumn } from '../../models/page.model';\n\nexport interface TableAction {\n label: string;\n action: string;\n icon?: string;\n}\n\n@Component({\n selector: 'o-data-table',\n standalone: true,\n imports: [DatePipe],\n templateUrl: './data-table.component.html',\n styleUrls: ['./data-table.component.scss']\n})\nexport class DataTableComponent implements OnChanges {\n\n @Input() columns: TableColumn[] = [];\n\n @Input() rows: any[] = [];\n\n @Input() selectable = true;\n\n @Input() actions: TableAction[] = [];\n\n @Output() rowClick = new EventEmitter<any>();\n\n @Output() menuOpen = new EventEmitter<{\n event: MouseEvent;\n row: any;\n }>();\n\n @Output() actionClick = new EventEmitter<{\n action: string;\n row: any;\n }>();\n\n @Output() selectionChange = new EventEmitter<any[]>();\n\n visibleColumns: TableColumn[] = [];\n\n selectedRows: any[] = [];\n\n menuRow: any = null;\n\n ngOnChanges(): void {\n this.visibleColumns = this.columns.filter(\n c =>\n c.isHeaderView !== false &&\n c.name !== 'checkbox' &&\n c.name !== 'actionSection'\n );\n }\n\n selectRow(row: any): void {\n this.rowClick.emit(row);\n }\n\n onCellClick(event: MouseEvent, colName: string, row: any): void {\n event.stopPropagation();\n event.preventDefault();\n if (colName === 'requestId') {\n this.actionClick.emit({ action: 'view', row });\n }\n }\n\n isSelected(row: any): boolean {\n return this.selectedRows.includes(row);\n }\n\n toggleRow(row: any): void {\n\n if (this.isSelected(row)) {\n this.selectedRows =\n this.selectedRows.filter(r => r !== row);\n } else {\n this.selectedRows.push(row);\n }\n\n this.selectionChange.emit(this.selectedRows);\n }\n\n toggleAll(event: Event): void {\n\n const checked =\n (event.target as HTMLInputElement).checked;\n\n this.selectedRows =\n checked ? [...this.rows] : [];\n\n this.selectionChange.emit(this.selectedRows);\n }\n\n isAllSelected(): boolean {\n\n return (\n this.rows.length > 0 &&\n this.selectedRows.length === this.rows.length\n );\n }\n\n openMenu(event: MouseEvent, row: any): void {\n\n event.stopPropagation();\n\n this.menuOpen.emit({\n event,\n row\n });\n\n this.menuRow =\n this.menuRow === row\n ? null\n : row;\n }\n\n triggerAction(\n action: string,\n row: any,\n event: MouseEvent\n ): void {\n\n event.stopPropagation();\n\n this.actionClick.emit({\n action,\n row\n });\n\n this.menuRow = null;\n }\n\n statusClass(status: string): string {\n\n if (!status) {\n return '';\n }\n\n switch (status.toLowerCase()) {\n\n case 'draft':\n return 'status-draft';\n\n case 'active':\n case 'approved':\n return 'status-active';\n\n case 'pending':\n case 'returned':\n case 'in progress':\n return 'status-progress';\n\n case 'rejected':\n case 'cancelled':\n case 'expired':\n return 'status-rejected';\n\n default:\n return 'status-inactive';\n }\n }\n}\n","<div class=\"o-table-wrapper\">\n\n <table class=\"o-table\">\n\n <thead>\n <tr>\n\n <!-- Checkbox Column -->\n <th class=\"checkbox-col\">\n <input\n type=\"checkbox\"\n [checked]=\"isAllSelected()\"\n (change)=\"toggleAll($event)\"\n />\n </th>\n\n <!-- Actions Column -->\n <th class=\"action-col\">Actions</th>\n\n <!-- Dynamic Columns -->\n @for (col of visibleColumns; track col.name) {\n <th [style.width]=\"col.width || 'auto'\">\n {{ col.label }}\n </th>\n }\n\n </tr>\n </thead>\n\n <tbody>\n\n <!-- Empty State -->\n @if (rows.length === 0) {\n <tr>\n <td class=\"o-empty-cell\" [attr.colspan]=\"visibleColumns.length + 2\">\n No data found\n </td>\n </tr>\n }\n\n <!-- Data Rows -->\n @for (row of rows; track $index) {\n <tr class=\"table-row\" (click)=\"selectRow(row)\">\n\n <!-- Checkbox -->\n <td class=\"checkbox-col\">\n <input\n type=\"checkbox\"\n [checked]=\"isSelected(row)\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"toggleRow(row)\"\n />\n </td>\n\n <!-- Actions -->\n <td class=\"action-cell\">\n <button\n type=\"button\"\n class=\"action-btn\"\n (click)=\"openMenu($event, row)\"\n title=\"Actions\">\n ⋮\n </button>\n </td>\n\n <!-- Dynamic Columns -->\n @for (col of visibleColumns; track col.name) {\n <td>\n @if (col.name === 'requestId') {\n <a href=\"javascript:void(0)\" class=\"o-table-link\" (click)=\"onCellClick($event, col.name, row)\">\n {{ row[col.name] || '—' }}\n </a>\n } @else if (col.pipe === 'status') {\n <span class=\"o-status-badge\" [class]=\"statusClass(row[col.name])\">\n {{ row[col.name] || '—' }}\n </span>\n } @else if (col.pipe === 'date') {\n {{ row[col.name] ? (row[col.name] | date:'dd MMM yyyy') : '—' }}\n } @else {\n {{ row[col.name] || '—' }}\n }\n </td>\n }\n\n </tr>\n }\n\n </tbody>\n\n </table>\n\n</div>\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n OnInit,\n OnDestroy,\n OnChanges,\n SimpleChanges,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n signal,\n forwardRef\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\nimport { ReactiveFormsModule, FormGroup, FormControl, ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport {\n OLicenseModuleMetadata,\n OLicenseAccessKey,\n OLicensePlanData,\n OLicenseModuleGroup,\n OLicenseDisplayedFeature,\n OLicenseModulesConfig,\n OLicenseModulesValue\n} from './o-license-modules.model';\n\nfunction buildFromConfig(config: OLicenseModulesConfig): {\n moduleMetadata: { [key: string]: OLicenseModuleMetadata };\n planData: OLicensePlanData[];\n} {\n const modules = config.modules || {};\n const system = config.system || {};\n\n const moduleMetadata: { [key: string]: OLicenseModuleMetadata } = {};\n const planData: OLicensePlanData[] = [];\n\n Object.keys(modules).forEach(key => {\n const mod = modules[key];\n\n moduleMetadata[key] = {\n label: mod.label || key.toUpperCase(),\n desc: mod.desc || '',\n icon: mod.icon || ''\n };\n\n const accessKeys: { [groupKey: string]: OLicenseAccessKey[] } = {};\n\n const groups = mod.groups || {};\n Object.keys(groups).forEach(groupName => {\n accessKeys[groupName] = (groups[groupName] as string[]).map(s => ({\n screen: s,\n name: s.substring(1),\n isMark: false,\n isDisabled: false\n }));\n });\n\n const sysSettings = mod.systemSettings || system['System Settings'] || [];\n accessKeys['System Settings'] = sysSettings.map(s => ({\n screen: s,\n name: s.substring(1),\n isMark: true,\n isDisabled: false\n }));\n\n const bizMaster = mod.businessMaster || system['Business Master'] || [];\n accessKeys['Business Master'] = bizMaster.map(s => ({\n screen: s,\n name: s.substring(1),\n isMark: true,\n isDisabled: false\n }));\n\n planData.push({ productName: key, accessKeys });\n });\n\n return { moduleMetadata, planData };\n}\n\n@Component({\n selector: 'o-license-modules',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule],\n templateUrl: './o-license-modules.component.html',\n styleUrls: ['./o-license-modules.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => OLicenseModulesComponent),\n multi: true\n }\n ]\n})\nexport class OLicenseModulesComponent implements OnInit, OnDestroy, OnChanges, ControlValueAccessor {\n\n @Input() configPath = 'assets/application/pages/license-modules.json';\n @Input() disabled = false;\n @Input() value: OLicenseModulesValue | null = null;\n\n @Output() valueChange = new EventEmitter<OLicenseModulesValue>();\n\n // Signals\n allData = signal<OLicensePlanData[]>([]);\n selectedModules = signal<Set<string>>(new Set());\n isCustomMode = signal<boolean>(false);\n searchText = signal<string>('');\n\n form: FormGroup = new FormGroup({});\n\n private moduleMetadata: { [key: string]: OLicenseModuleMetadata } = {};\n private readonly destroy$ = new Subject<void>();\n private configLoaded = false;\n\n private onChange: (val: OLicenseModulesValue) => void = () => {};\n private onTouched: () => void = () => {};\n\n constructor(\n private readonly http: HttpClient,\n private readonly cdr: ChangeDetectorRef\n ) {}\n\n ngOnInit(): void {\n this.http.get<OLicenseModulesConfig>(this.configPath).pipe(takeUntil(this.destroy$)).subscribe({\n next: (config) => {\n const built = buildFromConfig(config);\n this.moduleMetadata = built.moduleMetadata;\n this.allData.set(built.planData);\n this.configLoaded = true;\n this.setupForm();\n this.applyInitialValue();\n this.cdr.markForCheck();\n },\n error: (err) => {\n console.error('[o-license-modules] Failed to load config:', err);\n }\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['value'] && this.configLoaded) {\n this.applyInitialValue();\n }\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n // ControlValueAccessor\n writeValue(val: OLicenseModulesValue | null): void {\n this.value = val;\n if (this.configLoaded) {\n this.applyInitialValue();\n }\n }\n\n registerOnChange(fn: (val: OLicenseModulesValue) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this.cdr.markForCheck();\n }\n\n private setupForm(): void {\n const group: { [key: string]: FormGroup } = {};\n\n this.allData().forEach(planData => {\n const productGroup: { [key: string]: FormControl } = {};\n Object.keys(planData.accessKeys).forEach(groupKey => {\n planData.accessKeys[groupKey].forEach(accessKey => {\n productGroup[accessKey.screen] = new FormControl(false);\n });\n });\n group[planData.productName] = new FormGroup(productGroup);\n });\n\n this.form = new FormGroup(group);\n\n this.form.valueChanges.pipe(takeUntil(this.destroy$)).subscribe(() => {\n const output = this.buildOutputValue();\n this.onChange(output);\n this.onTouched();\n this.valueChange.emit(output);\n });\n }\n\n private applyInitialValue(): void {\n if (!this.value) {\n this.selectedModules.set(new Set());\n this.isCustomMode.set(false);\n return;\n }\n\n const selectedMods = new Set<string>();\n Object.keys(this.value).forEach(productName => {\n const screens = this.value![productName] || [];\n if (screens.length > 0) {\n selectedMods.add(productName.toLowerCase());\n }\n });\n\n this.selectedModules.set(selectedMods);\n\n this.allData().forEach(planData => {\n const pName = planData.productName.toLowerCase();\n const savedScreens = this.value![pName] || this.value![planData.productName] || [];\n const productForm = this.form.get(planData.productName) as FormGroup;\n if (!productForm) return;\n\n if (selectedMods.has(pName) && savedScreens.length > 0) {\n savedScreens.forEach(screen => {\n const ctrl = productForm.get(screen);\n if (ctrl) ctrl.setValue(true, { emitEvent: false });\n });\n } else if (selectedMods.has(pName)) {\n this.checkAllFeaturesForPlan(planData, productForm);\n }\n });\n\n this.cdr.markForCheck();\n }\n\n private checkAllFeaturesForPlan(planData: OLicensePlanData, productForm: FormGroup): void {\n Object.keys(planData.accessKeys).forEach(groupKey => {\n planData.accessKeys[groupKey].forEach(accessKey => {\n const ctrl = productForm.get(accessKey.screen);\n if (ctrl && !accessKey.isDisabled) {\n ctrl.setValue(true, { emitEvent: false });\n }\n });\n });\n }\n\n // Public methods used in template\n getModuleMetadata(name: string): OLicenseModuleMetadata | undefined {\n return this.moduleMetadata[name.toLowerCase()];\n }\n\n toggleModule(productName: string): void {\n if (this.disabled) return;\n\n if (productName === 'custom') {\n const next = !this.isCustomMode();\n this.isCustomMode.set(next);\n if (!next) {\n this.isCustomMode.set(false);\n }\n } else {\n const current = new Set(this.selectedModules());\n const key = productName.toLowerCase();\n\n if (current.has(key)) {\n current.delete(key);\n this.uncheckAllForProduct(productName);\n } else {\n current.add(key);\n const planData = this.allData().find(p => p.productName.toLowerCase() === key);\n if (planData) {\n const productForm = this.form.get(planData.productName) as FormGroup;\n if (productForm) {\n this.checkAllFeaturesForPlan(planData, productForm);\n }\n }\n }\n\n this.selectedModules.set(current);\n }\n\n this.cdr.markForCheck();\n const output = this.buildOutputValue();\n this.onChange(output);\n this.onTouched();\n this.valueChange.emit(output);\n }\n\n private uncheckAllForProduct(productName: string): void {\n const productForm = this.form.get(productName) as FormGroup;\n if (!productForm) return;\n Object.keys(productForm.controls).forEach(key => {\n productForm.get(key)?.setValue(false, { emitEvent: false });\n });\n }\n\n getFormControl(productName: string, screen: string): FormControl {\n return this.form.get(productName)?.get(screen) as FormControl;\n }\n\n filterFeatures(text: string): void {\n this.searchText.set(text);\n this.cdr.markForCheck();\n }\n\n getDisplayedGroups(): OLicenseModuleGroup[] {\n const selectedMods = this.selectedModules();\n const isCustom = this.isCustomMode();\n const filter = this.searchText().toLowerCase();\n\n if (!isCustom && selectedMods.size === 0) {\n return [];\n }\n\n const groupsMap = new Map<string, { groupName: string; featuresMap: Map<string, OLicenseDisplayedFeature> }>();\n\n this.allData().forEach(planData => {\n const pNameLower = planData.productName.toLowerCase();\n if (!isCustom && !selectedMods.has(pNameLower)) {\n return;\n }\n\n Object.keys(planData.accessKeys).forEach(groupKey => {\n const keyLower = groupKey.toLowerCase();\n if (!groupsMap.has(keyLower)) {\n groupsMap.set(keyLower, {\n groupName: groupKey,\n featuresMap: new Map()\n });\n }\n const featuresMap = groupsMap.get(keyLower)!.featuresMap;\n\n planData.accessKeys[groupKey].forEach(accessKey => {\n if (filter && !accessKey.name.toLowerCase().includes(filter) && !accessKey.screen.toLowerCase().includes(filter)) {\n return;\n }\n const screenLower = accessKey.screen.toLowerCase();\n if (!featuresMap.has(screenLower)) {\n featuresMap.set(screenLower, {\n screen: accessKey.screen,\n name: accessKey.name,\n isDisabled: accessKey.isDisabled,\n productName: planData.productName\n });\n }\n });\n });\n });\n\n const result: OLicenseModuleGroup[] = [];\n groupsMap.forEach(data => {\n if (data.featuresMap.size > 0) {\n result.push({\n groupName: data.groupName,\n features: Array.from(data.featuresMap.values())\n });\n }\n });\n\n return result;\n }\n\n getTotalFeaturesCount(): number {\n return this.getDisplayedGroups().reduce((acc, g) => acc + g.features.length, 0);\n }\n\n getSelectedModulesTitle(): string {\n const mods = Array.from(this.selectedModules());\n if (mods.length === 0) return 'Selected module features';\n const labels = mods.map(m => this.moduleMetadata[m]?.label || m.toUpperCase());\n return labels.join(' + ') + ' modules';\n }\n\n clearAll(): void {\n if (this.disabled) return;\n this.selectedModules.set(new Set());\n this.isCustomMode.set(false);\n\n this.allData().forEach(planData => {\n this.uncheckAllForProduct(planData.productName);\n });\n\n this.cdr.markForCheck();\n const output = this.buildOutputValue();\n this.onChange(output);\n this.onTouched();\n this.valueChange.emit(output);\n }\n\n private buildOutputValue(): OLicenseModulesValue {\n const output: OLicenseModulesValue = {};\n\n this.allData().forEach(planData => {\n const pName = planData.productName;\n const productForm = this.form.get(pName) as FormGroup;\n if (!productForm) return;\n\n const checkedScreens = Object.keys(productForm.controls).filter(\n key => productForm.get(key)?.value === true\n );\n\n if (checkedScreens.length > 0) {\n output[pName] = checkedScreens;\n }\n });\n\n return output;\n }\n}\n","<div class=\"o-lm\" [class.o-lm--disabled]=\"disabled\" [formGroup]=\"form\">\n\n <!-- Step 1: Select Modules -->\n <div class=\"o-lm__step-row\">\n <span class=\"o-lm__step\">1</span>\n <span class=\"o-lm__step-label\">Select modules</span>\n </div>\n\n <div class=\"o-lm__modules-grid\">\n @for (planData of allData(); track planData.productName) {\n @let meta = getModuleMetadata(planData.productName);\n @if (meta) {\n <div\n class=\"o-lm__mod-card\"\n [class.o-lm__mod-card--selected]=\"selectedModules().has(planData.productName.toLowerCase()) && !isCustomMode()\"\n (click)=\"toggleModule(planData.productName)\"\n role=\"button\"\n [attr.aria-pressed]=\"selectedModules().has(planData.productName.toLowerCase())\"\n tabindex=\"0\"\n (keydown.enter)=\"toggleModule(planData.productName)\"\n (keydown.space)=\"$event.preventDefault(); toggleModule(planData.productName)\"\n >\n <div class=\"o-lm__mod-check\">\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M5 12l5 5L20 7\"/></svg>\n </div>\n <div class=\"o-lm__mod-icon\">\n <svg viewBox=\"0 0 24 24\" stroke-width=\"2\" stroke=\"currentColor\" fill=\"none\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <path [attr.d]=\"meta.icon\"/>\n </svg>\n </div>\n <h3 class=\"o-lm__mod-title\">{{ meta.label }}</h3>\n <p class=\"o-lm__mod-desc\">{{ meta.desc }}</p>\n </div>\n }\n }\n\n <!-- Custom card -->\n <div\n class=\"o-lm__mod-card o-lm__mod-card--custom\"\n [class.o-lm__mod-card--selected-custom]=\"isCustomMode()\"\n (click)=\"toggleModule('custom')\"\n role=\"button\"\n [attr.aria-pressed]=\"isCustomMode()\"\n tabindex=\"0\"\n (keydown.enter)=\"toggleModule('custom')\"\n (keydown.space)=\"$event.preventDefault(); toggleModule('custom')\"\n >\n <div class=\"o-lm__mod-check o-lm__mod-check--custom\">\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M5 12l5 5L20 7\"/></svg>\n </div>\n <div class=\"o-lm__mod-icon\">\n <svg viewBox=\"0 0 24 24\" stroke-width=\"2\" stroke=\"currentColor\" fill=\"none\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M3 5h18M3 12h18M3 19h18M7 2v6M17 9v6M11 16v6\"/>\n </svg>\n </div>\n <h3 class=\"o-lm__mod-title\">Custom</h3>\n <p class=\"o-lm__mod-desc\">Pick individual features</p>\n </div>\n </div>\n\n <!-- Step 2: Features Panel -->\n <div class=\"o-lm__step-row\">\n <span class=\"o-lm__step\">2</span>\n <span class=\"o-lm__step-label\">Features included</span>\n </div>\n\n <div class=\"o-lm__panel\">\n <div class=\"o-lm__panel-header\">\n <span class=\"o-lm__panel-title\">\n @if (!isCustomMode() && selectedModules().size === 0) {\n No module selected\n } @else if (isCustomMode()) {\n Custom — all features available\n } @else {\n @if (getTotalFeaturesCount() > 0) {\n {{ getSelectedModulesTitle() }}\n } @else {\n No features found\n }\n }\n </span>\n @if (isCustomMode() || selectedModules().size > 0) {\n <span\n class=\"o-lm__badge\"\n [class.o-lm__badge--green]=\"isCustomMode()\"\n [class.o-lm__badge--blue]=\"!isCustomMode()\"\n >\n {{ getTotalFeaturesCount() }} features\n </span>\n }\n </div>\n\n @if (isCustomMode() || selectedModules().size > 0) {\n <div class=\"o-lm__search-row\">\n <svg viewBox=\"0 0 24 24\" stroke-width=\"2\" stroke=\"currentColor\" fill=\"none\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <circle cx=\"11\" cy=\"11\" r=\"8\"/>\n <line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\"/>\n </svg>\n <input\n type=\"text\"\n class=\"o-lm__search-input\"\n placeholder=\"Filter features...\"\n [value]=\"searchText()\"\n (input)=\"filterFeatures($any($event.target).value)\"\n aria-label=\"Filter features\"\n />\n </div>\n\n <div class=\"o-lm__panel-body\">\n @let groups = getDisplayedGroups();\n @if (groups.length === 0) {\n <div class=\"o-lm__empty-state\">\n <svg viewBox=\"0 0 24 24\" stroke-width=\"2\" stroke=\"currentColor\" fill=\"none\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <circle cx=\"11\" cy=\"11\" r=\"8\"/>\n <line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\"/>\n </svg>\n <p>No features match \"{{ searchText() }}\"</p>\n </div>\n } @else {\n @for (group of groups; track group.groupName) {\n <div class=\"o-lm__module-section\">\n <h4 class=\"o-lm__section-title\">\n {{ group.groupName }}\n <span class=\"o-lm__section-count\">({{ group.features.length }})</span>\n </h4>\n @for (feature of group.features; track feature.screen) {\n <div\n class=\"o-lm__feature-item\"\n [class.o-lm__feature-item--disabled]=\"disabled || feature.isDisabled\"\n >\n <input\n type=\"checkbox\"\n class=\"o-lm__feature-checkbox\"\n [formControl]=\"getFormControl(feature.productName, feature.screen)\"\n [attr.disabled]=\"(disabled || feature.isDisabled) ? '' : null\"\n [id]=\"'feat-' + feature.productName + '-' + feature.screen\"\n />\n <label\n class=\"o-lm__feature-label\"\n [for]=\"'feat-' + feature.productName + '-' + feature.screen\"\n >\n {{ feature.name }}\n </label>\n </div>\n }\n </div>\n }\n }\n </div>\n } @else {\n <div class=\"o-lm__panel-body\">\n <div class=\"o-lm__empty-state\">\n <svg viewBox=\"0 0 24 24\" stroke-width=\"2\" stroke=\"currentColor\" fill=\"none\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <rect x=\"3\" y=\"3\" width=\"7\" height=\"7\"/>\n <rect x=\"14\" y=\"3\" width=\"7\" height=\"7\"/>\n <rect x=\"14\" y=\"14\" width=\"7\" height=\"7\"/>\n <rect x=\"3\" y=\"14\" width=\"7\" height=\"7\"/>\n </svg>\n <p>Select a module above to view included features</p>\n </div>\n </div>\n }\n </div>\n\n <!-- Actions -->\n <div class=\"o-lm__action-row\">\n <button\n type=\"button\"\n class=\"o-lm__btn-clear\"\n [disabled]=\"disabled\"\n (click)=\"clearAll()\"\n >\n Clear all\n </button>\n </div>\n\n</div>\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n forwardRef\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';\n\n@Component({\n selector: 'o-status-toggle',\n standalone: true,\n imports: [CommonModule, FormsModule],\n templateUrl: './o-status-toggle.component.html',\n styleUrls: ['./o-status-toggle.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => OStatusToggleComponent),\n multi: true\n }\n ]\n})\nexport class OStatusToggleComponent implements ControlValueAccessor {\n\n @Input() labels: [string, string] = ['Active', 'Inactive'];\n @Input() value = true;\n @Input() disabled = false;\n\n @Output() valueChange = new EventEmitter<boolean>();\n\n private onChange: (val: boolean) => void = () => {};\n private onTouched: () => void = () => {};\n\n get activeLabel(): string {\n return this.labels[0];\n }\n\n get inactiveLabel(): string {\n return this.labels[1];\n }\n\n toggle(): void {\n if (this.disabled) return;\n this.value = !this.value;\n this.onChange(this.value);\n this.onTouched();\n this.valueChange.emit(this.value);\n }\n\n writeValue(val: boolean): void {\n this.value = !!val;\n }\n\n registerOnChange(fn: (val: boolean) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n}\n","<label class=\"o-status-toggle\" [class.o-status-toggle--active]=\"value\" [class.o-status-toggle--inactive]=\"!value\" [class.o-status-toggle--disabled]=\"disabled\">\n <input\n type=\"checkbox\"\n class=\"o-status-toggle__input\"\n [checked]=\"value\"\n [disabled]=\"disabled\"\n (change)=\"toggle()\"\n aria-label=\"Status toggle\"\n />\n <span class=\"o-status-toggle__track\">\n <span class=\"o-status-toggle__thumb\"></span>\n </span>\n @if (value) {\n <span class=\"o-status-toggle__label o-status-toggle__label--left\">{{ activeLabel }}</span>\n }\n @if (!value) {\n <span class=\"o-status-toggle__label o-status-toggle__label--right\">{{ inactiveLabel }}</span>\n }\n</label>\n","import { Component, Input, Output, EventEmitter, OnChanges, SimpleChanges, ChangeDetectorRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { FormStep, FormField } from '../../models/page.model';\nimport { OLicenseModulesComponent } from '../o-license-modules/o-license-modules.component';\nimport { OStatusToggleComponent } from '../o-status-toggle/o-status-toggle.component';\n\n@Component({\n selector: 'o-form-drawer',\n standalone: true,\n imports: [CommonModule, FormsModule, OLicenseModulesComponent, OStatusToggleComponent],\n templateUrl: './form-drawer.component.html',\n styleUrls: ['./form-drawer.component.scss']\n})\nexport class FormDrawerComponent implements OnChanges {\n @Input() open = false;\n @Input() title = 'New Request';\n @Input() steps: FormStep[] = [];\n @Input() rowData: any = null;\n @Input() showSubmit = true;\n @Input() readOnly = false;\n @Input() actionType: 'new' | 'edit' | 'view' | 'renew' | 'upgrade' = 'new';\n\n @Output() closeDrawer = new EventEmitter<void>();\n @Output() save = new EventEmitter<any>();\n @Output() submit = new EventEmitter<any>();\n\n formData: any = {};\n selectedProducts: string[] = [];\n\n constructor(private readonly cdr: ChangeDetectorRef) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['rowData'] || changes['open']) {\n this.formData = this.rowData ? { ...this.rowData } : {};\n this.initializeProductDetails();\n this.selectedProducts = this.getSelectedProducts();\n this.cdr.detectChanges();\n }\n }\n\n initializeProductDetails(): void {\n if (!this.formData.productDetails) {\n this.formData.productDetails = {};\n }\n if (this.formData.licenseDetails && Array.isArray(this.formData.licenseDetails)) {\n this.formData.licenseDetails.forEach((prod: any) => {\n const pName = prod.productName.toLowerCase();\n this.formData.productDetails[pName] = {\n userLimit: prod.userLimit || 80,\n concurrentLimit: prod.concurrentLimit || 15,\n startDate: prod.startDate || '',\n endDate: prod.endDate || '',\n gracePeriod: prod.gracePeriod || 30\n };\n });\n } else {\n this.syncProductDetails();\n }\n }\n\n getSelectedProducts(): string[] {\n const modules = this.formData.modules || {};\n return Object.keys(modules).filter(key => {\n const screens = modules[key];\n return Array.isArray(screens) && screens.length > 0;\n });\n }\n\n onModulesChange(value: any): void {\n this.formData.modules = value || {};\n this.syncProductDetails();\n this.selectedProducts = this.getSelectedProducts();\n this.cdr.detectChanges();\n }\n\n private syncProductDetails(): void {\n if (!this.formData.productDetails) {\n this.formData.productDetails = {};\n }\n const selectedProds = this.getSelectedProducts();\n selectedProds.forEach(pName => {\n const key = pName.toLowerCase();\n if (!this.formData.productDetails[key]) {\n this.formData.productDetails[key] = {\n userLimit: 80,\n concurrentLimit: 15,\n startDate: '',\n endDate: '',\n gracePeriod: 30\n };\n }\n });\n }\n\n /**\n * Returns all fields for rendering, including hidden section-header fields and\n * special component-type fields like licenseModules.\n */\n visibleFields(step: FormStep): FormField[] {\n return (step.fields || []).filter(f => {\n // Always include hidden fields that carry a sectionName (section headers)\n if (f.type === 'hidden' && f.sectionName) {\n return true;\n }\n // Exclude purely hidden fields with no sectionName\n if (f.type === 'hidden') {\n return false;\n }\n // Include all renderable types\n return (\n !f.type ||\n f.type === 'input' ||\n f.type === 'select' ||\n f.type === 'textarea' ||\n f.type === 'date' ||\n f.type === 'licenseModules' ||\n f.type === 'roleActions'\n );\n });\n }\n\n\n\n isRoleActionEnabled(action: string): boolean {\n const actions = this.formData.actions || [];\n return actions.includes(action);\n }\n\n toggleRoleAction(action: string, enabled: boolean): void {\n if (!this.formData.actions) {\n this.formData.actions = [];\n }\n if (enabled) {\n if (!this.formData.actions.includes(action)) {\n this.formData.actions.push(action);\n }\n } else {\n this.formData.actions = this.formData.actions.filter((a: string) => a !== action);\n }\n this.cdr.detectChanges();\n }\n\n close(): void {\n this.closeDrawer.emit();\n }\n\n onSave(): void {\n this.save.emit({ ...this.formData });\n }\n\n onSubmit(): void {\n this.submit.emit({ ...this.formData });\n }\n\n onOverlayClick(event: MouseEvent): void {\n if ((event.target as HTMLElement).classList.contains('o-drawer-overlay')) {\n this.close();\n }\n }\n}\n","<div class=\"o-drawer-overlay\" [class.open]=\"open\" (click)=\"onOverlayClick($event)\">\n <div class=\"o-drawer\" [class.open]=\"open\">\n\n <div class=\"o-drawer-header\">\n <h3 class=\"o-drawer-title\">\n {{ title }}\n @if (formData.requestId) {\n <span class=\"o-drawer-id\">({{ formData.requestId }})</span>\n }\n </h3>\n <button class=\"o-drawer-close\" type=\"button\" (click)=\"close()\" aria-label=\"Close drawer\">✕</button>\n </div>\n\n <div class=\"o-drawer-body\">\n @for (step of steps; track step.stepName) {\n @if (step.stepName === 'step3') {\n <div class=\"o-section-header span-3\">{{ step.label || 'License details' }}</div>\n \n <div class=\"o-license-details-table-wrapper\">\n <table class=\"o-license-details-table\">\n <thead>\n <tr>\n <th>Product</th>\n <th>Users</th>\n <th>Grace Period (Days)</th>\n <th>Start Date</th>\n <th>End Date</th>\n </tr>\n </thead>\n <tbody>\n @if (selectedProducts.length === 0) {\n <tr>\n <td colspan=\"5\" style=\"text-align: center; color: #94a3b8; padding: 16px;\">\n No modules selected. Select modules in Step 2 to configure license details.\n </td>\n </tr>\n } @else {\n @for (prod of selectedProducts; track prod) {\n @if (formData.productDetails && formData.productDetails[prod.toLowerCase()]) {\n <tr>\n <td class=\"o-module-name-cell\">{{ prod.toUpperCase() }}</td>\n <td>\n <input type=\"number\" class=\"o-input\" \n [(ngModel)]=\"formData.productDetails[prod.toLowerCase()].userLimit\" \n [disabled]=\"readOnly\"\n placeholder=\"e.g. 80\">\n </td>\n <td>\n <input type=\"number\" class=\"o-input\" \n [(ngModel)]=\"formData.productDetails[prod.toLowerCase()].gracePeriod\" \n [disabled]=\"readOnly || actionType === 'renew'\"\n placeholder=\"e.g. 30\">\n </td>\n <td>\n <input type=\"date\" class=\"o-input\" \n [(ngModel)]=\"formData.productDetails[prod.toLowerCase()].startDate\"\n [disabled]=\"readOnly\">\n </td>\n <td>\n <input type=\"date\" class=\"o-input\" \n [(ngModel)]=\"formData.productDetails[prod.toLowerCase()].endDate\"\n [disabled]=\"readOnly\">\n </td>\n </tr>\n }\n }\n }\n </tbody>\n </table>\n </div>\n } @else {\n @for (item of visibleFields(step); track item.name) {\n\n @if (item.type === 'hidden' && item.sectionName) {\n <div class=\"o-section-header\">{{ item.sectionName }}</div>\n } @else if (item.type === 'licenseModules') {\n <div class=\"o-field span-3\">\n @if (item.label) {\n <label class=\"o-field-label\">{{ item.label }}</label>\n }\n <o-license-modules\n [configPath]=\"item['configPath'] || 'assets/application/pages/license-modules.json'\"\n [value]=\"formData[item.name]\"\n [disabled]=\"readOnly || actionType === 'renew'\"\n (valueChange)=\"onModulesChange($event)\"\n ></o-license-modules>\n </div>\n\n } @else if (item.type === 'roleActions') {\n <div class=\"o-field span-3\">\n @if (item.label) {\n <label class=\"o-field-label\">{{ item.label }}</label>\n }\n \n <div class=\"o-permissions-grid\">\n <div class=\"o-permission-toggle-item\">\n <span class=\"o-permission-label\">Edit Draft</span>\n <o-status-toggle \n [labels]=\"['On', 'Off']\" \n [value]=\"isRoleActionEnabled('edit')\"\n (valueChange)=\"toggleRoleAction('edit', $event)\"\n [disabled]=\"readOnly\">\n </o-status-toggle>\n </div>\n <div class=\"o-permission-toggle-item\">\n <span class=\"o-permission-label\">Save Request</span>\n <o-status-toggle \n [labels]=\"['On', 'Off']\" \n [value]=\"isRoleActionEnabled('save')\"\n (valueChange)=\"toggleRoleAction('save', $event)\"\n [disabled]=\"readOnly\">\n </o-status-toggle>\n </div>\n <div class=\"o-permission-toggle-item\">\n <span class=\"o-permission-label\">Send for Approval</span>\n <o-status-toggle \n [labels]=\"['On', 'Off']\" \n [value]=\"isRoleActionEnabled('submit')\"\n (valueChange)=\"toggleRoleAction('submit', $event)\"\n [disabled]=\"readOnly\">\n </o-status-toggle>\n </div>\n <div class=\"o-permission-toggle-item\">\n <span class=\"o-permission-label\">Approve</span>\n <o-status-toggle \n [labels]=\"['On', 'Off']\" \n [value]=\"isRoleActionEnabled('approve')\"\n (valueChange)=\"toggleRoleAction('approve', $event)\"\n [disabled]=\"readOnly\">\n </o-status-toggle>\n </div>\n <div class=\"o-permission-toggle-item\">\n <span class=\"o-permission-label\">Reject</span>\n <o-status-toggle \n [labels]=\"['On', 'Off']\" \n [value]=\"isRoleActionEnabled('reject')\"\n (valueChange)=\"toggleRoleAction('reject', $event)\"\n [disabled]=\"readOnly\">\n </o-status-toggle>\n </div>\n <div class=\"o-permission-toggle-item\">\n <span class=\"o-permission-label\">Return for Revision</span>\n <o-status-toggle \n [labels]=\"['On', 'Off']\" \n [value]=\"isRoleActionEnabled('return')\"\n (valueChange)=\"toggleRoleAction('return', $event)\"\n [disabled]=\"readOnly\">\n </o-status-toggle>\n </div>\n </div>\n </div>\n\n } @else {\n <div class=\"o-field\"\n [class.span-1]=\"!item.colSpan || item.colSpan === 'col-1'\"\n [class.span-2]=\"item.colSpan === 'col-2'\"\n [class.span-3]=\"item.colSpan === 'col-3'\">\n\n <label class=\"o-field-label\">\n {{ item.label }}\n @if (item.required) {\n <span class=\"o-required\">*</span>\n }\n </label>\n\n @if (item.type === 'select') {\n <select class=\"o-input\"\n [(ngModel)]=\"formData[item.name]\"\n [disabled]=\"readOnly || actionType === 'renew' || item.isDisabled || false\">\n <option value=\"\">— Select —</option>\n @for (opt of (item.options || []); track opt.value) {\n <option [value]=\"opt.value\">{{ opt.label }}</option>\n }\n </select>\n }\n\n @if (item.type === 'textarea') {\n <textarea class=\"o-input o-textarea\"\n [placeholder]=\"item.placeholder || ''\"\n [(ngModel)]=\"formData[item.name]\"\n [disabled]=\"readOnly || actionType === 'renew' || item.isDisabled || false\">\n </textarea>\n }\n\n @if (!item.type || item.type === 'input' || item.type === 'date') {\n <input class=\"o-input\"\n [type]=\"item.inputType || 'text'\"\n [placeholder]=\"item.placeholder || ''\"\n [(ngModel)]=\"formData[item.name]\"\n [disabled]=\"readOnly || actionType === 'renew' || item.isDisabled || false\">\n }\n\n </div>\n }\n\n }\n }\n }\n </div>\n\n <div class=\"o-drawer-footer\">\n @if (readOnly) {\n <button class=\"o-btn-secondary\" type=\"button\" (click)=\"close()\">Close</button>\n } @else {\n <button class=\"o-btn-secondary\" type=\"button\" (click)=\"close()\">Cancel</button>\n <button class=\"o-btn-primary\" type=\"button\" (click)=\"onSave()\">Save</button>\n }\n </div>\n\n </div>\n</div>\n","import { Component, Input, Output, EventEmitter, HostListener, ElementRef } from '@angular/core';\nimport { ContextMenuAction } from '../../models/page.model';\n\n@Component({\n selector: 'o-context-menu',\n standalone: true,\n imports: [],\n templateUrl: './context-menu.component.html',\n styleUrls: ['./context-menu.component.scss']\n})\nexport class ContextMenuComponent {\n @Input() open = false;\n @Input() position = { top: 0, left: 0 };\n @Input() actions: ContextMenuAction[] = [];\n @Input() row: any = null;\n @Input() menuType: string = '';\n\n @Output() actionTriggered = new EventEmitter<{ action: string; row: any }>();\n @Output() closed = new EventEmitter<void>();\n\n hoveredAction: string | null = null;\n\n constructor(private el: ElementRef) {}\n\n visibleActions(): ContextMenuAction[] {\n if (!this.row) return [];\n return this.actions.filter(a => {\n const typeMatch = !a.type || a.type === 'any' || a.type === this.menuType;\n const statusMatch = !a.showWhen || a.showWhen.includes(this.row.status);\n return typeMatch && statusMatch;\n });\n }\n\n trigger(action: ContextMenuAction) {\n if (action.subActions && action.subActions.length > 0) return;\n this.actionTriggered.emit({ action: action.action, row: this.row });\n this.hoveredAction = null;\n this.closed.emit();\n }\n\n triggerSub(subAction: { label: string; action: string }) {\n this.actionTriggered.emit({ action: subAction.action, row: this.row });\n this.hoveredAction = null;\n this.closed.emit();\n }\n\n setHovered(action: string | null) {\n this.hoveredAction = action;\n }\n\n isDangerAction(action: string): boolean {\n return action === 'reject' || action === 'terminate';\n }\n\n @HostListener('document:click')\n onClickOutside() {\n if (this.open) {\n this.hoveredAction = null;\n this.closed.emit();\n }\n }\n}\n","@if (open) {\n<div class=\"o-ctx-menu\"\n [style.top.px]=\"position.top\"\n [style.left.px]=\"position.left\">\n @for (action of visibleActions(); track action.action) {\n @if (action.subActions && action.subActions.length > 0) {\n <div class=\"o-ctx-item o-ctx-item--has-sub\"\n (mouseenter)=\"setHovered(action.action)\"\n (mouseleave)=\"setHovered(null)\">\n <span class=\"o-ctx-item-label\">{{ action.label }}</span>\n <span class=\"o-ctx-arrow\">▶</span>\n @if (hoveredAction === action.action) {\n <div class=\"o-ctx-submenu\">\n @for (sub of action.subActions; track sub.action) {\n <button type=\"button\"\n class=\"o-ctx-item\"\n [class.o-ctx-item--danger]=\"isDangerAction(sub.action)\"\n (click)=\"triggerSub(sub)\">\n {{ sub.label }}\n </button>\n }\n </div>\n }\n </div>\n } @else {\n <button type=\"button\"\n class=\"o-ctx-item\"\n [class.o-ctx-item--danger]=\"isDangerAction(action.action)\"\n (click)=\"trigger(action)\">\n {{ action.label }}\n </button>\n }\n }\n @if (visibleActions().length === 0) {\n <div class=\"o-ctx-empty\">No actions</div>\n }\n</div>\n}\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { NgClass } from '@angular/common';\n\nexport interface SidePanelColumn {\n name: string;\n label: string;\n pipe?: string;\n}\n\n@Component({\n selector: 'o-side-panel',\n standalone: true,\n imports: [NgClass],\n templateUrl: './o-side-panel.component.html',\n styleUrls: ['./o-side-panel.component.scss']\n})\nexport class OSidePanelComponent {\n @Input() open = false;\n @Input() title = '';\n @Input() row: any = null;\n @Input() columns: SidePanelColumn[] = [];\n @Output() closed = new EventEmitter<void>();\n\n onClose() {\n this.closed.emit();\n }\n\n getBadgeClass(value: string): Record<string, boolean> {\n if (!value) return { 'o-side-panel__badge': true, 'o-badge--gray': true };\n const v = value.toLowerCase();\n const isGreen = ['active', 'approved', 'enabled'].includes(v);\n const isRed = ['rejected', 'expired', 'inactive', 'terminated'].includes(v);\n const isYellow = ['pending', 'in progress', 'submitted', 'pending_approval'].includes(v);\n const isBlue = ['draft', 'returned'].includes(v);\n return {\n 'o-side-panel__badge': true,\n 'o-badge--green': isGreen,\n 'o-badge--red': isRed,\n 'o-badge--yellow': isYellow,\n 'o-badge--blue': isBlue,\n 'o-badge--gray': !isGreen && !isRed && !isYellow && !isBlue\n };\n }\n\n formatDate(value: string | null | undefined): string {\n if (!value) return '—';\n const d = new Date(value);\n if (isNaN(d.getTime())) return value;\n return d.toLocaleDateString('en-US', {\n year: 'numeric',\n month: 'short',\n day: '2-digit'\n });\n }\n\n formatValue(val: any): string {\n if (val === null || val === undefined) return '—';\n if (typeof val === 'object') {\n if (Array.isArray(val)) {\n return val.join(', ') || '—';\n }\n const parts: string[] = [];\n Object.keys(val).forEach(k => {\n const list = val[k];\n if (Array.isArray(list) && list.length > 0) {\n parts.push(`${k.toUpperCase()}: ${list.map(f => f.substring(f.lastIndexOf('/') + 1)).join(', ')}`);\n }\n });\n return parts.join(' | ') || '—';\n }\n return val;\n }\n}\n","@if (open) {\n<div class=\"o-side-panel__backdrop\" (click)=\"onClose()\" aria-hidden=\"true\"></div>\n}\n\n<div class=\"o-side-panel\" [class.o-side-panel--open]=\"open\" role=\"dialog\" [attr.aria-modal]=\"open\" [attr.aria-label]=\"title\">\n\n <div class=\"o-side-panel__header\">\n <span class=\"o-side-panel__title\">{{ title }}</span>\n <button class=\"o-side-panel__close\" (click)=\"onClose()\" type=\"button\" aria-label=\"Close panel\">\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"2\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"/>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"/>\n </svg>\n </button>\n </div>\n\n <div class=\"o-side-panel__body\">\n @if (row) {\n @for (col of columns; track col.name) {\n @if (col.pipe === 'section') {\n <div class=\"o-side-panel__section-header\" style=\"font-weight: 700; font-size: 15px; margin: 16px 0 8px 0; color: #15104E; border-bottom: 2px solid #CDCDCD; padding-bottom: 4px;\">\n {{ col.label }}\n </div>\n } @else {\n <div class=\"o-side-panel__field\" style=\"margin-bottom: 12px; display: flex; flex-direction: column;\">\n <span class=\"o-side-panel__field-label\" style=\"font-size: 12px; color: #737373; font-weight: 500; margin-bottom: 2px;\">{{ col.label }}</span>\n <span class=\"o-side-panel__field-value\" style=\"font-size: 14px; color: #333333; font-weight: 600;\">\n @if (col.pipe === 'status') {\n <span class=\"o-side-panel__badge\" [ngClass]=\"getBadgeClass(row[col.name])\">\n {{ row[col.name] || '—' }}\n </span>\n } @else if (col.pipe === 'date') {\n {{ formatDate(row[col.name]) }}\n } @else {\n {{ formatValue(row[col.name]) }}\n }\n </span>\n\n @if (col.name === 'modules' && row.licenseDetails?.length) {\n <span class=\"o-side-panel__field-label\" style=\"font-size: 12px; color: #737373; font-weight: 500; margin-top: 12px; margin-bottom: 4px;\">License Details per Product</span>\n <div class=\"o-license-details-table-wrapper\" style=\"margin-top: 4px; border: 1px solid #e2e8f0; border-radius: 8px; overflow: hidden; background: #fff; width: 100%;\">\n <table class=\"o-license-details-table\" style=\"width: 100%; border-collapse: collapse; font-size: 0.8rem;\">\n <thead>\n <tr style=\"background: #f8fafc; border-bottom: 1px solid #e2e8f0;\">\n <th style=\"padding: 8px 10px; text-align: left; font-weight: 600; color: #475569; font-size: 0.75rem;\">Product</th>\n <th style=\"padding: 8px 10px; text-align: left; font-weight: 600; color: #475569; font-size: 0.75rem;\">Users</th>\n <th style=\"padding: 8px 10px; text-align: left; font-weight: 600; color: #475569; font-size: 0.75rem;\">Grace Period (Days)</th>\n <th style=\"padding: 8px 10px; text-align: left; font-weight: 600; color: #475569; font-size: 0.75rem;\">Start Date</th>\n <th style=\"padding: 8px 10px; text-align: left; font-weight: 600; color: #475569; font-size: 0.75rem;\">End Date</th>\n </tr>\n </thead>\n <tbody>\n @for (prod of row.licenseDetails; track prod.productName) {\n <tr style=\"border-bottom: 1px solid #f1f5f9;\">\n <td style=\"padding: 8px 10px; font-weight: 700; color: #15104e; text-transform: uppercase;\">{{ prod.productName }}</td>\n <td style=\"padding: 8px 10px;\">{{ prod.userLimit || '—' }}</td>\n <td style=\"padding: 8px 10px;\">{{ prod.gracePeriod || '—' }}</td>\n <td style=\"padding: 8px 10px;\">{{ formatDate(prod.startDate) }}</td>\n <td style=\"padding: 8px 10px;\">{{ formatDate(prod.endDate) }}</td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </div>\n }\n }\n }\n </div>\n\n <div class=\"o-side-panel__footer\">\n <button class=\"o-side-panel__btn-close\" (click)=\"onClose()\" type=\"button\">Close</button>\n </div>\n\n</div>\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport interface OTableToolsConfig {\n add?: boolean;\n edit?: boolean;\n refresh?: boolean;\n clear?: boolean;\n export?: boolean;\n import?: boolean;\n print?: boolean;\n duplicate?: boolean;\n}\n\n@Component({\n selector: 'o-table-tools',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './o-table-tools.component.html',\n styleUrls: ['./o-table-tools.component.scss']\n})\nexport class OTableToolsComponent {\n\n @Input() config: OTableToolsConfig = { add: true };\n\n @Output() toolAction = new EventEmitter<string>();\n\n emit(action: string): void {\n this.toolAction.emit(action);\n }\n}\n","<div class=\"o-table-tools\">\n <div class=\"o-table-tools__left\">\n @if (config.add !== false) {\n <button type=\"button\" class=\"o-table-tools__btn\" (click)=\"emit('add')\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M12 6.85715H6.85715V12H5.14286V6.85715H0V5.14286H5.14286V0H6.85715V5.14286H12V6.85715Z\" fill=\"#737373\"/>\n </svg>\n <span>Add</span>\n </button>\n }\n\n @if (config.edit) {\n <button type=\"button\" class=\"o-table-tools__btn\" (click)=\"emit('edit')\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M0 9.50034V12H2.49965L9.87196 4.62768L7.37231 2.12803L0 9.50034ZM11.805 2.69462C12.065 2.43466 12.065 2.01471 11.805 1.75475L10.2453 0.19497C9.98529-0.06499 9.56534-0.06499 9.30538 0.19497L8.08555 1.4148L10.5852 3.91445L11.805 2.69462Z\" fill=\"#737373\"/>\n </svg>\n <span>Edit</span>\n </button>\n }\n\n @if (config.duplicate) {\n <button type=\"button\" class=\"o-table-tools__btn\" (click)=\"emit('duplicate')\">\n <svg width=\"11\" height=\"12\" viewBox=\"0 0 11 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M7.5 10.5V11.4375C7.5 11.7482 7.24816 12 6.9375 12H0.5625C0.25184 12 0 11.7482 0 11.4375V2.8125C0 2.50184 0.25184 2.25 0.5625 2.25H2.25V9.1875C2.25 9.91123 2.83877 10.5 3.5625 10.5H7.5ZM7.5 2.4375V0H3.5625C3.25184 0 3 0.25184 3 0.5625V9.1875C3 9.49816 3.25184 9.75 3.5625 9.75H9.9375C10.2482 9.75 10.5 9.49816 10.5 9.1875V3H8.0625C7.75313 3 7.5 2.74688 7.5 2.4375ZM10.3353 1.71026L8.78974 0.16474C8.68425 0.05926 8.54118 0 8.39201 0H8.25V2.25H10.5V2.10799C10.5 1.95881 10.4407 1.81575 10.3353 1.71026Z\" fill=\"#737373\"/>\n </svg>\n <span>Duplicate</span>\n </button>\n }\n\n <button type=\"button\" class=\"o-table-tools__btn\" (click)=\"emit('refresh')\">\n <svg width=\"13\" height=\"12\" viewBox=\"0 0 13 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M10.836 1.7625C9.74783 0.675 8.2544 0 6.59586 0C3.27879 0 0.599609 2.685 0.599609 6C0.599609 9.315 3.27878 12 6.59586 12C9.39511 12 11.7291 10.0875 12.397 7.5H10.836C10.2206 9.2475 8.55458 10.5 6.59586 10.5C4.11181 10.5 2.09305 8.4825 2.09305 6C2.09305 3.5175 4.11181 1.5 6.59586 1.5C7.84164 1.5 8.95233 2.0175 9.76284 2.835L7.34633 5.25H12.5996V0L10.836 1.7625Z\" fill=\"#737373\"/>\n </svg>\n <span>Refresh</span>\n </button>\n\n @if (config.clear) {\n <button type=\"button\" class=\"o-table-tools__btn\" (click)=\"emit('clear')\">\n <svg width=\"14\" height=\"12\" viewBox=\"0 0 14 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <!-- brush / clear icon design -->\n <path d=\"M2.5 10H11.5M4 8.5L2 6.5L3.5 5L9 10.5M4.5 3L11.5 10M5.5 2L12.5 9\" stroke=\"#737373\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n </svg>\n <span>Clear</span>\n </button>\n }\n </div>\n\n <div class=\"o-table-tools__right\">\n @if (config.import) {\n <button type=\"button\" class=\"o-table-tools__btn\" (click)=\"emit('import')\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M0.375 6.75C0.16875 6.75 0 6.91875 0 7.125V7.875C0 8.08125 0.16875 8.25 0.375 8.25H3V6.75H0.375ZM11.8359 2.46094L9.54141 0.16407C9.43594 0.0586 9.29297 1e-05 9.14297 1e-05H9V3.00001H12V2.85704C12 2.70938 11.9414 2.56641 11.8359 2.46095V2.46094ZM8.25 3.1875V0H3.5625C3.25078 0 3 0.25078 3 0.5625V6.75H6V5.22188C6 4.88672 6.40547 4.72032 6.64219 4.95704L8.88281 7.21876C9.0375 7.37579 9.0375 7.62657 8.88281 7.78126L6.63984 10.0406C6.40312 10.2774 5.99765 10.1109 5.99765 9.7758V8.25002H2.99999V11.4375C2.99999 11.7492 3.25077 12 3.56249 12H11.4375C11.7492 12 12 11.7492 12 11.4375V3.75002H8.81249C8.50312 3.75002 8.24999 3.4969 8.24999 3.18752L8.25 3.1875Z\" fill=\"#737373\"/>\n </svg>\n <span>Import</span>\n </button>\n }\n\n @if (config.export) {\n <button type=\"button\" class=\"o-table-tools__btn\" (click)=\"emit('export')\">\n <svg width=\"14\" height=\"12\" viewBox=\"0 0 14 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M9.14062 2.85703C9.14062 2.70937 9.08204 2.56641 8.97656 2.46094L6.68203 0.16407C6.57656 0.0586 6.4336 1e-05 6.2836 1e-05H6.14062V3.00001H9.14062V2.85703ZM13.5234 7.21875L11.2805 4.95937C11.0437 4.72265 10.6383 4.88906 10.6383 5.22421V6.74999H9.13828V8.24999H10.6383V9.77811C10.6383 10.1133 11.0437 10.2797 11.2805 10.0429L13.5234 7.78123C13.6781 7.62654 13.6781 7.37342 13.5234 7.21873V7.21875ZM4.64062 7.875V7.125C4.64062 6.91875 4.80937 6.75 5.01562 6.75H9.14062V3.75H5.95312C5.64374 3.75 5.39062 3.49688 5.39062 3.1875V0H0.703125C0.391405 0 0.140625 0.25078 0.140625 0.5625V11.4375C0.140625 11.7492 0.391405 12 0.703125 12H8.57812C8.88984 12 9.14062 11.7492 9.14062 11.4375V8.25H5.01562C4.80937 8.25 4.64062 8.08125 4.64062 7.875Z\" fill=\"#737373\"/>\n </svg>\n <span>Export</span>\n </button>\n }\n\n @if (config.print) {\n <button type=\"button\" class=\"o-table-tools__btn\" (click)=\"emit('print')\">\n <svg width=\"13\" height=\"11\" viewBox=\"0 0 13 11\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M10.8484 3H2.44844C1.45244 3 0.648438 3.804 0.648438 4.8V8.4H3.04844V10.8H10.2484V8.4H12.6484V4.8C12.6484 3.804 11.8444 3 10.8484 3ZM9.04844 9.6H4.24844V6.6H9.04844V9.6ZM10.8484 5.4C10.5184 5.4 10.2484 5.13 10.2484 4.8C10.2484 4.47 10.5184 4.2 10.8484 4.2C11.1784 4.2 11.4484 4.47 11.4484 4.8C11.4484 5.13 11.1784 5.4 10.8484 5.4ZM10.2484 0H3.04844V2.4H10.2484V0Z\" fill=\"#737373\"/>\n </svg>\n <span>Print</span>\n </button>\n }\n </div>\n</div>\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n OnChanges,\n SimpleChanges,\n ChangeDetectorRef\n} from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { PageConfig, ContextMenuAction, TableColumn, TableToolConfig } from '../../models/page.model';\nimport { ToggleTabsComponent } from '../toggle-tabs/toggle-tabs';\nimport { DataTableComponent } from '../data-table/data-table';\nimport { FormDrawerComponent } from '../form-drawer/form-drawer';\nimport { ContextMenuComponent } from '../context-menu/context-menu';\nimport { OSidePanelComponent, SidePanelColumn } from '../o-side-panel/o-side-panel.component';\nimport { OTableToolsComponent } from '../o-table-tools/o-table-tools.component';\nimport { FormsModule } from '@angular/forms';\n\nexport type UserRole = 'SYSTEM_ADMIN' | 'APPROVER' | 'REQUESTER' | 'VIEWER';\n\nexport interface PageAction {\n action: string;\n row: any;\n payload?: any;\n}\n\n/** Context-menu actions hidden for each role */\nconst ROLE_HIDDEN_ACTIONS: Record<UserRole, string[]> = {\n SYSTEM_ADMIN: ['edit'],\n APPROVER: ['edit', 'save'],\n REQUESTER: ['approve', 'reject', 'return', 'edit'],\n VIEWER: ['approve', 'reject', 'return', 'edit', 'save', 'submit']\n};\n\n@Component({\n selector: 'o-page-renderer',\n standalone: true,\n imports: [\n ToggleTabsComponent,\n DataTableComponent,\n FormDrawerComponent,\n ContextMenuComponent,\n OSidePanelComponent,\n OTableToolsComponent,\n FormsModule\n ],\n templateUrl: './page-renderer.component.html',\n styleUrls: ['./page-renderer.component.scss']\n})\nexport class PageRendererComponent implements OnChanges {\n @Input() page: PageConfig | null = null;\n @Input() data: any[] = [];\n @Input() userRole: UserRole = 'SYSTEM_ADMIN';\n\n /**\n * If provided, forces this tab to be active.\n * Parent sets this from route params.\n */\n @Input() activeTab: string = '';\n\n @Output() actionTriggered = new EventEmitter<PageAction>();\n\n /**\n * Emitted when the user clicks a tab button so the parent\n * can update the URL. The value is the tab's `.value` string.\n */\n @Output() tabChange = new EventEmitter<string>();\n\n filteredRows: any[] = [];\n selectedRows: any[] = [];\n drawerReadOnly = false;\n drawerAction: 'new' | 'edit' | 'view' | 'renew' | 'upgrade' = 'new';\n dynamicContextActions: ContextMenuAction[] = [];\n\n // Share dialog state\n shareDialogOpen = false;\n shareRow: any = null;\n shareForm = { to: '', cc: '', subject: '', body: '' };\n shareSending = false;\n shareSuccess = false;\n\n constructor(\n private readonly cdr: ChangeDetectorRef,\n private readonly http: HttpClient\n ) {}\n\n onSelectionChange(rows: any[]) {\n this.selectedRows = rows;\n this.cdr.detectChanges();\n }\n\n onTableToolAction(action: string) {\n if (action === 'add') {\n this.openFormNew();\n } else if (action === 'edit') {\n if (this.selectedRows.length === 1) {\n this.onContextAction({ action: 'edit', row: this.selectedRows[0] });\n }\n } else if (action === 'duplicate') {\n if (this.selectedRows.length === 1) {\n const rowClone = { ...this.selectedRows[0] };\n const idField = this.page?.tableUniqueFieldName || 'uuid';\n delete rowClone[idField];\n delete rowClone['requestId'];\n\n this.drawerTitle = `New ${this.page?.title || 'Request'} (Clone)`;\n this.drawerRowData = rowClone;\n this.showSubmitBtn = true;\n this.drawerOpen = true;\n this.cdr.detectChanges();\n }\n } else if (action === 'refresh') {\n this.actionTriggered.emit({ action: 'refresh', row: null });\n } else if (action === 'clear') {\n this.selectedRows = [];\n this.actionTriggered.emit({ action: 'clear', row: null });\n } else if (action === 'export') {\n this.actionTriggered.emit({ action: 'export', row: null, payload: this.selectedRows });\n } else if (action === 'import') {\n this.actionTriggered.emit({ action: 'import', row: null });\n }\n this.cdr.detectChanges();\n }\n\n menuOpen = false;\n menuPosition = { top: 0, left: 0 };\n menuRow: any = null;\n\n drawerOpen = false;\n drawerTitle = '';\n drawerRowData: any = null;\n showSubmitBtn = true;\n\n sidePanelOpen = false;\n sidePanelTitle = '';\n sidePanelRow: any = null;\n sidePanelColumns: SidePanelColumn[] = [];\n\n // ── Lifecycle ──────────────────────────────────────────────────────────────\n\n ngOnChanges(changes: SimpleChanges) {\n // When page config loads, resolve initial active tab\n if (changes['page'] && this.page?.toggleButton?.elements?.length) {\n if (!this.activeTab) {\n const defaultTab =\n this.page.toggleButton.elements.find(t => t.isDefault) ||\n this.page.toggleButton.elements[0];\n this.activeTab = defaultTab.value;\n }\n }\n\n this.applyTabFilter();\n }\n\n // ── Tab Handling ───────────────────────────────────────────────────────────\n\n onTabChange(tab: string) {\n this.activeTab = tab;\n this.applyTabFilter();\n this.tabChange.emit(tab);\n }\n\n applyTabFilter() {\n if (!this.page?.toggleButton?.statusMap || !this.activeTab) {\n this.filteredRows = this.data;\n this.cdr.detectChanges();\n return;\n }\n const statuses = this.page.toggleButton.statusMap[this.activeTab] || [];\n const filtered = statuses.length\n ? this.data.filter(r => statuses.includes(r.status))\n : this.data;\n this.filteredRows = filtered;\n this.cdr.detectChanges();\n }\n\n // ── Role Visibility ────────────────────────────────────────────────────────\n\n showAddButton(): boolean {\n if (!this.page?.tableTool?.add) return false;\n return this.userRole !== 'APPROVER' && this.userRole !== 'VIEWER';\n }\n\n get computedTableToolConfig(): TableToolConfig | null {\n if (!this.page?.tableTool) return null;\n // Pages without workflow tabs (system settings: users, roles, sessions, audits)\n // show the toolbar as-is — no tab restriction needed\n const hasWorkflowTabs = this.page.toggleButton?.elements?.some(\n t => t.value === 'Request' || t.value === 'Requests'\n );\n if (!hasWorkflowTabs) {\n return { ...this.page.tableTool };\n }\n // Workflow pages (tenant, license): restrict Add/Edit/Duplicate to Request tab only\n const isRequestTab = this.activeTab === 'Request' || this.activeTab === 'Requests';\n return {\n ...this.page.tableTool,\n add: isRequestTab ? this.page.tableTool.add : false,\n edit: isRequestTab ? this.page.tableTool.edit : false,\n duplicate: isRequestTab ? this.page.tableTool.duplicate : false\n };\n }\n\n get filteredContextActions(): ContextMenuAction[] {\n const hidden = ROLE_HIDDEN_ACTIONS[this.userRole] || [];\n return (this.page?.contextMenuActions || []).filter(\n a => !hidden.includes(a.action)\n );\n }\n\n // ── Menu Handling ──────────────────────────────────────────────────────────\n\n onMenuOpen(event: { event: MouseEvent; row: any }) {\n this.menuRow = event.row;\n const rect = (event.event.target as HTMLElement).getBoundingClientRect();\n this.menuPosition = {\n top: rect.bottom + window.scrollY,\n left: Math.min(rect.left + window.scrollX - 100, window.innerWidth - 210)\n };\n this.menuOpen = true;\n this.dynamicContextActions = [];\n this.cdr.detectChanges();\n\n if (this.menuRow && this.page) {\n const uuid = this.menuRow[this.page.tableUniqueFieldName || 'uuid'];\n const status = this.menuRow.status;\n const storeName = this.page.store || '';\n const type = (storeName.toLowerCase().includes('license')) ? 'license' : 'tenant';\n\n this.http.post<any[]>('http://localhost:8082/api/workflow-actions', { uuid, status, type }).subscribe({\n next: (actions) => {\n const hidden = ROLE_HIDDEN_ACTIONS[this.userRole] || [];\n // Filter out 'edit' entirely — no edit from context menu\n const filtered = (actions || []).filter(\n a => !hidden.includes(a.action) && a.action !== 'edit'\n );\n\n // Group approve + reject into a single hover-submenu item for In-Progress\n const hasApprove = filtered.some(a => a.action === 'approve');\n const hasReject = filtered.some(a => a.action === 'reject');\n\n if (hasApprove && hasReject) {\n const rest = filtered.filter(a => a.action !== 'approve' && a.action !== 'reject');\n this.dynamicContextActions = [\n {\n label: 'Approve',\n action: 'approve-group',\n subActions: [\n { label: 'Approve', action: 'approve' },\n { label: 'Reject', action: 'reject' }\n ]\n },\n ...rest\n ];\n } else {\n this.dynamicContextActions = filtered;\n }\n\n this.cdr.detectChanges();\n },\n error: (err) => {\n console.error('Failed to fetch dynamic actions:', err);\n this.dynamicContextActions = [];\n this.cdr.detectChanges();\n }\n });\n }\n }\n\n onRowClick(row: any) {\n this.actionTriggered.emit({ action: 'rowClick', row });\n }\n\n onContextAction(event: { action: string; row: any }) {\n this.menuOpen = false;\n\n if (event.action === 'share') {\n this.openShareDialog(event.row);\n return;\n }\n\n if (event.action === 'view') {\n this.drawerTitle = 'View Request';\n let rowData = { ...event.row };\n this.populateLicenseDetails(rowData);\n this.drawerRowData = rowData;\n this.drawerReadOnly = true;\n this.drawerAction = 'view';\n this.showSubmitBtn = false;\n this.drawerOpen = true;\n } else if (event.action === 'edit') {\n this.drawerTitle = 'Edit Draft';\n let rowData = { ...event.row };\n this.populateLicenseDetails(rowData);\n this.drawerRowData = rowData;\n this.drawerReadOnly = false;\n this.drawerAction = 'edit';\n this.showSubmitBtn = true;\n this.drawerOpen = true;\n } else if (event.action === 'renew') {\n this.drawerTitle = 'Renew License';\n let rowData = { ...event.row };\n this.populateLicenseDetails(rowData);\n this.drawerRowData = rowData;\n this.drawerReadOnly = false;\n this.drawerAction = 'renew';\n this.showSubmitBtn = false;\n this.drawerOpen = true;\n } else if (event.action === 'upgrade') {\n this.drawerTitle = 'Upgrade License';\n let rowData = { ...event.row };\n this.populateLicenseDetails(rowData);\n this.drawerRowData = rowData;\n this.drawerReadOnly = false;\n this.drawerAction = 'upgrade';\n this.showSubmitBtn = false;\n this.drawerOpen = true;\n } else {\n this.actionTriggered.emit({ action: event.action, row: event.row });\n }\n this.cdr.detectChanges();\n }\n\n private populateLicenseDetails(rowData: any) {\n if (rowData.licenseDetails) {\n const modulesMap: any = {};\n const prodDetails: any = {};\n rowData.licenseDetails.forEach((prod: any) => {\n const pName = prod.productName.toLowerCase();\n modulesMap[pName] = prod.features || [];\n prodDetails[pName] = {\n userLimit: prod.userLimit || 80,\n concurrentLimit: prod.concurrentLimit || 15,\n startDate: prod.startDate || '',\n endDate: prod.endDate || '',\n gracePeriod: prod.gracePeriod || 30\n };\n });\n rowData['modules'] = modulesMap;\n rowData['productDetails'] = prodDetails;\n }\n }\n\n // ── Share Dialog ───────────────────────────────────────────────────────────\n\n openShareDialog(row: any) {\n this.shareRow = row;\n const name = row.companyName || row.tenantName || row.requestId || '';\n this.shareForm = {\n to: row.adminEmail || row.email || '',\n cc: '',\n subject: `OPAC — ${name} is now Active`,\n body: `Dear Team,\\n\\nPlease be informed that the record for \"${name}\" has been activated on the OPAC platform.\\n\\nBest regards,\\nOPAC System`\n };\n this.shareSending = false;\n this.shareSuccess = false;\n this.shareDialogOpen = true;\n this.cdr.detectChanges();\n }\n\n closeShareDialog() {\n this.shareDialogOpen = false;\n this.shareRow = null;\n this.cdr.detectChanges();\n }\n\n sendShareEmail() {\n if (!this.shareForm.to) return;\n this.shareSending = true;\n this.cdr.detectChanges();\n\n const uuid = this.shareRow?.[this.page?.tableUniqueFieldName || 'uuid'];\n const storeName = this.page?.store || '';\n const type = storeName.toLowerCase().includes('license') ? 'license' : 'tenant';\n\n this.http.post('http://localhost:8082/api/email/send', {\n to: this.shareForm.to,\n cc: this.shareForm.cc,\n subject: this.shareForm.subject,\n body: this.shareForm.body,\n uuid,\n type\n }).subscribe({\n next: () => {\n this.shareSending = false;\n this.shareSuccess = true;\n this.cdr.detectChanges();\n setTimeout(() => this.closeShareDialog(), 2000);\n },\n error: () => {\n this.shareSending = false;\n this.cdr.detectChanges();\n }\n });\n }\n\n // ── Side Panel ─────────────────────────────────────────────────────────────\n\n private openSidePanel(row: any) {\n let sidePanelRow = { ...row };\n\n if (sidePanelRow.licenseDetails) {\n const modulesMap: any = {};\n sidePanelRow.licenseDetails.forEach((prod: any) => {\n const pName = prod.productName.toLowerCase();\n modulesMap[pName] = prod.features || [];\n });\n sidePanelRow['modules'] = modulesMap;\n }\n\n this.sidePanelRow = sidePanelRow;\n this.sidePanelTitle = `${this.page?.title || 'Record'} — Details`;\n\n const fields: any[] = [];\n if (this.page?.steps) {\n this.page.steps.forEach(step => {\n if (step.fields) {\n step.fields.forEach(f => {\n if (f.type !== 'hidden' || f.sectionName) {\n fields.push(f);\n }\n });\n }\n });\n }\n\n if (fields.length > 0) {\n this.sidePanelColumns = fields.map(f => ({\n name: f.name,\n label: f.label || f.sectionName || '',\n pipe: f.type === 'hidden' ? 'section' : (f.pipe || '')\n }));\n } else {\n this.sidePanelColumns = (this.page?.tableList || []).map(\n (col: TableColumn): SidePanelColumn => ({\n name: col.name,\n label: col.label,\n pipe: col.pipe\n })\n );\n }\n\n this.sidePanelOpen = true;\n this.actionTriggered.emit({ action: 'view', row });\n this.cdr.detectChanges();\n }\n\n // ── Form Drawer ────────────────────────────────────────────────────────────\n\n openFormNew() {\n this.drawerTitle = `New ${this.page?.title || 'Request'}`;\n this.drawerRowData = null;\n this.drawerReadOnly = false;\n this.showSubmitBtn = true;\n this.drawerOpen = true;\n this.cdr.detectChanges();\n }\n\n onSave(payload: any) {\n this.drawerOpen = false;\n const finalPayload = this.buildLicensePayload(payload);\n const emittedAction = (this.drawerAction === 'renew' || this.drawerAction === 'upgrade')\n ? this.drawerAction\n : 'save';\n this.actionTriggered.emit({ action: emittedAction, row: this.drawerRowData, payload: finalPayload });\n this.cdr.detectChanges();\n }\n\n onSubmitForApproval(payload: any) {\n this.drawerOpen = false;\n const finalPayload = this.buildLicensePayload(payload);\n this.actionTriggered.emit({ action: 'submit', row: this.drawerRowData, payload: finalPayload });\n this.cdr.detectChanges();\n }\n\n private buildLicensePayload(payload: any): any {\n let finalPayload = { ...payload };\n\n if (this.page?.name === 'LicenseRequest' || finalPayload.modules) {\n const licenseDetails: any[] = [];\n const modules = finalPayload.modules || {};\n const prodDetails = finalPayload.productDetails || {};\n Object.keys(modules).forEach(prodKey => {\n const features = modules[prodKey];\n if (features && features.length > 0) {\n const detail = prodDetails[prodKey.toLowerCase()] || {};\n licenseDetails.push({\n productName: prodKey,\n startDate: detail.startDate || null,\n endDate: detail.endDate || null,\n userLimit: detail.userLimit ? Number(detail.userLimit) : null,\n concurrentLimit: detail.concurrentLimit ? Number(detail.concurrentLimit) : null,\n gracePeriod: detail.gracePeriod ? Number(detail.gracePeriod) : null,\n features: features\n });\n }\n });\n finalPayload.licenseDetails = licenseDetails;\n\n if (licenseDetails.length > 0) {\n finalPayload.gracePeriod = Math.max(...licenseDetails.map(d => d.gracePeriod || 0));\n finalPayload.totalUsers = Math.max(...licenseDetails.map(d => d.userLimit || 0));\n finalPayload.maxConcurrent = Math.max(...licenseDetails.map(d => d.concurrentLimit || 0));\n\n const startDates = licenseDetails.map(d => d.startDate).filter(Boolean);\n if (startDates.length > 0) {\n finalPayload.startDate = startDates.reduce((min, d) => d < min ? d : min, startDates[0]);\n }\n const endDates = licenseDetails.map(d => d.endDate).filter(Boolean);\n if (endDates.length > 0) {\n finalPayload.endDate = endDates.reduce((max, d) => d > max ? d : max, endDates[0]);\n }\n }\n }\n\n return finalPayload;\n }\n}\n","<div class=\"o-page\">\n\n <!-- Page Header -->\n <div class=\"o-page-header\">\n <div class=\"o-page-title-row\">\n <h2 class=\"o-page-title\">{{ page?.title }}</h2>\n </div>\n\n @if (page?.toggleButton?.elements?.length) {\n <o-toggle-tabs\n [tabs]=\"page!.toggleButton!.elements\"\n [activeTab]=\"activeTab\"\n (tabChange)=\"onTabChange($event)\">\n </o-toggle-tabs>\n }\n </div>\n\n @if (computedTableToolConfig) {\n <o-table-tools\n [config]=\"computedTableToolConfig\"\n (toolAction)=\"onTableToolAction($event)\"\n ></o-table-tools>\n }\n\n <!-- Data Table -->\n <o-data-table\n [columns]=\"page?.tableList || []\"\n [rows]=\"filteredRows\"\n (selectionChange)=\"onSelectionChange($event)\"\n (menuOpen)=\"onMenuOpen($event)\"\n (rowClick)=\"onRowClick($event)\"\n (actionClick)=\"onContextAction($event)\">\n </o-data-table>\n\n <!-- Context Menu -->\n <o-context-menu\n [open]=\"menuOpen\"\n [position]=\"menuPosition\"\n [actions]=\"dynamicContextActions\"\n [row]=\"menuRow\"\n [menuType]=\"page?.store || ''\"\n (actionTriggered)=\"onContextAction($event)\"\n (closed)=\"menuOpen = false\">\n </o-context-menu>\n\n <!-- Form Drawer -->\n <o-form-drawer\n [open]=\"drawerOpen\"\n [title]=\"drawerTitle\"\n [steps]=\"page?.steps || []\"\n [rowData]=\"drawerRowData\"\n [showSubmit]=\"showSubmitBtn\"\n [readOnly]=\"drawerReadOnly\"\n [actionType]=\"drawerAction\"\n (closeDrawer)=\"drawerOpen = false\"\n (save)=\"onSave($event)\"\n (submit)=\"onSubmitForApproval($event)\">\n </o-form-drawer>\n\n <!-- Share / Email Dialog -->\n @if (shareDialogOpen) {\n <div class=\"o-share-overlay\"\n (click)=\"closeShareDialog()\"\n (keydown.escape)=\"closeShareDialog()\">\n <div class=\"o-share-dialog\"\n (click)=\"$event.stopPropagation()\"\n (keydown.escape)=\"closeShareDialog()\">\n <div class=\"o-share-header\">\n <h3 class=\"o-share-title\">Share via Email</h3>\n <button type=\"button\" class=\"o-share-close\" (click)=\"closeShareDialog()\" aria-label=\"Close dialog\">✕</button>\n </div>\n\n @if (shareSuccess) {\n <div class=\"o-share-success\">\n <svg width=\"32\" height=\"32\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#16a34a\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <polyline points=\"20 6 9 17 4 12\"/>\n </svg>\n <p>Email sent successfully!</p>\n </div>\n } @else {\n <div class=\"o-share-body\">\n <div class=\"o-share-field\">\n <label class=\"o-share-label\" for=\"share-to\">To <span class=\"o-required\">*</span></label>\n <input id=\"share-to\" class=\"o-share-input\" type=\"email\" placeholder=\"recipient@email.com\" [(ngModel)]=\"shareForm.to\" />\n </div>\n <div class=\"o-share-field\">\n <label class=\"o-share-label\" for=\"share-cc\">CC</label>\n <input id=\"share-cc\" class=\"o-share-input\" type=\"text\" placeholder=\"cc@email.com (comma-separated)\" [(ngModel)]=\"shareForm.cc\" />\n </div>\n <div class=\"o-share-field\">\n <label class=\"o-share-label\" for=\"share-subject\">Subject</label>\n <input id=\"share-subject\" class=\"o-share-input\" type=\"text\" [(ngModel)]=\"shareForm.subject\" />\n </div>\n <div class=\"o-share-field\">\n <label class=\"o-share-label\" for=\"share-body\">Message</label>\n <textarea id=\"share-body\" class=\"o-share-input o-share-textarea\" rows=\"5\" [(ngModel)]=\"shareForm.body\"></textarea>\n </div>\n </div>\n <div class=\"o-share-footer\">\n <button type=\"button\" class=\"o-btn-secondary\" (click)=\"closeShareDialog()\">Cancel</button>\n <button type=\"button\" class=\"o-btn-primary\" [disabled]=\"shareSending || !shareForm.to\" (click)=\"sendShareEmail()\">\n @if (shareSending) { Sending… } @else { Send Email }\n </button>\n </div>\n }\n </div>\n </div>\n }\n\n</div>\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RouterModule } from '@angular/router';\n\nexport interface BreadcrumbItem {\n label: string;\n route?: string;\n}\n\n@Component({\n selector: 'o-page-header',\n standalone: true,\n imports: [CommonModule, RouterModule],\n templateUrl: './page-header.component.html',\n styleUrls: ['./page-header.component.scss']\n})\nexport class PageHeaderComponent {\n @Input() breadcrumbs: BreadcrumbItem[] = [];\n @Input() title: string = '';\n @Input() subtitle?: string;\n @Input() actionLabel?: string;\n @Input() showBack?: boolean = false;\n\n @Output() actionClick = new EventEmitter<void>();\n @Output() backClick = new EventEmitter<void>();\n}\n","<div class=\"o-page-header\">\n <!-- Breadcrumb -->\n @if (breadcrumbs && breadcrumbs.length > 0) {\n <nav class=\"o-ph-breadcrumb\">\n @for (crumb of breadcrumbs; track crumb.label; let last = $last) {\n @if (crumb.route && !last) {\n <a class=\"o-ph-crumb o-ph-crumb--link\" [routerLink]=\"crumb.route\">\n {{ crumb.label }}\n </a>\n }\n @if (!crumb.route || last) {\n <span class=\"o-ph-crumb\" [class.o-ph-crumb--active]=\"last\">\n {{ crumb.label }}\n </span>\n }\n @if (!last) {\n <span class=\"o-ph-separator\" aria-hidden=\"true\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <polyline points=\"9 18 15 12 9 6\"/>\n </svg>\n </span>\n }\n }\n </nav>\n }\n\n <!-- Title row -->\n <div class=\"o-ph-title-row\">\n <!-- Back button -->\n @if (showBack) {\n <button class=\"o-ph-back-btn\" (click)=\"backClick.emit()\" aria-label=\"Go back\" type=\"button\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <line x1=\"19\" y1=\"12\" x2=\"5\" y2=\"12\"/>\n <polyline points=\"12 19 5 12 12 5\"/>\n </svg>\n </button>\n }\n\n <!-- Title + subtitle -->\n <div class=\"o-ph-text\">\n <h2 class=\"o-ph-title\">{{ title }}</h2>\n @if (subtitle) {\n <p class=\"o-ph-subtitle\">{{ subtitle }}</p>\n }\n </div>\n\n <!-- Spacer -->\n <div class=\"o-ph-spacer\"></div>\n\n <!-- Primary action button -->\n @if (actionLabel) {\n <button class=\"o-ph-action-btn\" type=\"button\" (click)=\"actionClick.emit()\">\n {{ actionLabel }}\n </button>\n }\n </div>\n</div>\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport interface NavItem {\n key: string;\n label: string;\n svgPath: string;\n tooltip?: string;\n}\n\n@Component({\n selector: 'o-side-nav',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './side-nav.component.html',\n styleUrls: ['./side-nav.component.scss']\n})\nexport class SideNavComponent {\n @Input() navItems: NavItem[] = [];\n @Input() activeKey: string = '';\n @Input() showLogout: boolean = true;\n\n @Output() navChange = new EventEmitter<string>();\n @Output() logout = new EventEmitter<void>();\n\n onNavClick(key: string): void {\n this.navChange.emit(key);\n }\n}\n","<nav class=\"o-side-nav\">\n <!-- Logo -->\n <div class=\"o-sn-logo\" aria-label=\"Orque Platform\">\n <span class=\"o-sn-logo-letter\">O</span>\n </div>\n\n <!-- Nav items -->\n <div class=\"o-sn-items\">\n @for (item of navItems; track item.key) {\n <button\n class=\"o-sn-item\"\n type=\"button\"\n [class.o-sn-item--active]=\"item.key === activeKey\"\n [title]=\"item.tooltip || item.label\"\n [attr.aria-label]=\"item.label\"\n [attr.aria-current]=\"item.key === activeKey ? 'page' : null\"\n (click)=\"onNavClick(item.key)\"\n >\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"2\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path [attr.d]=\"item.svgPath\"/>\n </svg>\n </button>\n }\n </div>\n\n <!-- Spacer -->\n <div class=\"o-sn-spacer\"></div>\n\n <!-- Logout -->\n @if (showLogout) {\n <button\n class=\"o-sn-item o-sn-item--logout\"\n type=\"button\"\n title=\"Logout\"\n aria-label=\"Logout\"\n (click)=\"logout.emit()\"\n >\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"2\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4\"/>\n <polyline points=\"16 17 21 12 16 7\"/>\n <line x1=\"21\" y1=\"12\" x2=\"9\" y2=\"12\"/>\n </svg>\n </button>\n }\n</nav>\n","import {\n Component, Input, Output, EventEmitter, OnInit, OnDestroy, OnChanges, SimpleChanges, ElementRef, ViewChild\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { Subject, Subscription } from 'rxjs';\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\n\n@Component({\n selector: 'o-search-filter',\n standalone: true,\n imports: [CommonModule, FormsModule],\n templateUrl: './search-filter.component.html',\n styleUrls: ['./search-filter.component.scss']\n})\nexport class SearchFilterComponent implements OnInit, OnDestroy, OnChanges {\n @Input() placeholder?: string;\n @Input() value?: string;\n\n @Output() search = new EventEmitter<string>();\n\n @ViewChild('searchInput') searchInputRef?: ElementRef<HTMLInputElement>;\n\n inputValue: string = '';\n private subject = new Subject<string>();\n private sub?: Subscription;\n\n ngOnInit(): void {\n if (this.value !== undefined) {\n this.inputValue = this.value;\n }\n this.sub = this.subject.pipe(\n debounceTime(300),\n distinctUntilChanged()\n ).subscribe(val => this.search.emit(val));\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['value'] && changes['value'].currentValue !== this.inputValue) {\n this.inputValue = changes['value'].currentValue ?? '';\n }\n }\n\n ngOnDestroy(): void {\n this.sub?.unsubscribe();\n this.subject.complete();\n }\n\n onInput(): void {\n this.subject.next(this.inputValue);\n }\n\n clear(): void {\n this.inputValue = '';\n this.subject.next('');\n this.searchInputRef?.nativeElement.focus();\n }\n}\n","<div class=\"o-search-filter\">\n <span class=\"o-sf-icon\" aria-hidden=\"true\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"2\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <circle cx=\"11\" cy=\"11\" r=\"8\"/>\n <line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\"/>\n </svg>\n </span>\n <input\n #searchInput\n class=\"o-sf-input\"\n type=\"text\"\n [placeholder]=\"placeholder || 'Search...'\"\n [(ngModel)]=\"inputValue\"\n (input)=\"onInput()\"\n (keydown.escape)=\"clear()\"\n [attr.aria-label]=\"placeholder || 'Search'\"\n autocomplete=\"off\"\n />\n @if (inputValue) {\n <button\n class=\"o-sf-clear\"\n type=\"button\"\n (click)=\"clear()\"\n aria-label=\"Clear search\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"2\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"/>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"/>\n </svg>\n </button>\n }\n</div>\n","import { Component, Input, Output, EventEmitter, HostListener } from '@angular/core';\n\nexport type ConfirmationDialogType = 'danger' | 'warning' | 'info';\n\n@Component({\n selector: 'o-confirmation-dialog',\n standalone: true,\n imports: [],\n templateUrl: './confirmation-dialog.component.html',\n styleUrls: ['./confirmation-dialog.component.scss']\n})\nexport class ConfirmationDialogComponent {\n @Input() open: boolean = false;\n @Input() title: string = '';\n @Input() message: string = '';\n @Input() confirmLabel?: string = 'Confirm';\n @Input() cancelLabel?: string = 'Cancel';\n @Input() type?: ConfirmationDialogType = 'info';\n\n @Output() confirmed = new EventEmitter<void>();\n @Output() cancelled = new EventEmitter<void>();\n\n onConfirm() {\n this.confirmed.emit();\n }\n\n onCancel() {\n this.cancelled.emit();\n }\n\n onOverlayClick() {\n this.cancelled.emit();\n }\n\n @HostListener('document:keydown.escape')\n onEscape() {\n if (this.open) {\n this.cancelled.emit();\n }\n }\n}\n","@if (open) {\n<div class=\"o-cd-overlay\" (click)=\"onOverlayClick()\" role=\"dialog\" aria-modal=\"true\"\n [attr.aria-label]=\"title\">\n <div class=\"o-cd-card\" (click)=\"$event.stopPropagation()\">\n\n <div class=\"o-cd-header\">\n <span class=\"o-cd-icon\" [class]=\"'o-cd-icon--' + (type || 'info')\">\n @if (type === 'danger') {\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <circle cx=\"12\" cy=\"12\" r=\"10\"/>\n <line x1=\"15\" y1=\"9\" x2=\"9\" y2=\"15\"/>\n <line x1=\"9\" y1=\"9\" x2=\"15\" y2=\"15\"/>\n </svg>\n } @else if (type === 'warning') {\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\"/>\n <line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\"/>\n <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\"/>\n </svg>\n } @else {\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <circle cx=\"12\" cy=\"12\" r=\"10\"/>\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"/>\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"/>\n </svg>\n }\n </span>\n <h3 class=\"o-cd-title\">{{ title }}</h3>\n </div>\n\n <div class=\"o-cd-body\">\n <p class=\"o-cd-message\">{{ message }}</p>\n </div>\n\n <div class=\"o-cd-footer\">\n <button class=\"o-cd-btn o-cd-btn--cancel\" type=\"button\" (click)=\"onCancel()\">\n {{ cancelLabel || 'Cancel' }}\n </button>\n <button class=\"o-cd-btn o-cd-btn--confirm\"\n [class]=\"'o-cd-btn o-cd-btn--confirm o-cd-btn--confirm--' + (type || 'info')\"\n type=\"button\"\n (click)=\"onConfirm()\">\n {{ confirmLabel || 'Confirm' }}\n </button>\n </div>\n\n </div>\n</div>\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n OnChanges,\n SimpleChanges\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport interface OTableColumn {\n field: string;\n header: string;\n pipe?: 'status' | 'date';\n width?: string;\n}\n\nexport interface OPagination {\n page: number;\n total: number;\n total_pages: number;\n startRow: number;\n endRow: number;\n pageLinks: number[];\n}\n\n@Component({\n selector: 'o-table',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './o-table.component.html',\n styleUrls: ['./o-table.component.scss']\n})\nexport class OTableComponent implements OnChanges {\n\n @Input() columns: OTableColumn[] = [];\n @Input() rows: any[] = [];\n @Input() showActions = true;\n @Input() showAdd = true;\n @Input() addLabel = 'Add';\n @Input() pagination: OPagination = {\n page: 1,\n total: 0,\n total_pages: 1,\n startRow: 1,\n endRow: 0,\n pageLinks: []\n };\n\n @Output() openForm = new EventEmitter<{ status: string; row?: any }>();\n @Output() paginationIndex = new EventEmitter<number>();\n @Output() rowSelect = new EventEmitter<any>();\n\n selectedRows: any[] = [];\n allSelected = false;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['rows']) {\n this.selectedRows = [];\n this.allSelected = false;\n }\n }\n\n onRowClick(row: any): void {\n this.rowSelect.emit(row);\n }\n\n toggleAll(event: Event): void {\n const checked = (event.target as HTMLInputElement).checked;\n this.allSelected = checked;\n this.selectedRows = checked ? [...this.rows] : [];\n }\n\n toggleRow(row: any): void {\n const idx = this.selectedRows.indexOf(row);\n if (idx >= 0) {\n this.selectedRows.splice(idx, 1);\n } else {\n this.selectedRows.push(row);\n }\n this.allSelected = this.selectedRows.length === this.rows.length;\n }\n\n isSelected(row: any): boolean {\n return this.selectedRows.includes(row);\n }\n\n prevPage(): void {\n if (this.pagination.page > 1) {\n this.paginationIndex.emit(this.pagination.page - 1);\n }\n }\n\n nextPage(): void {\n if (this.pagination.page < this.pagination.total_pages) {\n this.paginationIndex.emit(this.pagination.page + 1);\n }\n }\n\n showPage(page: number): void {\n this.paginationIndex.emit(page);\n }\n\n onAddClick(): void {\n this.openForm.emit({ status: 'new' });\n }\n\n getCellValue(row: any, field: string): any {\n return field.split('.').reduce((obj, key) => obj?.[key], row);\n }\n\n formatDate(value: any): string {\n if (!value) return '';\n const d = new Date(value);\n if (isNaN(d.getTime())) return value;\n return d.toLocaleDateString('en-GB', {\n day: '2-digit',\n month: 'short',\n year: 'numeric'\n });\n }\n\n statusClass(status: string): string {\n if (!status) return '';\n switch (status.toLowerCase()) {\n case 'draft':\n return 'o-status-badge--draft';\n case 'active':\n case 'approved':\n return 'o-status-badge--active';\n case 'pending':\n case 'returned':\n case 'in progress':\n return 'o-status-badge--progress';\n case 'rejected':\n case 'cancelled':\n case 'expired':\n return 'o-status-badge--rejected';\n default:\n return 'o-status-badge--inactive';\n }\n }\n\n columnWidth(col: OTableColumn): string {\n return col.width ?? '10rem';\n }\n}\n","<div class=\"o-table-wrapper\">\n <div class=\"o-table-scroll\">\n <table class=\"o-table\">\n <thead class=\"o-table__head\">\n <tr>\n <!-- Checkbox column -->\n <th class=\"o-table__th o-table__th--checkbox\">\n <input\n type=\"checkbox\"\n class=\"o-table__checkbox\"\n [checked]=\"allSelected\"\n (change)=\"toggleAll($event)\"\n aria-label=\"Select all rows\"\n />\n </th>\n\n <!-- Actions column -->\n @if (showActions) {\n <th class=\"o-table__th o-table__th--actions\">Actions</th>\n }\n\n <!-- Data columns -->\n @for (col of columns; track col.field) {\n <th\n class=\"o-table__th\"\n [style.min-width]=\"columnWidth(col)\"\n >\n {{ col.header }}\n </th>\n }\n </tr>\n </thead>\n\n <tbody class=\"o-table__body\">\n @if (rows && rows.length > 0) {\n @for (row of rows; track $index) {\n <tr\n class=\"o-table__row\"\n [class.o-table__row--selected]=\"isSelected(row)\"\n (click)=\"onRowClick(row)\"\n >\n <!-- Checkbox cell -->\n <td class=\"o-table__td o-table__td--checkbox\" (click)=\"$event.stopPropagation()\">\n <input\n type=\"checkbox\"\n class=\"o-table__checkbox\"\n [checked]=\"isSelected(row)\"\n (change)=\"toggleRow(row)\"\n aria-label=\"Select row\"\n />\n </td>\n\n <!-- Actions cell -->\n @if (showActions) {\n <td class=\"o-table__td o-table__td--actions\" (click)=\"$event.stopPropagation()\">\n <ng-content select=\"[slot=actions]\"></ng-content>\n </td>\n }\n\n <!-- Data cells -->\n @for (col of columns; track col.field) {\n <td class=\"o-table__td\">\n @if (col.pipe === 'status') {\n <span\n class=\"o-status-badge\"\n [ngClass]=\"statusClass(getCellValue(row, col.field))\"\n >\n {{ getCellValue(row, col.field) }}\n </span>\n } @else if (col.pipe === 'date') {\n {{ formatDate(getCellValue(row, col.field)) }}\n } @else {\n {{ getCellValue(row, col.field) }}\n }\n </td>\n }\n </tr>\n }\n }\n </tbody>\n </table>\n </div>\n\n <!-- Empty state -->\n @if (!rows || rows.length === 0) {\n <div class=\"o-table__empty\">\n <svg\n class=\"o-table__empty-icon\"\n width=\"58\"\n height=\"59\"\n viewBox=\"0 0 58 59\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M8.0001 58.389H7.9991H3.9996C1.79421 58.389 0 56.5944 0 54.3885V29.3883C0 27.1829 1.79421 25.3887 3.9996 25.3887V27.3885C3.46577 27.3894 2.96412 27.5976 2.58606 27.9757C2.20801 28.3537 1.9998 28.8554 1.9998 29.3883V54.3885C1.9998 55.4912 2.89691 56.3883 3.9996 56.3883H8.0001V58.388V58.389ZM50.0004 38.3892H49.9994H47.9997V29.3883C47.9997 28.2856 47.1026 27.3885 45.9999 27.3885H44.0001V25.3887L45.9999 25.3887C48.2058 25.3887 50.0004 27.1829 50.0004 29.3883V38.3882V38.3892Z\"\n fill=\"#14034E\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M8.25974 44.3889H8.25774V44.3879L6.63794 44.3889V3.68279V1.96918C6.63974 1.44823 6.84654 0.96047 7.22024 0.59578C7.58294 0.24118 8.06238 0.0459 8.57024 0.0459H8.60714H31.1341C31.161 0.0459 31.1899 0.04192 31.213 0.03873C31.2393 0.03511 31.2657 0.0315 31.2916 0.0315C31.2988 0.0315 31.3069 0.0315 31.3141 0.03239C31.3518 0.01895 31.391 0.00804 31.4302 0C31.605 0 31.7785 0.0585 31.9189 0.16472C32.1548 0.26776 32.365 0.41191 32.5435 0.5931L40.6003 8.8371C40.6778 8.91638 40.7505 9.00572 40.8163 9.1026C41.0875 9.29115 41.2151 9.62155 41.1412 9.94409C41.1541 10.0369 41.1611 10.1279 41.1619 10.2141V32.3892H39.5401V10.5894H32.5885C31.5027 10.5813 30.6193 9.69185 30.6193 8.60669V1.66859L8.60714 1.66861C8.39935 1.66861 8.25974 1.78941 8.25974 1.96919V6.16769V44.3889ZM32.2411 2.60459V8.60668C32.2402 8.80225 32.3928 8.96039 32.5885 8.96668H38.4475L32.2411 2.60459Z\"\n fill=\"#32BCF3\"\n />\n </svg>\n <p class=\"o-table__empty-text\">No data available</p>\n @if (showAdd) {\n <button class=\"o-table__empty-btn\" type=\"button\" (click)=\"onAddClick()\">\n {{ addLabel }}\n </button>\n }\n </div>\n }\n\n <!-- Pagination -->\n @if (rows && rows.length > 0) {\n <div class=\"o-table__pagination\">\n <p class=\"o-table__pagination-info\">\n Showing\n <span class=\"o-table__pagination-info--bold\">{{ pagination.startRow }}</span>\n to\n <span class=\"o-table__pagination-info--bold\">{{ pagination.endRow }}</span>\n of\n <span class=\"o-table__pagination-info--bold\">{{ pagination.total }}</span>\n results\n </p>\n\n <nav class=\"o-table__pagination-nav\" aria-label=\"Pagination\">\n <button\n class=\"o-table__page-btn o-table__page-btn--prev\"\n type=\"button\"\n [disabled]=\"pagination.page <= 1\"\n (click)=\"prevPage()\"\n aria-label=\"Previous page\"\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path\n fill-rule=\"evenodd\"\n d=\"M12.707 5.293a1 1 0 010 1.414L9.414 10l3.293 3.293a1 1 0 01-1.414 1.414l-4-4a1 1 0 010-1.414l4-4a1 1 0 011.414 0z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n </button>\n\n @for (pageNum of pagination.pageLinks; track pageNum) {\n <button\n class=\"o-table__page-btn\"\n type=\"button\"\n [class.o-table__page-btn--active]=\"pageNum === pagination.page\"\n (click)=\"showPage(pageNum)\"\n [attr.aria-current]=\"pageNum === pagination.page ? 'page' : null\"\n >\n {{ pageNum }}\n </button>\n }\n\n <button\n class=\"o-table__page-btn o-table__page-btn--next\"\n type=\"button\"\n [disabled]=\"pagination.page >= pagination.total_pages\"\n (click)=\"nextPage()\"\n aria-label=\"Next page\"\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path\n fill-rule=\"evenodd\"\n d=\"M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n </button>\n </nav>\n </div>\n }\n</div>\n","import { Component, Input, Output, EventEmitter, OnChanges, SimpleChanges } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'o-toggle-button',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './o-toggle-button.component.html',\n styleUrls: ['./o-toggle-button.component.scss']\n})\nexport class OToggleButtonComponent implements OnChanges {\n\n @Input() elements: { label: string; value: string }[] = [];\n @Input() selectedValue?: string;\n\n @Output() toggleChange = new EventEmitter<{ label: string; value: string }>();\n\n activeIndex = 0;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['selectedValue'] || changes['elements']) {\n const idx = this.elements.findIndex(e => e.value === this.selectedValue);\n this.activeIndex = idx >= 0 ? idx : 0;\n }\n }\n\n select(index: number, element: { label: string; value: string }): void {\n this.activeIndex = index;\n this.toggleChange.emit(element);\n }\n}\n","<div class=\"o-toggle-button\" role=\"group\" aria-label=\"Toggle options\">\n @for (element of elements; track element.value; let i = $index) {\n <button\n type=\"button\"\n class=\"o-toggle-button__item\"\n [class.o-toggle-button__item--active]=\"i === activeIndex\"\n (click)=\"select(i, element)\"\n [attr.aria-pressed]=\"i === activeIndex\"\n >\n {{ element.label }}\n </button>\n }\n</div>\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'o-dialog',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './o-dialog.component.html',\n styleUrls: ['./o-dialog.component.scss']\n})\nexport class ODialogComponent {\n\n @Input() open = false;\n @Input() title = '';\n @Input() width = '600px';\n @Input() valid = true;\n @Input() showFooter = true;\n @Input() submitLabel = 'Submit';\n\n @Output() onClose = new EventEmitter<void>();\n @Output() onSubmit = new EventEmitter<void>();\n\n close(): void {\n this.onClose.emit();\n }\n\n submit(): void {\n if (this.valid) {\n this.onSubmit.emit();\n }\n }\n\n onOverlayClick(event: MouseEvent): void {\n if ((event.target as HTMLElement).classList.contains('o-dialog__overlay')) {\n this.close();\n }\n }\n}\n","@if (open) {\n <div\n class=\"o-dialog__overlay\"\n role=\"dialog\"\n [attr.aria-label]=\"title\"\n aria-modal=\"true\"\n (click)=\"onOverlayClick($event)\"\n >\n <div class=\"o-dialog__card\" [style.width]=\"width\">\n <!-- Header -->\n <div class=\"o-dialog__header\">\n <h3 class=\"o-dialog__title\">{{ title }}</h3>\n <button\n type=\"button\"\n class=\"o-dialog__close-btn\"\n (click)=\"close()\"\n aria-label=\"Close dialog\"\n >\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 28 28\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path\n d=\"M15.6449 13.9999L20.6616 8.99489C20.8813 8.7752 21.0047 8.47724 21.0047 8.16656C21.0047 7.85587 20.8813 7.55791 20.6616 7.33822C20.4419 7.11854 20.1439 6.99512 19.8333 6.99512C19.5226 6.99512 19.2246 7.11854 19.0049 7.33822L13.9999 12.3549L8.99493 7.33822C8.77524 7.11854 8.47728 6.99512 8.1666 6.99512C7.85591 6.99512 7.55795 7.11854 7.33826 7.33822C7.11857 7.55791 6.99516 7.85587 6.99516 8.16656C6.99516 8.47724 7.11857 8.7752 7.33826 8.99489L12.3549 13.9999L7.33826 19.0049C7.22891 19.1133 7.14212 19.2424 7.08289 19.3846C7.02366 19.5267 6.99316 19.6792 6.99316 19.8332C6.99316 19.9872 7.02366 20.1397 7.08289 20.2819C7.14212 20.4241 7.22891 20.5531 7.33826 20.6616C7.44672 20.7709 7.57575 20.8577 7.71792 20.9169C7.86009 20.9762 8.01258 21.0067 8.1666 21.0067C8.32061 21.0067 8.4731 20.9762 8.61527 20.9169C8.75744 20.8577 8.88647 20.7709 8.99493 20.6616L13.9999 15.6449L19.0049 20.6616C19.1134 20.7709 19.2424 20.8577 19.3846 20.9169C19.5268 20.9762 19.6792 21.0067 19.8333 21.0067C19.9873 21.0067 20.1398 20.9762 20.2819 20.9169C20.4241 20.8577 20.5531 20.7709 20.6616 20.6616C20.7709 20.5531 20.8577 20.4241 20.917 20.2819C20.9762 20.1397 21.0067 19.9872 21.0067 19.8332C21.0067 19.6792 20.9762 19.5267 20.917 19.3846C20.8577 19.2424 20.7709 19.1133 20.6616 19.0049L15.6449 13.9999Z\"\n fill=\"#374151\"\n />\n </svg>\n </button>\n </div>\n\n <!-- Body -->\n <div class=\"o-dialog__body\">\n <ng-content></ng-content>\n </div>\n\n <!-- Footer -->\n @if (showFooter) {\n <div class=\"o-dialog__footer\">\n <button type=\"button\" class=\"o-dialog__btn o-dialog__btn--close\" (click)=\"close()\">\n Close\n </button>\n <button\n type=\"button\"\n class=\"o-dialog__btn o-dialog__btn--submit\"\n [disabled]=\"!valid\"\n [class.o-dialog__btn--submit-disabled]=\"!valid\"\n (click)=\"submit()\"\n >\n {{ submitLabel }}\n </button>\n </div>\n }\n </div>\n </div>\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n HostListener,\n ElementRef\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport interface ODotsActionItem {\n label: string;\n action: string;\n isDanger?: boolean;\n}\n\n@Component({\n selector: 'o-dots-action',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './o-dots-action.component.html',\n styleUrls: ['./o-dots-action.component.scss']\n})\nexport class ODotsActionComponent {\n\n @Input() items: ODotsActionItem[] = [];\n @Input() open = false;\n\n @Output() itemClick = new EventEmitter<ODotsActionItem>();\n @Output() toggled = new EventEmitter<boolean>();\n\n constructor(private readonly el: ElementRef) {}\n\n toggle(event: MouseEvent): void {\n event.stopPropagation();\n this.open = !this.open;\n this.toggled.emit(this.open);\n }\n\n onItemClick(event: MouseEvent, item: ODotsActionItem): void {\n event.stopPropagation();\n this.itemClick.emit(item);\n this.open = false;\n this.toggled.emit(false);\n }\n\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent): void {\n if (!this.el.nativeElement.contains(event.target)) {\n if (this.open) {\n this.open = false;\n this.toggled.emit(false);\n }\n }\n }\n}\n","<div class=\"o-dots-action\">\n <button\n type=\"button\"\n class=\"o-dots-action__trigger\"\n (click)=\"toggle($event)\"\n [class.o-dots-action__trigger--open]=\"open\"\n aria-label=\"Actions menu\"\n [attr.aria-expanded]=\"open\"\n >\n <svg width=\"4\" height=\"16\" viewBox=\"0 0 4 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <circle cx=\"2\" cy=\"2\" r=\"2\" fill=\"#6B7280\"/>\n <circle cx=\"2\" cy=\"9\" r=\"2\" fill=\"#6B7280\"/>\n <circle cx=\"2\" cy=\"16\" r=\"2\" fill=\"#6B7280\"/>\n </svg>\n </button>\n\n @if (open) {\n <div class=\"o-dots-action__menu\" role=\"menu\">\n @for (item of items; track item.action) {\n <button\n type=\"button\"\n class=\"o-dots-action__item\"\n [class.o-dots-action__item--danger]=\"item.isDanger\"\n (click)=\"onItemClick($event, item)\"\n role=\"menuitem\"\n >\n {{ item.label }}\n </button>\n }\n </div>\n }\n</div>\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { OToastMessage } from './o-toast.model';\n\n@Injectable({ providedIn: 'root' })\nexport class OToastService {\n\n private readonly _messages$ = new BehaviorSubject<OToastMessage[]>([]);\n\n get messages$(): Observable<OToastMessage[]> {\n return this._messages$.asObservable();\n }\n\n private add(\n heading: string,\n message: string,\n type: OToastMessage['type'],\n autoHide = true,\n delay = 5000\n ): void {\n const id = `toast-${Date.now()}-${Math.random().toString(36).slice(2, 7)}`;\n const toast: OToastMessage = { id, heading, message, type, autoHide, delay };\n const current = this._messages$.getValue();\n this._messages$.next([...current, toast]);\n\n if (autoHide) {\n setTimeout(() => this.remove(id), delay);\n }\n }\n\n addSuccess(heading: string, message: string, autoHide = true, delay = 5000): void {\n this.add(heading, message, 'success', autoHide, delay);\n }\n\n addError(heading: string, message: string, autoHide = true, delay = 5000): void {\n this.add(heading, message, 'error', autoHide, delay);\n }\n\n addWarning(heading: string, message: string, autoHide = true, delay = 5000): void {\n this.add(heading, message, 'warning', autoHide, delay);\n }\n\n addInfo(heading: string, message: string, autoHide = true, delay = 5000): void {\n this.add(heading, message, 'info', autoHide, delay);\n }\n\n remove(id: string): void {\n const current = this._messages$.getValue();\n this._messages$.next(current.filter(m => m.id !== id));\n }\n\n clear(): void {\n this._messages$.next([]);\n }\n}\n","import {\n Component,\n OnInit,\n OnDestroy,\n ChangeDetectionStrategy,\n ChangeDetectorRef\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Subscription } from 'rxjs';\nimport { OToastService } from './o-toast.service';\nimport { OToastMessage } from './o-toast.model';\n\n@Component({\n selector: 'o-toast',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './o-toast.component.html',\n styleUrls: ['./o-toast.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class OToastComponent implements OnInit, OnDestroy {\n\n messages: OToastMessage[] = [];\n private sub?: Subscription;\n\n constructor(\n private readonly toastService: OToastService,\n private readonly cdr: ChangeDetectorRef\n ) {}\n\n ngOnInit(): void {\n this.sub = this.toastService.messages$.subscribe(msgs => {\n this.messages = msgs;\n this.cdr.markForCheck();\n });\n }\n\n ngOnDestroy(): void {\n this.sub?.unsubscribe();\n }\n\n remove(id: string): void {\n this.toastService.remove(id);\n }\n\n typeColor(type: OToastMessage['type']): string {\n switch (type) {\n case 'success': return '#16a34a';\n case 'error': return '#dc2626';\n case 'warning': return '#d97706';\n case 'info': return '#2563eb';\n default: return '#2563eb';\n }\n }\n\n typeLabel(type: OToastMessage['type']): string {\n switch (type) {\n case 'success': return 'Success';\n case 'error': return 'Error';\n case 'warning': return 'Warning';\n case 'info': return 'Info';\n default: return '';\n }\n }\n}\n","<div class=\"o-toast-container\" aria-live=\"polite\" aria-atomic=\"false\">\n @for (msg of messages; track msg.id) {\n <div class=\"o-toast\" [class]=\"'o-toast--' + msg.type\" role=\"alert\">\n <!-- Type bar -->\n <div class=\"o-toast__bar\" [style.background]=\"typeColor(msg.type)\"></div>\n\n <div class=\"o-toast__content\">\n <!-- Icon area -->\n <div class=\"o-toast__icon-wrap\" [style.background]=\"typeColor(msg.type) + '18'\">\n @if (msg.type === 'success') {\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" [style.color]=\"typeColor(msg.type)\" aria-hidden=\"true\">\n <polyline points=\"20 6 9 17 4 12\"/>\n </svg>\n }\n @if (msg.type === 'error') {\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" [style.color]=\"typeColor(msg.type)\" aria-hidden=\"true\">\n <circle cx=\"12\" cy=\"12\" r=\"10\"/>\n <line x1=\"15\" y1=\"9\" x2=\"9\" y2=\"15\"/>\n <line x1=\"9\" y1=\"9\" x2=\"15\" y2=\"15\"/>\n </svg>\n }\n @if (msg.type === 'warning') {\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" [style.color]=\"typeColor(msg.type)\" aria-hidden=\"true\">\n <path d=\"M10.29 3.86L1.82 18a2 2 0 001.71 3h16.94a2 2 0 001.71-3L13.71 3.86a2 2 0 00-3.42 0z\"/>\n <line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\"/>\n <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\"/>\n </svg>\n }\n @if (msg.type === 'info') {\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" [style.color]=\"typeColor(msg.type)\" aria-hidden=\"true\">\n <circle cx=\"12\" cy=\"12\" r=\"10\"/>\n <line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\"/>\n <line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\"/>\n </svg>\n }\n </div>\n\n <!-- Text -->\n <div class=\"o-toast__text\">\n @if (msg.heading) {\n <p class=\"o-toast__heading\">{{ msg.heading }}</p>\n }\n <p class=\"o-toast__message\">{{ msg.message }}</p>\n </div>\n\n <!-- Close -->\n <button\n type=\"button\"\n class=\"o-toast__close\"\n (click)=\"remove(msg.id)\"\n aria-label=\"Dismiss notification\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\" width=\"12\" height=\"12\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M310.6 150.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L160 210.7 54.6 105.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L114.7 256 9.4 361.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L160 301.3 265.4 406.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L205.3 256 310.6 150.6z\"/>\n </svg>\n </button>\n </div>\n </div>\n }\n</div>\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n forwardRef\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';\n\n@Component({\n selector: 'o-select',\n standalone: true,\n imports: [CommonModule, FormsModule],\n templateUrl: './o-select.component.html',\n styleUrls: ['./o-select.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => OSelectComponent),\n multi: true\n }\n ]\n})\nexport class OSelectComponent implements ControlValueAccessor {\n\n @Input() options: { label: string; value: any }[] = [];\n @Input() placeholder = 'Select';\n @Input() value: any = null;\n @Input() disabled = false;\n\n @Output() valueChange = new EventEmitter<any>();\n\n private onChange: (val: any) => void = () => {};\n onTouched: () => void = () => {};\n\n onSelectChange(event: Event): void {\n const el = event.target as HTMLSelectElement;\n const selected = this.options.find(o => String(o.value) === el.value);\n const val = selected ? selected.value : null;\n this.value = val;\n this.onChange(val);\n this.onTouched();\n this.valueChange.emit(val);\n }\n\n optionStringValue(val: any): string {\n return val == null ? '' : String(val);\n }\n\n writeValue(val: any): void {\n this.value = val ?? null;\n }\n\n registerOnChange(fn: (val: any) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn; // eslint-disable-line @typescript-eslint/no-empty-function\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n}\n","<div class=\"o-select-wrapper\" [class.o-select-wrapper--disabled]=\"disabled\">\n <select\n class=\"o-select\"\n [disabled]=\"disabled\"\n [value]=\"optionStringValue(value)\"\n (change)=\"onSelectChange($event)\"\n (blur)=\"onTouched()\"\n [attr.aria-label]=\"placeholder\"\n >\n <option value=\"\" disabled [selected]=\"value === null || value === undefined || value === ''\">\n {{ placeholder }}\n </option>\n @for (option of options; track option.value) {\n <option\n [value]=\"optionStringValue(option.value)\"\n [selected]=\"optionStringValue(option.value) === optionStringValue(value)\"\n >\n {{ option.label }}\n </option>\n }\n </select>\n</div>\n","/*\n * Public API Surface of o-ui\n */\n\nexport * from './lib/o-ui';\n\n// Models\nexport * from './lib/models/page.model';\n\n// Components\nexport * from './lib/components/context-switcher/context-switcher';\nexport * from './lib/components/toggle-tabs/toggle-tabs';\nexport * from './lib/components/data-table/data-table';\nexport * from './lib/components/form-drawer/form-drawer';\nexport * from './lib/components/context-menu/context-menu';\nexport * from './lib/components/page-renderer/page-renderer';\nexport * from './lib/components/page-header/page-header';\nexport * from './lib/components/side-nav/side-nav';\nexport * from './lib/components/search-filter/search-filter';\nexport * from './lib/components/confirmation-dialog/confirmation-dialog';\n\n// o-table\nexport * from './lib/components/o-table/o-table.component';\n\n// o-table-tools\nexport * from './lib/components/o-table-tools/o-table-tools.component';\n\n// o-toggle-button\nexport * from './lib/components/o-toggle-button/o-toggle-button.component';\n\n// o-dialog\nexport * from './lib/components/o-dialog/o-dialog.component';\n\n// o-status-toggle\nexport * from './lib/components/o-status-toggle/o-status-toggle.component';\n\n// o-dots-action\nexport * from './lib/components/o-dots-action/o-dots-action.component';\n\n// o-toast\nexport * from './lib/components/o-toast/o-toast.model';\nexport * from './lib/components/o-toast/o-toast.service';\nexport * from './lib/components/o-toast/o-toast.component';\n\n// o-select\nexport * from './lib/components/o-select/o-select.component';\n\n// o-license-modules\nexport * from './lib/components/o-license-modules/o-license-modules.model';\nexport * from './lib/components/o-license-modules/o-license-modules.component';\n\n// o-side-panel\nexport * from './lib/components/o-side-panel/o-side-panel.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i1","i1.OToastService"],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "orque-ui",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"peerDependencies": {
|
|
5
|
+
"@angular/common": "^22.0.0",
|
|
6
|
+
"@angular/core": "^22.0.0"
|
|
7
|
+
},
|
|
8
|
+
"dependencies": {
|
|
9
|
+
"tslib": "^2.3.0"
|
|
10
|
+
},
|
|
11
|
+
"sideEffects": false,
|
|
12
|
+
"module": "fesm2022/orque-ui.mjs",
|
|
13
|
+
"typings": "types/orque-ui.d.ts",
|
|
14
|
+
"exports": {
|
|
15
|
+
"./package.json": {
|
|
16
|
+
"default": "./package.json"
|
|
17
|
+
},
|
|
18
|
+
".": {
|
|
19
|
+
"types": "./types/orque-ui.d.ts",
|
|
20
|
+
"default": "./fesm2022/orque-ui.mjs"
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
"type": "module"
|
|
24
|
+
}
|