@elite.framework/ng.core 1.0.62 → 1.0.65

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. package/fesm2022/elite.framework-ng.core-src-lib-components-attachments.mjs +204 -0
  2. package/fesm2022/elite.framework-ng.core-src-lib-components-attachments.mjs.map +1 -0
  3. package/fesm2022/elite.framework-ng.core-src-lib-components-breadcrumb.mjs +132 -0
  4. package/fesm2022/elite.framework-ng.core-src-lib-components-breadcrumb.mjs.map +1 -0
  5. package/fesm2022/elite.framework-ng.core-src-lib-components-color-picker.mjs +76 -0
  6. package/fesm2022/elite.framework-ng.core-src-lib-components-color-picker.mjs.map +1 -0
  7. package/fesm2022/elite.framework-ng.core-src-lib-components-column-settings-popover.mjs +172 -0
  8. package/fesm2022/elite.framework-ng.core-src-lib-components-column-settings-popover.mjs.map +1 -0
  9. package/fesm2022/elite.framework-ng.core-src-lib-components-condition-editor.mjs +794 -0
  10. package/fesm2022/elite.framework-ng.core-src-lib-components-condition-editor.mjs.map +1 -0
  11. package/fesm2022/elite.framework-ng.core-src-lib-components-custom-switch.mjs +110 -0
  12. package/fesm2022/elite.framework-ng.core-src-lib-components-custom-switch.mjs.map +1 -0
  13. package/fesm2022/elite.framework-ng.core-src-lib-components-deactivation-reason.mjs +130 -0
  14. package/fesm2022/elite.framework-ng.core-src-lib-components-deactivation-reason.mjs.map +1 -0
  15. package/fesm2022/elite.framework-ng.core-src-lib-components-form-button.mjs +50 -0
  16. package/fesm2022/elite.framework-ng.core-src-lib-components-form-button.mjs.map +1 -0
  17. package/fesm2022/elite.framework-ng.core-src-lib-components-form-field.mjs +154 -0
  18. package/fesm2022/elite.framework-ng.core-src-lib-components-form-field.mjs.map +1 -0
  19. package/fesm2022/elite.framework-ng.core-src-lib-components-form-template.mjs +24 -0
  20. package/fesm2022/elite.framework-ng.core-src-lib-components-form-template.mjs.map +1 -0
  21. package/fesm2022/elite.framework-ng.core-src-lib-components-formly-avatar-image.mjs +100 -0
  22. package/fesm2022/elite.framework-ng.core-src-lib-components-formly-avatar-image.mjs.map +1 -0
  23. package/fesm2022/elite.framework-ng.core-src-lib-components-formly-avatar-label.mjs +78 -0
  24. package/fesm2022/elite.framework-ng.core-src-lib-components-formly-avatar-label.mjs.map +1 -0
  25. package/fesm2022/elite.framework-ng.core-src-lib-components-formly-button-selector.mjs +167 -0
  26. package/fesm2022/elite.framework-ng.core-src-lib-components-formly-button-selector.mjs.map +1 -0
  27. package/fesm2022/elite.framework-ng.core-src-lib-components-formly-button.mjs +62 -0
  28. package/fesm2022/elite.framework-ng.core-src-lib-components-formly-button.mjs.map +1 -0
  29. package/fesm2022/elite.framework-ng.core-src-lib-components-formly-split-button.mjs +50 -0
  30. package/fesm2022/elite.framework-ng.core-src-lib-components-formly-split-button.mjs.map +1 -0
  31. package/fesm2022/elite.framework-ng.core-src-lib-components-formly-username-with-domain.mjs +76 -0
  32. package/fesm2022/elite.framework-ng.core-src-lib-components-formly-username-with-domain.mjs.map +1 -0
  33. package/fesm2022/elite.framework-ng.core-src-lib-components-generic-autocomplete.mjs +163 -0
  34. package/fesm2022/elite.framework-ng.core-src-lib-components-generic-autocomplete.mjs.map +1 -0
  35. package/fesm2022/elite.framework-ng.core-src-lib-components-generic-button.mjs +133 -0
  36. package/fesm2022/elite.framework-ng.core-src-lib-components-generic-button.mjs.map +1 -0
  37. package/fesm2022/elite.framework-ng.core-src-lib-components-generic-card.mjs +214 -0
  38. package/fesm2022/elite.framework-ng.core-src-lib-components-generic-card.mjs.map +1 -0
  39. package/fesm2022/elite.framework-ng.core-src-lib-components-generic-crud-table.mjs +385 -0
  40. package/fesm2022/elite.framework-ng.core-src-lib-components-generic-crud-table.mjs.map +1 -0
  41. package/fesm2022/elite.framework-ng.core-src-lib-components-generic-errormessage.mjs +23 -0
  42. package/fesm2022/elite.framework-ng.core-src-lib-components-generic-errormessage.mjs.map +1 -0
  43. package/fesm2022/elite.framework-ng.core-src-lib-components-generic-formly-fields.mjs +53 -0
  44. package/fesm2022/elite.framework-ng.core-src-lib-components-generic-formly-fields.mjs.map +1 -0
  45. package/fesm2022/elite.framework-ng.core-src-lib-components-generic-loadingspinner.mjs +23 -0
  46. package/fesm2022/elite.framework-ng.core-src-lib-components-generic-loadingspinner.mjs.map +1 -0
  47. package/fesm2022/elite.framework-ng.core-src-lib-components-generic-search.mjs +85 -0
  48. package/fesm2022/elite.framework-ng.core-src-lib-components-generic-search.mjs.map +1 -0
  49. package/fesm2022/elite.framework-ng.core-src-lib-components-generic-selector.mjs +430 -0
  50. package/fesm2022/elite.framework-ng.core-src-lib-components-generic-selector.mjs.map +1 -0
  51. package/fesm2022/elite.framework-ng.core-src-lib-components-generic-table.mjs +216 -0
  52. package/fesm2022/elite.framework-ng.core-src-lib-components-generic-table.mjs.map +1 -0
  53. package/fesm2022/elite.framework-ng.core-src-lib-components-header-wrapper.mjs +18 -0
  54. package/fesm2022/elite.framework-ng.core-src-lib-components-header-wrapper.mjs.map +1 -0
  55. package/fesm2022/elite.framework-ng.core-src-lib-components-icon-picker.mjs +195 -0
  56. package/fesm2022/elite.framework-ng.core-src-lib-components-icon-picker.mjs.map +1 -0
  57. package/fesm2022/elite.framework-ng.core-src-lib-components-input-switch.mjs +94 -0
  58. package/fesm2022/elite.framework-ng.core-src-lib-components-input-switch.mjs.map +1 -0
  59. package/fesm2022/elite.framework-ng.core-src-lib-components-input-with-icon.mjs +55 -0
  60. package/fesm2022/elite.framework-ng.core-src-lib-components-input-with-icon.mjs.map +1 -0
  61. package/fesm2022/elite.framework-ng.core-src-lib-components-label-type.mjs +112 -0
  62. package/fesm2022/elite.framework-ng.core-src-lib-components-label-type.mjs.map +1 -0
  63. package/fesm2022/elite.framework-ng.core-src-lib-components-odata-query-builder.mjs +297 -0
  64. package/fesm2022/elite.framework-ng.core-src-lib-components-odata-query-builder.mjs.map +1 -0
  65. package/fesm2022/elite.framework-ng.core-src-lib-components-repeat.mjs +135 -0
  66. package/fesm2022/elite.framework-ng.core-src-lib-components-repeat.mjs.map +1 -0
  67. package/fesm2022/elite.framework-ng.core-src-lib-components-sidebar-cards.mjs +40 -0
  68. package/fesm2022/elite.framework-ng.core-src-lib-components-sidebar-cards.mjs.map +1 -0
  69. package/fesm2022/elite.framework-ng.core-src-lib-components-sidebar-toggles.mjs +41 -0
  70. package/fesm2022/elite.framework-ng.core-src-lib-components-sidebar-toggles.mjs.map +1 -0
  71. package/fesm2022/elite.framework-ng.core-src-lib-components-tabs.mjs +45 -0
  72. package/fesm2022/elite.framework-ng.core-src-lib-components-tabs.mjs.map +1 -0
  73. package/fesm2022/elite.framework-ng.core-src-lib-components-tag-type.mjs +192 -0
  74. package/fesm2022/elite.framework-ng.core-src-lib-components-tag-type.mjs.map +1 -0
  75. package/fesm2022/elite.framework-ng.core-src-lib-components-text-editor.mjs +44 -0
  76. package/fesm2022/elite.framework-ng.core-src-lib-components-text-editor.mjs.map +1 -0
  77. package/fesm2022/elite.framework-ng.core-src-lib-components-wrappers.mjs +174 -0
  78. package/fesm2022/elite.framework-ng.core-src-lib-components-wrappers.mjs.map +1 -0
  79. package/fesm2022/elite.framework-ng.core-src-lib-directives.mjs +59 -0
  80. package/fesm2022/elite.framework-ng.core-src-lib-directives.mjs.map +1 -0
  81. package/fesm2022/elite.framework-ng.core-src-lib-pipes.mjs +135 -0
  82. package/fesm2022/elite.framework-ng.core-src-lib-pipes.mjs.map +1 -0
  83. package/fesm2022/elite.framework-ng.core.mjs +1371 -6371
  84. package/fesm2022/elite.framework-ng.core.mjs.map +1 -1
  85. package/index.d.ts +347 -1274
  86. package/package.json +162 -22
  87. package/src/lib/components/attachments/index.d.ts +31 -0
  88. package/src/lib/components/breadcrumb/index.d.ts +10 -0
  89. package/src/lib/components/color-picker/index.d.ts +9 -0
  90. package/src/lib/components/column-settings-popover/index.d.ts +39 -0
  91. package/src/lib/components/condition-editor/index.d.ts +73 -0
  92. package/src/lib/components/custom-switch/index.d.ts +12 -0
  93. package/src/lib/components/deactivation-reason/index.d.ts +24 -0
  94. package/src/lib/components/form-button/index.d.ts +10 -0
  95. package/src/lib/components/form-field/index.d.ts +30 -0
  96. package/src/lib/components/form-template/index.d.ts +9 -0
  97. package/src/lib/components/formly-avatar-image/index.d.ts +11 -0
  98. package/src/lib/components/formly-avatar-label/index.d.ts +29 -0
  99. package/src/lib/components/formly-button/index.d.ts +13 -0
  100. package/src/lib/components/formly-button-selector/index.d.ts +28 -0
  101. package/src/lib/components/formly-split-button/index.d.ts +16 -0
  102. package/src/lib/components/formly-username-with-domain/index.d.ts +12 -0
  103. package/src/lib/components/generic-autocomplete/index.d.ts +34 -0
  104. package/src/lib/components/generic-button/index.d.ts +35 -0
  105. package/src/lib/components/generic-card/index.d.ts +90 -0
  106. package/src/lib/components/generic-crud-table/index.d.ts +120 -0
  107. package/src/lib/components/generic-errormessage/index.d.ts +10 -0
  108. package/src/lib/components/generic-formly-fields/index.d.ts +22 -0
  109. package/src/lib/components/generic-loadingspinner/index.d.ts +9 -0
  110. package/src/lib/components/generic-search/index.d.ts +29 -0
  111. package/src/lib/components/generic-selector/index.d.ts +66 -0
  112. package/src/lib/components/generic-table/index.d.ts +60 -0
  113. package/src/lib/components/header-wrapper/index.d.ts +8 -0
  114. package/src/lib/components/icon-picker/index.d.ts +23 -0
  115. package/src/lib/components/input-switch/index.d.ts +9 -0
  116. package/src/lib/components/input-with-icon/index.d.ts +10 -0
  117. package/src/lib/components/label-type/index.d.ts +19 -0
  118. package/src/lib/components/odata-query-builder/index.d.ts +81 -0
  119. package/src/lib/components/repeat/index.d.ts +17 -0
  120. package/src/lib/components/sidebar-cards/index.d.ts +18 -0
  121. package/src/lib/components/sidebar-toggles/index.d.ts +18 -0
  122. package/src/lib/components/tabs/index.d.ts +10 -0
  123. package/src/lib/components/tag-type/index.d.ts +27 -0
  124. package/src/lib/components/text-editor/index.d.ts +9 -0
  125. package/src/lib/components/wrappers/index.d.ts +24 -0
  126. package/src/lib/directives/index.d.ts +23 -0
  127. package/src/lib/pipes/index.d.ts +20 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"elite.framework-ng.core-src-lib-components-odata-query-builder.mjs","sources":["../../../projects/core/src/lib/components/odata-query-builder/odata-query-builder.component.ts","../../../projects/core/src/lib/components/odata-query-builder/odata-query-builder.component.html","../../../projects/core/src/lib/components/odata-query-builder/elite.framework-ng.core-src-lib-components-odata-query-builder.ts"],"sourcesContent":["import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { FormlyFieldConfig, FormlyFieldProps, FormlyForm } from '@ngx-formly/core';\r\nimport { EntityField } from './odata-types';\r\nimport { CommonModule } from '@angular/common';\r\n\r\ninterface ConditionGroup {\r\n operator: 'and' | 'or';\r\n conditions: Condition[];\r\n}\r\n\r\ninterface Condition {\r\n field: string;\r\n operator: string;\r\n value: any;\r\n}\r\n\r\ninterface OrderBy {\r\n field: string;\r\n direction: 'asc' | 'desc';\r\n}\r\n\r\ninterface GroupBy {\r\n field: string;\r\n}\r\n\r\ninterface QueryModel {\r\n conditionGroups: ConditionGroup[];\r\n orderBy: OrderBy[];\r\n groupBy: GroupBy[];\r\n top: number | null;\r\n skip: number | null;\r\n}\r\n\r\ninterface FieldSelectProps extends FormlyFieldProps {\r\n options: { value: string; label: string }[];\r\n}\r\n\r\ninterface RepeatFieldProps extends FormlyFieldProps {\r\n addText: string;\r\n}\r\n\r\ninterface FieldArrayConfig extends FormlyFieldConfig {\r\n fieldGroup: FormlyFieldConfig[];\r\n}\r\n\r\n@Component({\r\n selector: 'app-odata-query-builder',\r\n templateUrl: './odata-query-builder.component.html',\r\n styleUrls: ['./odata-query-builder.component.css'],\r\n imports: [CommonModule,FormlyForm]\r\n})\r\nexport class ODataQueryBuilderComponent {\r\n @Input() set entityFields(fields: EntityField[]) {\r\n this._entityFields = fields || [];\r\n this.updateFieldOptions();\r\n }\r\n get entityFields(): EntityField[] {\r\n return this._entityFields;\r\n }\r\n private _entityFields: EntityField[] = [];\r\n\r\n @Output() queryChange = new EventEmitter<string>();\r\n\r\n form = new FormGroup({});\r\n model: QueryModel = {\r\n conditionGroups: [\r\n {\r\n operator: 'and',\r\n conditions: []\r\n }\r\n ],\r\n orderBy: [],\r\n groupBy: [],\r\n top: null,\r\n skip: null\r\n };\r\n\r\n fields: FormlyFieldConfig[] = [\r\n {\r\n key: 'conditionGroups',\r\n type: 'repeat',\r\n props: {\r\n addText: 'Add Condition Group',\r\n required: true\r\n } as RepeatFieldProps,\r\n fieldArray: {\r\n fieldGroup: [\r\n {\r\n key: 'operator',\r\n type: 'select',\r\n props: {\r\n label: 'Group Operator',\r\n required: true,\r\n options: [\r\n { value: 'and', label: 'AND' },\r\n { value: 'or', label: 'OR' }\r\n ]\r\n } as FieldSelectProps\r\n },\r\n {\r\n key: 'conditions',\r\n type: 'repeat',\r\n props: {\r\n addText: 'Add Condition',\r\n required: true\r\n } as RepeatFieldProps,\r\n fieldArray: {\r\n fieldGroup: [\r\n {\r\n key: 'field',\r\n type: 'select',\r\n props: {\r\n label: 'Field',\r\n required: true,\r\n options: []\r\n } as FieldSelectProps\r\n },\r\n {\r\n key: 'operator',\r\n type: 'select',\r\n props: {\r\n label: 'Operator',\r\n required: true,\r\n options: [\r\n { value: 'eq', label: 'Equals' },\r\n { value: 'ne', label: 'Not Equals' },\r\n { value: 'gt', label: 'Greater Than' },\r\n { value: 'ge', label: 'Greater or Equal' },\r\n { value: 'lt', label: 'Less Than' },\r\n { value: 'le', label: 'Less or Equal' },\r\n { value: 'contains', label: 'Contains' },\r\n { value: 'startswith', label: 'Starts With' },\r\n { value: 'endswith', label: 'Ends With' }\r\n ]\r\n } as FieldSelectProps\r\n },\r\n {\r\n key: 'value',\r\n type: 'input',\r\n props: {\r\n label: 'Value',\r\n required: true\r\n },\r\n expressions: {\r\n 'props.type': (field: FormlyFieldConfig) => {\r\n const model = field.model as Condition;\r\n if (!model?.field) return 'string';\r\n const selectedField = this.entityFields.find(f => f.value === model.field);\r\n return selectedField?.type || 'string';\r\n }\r\n }\r\n }\r\n ]\r\n } as FieldArrayConfig\r\n }\r\n ]\r\n } as FieldArrayConfig\r\n },\r\n {\r\n key: 'orderBy',\r\n type: 'repeat',\r\n props: {\r\n addText: 'Add Order By'\r\n } as RepeatFieldProps,\r\n fieldArray: {\r\n fieldGroup: [\r\n {\r\n key: 'field',\r\n type: 'select',\r\n props: {\r\n label: 'Field',\r\n required: true,\r\n options: []\r\n } as FieldSelectProps\r\n },\r\n {\r\n key: 'direction',\r\n type: 'select',\r\n props: {\r\n label: 'Direction',\r\n required: true,\r\n options: [\r\n { value: 'asc', label: 'Ascending' },\r\n { value: 'desc', label: 'Descending' }\r\n ]\r\n } as FieldSelectProps\r\n }\r\n ]\r\n } as FieldArrayConfig\r\n },\r\n {\r\n key: 'groupBy',\r\n type: 'repeat',\r\n props: {\r\n addText: 'Add Group By'\r\n } as RepeatFieldProps,\r\n fieldArray: {\r\n fieldGroup: [\r\n {\r\n key: 'field',\r\n type: 'select',\r\n props: {\r\n label: 'Field',\r\n required: true,\r\n options: []\r\n } as FieldSelectProps\r\n }\r\n ]\r\n } as FieldArrayConfig\r\n },\r\n {\r\n key: 'top',\r\n type: 'input',\r\n props: {\r\n label: 'Top',\r\n type: 'number',\r\n min: 1\r\n }\r\n },\r\n {\r\n key: 'skip',\r\n type: 'input',\r\n props: {\r\n label: 'Skip',\r\n type: 'number',\r\n min: 0\r\n }\r\n }\r\n ];\r\n\r\n constructor() {}\r\n\r\n private updateFieldOptions(): void {\r\n const fieldOptions = this.entityFields.map(f => ({ value: f.value, label: f.label }));\r\n\r\n // Update conditions field options in all groups\r\n const conditionGroupsField = this.fields.find(f => f.key === 'conditionGroups');\r\n if (conditionGroupsField && (conditionGroupsField.fieldArray as FieldArrayConfig)?.fieldGroup) {\r\n const conditionsField = (conditionGroupsField.fieldArray as FieldArrayConfig).fieldGroup.find(f => f.key === 'conditions');\r\n if (conditionsField && (conditionsField.fieldArray as FieldArrayConfig)?.fieldGroup) {\r\n const fieldSelect = (conditionsField.fieldArray as FieldArrayConfig).fieldGroup.find(f => f.key === 'field');\r\n if (fieldSelect) {\r\n (fieldSelect.props as FieldSelectProps).options = fieldOptions;\r\n }\r\n }\r\n }\r\n\r\n // Update orderBy field options\r\n const orderByField = this.fields.find(f => f.key === 'orderBy');\r\n if (orderByField && (orderByField.fieldArray as FieldArrayConfig)?.fieldGroup) {\r\n const fieldSelect = (orderByField.fieldArray as FieldArrayConfig).fieldGroup.find(f => f.key === 'field');\r\n if (fieldSelect) {\r\n (fieldSelect.props as FieldSelectProps).options = fieldOptions;\r\n }\r\n }\r\n\r\n // Update groupBy field options\r\n const groupByField = this.fields.find(f => f.key === 'groupBy');\r\n if (groupByField && (groupByField.fieldArray as FieldArrayConfig)?.fieldGroup) {\r\n const fieldSelect = (groupByField.fieldArray as FieldArrayConfig).fieldGroup.find(f => f.key === 'field');\r\n if (fieldSelect) {\r\n (fieldSelect.props as FieldSelectProps).options = fieldOptions;\r\n }\r\n }\r\n }\r\n\r\n buildQuery(): string {\r\n let queryParts: string[] = [];\r\n\r\n // Handle condition groups\r\n if (this.model.conditionGroups?.length > 0) {\r\n const groupFilters = this.model.conditionGroups\r\n .filter((group: ConditionGroup) => group.conditions?.length > 0)\r\n .map((group: ConditionGroup) => {\r\n const conditionParts = group.conditions\r\n .filter((cond: Condition) => cond.field && cond.operator && cond.value !== undefined && cond.value !== null)\r\n .map((cond: Condition) => {\r\n const field = this.entityFields.find(f => f.value === cond.field);\r\n let value = cond.value;\r\n\r\n if (field?.type === 'string') {\r\n value = `'${String(value).replace(/'/g, \"''\")}'`; // Escape single quotes\r\n } else if (field?.type === 'date' && value) {\r\n value = new Date(value).toISOString();\r\n } else if (field?.type === 'boolean') {\r\n value = value ? 'true' : 'false';\r\n }\r\n\r\n return `${cond.field} ${cond.operator} ${value}`;\r\n });\r\n\r\n if (conditionParts.length > 0) {\r\n return conditionParts.length > 1\r\n ? `(${conditionParts.join(` ${group.operator} `)})`\r\n : conditionParts[0];\r\n }\r\n return null;\r\n })\r\n .filter(Boolean);\r\n\r\n if (groupFilters.length > 0) {\r\n queryParts.push(`$filter=${groupFilters.join(' and ')}`);\r\n }\r\n }\r\n\r\n // Handle order by\r\n if (this.model.orderBy?.length > 0) {\r\n const orderParts = this.model.orderBy\r\n .filter((order: OrderBy) => order.field && order.direction)\r\n .map((order: OrderBy) => `${order.field} ${order.direction}`);\r\n\r\n if (orderParts.length > 0) {\r\n queryParts.push(`$orderby=${orderParts.join(', ')}`);\r\n }\r\n }\r\n\r\n // Handle group by\r\n if (this.model.groupBy?.length > 0) {\r\n const groupParts = this.model.groupBy\r\n .filter((group: GroupBy) => group.field)\r\n .map((group: GroupBy) => group.field);\r\n\r\n if (groupParts.length > 0) {\r\n queryParts.push(`$groupby=${groupParts.join(',')}`);\r\n }\r\n }\r\n\r\n // Handle top\r\n if (this.model.top) {\r\n queryParts.push(`$top=${this.model.top}`);\r\n }\r\n\r\n // Handle skip\r\n if (this.model.skip) {\r\n queryParts.push(`$skip=${this.model.skip}`);\r\n }\r\n\r\n const query = queryParts.join('&');\r\n this.queryChange.emit(query);\r\n return query;\r\n }\r\n}\r\n","<div class=\"p-4 bg-white rounded-lg shadow-md\">\r\n <h2 class=\"text-xl font-semibold mb-4 text-gray-800\">OData Query Builder</h2>\r\n\r\n <formly-form\r\n [form]=\"form\"\r\n [model]=\"model\"\r\n [fields]=\"fields\"\r\n class=\"space-y-4\"\r\n ></formly-form>\r\n\r\n <div class=\"mt-6 flex justify-end space-x-3\">\r\n <button\r\n pButton\r\n type=\"button\"\r\n label=\"Reset\"\r\n icon=\"pi pi-refresh\"\r\n class=\"p-button-outlined\"\r\n (click)=\"form.reset()\"\r\n ></button>\r\n\r\n <button\r\n pButton\r\n type=\"button\"\r\n label=\"Build Query\"\r\n icon=\"pi pi-cog\"\r\n (click)=\"buildQuery()\"\r\n ></button>\r\n </div>\r\n\r\n <div *ngIf=\"form.valid && form.dirty\" class=\"mt-6 p-4 bg-gray-50 rounded\">\r\n <h3 class=\"font-medium text-gray-700 mb-2\">Generated OData Query:</h3>\r\n <pre class=\"p-3 bg-gray-100 rounded text-sm overflow-x-auto\">{{ buildQuery() }}</pre>\r\n </div>\r\n</div>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,135 @@
1
+ import * as i2 from '@ngx-translate/core';
2
+ import { TranslateModule } from '@ngx-translate/core';
3
+ import * as i0 from '@angular/core';
4
+ import { Component } from '@angular/core';
5
+ import { FieldArrayType, FormlyField } from '@ngx-formly/core';
6
+ import * as i1 from '@angular/common';
7
+ import { CommonModule } from '@angular/common';
8
+
9
+ class RepeatTypeComponent extends FieldArrayType {
10
+ cdr;
11
+ // Return columns of the first row (for table headers)
12
+ getFirstRowColumns() {
13
+ return this.field.fieldGroup?.[0]?.fieldGroup ?? [];
14
+ }
15
+ constructor(cdr) {
16
+ super();
17
+ this.cdr = cdr;
18
+ }
19
+ ngOnInit() {
20
+ // Subscribe to each FormArray changes
21
+ // if (this.formControl instanceof FormArray) {
22
+ this.field.formControl.valueChanges.subscribe(() => {
23
+ // Force Angular to detect changes
24
+ this.field.fieldGroup = [...this.field.fieldGroup ?? []];
25
+ this.cdr.detectChanges();
26
+ });
27
+ // }
28
+ }
29
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: RepeatTypeComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
30
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.4", type: RepeatTypeComponent, isStandalone: true, selector: "formly-repeat-section", usesInheritance: true, ngImport: i0, template: `
31
+ <div class="overflow-auto bg-gray-100 border border-gray-300">
32
+ <table *ngIf="(field.fieldGroup ?? []).length > 0" class="table-auto w-full border border-gray-300">
33
+ <thead>
34
+ <tr class="bg-gray-100 text-gray-700 text-sm">
35
+ <th class="w-8"></th>
36
+ <ng-container *ngFor="let col of getFirstRowColumns()">
37
+ <th class="text-center border">{{ (col.props?.label ?? '') | translate }}</th>
38
+ </ng-container>
39
+ <th class="w-10"></th>
40
+ </tr>
41
+ </thead>
42
+
43
+ <tbody>
44
+ <tr *ngFor="let row of field.fieldGroup; let rowIndex = index" class="border-t">
45
+ <td class="bg-[#fffbea] text-center text-gray-400 px-2"><i class="pi pi-bars"></i></td>
46
+
47
+ <ng-container *ngFor="let col of row.fieldGroup">
48
+ <td class="bg-[#fffbea]">
49
+ <formly-field [field]="col"></formly-field>
50
+ </td>
51
+ </ng-container>
52
+
53
+ <td class="text-center px-2 bg-[#fffbea]">
54
+ <ng-container *ngIf="rowIndex !== 0 || field.props?.['canDeleteFirstRow']">
55
+ <button type="button" (click)="remove(rowIndex)" class="text-red-600 hover:text-red-800">
56
+ <i class="pi pi-trash"></i>
57
+ </button>
58
+ </ng-container>
59
+ </td>
60
+ </tr>
61
+ </tbody>
62
+ </table>
63
+
64
+ <div class="flex justify-end">
65
+ <button
66
+ type="button"
67
+ class="inline-flex items-center gap-1 px-4 py-2 bg-primary-600 text-white text-sm font-medium hover:bg-primary-500 transition-colors duration-200 shadow-sm"
68
+ (click)="add()"
69
+ >
70
+ <span class="text-lg">+</span>
71
+ </button>
72
+ </div>
73
+ </div>
74
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: FormlyField, selector: "formly-field", inputs: ["field"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }] });
75
+ }
76
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: RepeatTypeComponent, decorators: [{
77
+ type: Component,
78
+ args: [{
79
+ selector: 'formly-repeat-section',
80
+ standalone: true,
81
+ imports: [CommonModule, FormlyField, TranslateModule],
82
+ template: `
83
+ <div class="overflow-auto bg-gray-100 border border-gray-300">
84
+ <table *ngIf="(field.fieldGroup ?? []).length > 0" class="table-auto w-full border border-gray-300">
85
+ <thead>
86
+ <tr class="bg-gray-100 text-gray-700 text-sm">
87
+ <th class="w-8"></th>
88
+ <ng-container *ngFor="let col of getFirstRowColumns()">
89
+ <th class="text-center border">{{ (col.props?.label ?? '') | translate }}</th>
90
+ </ng-container>
91
+ <th class="w-10"></th>
92
+ </tr>
93
+ </thead>
94
+
95
+ <tbody>
96
+ <tr *ngFor="let row of field.fieldGroup; let rowIndex = index" class="border-t">
97
+ <td class="bg-[#fffbea] text-center text-gray-400 px-2"><i class="pi pi-bars"></i></td>
98
+
99
+ <ng-container *ngFor="let col of row.fieldGroup">
100
+ <td class="bg-[#fffbea]">
101
+ <formly-field [field]="col"></formly-field>
102
+ </td>
103
+ </ng-container>
104
+
105
+ <td class="text-center px-2 bg-[#fffbea]">
106
+ <ng-container *ngIf="rowIndex !== 0 || field.props?.['canDeleteFirstRow']">
107
+ <button type="button" (click)="remove(rowIndex)" class="text-red-600 hover:text-red-800">
108
+ <i class="pi pi-trash"></i>
109
+ </button>
110
+ </ng-container>
111
+ </td>
112
+ </tr>
113
+ </tbody>
114
+ </table>
115
+
116
+ <div class="flex justify-end">
117
+ <button
118
+ type="button"
119
+ class="inline-flex items-center gap-1 px-4 py-2 bg-primary-600 text-white text-sm font-medium hover:bg-primary-500 transition-colors duration-200 shadow-sm"
120
+ (click)="add()"
121
+ >
122
+ <span class="text-lg">+</span>
123
+ </button>
124
+ </div>
125
+ </div>
126
+ `,
127
+ }]
128
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }] });
129
+
130
+ /**
131
+ * Generated bundle index. Do not edit.
132
+ */
133
+
134
+ export { RepeatTypeComponent };
135
+ //# sourceMappingURL=elite.framework-ng.core-src-lib-components-repeat.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"elite.framework-ng.core-src-lib-components-repeat.mjs","sources":["../../../projects/core/src/lib/components/repeat/repeat-section.type.ts","../../../projects/core/src/lib/components/repeat/elite.framework-ng.core-src-lib-components-repeat.ts"],"sourcesContent":["import { TranslateModule } from '@ngx-translate/core';\nimport { ChangeDetectorRef, Component, OnInit } from '@angular/core';\nimport { FieldArrayType, FormlyField } from '@ngx-formly/core';\nimport { CommonModule } from '@angular/common';\nimport { FormArray } from '@angular/forms';\n\n@Component({\n selector: 'formly-repeat-section',\n standalone: true,\n imports: [CommonModule, FormlyField, TranslateModule],\n template: `\n <div class=\"overflow-auto bg-gray-100 border border-gray-300\">\n <table *ngIf=\"(field.fieldGroup ?? []).length > 0\" class=\"table-auto w-full border border-gray-300\">\n <thead>\n <tr class=\"bg-gray-100 text-gray-700 text-sm\">\n <th class=\"w-8\"></th>\n <ng-container *ngFor=\"let col of getFirstRowColumns()\">\n <th class=\"text-center border\">{{ (col.props?.label ?? '') | translate }}</th>\n </ng-container>\n <th class=\"w-10\"></th>\n </tr>\n </thead>\n\n <tbody>\n <tr *ngFor=\"let row of field.fieldGroup; let rowIndex = index\" class=\"border-t\">\n <td class=\"bg-[#fffbea] text-center text-gray-400 px-2\"><i class=\"pi pi-bars\"></i></td>\n\n <ng-container *ngFor=\"let col of row.fieldGroup\">\n <td class=\"bg-[#fffbea]\">\n <formly-field [field]=\"col\"></formly-field>\n </td>\n </ng-container>\n\n <td class=\"text-center px-2 bg-[#fffbea]\">\n <ng-container *ngIf=\"rowIndex !== 0 || field.props?.['canDeleteFirstRow']\">\n <button type=\"button\" (click)=\"remove(rowIndex)\" class=\"text-red-600 hover:text-red-800\">\n <i class=\"pi pi-trash\"></i>\n </button>\n </ng-container>\n </td>\n </tr>\n </tbody>\n </table>\n\n <div class=\"flex justify-end\">\n <button\n type=\"button\"\n class=\"inline-flex items-center gap-1 px-4 py-2 bg-primary-600 text-white text-sm font-medium hover:bg-primary-500 transition-colors duration-200 shadow-sm\"\n (click)=\"add()\"\n >\n <span class=\"text-lg\">+</span>\n </button>\n </div>\n </div>\n `,\n})\nexport class RepeatTypeComponent extends FieldArrayType implements OnInit {\n // Return columns of the first row (for table headers)\n getFirstRowColumns() {\n return this.field.fieldGroup?.[0]?.fieldGroup ?? [];\n }\n constructor(private cdr: ChangeDetectorRef) {\n super();\n }\n ngOnInit() {\n\n // Subscribe to each FormArray changes\n // if (this.formControl instanceof FormArray) {\n this.field.formControl.valueChanges.subscribe(() => {\n // Force Angular to detect changes\n\n this.field.fieldGroup = [...this.field.fieldGroup ?? []];\n this.cdr.detectChanges();\n });\n // }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;AAwDM,MAAO,mBAAoB,SAAQ,cAAc,CAAA;AAKjC,IAAA,GAAA;;IAHpB,kBAAkB,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,EAAE,UAAU,IAAI,EAAE;;AAErD,IAAA,WAAA,CAAoB,GAAsB,EAAA;AACxC,QAAA,KAAK,EAAE;QADW,IAAA,CAAA,GAAG,GAAH,GAAG;;IAGvB,QAAQ,GAAA;;;QAIJ,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,YAAY,CAAC,SAAS,CAAC,MAAK;;AAGjD,YAAA,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC;AACxD,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;AAC1B,SAAC,CAAC;;;uGAjBK,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA9CpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4CT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EA7CS,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,WAAW,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA;;2FA+CzC,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAlD/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,uBAAuB;AACjC,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,OAAO,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,eAAe,CAAC;AACrD,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4CT,EAAA,CAAA;AACF,iBAAA;;;ACvDD;;AAEG;;;;"}
@@ -0,0 +1,40 @@
1
+ import * as i0 from '@angular/core';
2
+ import { EventEmitter, Output, Input, Component } from '@angular/core';
3
+ import * as i1 from '@angular/common';
4
+ import { CommonModule, NgClass } from '@angular/common';
5
+
6
+ class SidebarCards {
7
+ /** عنوان الهيدر **/
8
+ header = '';
9
+ /** فئة أيقونة Font-Awesome **/
10
+ icon = '';
11
+ /** هل المحتوى مفتوح **/
12
+ open = false;
13
+ /** يرسل تغيير الحالة للأبّ **/
14
+ openChange = new EventEmitter();
15
+ toggle() {
16
+ this.open = !this.open;
17
+ this.openChange.emit(this.open);
18
+ }
19
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: SidebarCards, deps: [], target: i0.ɵɵFactoryTarget.Component });
20
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.4", type: SidebarCards, isStandalone: true, selector: "lib-sidebar-card", inputs: { header: "header", icon: "icon", open: "open" }, outputs: { openChange: "openChange" }, ngImport: i0, template: "<!-- sidebar-card.component.html -->\n<div class=\"bg-white border border-gray-200 rounded-2xl shadow-sm overflow-hidden\">\n <!-- \u0631\u0623\u0633 \u0627\u0644\u0643\u0631\u062A -->\n <div\n class=\"flex items-center justify-between p-4 bg-white cursor-pointer select-none rounded-t-2xl\"\n (click)=\"toggle()\"\n >\n <div class=\"flex items-center space-x-2\">\n <i [class]=\"icon + ' text-blue-600 text-lg'\"></i>\n <span class=\"font-semibold text-gray-800\">{{ header }}</span>\n </div>\n <i\n class=\"fas text-gray-400 transition-transform duration-200\"\n [ngClass]=\"open ? 'fa-chevron-up' : 'fa-chevron-down'\"\n ></i>\n </div>\n\n <!-- \u0645\u062D\u062A\u0648\u0649 \u0627\u0644\u0643\u0631\u062A -->\n <div\n *ngIf=\"open\"\n class=\"p-4 bg-white border-t border-gray-200 rounded-b-2xl space-y-3 text-sm text-gray-700\"\n >\n <ng-content></ng-content>\n </div>\n</div>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
21
+ }
22
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: SidebarCards, decorators: [{
23
+ type: Component,
24
+ args: [{ selector: 'lib-sidebar-card', standalone: true, imports: [CommonModule, NgClass], template: "<!-- sidebar-card.component.html -->\n<div class=\"bg-white border border-gray-200 rounded-2xl shadow-sm overflow-hidden\">\n <!-- \u0631\u0623\u0633 \u0627\u0644\u0643\u0631\u062A -->\n <div\n class=\"flex items-center justify-between p-4 bg-white cursor-pointer select-none rounded-t-2xl\"\n (click)=\"toggle()\"\n >\n <div class=\"flex items-center space-x-2\">\n <i [class]=\"icon + ' text-blue-600 text-lg'\"></i>\n <span class=\"font-semibold text-gray-800\">{{ header }}</span>\n </div>\n <i\n class=\"fas text-gray-400 transition-transform duration-200\"\n [ngClass]=\"open ? 'fa-chevron-up' : 'fa-chevron-down'\"\n ></i>\n </div>\n\n <!-- \u0645\u062D\u062A\u0648\u0649 \u0627\u0644\u0643\u0631\u062A -->\n <div\n *ngIf=\"open\"\n class=\"p-4 bg-white border-t border-gray-200 rounded-b-2xl space-y-3 text-sm text-gray-700\"\n >\n <ng-content></ng-content>\n </div>\n</div>\n" }]
25
+ }], propDecorators: { header: [{
26
+ type: Input
27
+ }], icon: [{
28
+ type: Input
29
+ }], open: [{
30
+ type: Input
31
+ }], openChange: [{
32
+ type: Output
33
+ }] } });
34
+
35
+ /**
36
+ * Generated bundle index. Do not edit.
37
+ */
38
+
39
+ export { SidebarCards };
40
+ //# sourceMappingURL=elite.framework-ng.core-src-lib-components-sidebar-cards.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"elite.framework-ng.core-src-lib-components-sidebar-cards.mjs","sources":["../../../projects/core/src/lib/components/sidebar-cards/sidebar-cards.ts","../../../projects/core/src/lib/components/sidebar-cards/sidebar-cards.html","../../../projects/core/src/lib/components/sidebar-cards/elite.framework-ng.core-src-lib-components-sidebar-cards.ts"],"sourcesContent":["import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { CommonModule, NgClass } from '@angular/common';\n\n@Component({\n selector: 'lib-sidebar-card',\n standalone: true,\n imports: [CommonModule, NgClass],\n templateUrl: './sidebar-cards.html',\n})\nexport class SidebarCards {\n /** عنوان الهيدر **/\n @Input() header = '';\n /** فئة أيقونة Font-Awesome **/\n @Input() icon = '';\n /** هل المحتوى مفتوح **/\n @Input() open = false;\n /** يرسل تغيير الحالة للأبّ **/\n @Output() openChange = new EventEmitter<boolean>();\n\n toggle() {\n this.open = !this.open;\n this.openChange.emit(this.open);\n }\n}\n","<!-- sidebar-card.component.html -->\n<div class=\"bg-white border border-gray-200 rounded-2xl shadow-sm overflow-hidden\">\n <!-- رأس الكرت -->\n <div\n class=\"flex items-center justify-between p-4 bg-white cursor-pointer select-none rounded-t-2xl\"\n (click)=\"toggle()\"\n >\n <div class=\"flex items-center space-x-2\">\n <i [class]=\"icon + ' text-blue-600 text-lg'\"></i>\n <span class=\"font-semibold text-gray-800\">{{ header }}</span>\n </div>\n <i\n class=\"fas text-gray-400 transition-transform duration-200\"\n [ngClass]=\"open ? 'fa-chevron-up' : 'fa-chevron-down'\"\n ></i>\n </div>\n\n <!-- محتوى الكرت -->\n <div\n *ngIf=\"open\"\n class=\"p-4 bg-white border-t border-gray-200 rounded-b-2xl space-y-3 text-sm text-gray-700\"\n >\n <ng-content></ng-content>\n </div>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;MASa,YAAY,CAAA;;IAEd,MAAM,GAAG,EAAE;;IAEX,IAAI,GAAG,EAAE;;IAET,IAAI,GAAG,KAAK;;AAEX,IAAA,UAAU,GAAG,IAAI,YAAY,EAAW;IAElD,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI;QACtB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;;uGAZtB,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAZ,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECTzB,66BAyBA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDnBY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAGX,YAAY,EAAA,UAAA,EAAA,CAAA;kBANxB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,cAChB,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,OAAO,CAAC,EAAA,QAAA,EAAA,66BAAA,EAAA;8BAKvB,MAAM,EAAA,CAAA;sBAAd;gBAEQ,IAAI,EAAA,CAAA;sBAAZ;gBAEQ,IAAI,EAAA,CAAA;sBAAZ;gBAES,UAAU,EAAA,CAAA;sBAAnB;;;AEjBH;;AAEG;;;;"}
@@ -0,0 +1,41 @@
1
+ import * as i0 from '@angular/core';
2
+ import { EventEmitter, Output, Input, Component } from '@angular/core';
3
+ import * as i1 from '@angular/common';
4
+ import { CommonModule, NgClass } from '@angular/common';
5
+
6
+ class SidebarToggles {
7
+ /** هل كلها مفتوحة الآن؟ */
8
+ allOpen = false;
9
+ /** حالة بطاقة تفاصيل العميل */
10
+ contactOpen = false;
11
+ /** حالة بطاقة الـ Timeline */
12
+ timelineOpen = false;
13
+ toggleAll = new EventEmitter();
14
+ toggleContact = new EventEmitter();
15
+ toggleTimeline = new EventEmitter();
16
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: SidebarToggles, deps: [], target: i0.ɵɵFactoryTarget.Component });
17
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.4", type: SidebarToggles, isStandalone: true, selector: "lib-sidebar-toggles", inputs: { allOpen: "allOpen", contactOpen: "contactOpen", timelineOpen: "timelineOpen" }, outputs: { toggleAll: "toggleAll", toggleContact: "toggleContact", toggleTimeline: "toggleTimeline" }, ngImport: i0, template: "<div class=\"fixed right-0 top-0 h-full w-16 bg-gray-100 border-l border-gray-200\n flex flex-col items-center py-4 space-y-4 z-50\">\n <!-- collapse/expand all -->\n <button\n (click)=\"toggleAll.emit()\"\n class=\"bg-blue-600 text-white p-3 rounded-xl shadow-lg transition transform hover:-translate-y-0.5 focus:outline-none focus:ring-2 focus:ring-blue-300\"\n >\n <i\n class=\"fas fa-arrow-right text-xl transition-transform\"\n [ngClass]=\"{ 'rotate-180': allOpen }\"\n ></i>\n </button>\n\n <!-- contact -->\n <button\n (click)=\"toggleContact.emit()\"\n class=\"p-3 rounded-xl shadow-lg transition transform hover:-translate-y-0.5 focus:outline-none focus:ring-2\"\n [ngClass]=\"{\n 'bg-blue-600 text-white': contactOpen,\n 'bg-white text-gray-700 hover:bg-gray-100': !contactOpen\n }\"\n >\n <i class=\"fas fa-info-circle text-xl\"></i>\n </button>\n\n <!-- timeline -->\n <button\n (click)=\"toggleTimeline.emit()\"\n class=\"p-3 rounded-xl shadow-lg transition transform hover:-translate-y-0.5 focus:outline-none focus:ring-2\"\n [ngClass]=\"{\n 'bg-blue-600 text-white': timelineOpen,\n 'bg-white text-gray-700 hover:bg-gray-100': !timelineOpen\n }\"\n >\n <i class=\"fas fa-paperclip text-xl\"></i>\n </button>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
18
+ }
19
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: SidebarToggles, decorators: [{
20
+ type: Component,
21
+ args: [{ selector: 'lib-sidebar-toggles', standalone: true, imports: [CommonModule, NgClass], template: "<div class=\"fixed right-0 top-0 h-full w-16 bg-gray-100 border-l border-gray-200\n flex flex-col items-center py-4 space-y-4 z-50\">\n <!-- collapse/expand all -->\n <button\n (click)=\"toggleAll.emit()\"\n class=\"bg-blue-600 text-white p-3 rounded-xl shadow-lg transition transform hover:-translate-y-0.5 focus:outline-none focus:ring-2 focus:ring-blue-300\"\n >\n <i\n class=\"fas fa-arrow-right text-xl transition-transform\"\n [ngClass]=\"{ 'rotate-180': allOpen }\"\n ></i>\n </button>\n\n <!-- contact -->\n <button\n (click)=\"toggleContact.emit()\"\n class=\"p-3 rounded-xl shadow-lg transition transform hover:-translate-y-0.5 focus:outline-none focus:ring-2\"\n [ngClass]=\"{\n 'bg-blue-600 text-white': contactOpen,\n 'bg-white text-gray-700 hover:bg-gray-100': !contactOpen\n }\"\n >\n <i class=\"fas fa-info-circle text-xl\"></i>\n </button>\n\n <!-- timeline -->\n <button\n (click)=\"toggleTimeline.emit()\"\n class=\"p-3 rounded-xl shadow-lg transition transform hover:-translate-y-0.5 focus:outline-none focus:ring-2\"\n [ngClass]=\"{\n 'bg-blue-600 text-white': timelineOpen,\n 'bg-white text-gray-700 hover:bg-gray-100': !timelineOpen\n }\"\n >\n <i class=\"fas fa-paperclip text-xl\"></i>\n </button>\n</div>\n" }]
22
+ }], propDecorators: { allOpen: [{
23
+ type: Input
24
+ }], contactOpen: [{
25
+ type: Input
26
+ }], timelineOpen: [{
27
+ type: Input
28
+ }], toggleAll: [{
29
+ type: Output
30
+ }], toggleContact: [{
31
+ type: Output
32
+ }], toggleTimeline: [{
33
+ type: Output
34
+ }] } });
35
+
36
+ /**
37
+ * Generated bundle index. Do not edit.
38
+ */
39
+
40
+ export { SidebarToggles };
41
+ //# sourceMappingURL=elite.framework-ng.core-src-lib-components-sidebar-toggles.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"elite.framework-ng.core-src-lib-components-sidebar-toggles.mjs","sources":["../../../projects/core/src/lib/components/sidebar-toggles/sidebar-toggles.ts","../../../projects/core/src/lib/components/sidebar-toggles/sidebar-toggles.html","../../../projects/core/src/lib/components/sidebar-toggles/elite.framework-ng.core-src-lib-components-sidebar-toggles.ts"],"sourcesContent":["import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { CommonModule, NgClass } from '@angular/common';\n\n@Component({\n selector: 'lib-sidebar-toggles',\n standalone: true,\n imports: [CommonModule, NgClass],\n templateUrl: './sidebar-toggles.html',\n styleUrls: ['./sidebar-toggles.css'],\n})\nexport class SidebarToggles {\n /** هل كلها مفتوحة الآن؟ */\n @Input() allOpen = false;\n /** حالة بطاقة تفاصيل العميل */\n @Input() contactOpen = false;\n /** حالة بطاقة الـ Timeline */\n @Input() timelineOpen = false;\n\n @Output() toggleAll = new EventEmitter<void>();\n @Output() toggleContact = new EventEmitter<void>();\n @Output() toggleTimeline = new EventEmitter<void>();\n}\n","<div class=\"fixed right-0 top-0 h-full w-16 bg-gray-100 border-l border-gray-200\n flex flex-col items-center py-4 space-y-4 z-50\">\n <!-- collapse/expand all -->\n <button\n (click)=\"toggleAll.emit()\"\n class=\"bg-blue-600 text-white p-3 rounded-xl shadow-lg transition transform hover:-translate-y-0.5 focus:outline-none focus:ring-2 focus:ring-blue-300\"\n >\n <i\n class=\"fas fa-arrow-right text-xl transition-transform\"\n [ngClass]=\"{ 'rotate-180': allOpen }\"\n ></i>\n </button>\n\n <!-- contact -->\n <button\n (click)=\"toggleContact.emit()\"\n class=\"p-3 rounded-xl shadow-lg transition transform hover:-translate-y-0.5 focus:outline-none focus:ring-2\"\n [ngClass]=\"{\n 'bg-blue-600 text-white': contactOpen,\n 'bg-white text-gray-700 hover:bg-gray-100': !contactOpen\n }\"\n >\n <i class=\"fas fa-info-circle text-xl\"></i>\n </button>\n\n <!-- timeline -->\n <button\n (click)=\"toggleTimeline.emit()\"\n class=\"p-3 rounded-xl shadow-lg transition transform hover:-translate-y-0.5 focus:outline-none focus:ring-2\"\n [ngClass]=\"{\n 'bg-blue-600 text-white': timelineOpen,\n 'bg-white text-gray-700 hover:bg-gray-100': !timelineOpen\n }\"\n >\n <i class=\"fas fa-paperclip text-xl\"></i>\n </button>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;MAUa,cAAc,CAAA;;IAEhB,OAAO,GAAG,KAAK;;IAEf,WAAW,GAAG,KAAK;;IAEnB,YAAY,GAAG,KAAK;AAEnB,IAAA,SAAS,GAAQ,IAAI,YAAY,EAAQ;AACzC,IAAA,aAAa,GAAI,IAAI,YAAY,EAAQ;AACzC,IAAA,cAAc,GAAG,IAAI,YAAY,EAAQ;uGAVxC,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAd,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,aAAA,EAAA,eAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECV3B,izCAqCA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED/BY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAIX,cAAc,EAAA,UAAA,EAAA,CAAA;kBAP1B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qBAAqB,cACnB,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,OAAO,CAAC,EAAA,QAAA,EAAA,izCAAA,EAAA;8BAMvB,OAAO,EAAA,CAAA;sBAAf;gBAEQ,WAAW,EAAA,CAAA;sBAAnB;gBAEQ,YAAY,EAAA,CAAA;sBAApB;gBAES,SAAS,EAAA,CAAA;sBAAlB;gBACS,aAAa,EAAA,CAAA;sBAAtB;gBACS,cAAc,EAAA,CAAA;sBAAvB;;;AEpBH;;AAEG;;;;"}
@@ -0,0 +1,45 @@
1
+ import { NgFor } from '@angular/common';
2
+ import * as i0 from '@angular/core';
3
+ import { Component } from '@angular/core';
4
+ import { FieldType, FormlyForm } from '@ngx-formly/core';
5
+ import { TabsModule } from 'primeng/tabs';
6
+
7
+ class TabsTypeComponent extends FieldType {
8
+ isValid(field) {
9
+ if (field.key) {
10
+ return field.formControl?.valid ?? true;
11
+ }
12
+ return field.fieldGroup ? field.fieldGroup.every((f) => this.isValid(f)) : true;
13
+ }
14
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: TabsTypeComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
15
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.4", type: TabsTypeComponent, isStandalone: true, selector: "formly-tabs-type", usesInheritance: true, ngImport: i0, template: `
16
+ <!-- <p-tabView>
17
+ <p-tabPanel *ngFor="let tabField of field.fieldGroup; let i = index" [disabled]="i !== 0 &&
18
+ !isValid(field.fieldGroup![i - 1])" [header]="tabField.props?.label || 'Tab '+(i+1)">
19
+ <formly-form [fields]="tabField.fieldGroup!" [form]="form" [options]="options" [model]="model"></formly-form>
20
+ </p-tabPanel>
21
+ </p-tabView> -->
22
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: TabsModule }] });
23
+ }
24
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: TabsTypeComponent, decorators: [{
25
+ type: Component,
26
+ args: [{
27
+ selector: 'formly-tabs-type',
28
+ imports: [NgFor, FormlyForm, TabsModule],
29
+ template: `
30
+ <!-- <p-tabView>
31
+ <p-tabPanel *ngFor="let tabField of field.fieldGroup; let i = index" [disabled]="i !== 0 &&
32
+ !isValid(field.fieldGroup![i - 1])" [header]="tabField.props?.label || 'Tab '+(i+1)">
33
+ <formly-form [fields]="tabField.fieldGroup!" [form]="form" [options]="options" [model]="model"></formly-form>
34
+ </p-tabPanel>
35
+ </p-tabView> -->
36
+ `
37
+ }]
38
+ }] });
39
+
40
+ /**
41
+ * Generated bundle index. Do not edit.
42
+ */
43
+
44
+ export { TabsTypeComponent };
45
+ //# sourceMappingURL=elite.framework-ng.core-src-lib-components-tabs.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"elite.framework-ng.core-src-lib-components-tabs.mjs","sources":["../../../projects/core/src/lib/components/tabs/tabs.type.ts","../../../projects/core/src/lib/components/tabs/elite.framework-ng.core-src-lib-components-tabs.ts"],"sourcesContent":["\nimport { NgFor } from '@angular/common';\nimport { Component } from '@angular/core';\nimport { FieldType, FormlyFieldConfig, FormlyForm } from '@ngx-formly/core';\nimport { TabsModule } from 'primeng/tabs';\n\n@Component({\n selector: 'formly-tabs-type',\n imports: [NgFor, FormlyForm,TabsModule],\n template: `\n <!-- <p-tabView>\n <p-tabPanel *ngFor=\"let tabField of field.fieldGroup; let i = index\" [disabled]=\"i !== 0 &&\n !isValid(field.fieldGroup![i - 1])\" [header]=\"tabField.props?.label || 'Tab '+(i+1)\">\n <formly-form [fields]=\"tabField.fieldGroup!\" [form]=\"form\" [options]=\"options\" [model]=\"model\"></formly-form>\n </p-tabPanel>\n </p-tabView> -->\n `\n})\nexport class TabsTypeComponent extends FieldType {\n\n isValid(field: FormlyFieldConfig): boolean {\n if (field.key) {\n return field.formControl?.valid ?? true;\n }\n\n return field.fieldGroup ? field.fieldGroup.every((f) => this.isValid(f)) : true;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;AAkBM,MAAO,iBAAkB,SAAQ,SAAS,CAAA;AAE7C,IAAA,OAAO,CAAC,KAAwB,EAAA;AAC/B,QAAA,IAAI,KAAK,CAAC,GAAG,EAAE;AACb,YAAA,OAAO,KAAK,CAAC,WAAW,EAAE,KAAK,IAAI,IAAI;;AAGzC,QAAA,OAAO,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;;uGAPtE,iBAAiB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EATlB;;;;;;;AAOT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAR4B,UAAU,EAAA,CAAA,EAAA,CAAA;;2FAU5B,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAZ7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kBAAkB;AAC3B,oBAAA,OAAO,EAAE,CAAC,KAAK,EAAE,UAAU,EAAC,UAAU,CAAC;AACxC,oBAAA,QAAQ,EAAE;;;;;;;AAOT,EAAA;AACF,iBAAA;;;ACjBD;;AAEG;;;;"}
@@ -0,0 +1,192 @@
1
+ import { Tag } from 'primeng/tag';
2
+ import * as i0 from '@angular/core';
3
+ import { Component } from '@angular/core';
4
+ import { FieldType, FormlyAttributes } from '@ngx-formly/core';
5
+ import * as i1 from 'primeng/tooltip';
6
+ import { TooltipModule } from 'primeng/tooltip';
7
+ import * as i3 from '@ngx-translate/core';
8
+ import { TranslateModule } from '@ngx-translate/core';
9
+ import * as i2 from '@angular/common';
10
+ import { CommonModule } from '@angular/common';
11
+ import { ReactiveFormsModule, FormsModule } from '@angular/forms';
12
+
13
+ class TagTypeComponent extends FieldType {
14
+ getTooltip() {
15
+ const tooltipFrom = this.props['table']['props']['tooltipFrom'];
16
+ return this.model?.[tooltipFrom];
17
+ }
18
+ getValue() {
19
+ var key = this.key;
20
+ const val = this.model?.[key];
21
+ return val;
22
+ }
23
+ getSeverity() {
24
+ const value = this.getValue();
25
+ if (value === true)
26
+ return 'success';
27
+ if (value === false)
28
+ return 'danger';
29
+ return 'info';
30
+ }
31
+ getDisplayValue() {
32
+ const value = this.getValue();
33
+ if (value === true)
34
+ return 'مفعل';
35
+ if (value === false)
36
+ return 'معطل';
37
+ return String(value ?? '-');
38
+ }
39
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: TagTypeComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
40
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.4", type: TagTypeComponent, isStandalone: true, selector: "formly-tag-type", usesInheritance: true, ngImport: i0, template: `
41
+ <!--
42
+ [formControl]="formControl" -->
43
+ <p-tag
44
+ [formlyAttributes]="field"
45
+ [pTooltip]="getTooltip()"
46
+ [severity]="to['severity'] || getSeverity()"
47
+ [value]="getDisplayValue()"
48
+ [class]="to['styleClass'] || 'font-medium'">
49
+ </p-tag>
50
+ `, isInline: true, dependencies: [{ kind: "component", type: Tag, selector: "p-tag", inputs: ["styleClass", "severity", "value", "icon", "rounded"] }, { kind: "directive", type: FormlyAttributes, selector: "[formlyAttributes]", inputs: ["formlyAttributes", "id"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i1.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions", "appendTo"] }, { kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }] });
51
+ }
52
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: TagTypeComponent, decorators: [{
53
+ type: Component,
54
+ args: [{
55
+ selector: 'formly-tag-type',
56
+ standalone: true,
57
+ imports: [Tag, FormlyAttributes, TranslateModule, TooltipModule, CommonModule, ReactiveFormsModule],
58
+ template: `
59
+ <!--
60
+ [formControl]="formControl" -->
61
+ <p-tag
62
+ [formlyAttributes]="field"
63
+ [pTooltip]="getTooltip()"
64
+ [severity]="to['severity'] || getSeverity()"
65
+ [value]="getDisplayValue()"
66
+ [class]="to['styleClass'] || 'font-medium'">
67
+ </p-tag>
68
+ `,
69
+ // changeDetection: ChangeDetectionStrategy.OnPush,
70
+ }]
71
+ }] });
72
+
73
+ class OptionTagTypeComponent extends FieldType {
74
+ get selectedOption() {
75
+ return (this.props?.options ?? [])?.find((opt) => opt.value === this.formControl.value);
76
+ }
77
+ get textColor() {
78
+ // Simple check for light/dark background for contrast
79
+ const hex = this.selectedOption.color.replace('#', '');
80
+ const r = parseInt(hex.substring(0, 2), 16) || 0;
81
+ const g = parseInt(hex.substring(2, 4), 16) || 0;
82
+ const b = parseInt(hex.substring(4, 6), 16) || 0;
83
+ const brightness = (r * 299 + g * 587 + b * 114) / 1000;
84
+ return brightness > 150 ? '#000' : '#fff';
85
+ }
86
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: OptionTagTypeComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
87
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.4", type: OptionTagTypeComponent, isStandalone: true, selector: "formly-option-tag-type", usesInheritance: true, ngImport: i0, template: `
88
+ <ng-container *ngIf="selectedOption">
89
+ <div
90
+ class="inline-block px-3 py-1 rounded-full border text-sm"
91
+ [ngStyle]="{
92
+ backgroundColor: selectedOption.color,
93
+ color: textColor,
94
+ borderColor: selectedOption.color
95
+ }"
96
+ [pTooltip]="selectedOption.label | translate"
97
+ >
98
+ {{ selectedOption.label | translate}}
99
+ </div>
100
+ </ng-container>
101
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i1.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions", "appendTo"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: FormsModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }] });
102
+ }
103
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: OptionTagTypeComponent, decorators: [{
104
+ type: Component,
105
+ args: [{
106
+ selector: 'formly-option-tag-type',
107
+ standalone: true,
108
+ imports: [FormlyAttributes, TranslateModule, TooltipModule, CommonModule, ReactiveFormsModule, FormsModule],
109
+ template: `
110
+ <ng-container *ngIf="selectedOption">
111
+ <div
112
+ class="inline-block px-3 py-1 rounded-full border text-sm"
113
+ [ngStyle]="{
114
+ backgroundColor: selectedOption.color,
115
+ color: textColor,
116
+ borderColor: selectedOption.color
117
+ }"
118
+ [pTooltip]="selectedOption.label | translate"
119
+ >
120
+ {{ selectedOption.label | translate}}
121
+ </div>
122
+ </ng-container>
123
+ `,
124
+ }]
125
+ }] });
126
+
127
+ class ColorTagTypeComponent extends FieldType {
128
+ get colorValue() {
129
+ const val = this.formControl.value;
130
+ return val && typeof val === 'string' && val.startsWith('#') ? val : '#cccccc';
131
+ }
132
+ get textColor() {
133
+ // Simple check for light/dark background for contrast
134
+ const hex = this.colorValue.replace('#', '');
135
+ const r = parseInt(hex.substring(0, 2), 16) || 0;
136
+ const g = parseInt(hex.substring(2, 4), 16) || 0;
137
+ const b = parseInt(hex.substring(4, 6), 16) || 0;
138
+ const brightness = (r * 299 + g * 587 + b * 114) / 1000;
139
+ return brightness > 150 ? '#000' : '#fff';
140
+ }
141
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: ColorTagTypeComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
142
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.4", type: ColorTagTypeComponent, isStandalone: true, selector: "formly-color-tag-type", usesInheritance: true, ngImport: i0, template: `
143
+ <div
144
+ class="inline-block px-3 py-1 rounded-full border text-sm"
145
+ [ngStyle]="{
146
+ direction:'ltr',
147
+ backgroundColor: colorValue,
148
+ color: textColor,
149
+ borderColor: colorValue
150
+ }"
151
+ [pTooltip]="colorValue"
152
+ >
153
+ {{ colorValue }}
154
+ </div>
155
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i1.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions", "appendTo"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: FormsModule }] });
156
+ }
157
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: ColorTagTypeComponent, decorators: [{
158
+ type: Component,
159
+ args: [{
160
+ selector: 'formly-color-tag-type',
161
+ standalone: true,
162
+ imports: [
163
+ FormlyAttributes,
164
+ TranslateModule,
165
+ TooltipModule,
166
+ CommonModule,
167
+ ReactiveFormsModule,
168
+ FormsModule,
169
+ ],
170
+ template: `
171
+ <div
172
+ class="inline-block px-3 py-1 rounded-full border text-sm"
173
+ [ngStyle]="{
174
+ direction:'ltr',
175
+ backgroundColor: colorValue,
176
+ color: textColor,
177
+ borderColor: colorValue
178
+ }"
179
+ [pTooltip]="colorValue"
180
+ >
181
+ {{ colorValue }}
182
+ </div>
183
+ `,
184
+ }]
185
+ }] });
186
+
187
+ /**
188
+ * Generated bundle index. Do not edit.
189
+ */
190
+
191
+ export { ColorTagTypeComponent, OptionTagTypeComponent, TagTypeComponent };
192
+ //# sourceMappingURL=elite.framework-ng.core-src-lib-components-tag-type.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"elite.framework-ng.core-src-lib-components-tag-type.mjs","sources":["../../../projects/core/src/lib/components/tag-type/formly-tag-type.ts","../../../projects/core/src/lib/components/tag-type/formly-option-tag-type.ts","../../../projects/core/src/lib/components/tag-type/formly-color-tag-type.ts","../../../projects/core/src/lib/components/tag-type/elite.framework-ng.core-src-lib-components-tag-type.ts"],"sourcesContent":["import { Tag } from 'primeng/tag';\nimport { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { FieldType, FieldTypeConfig, FormlyAttributes } from '@ngx-formly/core';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule } from '@angular/forms';\n\n@Component({\n selector: 'formly-tag-type',\n standalone: true,\n imports: [Tag,FormlyAttributes,TranslateModule,TooltipModule,CommonModule, ReactiveFormsModule],\n template: `\n <!--\n [formControl]=\"formControl\" -->\n <p-tag\n [formlyAttributes]=\"field\"\n [pTooltip]=\"getTooltip()\"\n [severity]=\"to['severity'] || getSeverity()\"\n [value]=\"getDisplayValue()\"\n [class]=\"to['styleClass'] || 'font-medium'\">\n </p-tag>\n `,\n // changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TagTypeComponent extends FieldType<FieldTypeConfig> {\n\n getTooltip(): string {\n const tooltipFrom = this.props['table']['props']['tooltipFrom'];\n return this.model?.[tooltipFrom]\n}\n getValue(): any {\n var key = this.key as string;\n const val = this.model?.[key];\n return val;\n }\n\n getSeverity(): string {\n const value = this.getValue();\n\n if (value === true) return 'success';\n if (value === false) return 'danger';\n return 'info';\n }\n\n getDisplayValue(): string {\n const value = this.getValue();\n\n if (value === true) return 'مفعل';\n if (value === false) return 'معطل';\n return String(value ?? '-');\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { FieldType, FormlyAttributes } from '@ngx-formly/core';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { TooltipModule } from 'primeng/tooltip';\n\n@Component({\n selector: 'formly-option-tag-type',\n standalone: true,\n imports: [FormlyAttributes, TranslateModule, TooltipModule, CommonModule, ReactiveFormsModule, FormsModule],\n template: `\n <ng-container *ngIf=\"selectedOption\">\n <div\n class=\"inline-block px-3 py-1 rounded-full border text-sm\"\n [ngStyle]=\"{\n backgroundColor: selectedOption.color,\n color: textColor,\n borderColor: selectedOption.color\n }\"\n [pTooltip]=\"selectedOption.label | translate\"\n >\n {{ selectedOption.label | translate}}\n </div>\n </ng-container>\n `,\n})\nexport class OptionTagTypeComponent extends FieldType {\n get selectedOption() {\n return (this.props?.options ?? [] as any)?.find((opt: any) => opt.value === this.formControl.value);\n }\n get textColor(): string {\n // Simple check for light/dark background for contrast\n const hex = this.selectedOption.color.replace('#', '');\n const r = parseInt(hex.substring(0, 2), 16) || 0;\n const g = parseInt(hex.substring(2, 4), 16) || 0;\n const b = parseInt(hex.substring(4, 6), 16) || 0;\n const brightness = (r * 299 + g * 587 + b * 114) / 1000;\n return brightness > 150 ? '#000' : '#fff';\n }\n}\n\n\n// {\n// key: 'tagColor',\n// type: 'color-tag',\n// templateOptions: {\n// options: [\n// { label: 'Red', value: 'red', color: '#ef4444' },\n// { label: 'Blue', value: 'blue', color: '#3b82f6' },\n// { label: 'Green', value: 'green', color: '#10b981' },\n// ],\n// },\n// hideLabel: true,\n// hooks: {\n// onInit: (field) => {\n// field.templateOptions.readonly = true;\n// }\n// }\n// }\n","import { CommonModule } from '@angular/common';\nimport { Component } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { FieldType, FormlyAttributes } from '@ngx-formly/core';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { TooltipModule } from 'primeng/tooltip';\n\n@Component({\n selector: 'formly-color-tag-type',\n standalone: true,\n imports: [\n FormlyAttributes,\n TranslateModule,\n TooltipModule,\n CommonModule,\n ReactiveFormsModule,\n FormsModule,\n ],\n template: `\n <div\n class=\"inline-block px-3 py-1 rounded-full border text-sm\"\n [ngStyle]=\"{\n direction:'ltr',\n backgroundColor: colorValue,\n color: textColor,\n borderColor: colorValue\n }\"\n [pTooltip]=\"colorValue\"\n >\n {{ colorValue }}\n </div>\n `,\n})\nexport class ColorTagTypeComponent extends FieldType {\n get colorValue(): string {\n const val = this.formControl.value;\n return val && typeof val === 'string' && val.startsWith('#') ? val : '#cccccc';\n }\n\n get textColor(): string {\n // Simple check for light/dark background for contrast\n const hex = this.colorValue.replace('#', '');\n const r = parseInt(hex.substring(0, 2), 16) || 0;\n const g = parseInt(hex.substring(2, 4), 16) || 0;\n const b = parseInt(hex.substring(4, 6), 16) || 0;\n const brightness = (r * 299 + g * 587 + b * 114) / 1000;\n return brightness > 150 ? '#000' : '#fff';\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}