@sdcorejs/angular 20.0.1 → 21.0.0

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 (196) hide show
  1. package/README.md +15 -14
  2. package/fesm2022/sdcorejs-angular-components-anchor.mjs +28 -28
  3. package/fesm2022/sdcorejs-angular-components-anchor.mjs.map +1 -1
  4. package/fesm2022/sdcorejs-angular-components-autoid-inspector.mjs +34 -34
  5. package/fesm2022/sdcorejs-angular-components-autoid-inspector.mjs.map +1 -1
  6. package/fesm2022/sdcorejs-angular-components-avatar.mjs +9 -9
  7. package/fesm2022/sdcorejs-angular-components-avatar.mjs.map +1 -1
  8. package/fesm2022/sdcorejs-angular-components-badge.mjs +25 -33
  9. package/fesm2022/sdcorejs-angular-components-badge.mjs.map +1 -1
  10. package/fesm2022/sdcorejs-angular-components-base.mjs +3 -3
  11. package/fesm2022/sdcorejs-angular-components-button.mjs +19 -29
  12. package/fesm2022/sdcorejs-angular-components-button.mjs.map +1 -1
  13. package/fesm2022/sdcorejs-angular-components-chart.mjs +28 -28
  14. package/fesm2022/sdcorejs-angular-components-chart.mjs.map +1 -1
  15. package/fesm2022/sdcorejs-angular-components-ckeditor-styles.mjs +4 -4
  16. package/fesm2022/sdcorejs-angular-components-ckeditor-styles.mjs.map +1 -1
  17. package/fesm2022/sdcorejs-angular-components-code-editor.mjs +11 -11
  18. package/fesm2022/sdcorejs-angular-components-code-editor.mjs.map +1 -1
  19. package/fesm2022/sdcorejs-angular-components-document-builder.mjs +6 -6
  20. package/fesm2022/sdcorejs-angular-components-editor.mjs +36 -48
  21. package/fesm2022/sdcorejs-angular-components-editor.mjs.map +1 -1
  22. package/fesm2022/sdcorejs-angular-components-form-generic.mjs +212 -212
  23. package/fesm2022/sdcorejs-angular-components-form-generic.mjs.map +1 -1
  24. package/fesm2022/sdcorejs-angular-components-history.mjs +8 -8
  25. package/fesm2022/sdcorejs-angular-components-history.mjs.map +1 -1
  26. package/fesm2022/sdcorejs-angular-components-import-excel.mjs +10 -10
  27. package/fesm2022/sdcorejs-angular-components-inform.mjs +35 -39
  28. package/fesm2022/sdcorejs-angular-components-inform.mjs.map +1 -1
  29. package/fesm2022/sdcorejs-angular-components-mini-editor.mjs +3 -3
  30. package/fesm2022/sdcorejs-angular-components-modal.mjs +20 -20
  31. package/fesm2022/sdcorejs-angular-components-modal.mjs.map +1 -1
  32. package/fesm2022/sdcorejs-angular-components-operator.mjs +11 -11
  33. package/fesm2022/sdcorejs-angular-components-operator.mjs.map +1 -1
  34. package/fesm2022/sdcorejs-angular-components-preview.mjs +119 -119
  35. package/fesm2022/sdcorejs-angular-components-preview.mjs.map +1 -1
  36. package/fesm2022/sdcorejs-angular-components-query-bar.mjs +132 -141
  37. package/fesm2022/sdcorejs-angular-components-query-bar.mjs.map +1 -1
  38. package/fesm2022/sdcorejs-angular-components-query-builder.mjs +3 -3
  39. package/fesm2022/sdcorejs-angular-components-quick-action.mjs +4 -4
  40. package/fesm2022/sdcorejs-angular-components-quick-action.mjs.map +1 -1
  41. package/fesm2022/sdcorejs-angular-components-section.mjs +18 -22
  42. package/fesm2022/sdcorejs-angular-components-section.mjs.map +1 -1
  43. package/fesm2022/sdcorejs-angular-components-side-drawer.mjs +14 -14
  44. package/fesm2022/sdcorejs-angular-components-side-drawer.mjs.map +1 -1
  45. package/fesm2022/sdcorejs-angular-components-splitter.mjs +36 -38
  46. package/fesm2022/sdcorejs-angular-components-splitter.mjs.map +1 -1
  47. package/fesm2022/sdcorejs-angular-components-stepper.mjs +24 -24
  48. package/fesm2022/sdcorejs-angular-components-stepper.mjs.map +1 -1
  49. package/fesm2022/sdcorejs-angular-components-tab-router.mjs +23 -23
  50. package/fesm2022/sdcorejs-angular-components-tab-router.mjs.map +1 -1
  51. package/fesm2022/sdcorejs-angular-components-tab.mjs +23 -23
  52. package/fesm2022/sdcorejs-angular-components-tab.mjs.map +1 -1
  53. package/fesm2022/sdcorejs-angular-components-table.mjs +225 -225
  54. package/fesm2022/sdcorejs-angular-components-table.mjs.map +1 -1
  55. package/fesm2022/sdcorejs-angular-components-upload-file.mjs +70 -106
  56. package/fesm2022/sdcorejs-angular-components-upload-file.mjs.map +1 -1
  57. package/fesm2022/sdcorejs-angular-components-view.mjs +14 -14
  58. package/fesm2022/sdcorejs-angular-components-view.mjs.map +1 -1
  59. package/fesm2022/sdcorejs-angular-directives.mjs +30 -30
  60. package/fesm2022/sdcorejs-angular-directives.mjs.map +1 -1
  61. package/fesm2022/sdcorejs-angular-forms-autocomplete.mjs +61 -76
  62. package/fesm2022/sdcorejs-angular-forms-autocomplete.mjs.map +1 -1
  63. package/fesm2022/sdcorejs-angular-forms-checkbox.mjs +26 -49
  64. package/fesm2022/sdcorejs-angular-forms-checkbox.mjs.map +1 -1
  65. package/fesm2022/sdcorejs-angular-forms-chip-calendar.mjs +48 -83
  66. package/fesm2022/sdcorejs-angular-forms-chip-calendar.mjs.map +1 -1
  67. package/fesm2022/sdcorejs-angular-forms-chip.mjs +47 -82
  68. package/fesm2022/sdcorejs-angular-forms-chip.mjs.map +1 -1
  69. package/fesm2022/sdcorejs-angular-forms-date-range.mjs +46 -61
  70. package/fesm2022/sdcorejs-angular-forms-date-range.mjs.map +1 -1
  71. package/fesm2022/sdcorejs-angular-forms-date.mjs +53 -68
  72. package/fesm2022/sdcorejs-angular-forms-date.mjs.map +1 -1
  73. package/fesm2022/sdcorejs-angular-forms-datetime.mjs +74 -89
  74. package/fesm2022/sdcorejs-angular-forms-datetime.mjs.map +1 -1
  75. package/fesm2022/sdcorejs-angular-forms-directives.mjs +12 -12
  76. package/fesm2022/sdcorejs-angular-forms-input-color.mjs +19 -19
  77. package/fesm2022/sdcorejs-angular-forms-input-color.mjs.map +1 -1
  78. package/fesm2022/sdcorejs-angular-forms-input-number.mjs +56 -71
  79. package/fesm2022/sdcorejs-angular-forms-input-number.mjs.map +1 -1
  80. package/fesm2022/sdcorejs-angular-forms-input.mjs +58 -73
  81. package/fesm2022/sdcorejs-angular-forms-input.mjs.map +1 -1
  82. package/fesm2022/sdcorejs-angular-forms-label.mjs +3 -3
  83. package/fesm2022/sdcorejs-angular-forms-models.mjs +2 -2
  84. package/fesm2022/sdcorejs-angular-forms-models.mjs.map +1 -1
  85. package/fesm2022/sdcorejs-angular-forms-radio.mjs +39 -70
  86. package/fesm2022/sdcorejs-angular-forms-radio.mjs.map +1 -1
  87. package/fesm2022/sdcorejs-angular-forms-select.mjs +69 -86
  88. package/fesm2022/sdcorejs-angular-forms-select.mjs.map +1 -1
  89. package/fesm2022/sdcorejs-angular-forms-switch.mjs +28 -49
  90. package/fesm2022/sdcorejs-angular-forms-switch.mjs.map +1 -1
  91. package/fesm2022/sdcorejs-angular-forms-textarea.mjs +50 -77
  92. package/fesm2022/sdcorejs-angular-forms-textarea.mjs.map +1 -1
  93. package/fesm2022/sdcorejs-angular-forms.mjs +4 -4
  94. package/fesm2022/sdcorejs-angular-handlers.mjs +3 -3
  95. package/fesm2022/sdcorejs-angular-i18n.mjs +9 -9
  96. package/fesm2022/sdcorejs-angular-i18n.mjs.map +1 -1
  97. package/fesm2022/sdcorejs-angular-interceptors.mjs +6 -6
  98. package/fesm2022/sdcorejs-angular-modules-auth.mjs +10 -10
  99. package/fesm2022/sdcorejs-angular-modules-auth.mjs.map +1 -1
  100. package/fesm2022/sdcorejs-angular-modules-authom.mjs +10 -10
  101. package/fesm2022/sdcorejs-angular-modules-authom.mjs.map +1 -1
  102. package/fesm2022/sdcorejs-angular-modules-keycloak.mjs +7 -7
  103. package/fesm2022/sdcorejs-angular-modules-layout.mjs +131 -131
  104. package/fesm2022/sdcorejs-angular-modules-layout.mjs.map +1 -1
  105. package/fesm2022/sdcorejs-angular-modules-permission.mjs +11 -11
  106. package/fesm2022/sdcorejs-angular-modules-permission.mjs.map +1 -1
  107. package/fesm2022/sdcorejs-angular-pipes.mjs +14 -14
  108. package/fesm2022/sdcorejs-angular-services-api.mjs +10 -10
  109. package/fesm2022/sdcorejs-angular-services-cache.mjs +3 -3
  110. package/fesm2022/sdcorejs-angular-services-confirm.mjs +6 -6
  111. package/fesm2022/sdcorejs-angular-services-docx.mjs +3 -3
  112. package/fesm2022/sdcorejs-angular-services-excel.mjs +3 -3
  113. package/fesm2022/sdcorejs-angular-services-license.mjs +3 -3
  114. package/fesm2022/sdcorejs-angular-services-loading.mjs +3 -3
  115. package/fesm2022/sdcorejs-angular-services-notify.mjs +12 -12
  116. package/fesm2022/sdcorejs-angular-services-notify.mjs.map +1 -1
  117. package/fesm2022/sdcorejs-angular-services-storage.mjs +3 -3
  118. package/package.json +82 -82
  119. package/{forms/select/index.d.ts → types/sdcorejs-angular-forms-select.d.ts} +3 -3
  120. /package/{components/anchor/index.d.ts → types/sdcorejs-angular-components-anchor.d.ts} +0 -0
  121. /package/{components/autoid-inspector/index.d.ts → types/sdcorejs-angular-components-autoid-inspector.d.ts} +0 -0
  122. /package/{components/avatar/index.d.ts → types/sdcorejs-angular-components-avatar.d.ts} +0 -0
  123. /package/{components/badge/index.d.ts → types/sdcorejs-angular-components-badge.d.ts} +0 -0
  124. /package/{components/base/index.d.ts → types/sdcorejs-angular-components-base.d.ts} +0 -0
  125. /package/{components/button/index.d.ts → types/sdcorejs-angular-components-button.d.ts} +0 -0
  126. /package/{components/chart/index.d.ts → types/sdcorejs-angular-components-chart.d.ts} +0 -0
  127. /package/{components/ckeditor-styles/index.d.ts → types/sdcorejs-angular-components-ckeditor-styles.d.ts} +0 -0
  128. /package/{components/code-editor/index.d.ts → types/sdcorejs-angular-components-code-editor.d.ts} +0 -0
  129. /package/{components/document-builder/index.d.ts → types/sdcorejs-angular-components-document-builder.d.ts} +0 -0
  130. /package/{components/editor/index.d.ts → types/sdcorejs-angular-components-editor.d.ts} +0 -0
  131. /package/{components/form-generic/index.d.ts → types/sdcorejs-angular-components-form-generic.d.ts} +0 -0
  132. /package/{components/history/index.d.ts → types/sdcorejs-angular-components-history.d.ts} +0 -0
  133. /package/{components/import-excel/index.d.ts → types/sdcorejs-angular-components-import-excel.d.ts} +0 -0
  134. /package/{components/inform/index.d.ts → types/sdcorejs-angular-components-inform.d.ts} +0 -0
  135. /package/{components/mini-editor/index.d.ts → types/sdcorejs-angular-components-mini-editor.d.ts} +0 -0
  136. /package/{components/modal/index.d.ts → types/sdcorejs-angular-components-modal.d.ts} +0 -0
  137. /package/{components/operator/index.d.ts → types/sdcorejs-angular-components-operator.d.ts} +0 -0
  138. /package/{components/preview/index.d.ts → types/sdcorejs-angular-components-preview.d.ts} +0 -0
  139. /package/{components/query-bar/index.d.ts → types/sdcorejs-angular-components-query-bar.d.ts} +0 -0
  140. /package/{components/query-builder/index.d.ts → types/sdcorejs-angular-components-query-builder.d.ts} +0 -0
  141. /package/{components/quick-action/index.d.ts → types/sdcorejs-angular-components-quick-action.d.ts} +0 -0
  142. /package/{components/section/index.d.ts → types/sdcorejs-angular-components-section.d.ts} +0 -0
  143. /package/{components/side-drawer/index.d.ts → types/sdcorejs-angular-components-side-drawer.d.ts} +0 -0
  144. /package/{components/splitter/index.d.ts → types/sdcorejs-angular-components-splitter.d.ts} +0 -0
  145. /package/{components/stepper/index.d.ts → types/sdcorejs-angular-components-stepper.d.ts} +0 -0
  146. /package/{components/tab-router/index.d.ts → types/sdcorejs-angular-components-tab-router.d.ts} +0 -0
  147. /package/{components/tab/index.d.ts → types/sdcorejs-angular-components-tab.d.ts} +0 -0
  148. /package/{components/table/index.d.ts → types/sdcorejs-angular-components-table.d.ts} +0 -0
  149. /package/{components/upload-file/index.d.ts → types/sdcorejs-angular-components-upload-file.d.ts} +0 -0
  150. /package/{components/view/index.d.ts → types/sdcorejs-angular-components-view.d.ts} +0 -0
  151. /package/{components/index.d.ts → types/sdcorejs-angular-components.d.ts} +0 -0
  152. /package/{configurations/index.d.ts → types/sdcorejs-angular-configurations.d.ts} +0 -0
  153. /package/{directives/index.d.ts → types/sdcorejs-angular-directives.d.ts} +0 -0
  154. /package/{forms/autocomplete/index.d.ts → types/sdcorejs-angular-forms-autocomplete.d.ts} +0 -0
  155. /package/{forms/checkbox/index.d.ts → types/sdcorejs-angular-forms-checkbox.d.ts} +0 -0
  156. /package/{forms/chip-calendar/index.d.ts → types/sdcorejs-angular-forms-chip-calendar.d.ts} +0 -0
  157. /package/{forms/chip/index.d.ts → types/sdcorejs-angular-forms-chip.d.ts} +0 -0
  158. /package/{forms/date-range/index.d.ts → types/sdcorejs-angular-forms-date-range.d.ts} +0 -0
  159. /package/{forms/date/index.d.ts → types/sdcorejs-angular-forms-date.d.ts} +0 -0
  160. /package/{forms/datetime/index.d.ts → types/sdcorejs-angular-forms-datetime.d.ts} +0 -0
  161. /package/{forms/directives/index.d.ts → types/sdcorejs-angular-forms-directives.d.ts} +0 -0
  162. /package/{forms/input-color/index.d.ts → types/sdcorejs-angular-forms-input-color.d.ts} +0 -0
  163. /package/{forms/input-number/index.d.ts → types/sdcorejs-angular-forms-input-number.d.ts} +0 -0
  164. /package/{forms/input/index.d.ts → types/sdcorejs-angular-forms-input.d.ts} +0 -0
  165. /package/{forms/label/index.d.ts → types/sdcorejs-angular-forms-label.d.ts} +0 -0
  166. /package/{forms/models/index.d.ts → types/sdcorejs-angular-forms-models.d.ts} +0 -0
  167. /package/{forms/radio/index.d.ts → types/sdcorejs-angular-forms-radio.d.ts} +0 -0
  168. /package/{forms/switch/index.d.ts → types/sdcorejs-angular-forms-switch.d.ts} +0 -0
  169. /package/{forms/textarea/index.d.ts → types/sdcorejs-angular-forms-textarea.d.ts} +0 -0
  170. /package/{forms/index.d.ts → types/sdcorejs-angular-forms.d.ts} +0 -0
  171. /package/{handlers/index.d.ts → types/sdcorejs-angular-handlers.d.ts} +0 -0
  172. /package/{i18n/index.d.ts → types/sdcorejs-angular-i18n.d.ts} +0 -0
  173. /package/{interceptors/index.d.ts → types/sdcorejs-angular-interceptors.d.ts} +0 -0
  174. /package/{models/index.d.ts → types/sdcorejs-angular-models.d.ts} +0 -0
  175. /package/{modules/auth/index.d.ts → types/sdcorejs-angular-modules-auth.d.ts} +0 -0
  176. /package/{modules/authom/index.d.ts → types/sdcorejs-angular-modules-authom.d.ts} +0 -0
  177. /package/{modules/keycloak/index.d.ts → types/sdcorejs-angular-modules-keycloak.d.ts} +0 -0
  178. /package/{modules/layout/index.d.ts → types/sdcorejs-angular-modules-layout.d.ts} +0 -0
  179. /package/{modules/permission/index.d.ts → types/sdcorejs-angular-modules-permission.d.ts} +0 -0
  180. /package/{modules/index.d.ts → types/sdcorejs-angular-modules.d.ts} +0 -0
  181. /package/{pipes/index.d.ts → types/sdcorejs-angular-pipes.d.ts} +0 -0
  182. /package/{services/api/index.d.ts → types/sdcorejs-angular-services-api.d.ts} +0 -0
  183. /package/{services/cache/index.d.ts → types/sdcorejs-angular-services-cache.d.ts} +0 -0
  184. /package/{services/confirm/index.d.ts → types/sdcorejs-angular-services-confirm.d.ts} +0 -0
  185. /package/{services/docx/index.d.ts → types/sdcorejs-angular-services-docx.d.ts} +0 -0
  186. /package/{services/excel/index.d.ts → types/sdcorejs-angular-services-excel.d.ts} +0 -0
  187. /package/{services/license/index.d.ts → types/sdcorejs-angular-services-license.d.ts} +0 -0
  188. /package/{services/loading/index.d.ts → types/sdcorejs-angular-services-loading.d.ts} +0 -0
  189. /package/{services/notify/index.d.ts → types/sdcorejs-angular-services-notify.d.ts} +0 -0
  190. /package/{services/storage/index.d.ts → types/sdcorejs-angular-services-storage.d.ts} +0 -0
  191. /package/{services/index.d.ts → types/sdcorejs-angular-services.d.ts} +0 -0
  192. /package/{utilities/data-state/index.d.ts → types/sdcorejs-angular-utilities-data-state.d.ts} +0 -0
  193. /package/{utilities/extensions/index.d.ts → types/sdcorejs-angular-utilities-extensions.d.ts} +0 -0
  194. /package/{utilities/models/index.d.ts → types/sdcorejs-angular-utilities-models.d.ts} +0 -0
  195. /package/{utilities/index.d.ts → types/sdcorejs-angular-utilities.d.ts} +0 -0
  196. /package/{index.d.ts → types/sdcorejs-angular.d.ts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"sdcorejs-angular-components-table.mjs","sources":["../../../projects/sdcorejs-angular/components/table/src/directives/sd-table-cell-def.directive.ts","../../../projects/sdcorejs-angular/components/table/src/directives/sd-table-expand-def.directive.ts","../../../projects/sdcorejs-angular/components/table/src/directives/sd-table-filter-def.directive.ts","../../../projects/sdcorejs-angular/components/table/src/directives/sd-table-footer-def.directive.ts","../../../projects/sdcorejs-angular/components/table/src/directives/sd-table-group-def.directive.ts","../../../projects/sdcorejs-angular/components/table/src/directives/sd-table-title-def.directive.ts","../../../projects/sdcorejs-angular/components/table/src/components/column-title/column-title.component.ts","../../../projects/sdcorejs-angular/components/table/src/components/column-title/column-title.component.html","../../../projects/sdcorejs-angular/components/table/src/components/filter/column-filter/column-filter.component.ts","../../../projects/sdcorejs-angular/components/table/src/components/filter/column-filter/column-filter.component.html","../../../projects/sdcorejs-angular/components/table/src/pipes/filter-values.pipe.ts","../../../projects/sdcorejs-angular/components/table/src/services/tree/tree.util.ts","../../../projects/sdcorejs-angular/components/table/src/pipes/sd-tree.pipe.ts","../../../projects/sdcorejs-angular/components/table/src/components/filter/external-filter/external-filter.component.ts","../../../projects/sdcorejs-angular/components/table/src/components/filter/external-filter/external-filter.component.html","../../../projects/sdcorejs-angular/components/table/src/components/filter/mobile-filter/mobile-filter.component.ts","../../../projects/sdcorejs-angular/components/table/src/components/filter/mobile-filter/mobile-filter.component.html","../../../projects/sdcorejs-angular/components/table/src/components/selector-action/action-filter.pipe.ts","../../../projects/sdcorejs-angular/components/table/src/components/selector-action/selector-action.component.ts","../../../projects/sdcorejs-angular/components/table/src/components/selector-action/selector-action.component.html","../../../projects/sdcorejs-angular/components/table/src/configurations/table.configuration.ts","../../../projects/sdcorejs-angular/components/table/src/services/config.service.ts","../../../projects/sdcorejs-angular/components/table/src/components/config/config.component.ts","../../../projects/sdcorejs-angular/components/table/src/components/config/config.component.html","../../../projects/sdcorejs-angular/components/table/src/components/desktop-cell/view/view.component.ts","../../../projects/sdcorejs-angular/components/table/src/components/desktop-cell/view/view.component.html","../../../projects/sdcorejs-angular/components/table/src/components/desktop-cell/desktop-cell.component.ts","../../../projects/sdcorejs-angular/components/table/src/components/desktop-cell/desktop-cell.component.html","../../../projects/sdcorejs-angular/components/table/src/components/command/pipes/command.pipe.ts","../../../projects/sdcorejs-angular/components/table/src/components/command/pipes/filter.pipe.ts","../../../projects/sdcorejs-angular/components/table/src/components/command/desktop-command.component.ts","../../../projects/sdcorejs-angular/components/table/src/components/command/desktop-command.component.html","../../../projects/sdcorejs-angular/components/table/src/components/popup-export/popup-export.component.ts","../../../projects/sdcorejs-angular/components/table/src/components/popup-export/popup-export.component.html","../../../projects/sdcorejs-angular/components/table/src/directives/sd-table-column-filter-def.directive.ts","../../../projects/sdcorejs-angular/components/table/src/directives/sticky-shadow.directive.ts","../../../projects/sdcorejs-angular/components/table/src/directives/sd-column-resize.directive.ts","../../../projects/sdcorejs-angular/components/table/src/models/table-item.model.ts","../../../projects/sdcorejs-angular/components/table/src/pipes/sd-group.pipe.ts","../../../projects/sdcorejs-angular/components/table/src/pipes/selection-disabled.pipe.ts","../../../projects/sdcorejs-angular/components/table/src/pipes/selection-visible-select-all.pipe.ts","../../../projects/sdcorejs-angular/components/table/src/pipes/selection-visible.pipe.ts","../../../projects/sdcorejs-angular/components/table/src/services/table-export/table-export.service.ts","../../../projects/sdcorejs-angular/components/table/src/services/table-format/table-format.service.ts","../../../projects/sdcorejs-angular/components/table/src/services/column-width.util.ts","../../../projects/sdcorejs-angular/components/table/src/services/table-filter/table-filter.service.ts","../../../projects/sdcorejs-angular/components/table/src/table.component.ts","../../../projects/sdcorejs-angular/components/table/src/table.component.html","../../../projects/sdcorejs-angular/components/table/src/services/table-filter/table-filter.model.ts","../../../projects/sdcorejs-angular/components/table/sdcorejs-angular-components-table.ts"],"sourcesContent":["import { Directive, TemplateRef, inject, input } from '@angular/core';\nimport { SdTableColumn } from '../models/table-column.model';\n\ninterface Context<T = any> {\n item: T;\n column: SdTableColumn<T>;\n autoId: string;\n}\n\n@Directive({\n selector: '[sdTableCellDef]',\n})\nexport class SdTableCellDefDirective<T = any> {\n static ngTemplateContextGuard<T>(_dir: SdTableCellDefDirective<T>, _ctx: unknown): _ctx is Context<T> {\n return true;\n }\n\n sdTableCellDef = input.required<string>();\n templateRef: TemplateRef<Context<T>> = inject(TemplateRef);\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\nimport { SdTableItem } from '../models/table-item.model';\n\ninterface Context<T = any> {\n item: SdTableItem<T>;\n}\n\n@Directive({\n selector: '[sdTableExpandDef]',\n})\nexport class SdTableExpandDefDirective<T = any> {\n static ngTemplateContextGuard<T>(_dir: SdTableExpandDefDirective<T>, _ctx: unknown): _ctx is Context<T> {\n return true;\n }\n\n templateRef: TemplateRef<Context<T>> = inject(TemplateRef);\n}\n","import { Directive, TemplateRef, booleanAttribute, inject, input } from '@angular/core';\n\ninterface Context {\n externalFilter?: Record<string, unknown>;\n}\n\n@Directive({\n selector: '[sdTableFilterDef]',\n})\nexport class SdTableFilterDefDirective {\n static ngTemplateContextGuard(_dir: SdTableFilterDefDirective, _ctx: unknown): _ctx is Context {\n return true;\n }\n\n sdTableFilterDef = input.required<string>();\n defaultShowing = input(false, { transform: booleanAttribute });\n templateRef: TemplateRef<Context> | null = inject(TemplateRef, { optional: true });\n}\n","import { Directive, TemplateRef, inject, input } from '@angular/core';\nimport { SdTableColumn } from '../models/table-column.model';\nimport { SdTableItem } from '../models/table-item.model';\n\ninterface Context<T = any> {\n items: SdTableItem<T>[];\n column: SdTableColumn<T>;\n}\n\n@Directive({\n selector: '[sdTableFooterDef]',\n})\nexport class SdMaterialFooterDefDirective<T = any> {\n static ngTemplateContextGuard<T>(_dir: SdMaterialFooterDefDirective<T>, _ctx: unknown): _ctx is Context<T> {\n return true;\n }\n\n sdTableFooterDef = input.required<string>();\n templateRef: TemplateRef<Context<T>> = inject(TemplateRef);\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\nimport { SdTableItem } from '../models/table-item.model';\n\nexport interface SdTableGroupDefContext<T = any> {\n /** Children items thuộc group hiện tại (kèm wrapper SdTableItem). */\n items: SdTableItem<T>[];\n /** Children raw data (đã unwrap khỏi SdTableItem) — tiện dùng trong template. */\n data: T[];\n /** Hash key của group (Utilities.hash(values)). */\n key: string;\n /** Resolved giá trị các field group — vd `{ customerId: 1, customerName: 'A' }`. */\n values: Record<string, any>;\n /** true nếu group đang expand, false nếu collapse (chỉ ý nghĩa khi option.group.collapsible). */\n isExpanded: boolean;\n /** true nếu mọi children selectable đều selected. */\n isSelected: boolean;\n /** true nếu một phần children selected (partial). */\n indeterminate: boolean;\n /** Toggle expand/collapse (chỉ chạy nếu collapsible). */\n toggleExpand: () => void;\n /** Toggle select-all cho cả group (chỉ chạy nếu selector visible). */\n toggleSelect: () => void;\n}\n\n/**\n * Directive cung cấp custom template render group header row trong sd-table.\n * Thay thế cho htmlTemplate callback cũ — cho phép Angular template binding,\n * pipes, components con (sd-badge, sd-button, …) bên trong.\n *\n * Ví dụ:\n * ```html\n * <sd-table [option]=\"opt\">\n * <ng-template sdTableGroupDef let-values=\"values\" let-items=\"items\" let-indeterminate=\"indeterminate\">\n * <b>Khách hàng: {{ values.customerName }}</b>\n * <span>{{ items.length }} đơn hàng</span>\n * </ng-template>\n * </sd-table>\n * ```\n */\n@Directive({ selector: '[sdTableGroupDef]' })\nexport class SdTableGroupDefDirective<T = any> {\n static ngTemplateContextGuard<T>(\n _dir: SdTableGroupDefDirective<T>,\n _ctx: unknown,\n ): _ctx is SdTableGroupDefContext<T> {\n return true;\n }\n templateRef: TemplateRef<SdTableGroupDefContext<T>> = inject(TemplateRef);\n}\n","import { Directive, TemplateRef, inject, input } from '@angular/core';\nimport { SdTableColumn } from '../models/table-column.model';\n\ninterface Context<T = any> {\n column: SdTableColumn<T>;\n}\n\n@Directive({\n selector: '[sdTableTitleDef]',\n})\nexport class SdTableTitleDefDirective<T = any> {\n static ngTemplateContextGuard<T>(_dir: SdTableTitleDefDirective<T>, _ctx: unknown): _ctx is Context<T> {\n return true;\n }\n\n sdTableTitleDef = input.required<string>();\n templateRef: TemplateRef<Context<T>> = inject(TemplateRef);\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { SdTableTitleDefDirective } from '../../directives/sd-table-title-def.directive';\nimport { SdTableColumn } from '../../models/table-column.model';\nimport { NgTemplateOutlet } from '@angular/common';\n\n@Component({\n selector: 'column-title',\n templateUrl: './column-title.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [NgTemplateOutlet],\n})\nexport class ColumnTitleComponent {\n column = input.required<SdTableColumn>();\n titleDef = input<SdTableTitleDefDirective | undefined>(undefined);\n\n templateRef = computed(() => {\n const title = this.column()?.title;\n if (typeof title === 'object') {\n return title?.templateRef || this.titleDef()?.templateRef;\n }\n return this.titleDef()?.templateRef;\n });\n}\n","@let _column = column();\n@let _templateRef = templateRef();\n\n@if (_templateRef) {\n <ng-container *ngTemplateOutlet=\"_templateRef\"></ng-container>\n} @else {\n {{ _column.title }}\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { CommonModule } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n input,\n isSignal,\n model,\n output,\n Signal,\n} from '@angular/core';\nimport { SdBadge } from '@sdcorejs/angular/components/badge';\nimport { SdOperator } from '@sdcorejs/angular/components/operator';\nimport { SdDate, SdInput, SdInputNumber, SdSearch, SdSelect } from '@sdcorejs/angular/forms';\nimport { SdDateRange } from '@sdcorejs/angular/forms/date-range';\nimport { OPERATORS } from '@sdcorejs/utils/constants';\nimport { Operator } from '@sdcorejs/utils/models';\nimport { SdTableColumn } from '../../../models/table-column.model';\n\n@Component({\n selector: 'column-filter',\n templateUrl: './column-filter.component.html',\n styleUrls: ['./column-filter.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [CommonModule, SdOperator, SdInput, SdInputNumber, SdSelect, SdDate, SdDateRange, SdBadge],\n})\nexport class ColumnFilterComponent {\n // ==========================================\n // 1. SIGNAL INPUTS\n // ==========================================\n autoIdInput = input<string | null | undefined>(undefined, { alias: 'autoId' });\n column = input.required<SdTableColumn>();\n columnFilter = input<Record<string, any>>({});\n cacheValues = input<Record<string, any[]> | undefined>(undefined);\n // Parent vẫn truyền `value` vào — giữ input để không phá hợp đồng (template không dùng trực tiếp).\n value = input<any>();\n // 2-way bind từ parent: parent đọc/ghi operator hiện tại của column.\n operator = model<Operator | undefined>(undefined);\n // Khi true (mobile context): gán column.title vào [label] của các control con\n // để parent không phải render <label> riêng. Default false (desktop inline).\n isMobile = input(false, { transform: booleanAttribute });\n\n // ==========================================\n // 2. SIGNAL OUTPUTS\n // ==========================================\n filterChange = output<void>();\n filterCommit = output<void>();\n\n // ==========================================\n // 3. COMPUTED\n // ==========================================\n // autoId final = `${base}-inline-${column.field}`\n autoId = computed(() => {\n const base = this.autoIdInput();\n const field = this.column()?.field ?? '';\n return base ? `${base}-inline-${field}` : '';\n });\n\n // Cho phép parent custom filter qua templateRef (column.filter.filterDef).\n templateRef = computed(() => this.column()?.filter?.filterDef);\n\n // Label cho control con khi isMobile=true. column.title có thể là string hoặc { title, templateRef }.\n // Trả undefined khi không phải mobile → control không hiển thị label (giữ behavior desktop cũ).\n label = computed<string | undefined>(() => {\n if (!this.isMobile()) return undefined;\n const col = this.column();\n const title = col?.title;\n if (!title) return col?.field;\n return typeof title === 'string' ? title : title.title || col?.field;\n });\n\n // Danh sách operator hiển thị dựa trên column config\n operators = computed(() => {\n const col = this.column();\n if (!col?.filter?.disabled && col?.filter?.operator?.enable) {\n return OPERATORS.filter(e => col.filter?.operator?.list?.includes?.(e.value));\n }\n return [];\n });\n\n // Chỉ các Operator value cho phép — truyền vào <sd-operator [operators]>.\n operatorValues = computed(() => this.operators().map(o => o.value));\n\n // Margin wrapper operator: số + đang chọn operator → thêm mb-4 (canh baseline với sd-input-number).\n operatorWrapperClass = computed(() => (this.column()?.type === 'number' && this.operator() ? 'mb-4 mr-2' : 'mr-2'));\n\n // Items cho sd-select khi column type = values / lazy-values\n items = computed<any[] | Signal<any[]> | SdSearch>(() => {\n const col = this.column();\n const cache = this.cacheValues();\n if (col?.type === 'values') {\n const optItems = col.option?.items;\n if (Array.isArray(optItems)) return optItems;\n if (isSignal(optItems)) return optItems as Signal<any[]>;\n return cache?.[col.field] || [];\n }\n if (col?.type === 'lazy-values') {\n return col.option.items;\n }\n return [];\n });\n\n constructor() {\n // Khởi tạo default { from: null, to: null } cho split-date / split-number / daterange.\n // Chạy trước lần render đầu nên template thấy giá trị đã init — không cần markForCheck.\n effect(() => {\n const col = this.column();\n const filter = this.columnFilter();\n if (!col || !filter) return;\n if (col.type === 'date' || col.type === 'time' || col.type === 'datetime') {\n if (col.filter?.type !== 'date') {\n filter[col.field] = filter[col.field] || { from: null, to: null };\n }\n }\n if (col.type === 'number' && col.filter?.type === 'split-number') {\n filter[col.field] = filter[col.field] || { from: null, to: null };\n }\n });\n }\n\n // ==========================================\n // 4. HANDLERS\n // ==========================================\n onFilterChange = () => this.filterChange.emit();\n\n // Blur input: commit giá trị KHÔNG trigger reload.\n onFilterCommit = () => this.filterCommit.emit();\n}\n","@let _column = column();\n@let _columnFilter = columnFilter();\n@let _autoId = autoId();\n@let _templateRef = templateRef();\n@let _operators = operators();\n@let _items = items();\n@let _label = label();\n@let _context = { columnFilter: _columnFilter, autoId: _autoId };\n\n<div class=\"d-flex c-inline-column align-items-end\" style=\"width: 100%; max-width: 100%\">\n @if (\n _column.type === 'string' ||\n _column.type === 'number' ||\n _column.type === 'boolean' ||\n _column.type === 'values' ||\n _column.type === 'lazy-values' ||\n _column.type === 'date' ||\n _column.type === 'datetime' ||\n _column.type === 'time'\n ) {\n <!-- Operator filter -->\n @if (_operators.length) {\n <div class=\"d-flex align-items-center\" [ngClass]=\"operatorWrapperClass()\">\n <sd-operator [(model)]=\"operator\" [operators]=\"operatorValues()\" />\n </div>\n }\n\n <!-- Nếu filter nhận vào template -->\n @if (_templateRef) {\n <ng-container *ngTemplateOutlet=\"_templateRef; context: _context\"></ng-container>\n }\n <!-- Mặc định theo type và giá trị values defined của column -->\n @else {\n @if (_column.type === 'string') {\n <sd-input\n [autoId]=\"_autoId\"\n style=\"flex: 1 1 0%; min-width: 0\"\n size=\"sm\"\n type=\"text\"\n [label]=\"_label\"\n [(model)]=\"_columnFilter[_column.field]\"\n (keyupEnter)=\"onFilterChange()\"\n (sdBlur)=\"onFilterCommit()\"\n (cleared)=\"onFilterChange()\"\n [disabled]=\"_column.filter?.disabled\"\n hideInlineError>\n </sd-input>\n } @else if (_column.type === 'number') {\n @if (!_column.filter?.type) {\n <sd-input-number\n [autoId]=\"_autoId\"\n style=\"flex: 1 1 0%; min-width: 0\"\n size=\"sm\"\n [label]=\"_label\"\n [(model)]=\"_columnFilter[_column.field]\"\n (keyupEnter)=\"onFilterChange()\"\n (sdBlur)=\"onFilterCommit()\"\n (cleared)=\"onFilterChange()\"\n [disabled]=\"_column.filter?.disabled\"\n hideInlineError>\n </sd-input-number>\n } @else if (_column.filter?.type === 'split-number') {\n <ng-container\n *ngTemplateOutlet=\"splitNumberTpl; context: { field: _column.field, disabled: _column.filter?.disabled }\">\n </ng-container>\n }\n } @else if (_column.type === 'boolean') {\n <sd-select\n minWidthPanel=\"200px\"\n [autoId]=\"_autoId\"\n style=\"flex: 1 1 0%; min-width: 0\"\n [style.width]=\"'100%'\"\n size=\"sm\"\n [label]=\"_label\"\n [items]=\"[\n { value: '1', display: _column.option?.displayOnTrue || 'True' },\n { value: '0', display: _column.option?.displayOnFalse || 'False' },\n ]\"\n valueField=\"value\"\n displayField=\"display\"\n [(model)]=\"_columnFilter[_column.field]\"\n (sdChange)=\"onFilterChange()\"\n [disabled]=\"_column.filter?.disabled\"\n hideInlineError>\n <ng-template sdItemDef let-item=\"item\">\n @if (item.value === '1') {\n <sd-badge color=\"success\" [title]=\"_column.option?.displayOnTrue || 'True'\"> </sd-badge>\n } @else {\n <sd-badge color=\"error\" [title]=\"_column.option?.displayOnFalse || 'False'\"> </sd-badge>\n }\n </ng-template>\n </sd-select>\n } @else if (_column.type === 'values') {\n <sd-select\n minWidthPanel=\"200px\"\n [autoId]=\"_autoId\"\n style=\"flex: 1 1 0%; min-width: 0\"\n [style.width]=\"'100%'\"\n size=\"sm\"\n [label]=\"_label\"\n [items]=\"_items\"\n [valueField]=\"_column.option.valueField\"\n [displayField]=\"_column.option.displayField\"\n [(model)]=\"_columnFilter[_column.field]\"\n (sdChange)=\"onFilterChange()\"\n [disabled]=\"_column.filter?.disabled\"\n [multiple]=\"_column.option.selection === 'MULTIPLE'\"\n hideInlineError>\n </sd-select>\n } @else if (_column.type === 'lazy-values') {\n <sd-select\n minWidthPanel=\"200px\"\n [autoId]=\"_autoId\"\n style=\"flex: 1 1 0%; min-width: 0\"\n [style.width]=\"'100%'\"\n size=\"sm\"\n [label]=\"_label\"\n [items]=\"_items\"\n [valueField]=\"_column.option.valueField\"\n [displayField]=\"_column.option.displayField\"\n [(model)]=\"_columnFilter[_column.field]\"\n (sdChange)=\"onFilterChange()\"\n [disabled]=\"_column.filter?.disabled\"\n [multiple]=\"_column.option.selection === 'MULTIPLE'\"\n hideInlineError>\n </sd-select>\n } @else if (_column.type === 'date' || _column.type === 'datetime' || _column.type === 'time') {\n @if (!_column.filter?.type || _column.filter?.type === 'daterange') {\n <sd-date-range\n style=\"flex: 1 1 0%; min-width: 0\"\n size=\"sm\"\n [label]=\"_label\"\n [(model)]=\"_columnFilter[_column.field]\"\n (sdChange)=\"onFilterChange()\"\n [disabled]=\"_column.filter?.disabled\"\n hideInlineError>\n </sd-date-range>\n } @else if (_column.filter?.type === 'date') {\n <sd-date\n [autoId]=\"_autoId\"\n style=\"flex: 1 1 0%; min-width: 0\"\n type=\"date\"\n size=\"sm\"\n [label]=\"_label\"\n [(model)]=\"_columnFilter[_column.field]\"\n (sdChange)=\"onFilterChange()\"\n [disabled]=\"_column.filter?.disabled\"\n hideInlineError>\n </sd-date>\n } @else if (_column.filter?.type === 'split-date') {\n <ng-container\n *ngTemplateOutlet=\"splitDateTpl; context: { field: _column.field, disabled: _column.filter?.disabled }\">\n </ng-container>\n }\n }\n }\n } @else {\n <sd-input [autoId]=\"_autoId\" style=\"flex: 1 1 0%; min-width: 0\" type=\"text\" size=\"sm\" disabled></sd-input>\n }\n</div>\n\n<!-- ================================================ -->\n<!-- Split from/to templates (đưa xuống cuối file) -->\n<!-- ================================================ -->\n<ng-template #splitNumberTpl let-field=\"field\" let-disabled=\"disabled\">\n <div class=\"d-flex align-items-center\" style=\"flex: 1 1 0%; min-width: 0\">\n <sd-input-number\n [autoId]=\"_autoId + '-from'\"\n style=\"flex: 1 1 0%; min-width: 0\"\n size=\"sm\"\n [label]=\"_label\"\n [(model)]=\"_columnFilter[field].from\"\n (sdChange)=\"onFilterChange()\"\n (sdBlur)=\"onFilterCommit()\"\n (cleared)=\"onFilterChange()\"\n [disabled]=\"disabled\"\n hideInlineError>\n </sd-input-number>\n <div class=\"mx-4\">-</div>\n <sd-input-number\n [autoId]=\"_autoId + '-to'\"\n style=\"flex: 1 1 0%; min-width: 0\"\n size=\"sm\"\n [(model)]=\"_columnFilter[field].to\"\n (sdChange)=\"onFilterChange()\"\n (sdBlur)=\"onFilterCommit()\"\n (cleared)=\"onFilterChange()\"\n [disabled]=\"disabled\"\n hideInlineError>\n </sd-input-number>\n </div>\n</ng-template>\n\n<ng-template #splitDateTpl let-field=\"field\" let-disabled=\"disabled\">\n <div class=\"d-flex align-items-center\" style=\"flex: 1 1 0%; min-width: 0\">\n <sd-date\n [autoId]=\"_autoId + '-from'\"\n style=\"flex: 1 1 0%; min-width: 0\"\n type=\"date\"\n size=\"sm\"\n [label]=\"_label\"\n [(model)]=\"_columnFilter[field].from\"\n (sdChange)=\"onFilterChange()\"\n [disabled]=\"disabled\"\n hideInlineError>\n </sd-date>\n <div class=\"mx-4\">-</div>\n <sd-date\n [autoId]=\"_autoId + '-to'\"\n style=\"flex: 1 1 0%; min-width: 0\"\n type=\"date\"\n size=\"sm\"\n [(model)]=\"_columnFilter[field].to\"\n (sdChange)=\"onFilterChange()\"\n [disabled]=\"disabled\"\n hideInlineError>\n </sd-date>\n </div>\n</ng-template>\n","import { Pipe, PipeTransform } from '@angular/core';\n\n// Đối với filter loại values, items có thể là 1 mảng, có thể là 1 hàm, do đó cần xử lý nếu là hàm có thể xử lý gọi API\n@Pipe({\n name: 'filterValues',\n})\nexport class FilterValuesPipe implements PipeTransform {\n constructor() {}\n async transform(items: any[] | (() => Promise<any[]>) | undefined | null): Promise<any[]> {\n if (Array.isArray(items)) {\n return items;\n }\n if (typeof items === 'function') {\n const results = await items();\n if (Array.isArray(results)) {\n return results;\n }\n }\n return [];\n }\n}\n","import { SdTableOptionTree } from '../../models/table-option-tree.model';\nimport { SdTableItem } from '../../models/table-item.model';\n\nexport const getChildrenKey = (option?: SdTableOptionTree): string => option?.childrenKey ?? 'children';\n\nexport const getChildrenFromData = <T>(data: T, option?: SdTableOptionTree): T[] => {\n const key = getChildrenKey(option);\n const raw = (data as Record<string, unknown>)?.[key];\n return Array.isArray(raw) ? (raw as T[]) : [];\n};\n\nexport const resolveDefaultExpanded = (level: number, option?: SdTableOptionTree): boolean => {\n const def = option?.defaultExpanded ?? false;\n if (def === true) return true;\n if (def === false) return false;\n if (typeof def === 'number') return level < def;\n return false;\n};\n\nexport const resolveHasChildren = <T>(row: SdTableItem<T>, option?: SdTableOptionTree): boolean => {\n const embedded = getChildrenFromData(row.data, option);\n if (embedded.length > 0) return true;\n return !!option?.onExpandChildren;\n};\n\nexport const hasLazyChildren = <T>(row: SdTableItem<T>, option?: SdTableOptionTree): boolean => {\n if (!option?.onExpandChildren) return false;\n return getChildrenFromData(row.data, option).length === 0;\n};\n\nexport const flattenTree = <T>(\n roots: SdTableItem<T>[],\n option?: SdTableOptionTree,\n visited: Set<string> = new Set()\n): SdTableItem<T>[] => {\n if (!option) return roots;\n const maxDepth = option.maxDepth;\n const result: SdTableItem<T>[] = [];\n\n const walk = (rows: SdTableItem<T>[], level: number, parentPath: number[]) => {\n rows.forEach((row, siblingIdx) => {\n if (visited.has(row.meta.id)) return;\n visited.add(row.meta.id);\n row.meta.tree ??= { level, hasChildren: false, isExpanded: false };\n row.meta.tree.level = level;\n // why: hierarchical numbering (1, 1.2, 1.2.1, ...) — STT template join('.').\n const indexPath = [...parentPath, siblingIdx + 1];\n row.meta.tree.indexPath = indexPath;\n result.push(row);\n\n const canDescend = row.meta.tree.isExpanded && row.meta.tree.hasChildren;\n const depthOk = maxDepth === undefined || level < maxDepth;\n if (!canDescend || !depthOk) return;\n\n const children = row.meta.tree.childItems ?? [];\n walk(children, level + 1, indexPath);\n });\n };\n\n walk(roots, 0, []);\n return result;\n};\n\n/** Thu thập mọi SdTableItem đã format trong cây (kể cả node đang collapse). */\nexport const collectFormattedTreeRows = <T>(roots: SdTableItem<T>[]): SdTableItem<T>[] => {\n const result: SdTableItem<T>[] = [];\n const walk = (rows: SdTableItem<T>[]) => {\n for (const row of rows) {\n result.push(row);\n const children = row.meta.tree?.childItems;\n if (children?.length) walk(children);\n }\n };\n walk(roots);\n return result;\n};\n\n/** Flatten ALL nodes regardless of expand state — used for export */\nexport const flattenTreeAll = <T>(\n roots: SdTableItem<T>[],\n option?: SdTableOptionTree,\n visited: Set<string> = new Set()\n): SdTableItem<T>[] => {\n if (!option) return roots;\n const maxDepth = option.maxDepth;\n const result: SdTableItem<T>[] = [];\n\n const walk = (rows: SdTableItem<T>[], level: number) => {\n for (const row of rows) {\n if (visited.has(row.meta.id)) continue;\n visited.add(row.meta.id);\n result.push(row);\n const depthOk = maxDepth === undefined || level < maxDepth;\n if (!depthOk) continue;\n const children = row.meta.tree?.childItems ?? [];\n walk(children, level + 1);\n }\n };\n\n walk(roots, 0);\n return result;\n};\n\n/** Flatten raw data tree for export (ignores expand state) */\nexport const flattenDataTree = <T>(roots: T[], option?: SdTableOptionTree, visited: Set<unknown> = new Set()): T[] => {\n if (!option) return roots;\n const maxDepth = option.maxDepth;\n const result: T[] = [];\n\n const walk = (rows: T[], level: number) => {\n for (const row of rows) {\n if (visited.has(row as object)) continue;\n visited.add(row as object);\n result.push(row);\n const depthOk = maxDepth === undefined || level < maxDepth;\n if (!depthOk) continue;\n walk(getChildrenFromData(row, option), level + 1);\n }\n };\n\n walk(roots, 0);\n return result;\n};\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { SdTableOptionTree } from '../models/table-option-tree.model';\nimport { SdTableItem } from '../models/table-item.model';\nimport { flattenTree } from '../services/tree/tree.util';\n\n@Pipe({ name: 'sdTree' })\nexport class SdTreePipe implements PipeTransform {\n transform(items: SdTableItem[], treeOption?: SdTableOptionTree, _revision = 0): SdTableItem[] {\n if (!treeOption) return items;\n return flattenTree(items, treeOption);\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n effect,\n inject,\n input,\n signal,\n untracked,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormGroup } from '@angular/forms';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { SdButton } from '@sdcorejs/angular/components/button';\nimport { SdSection } from '@sdcorejs/angular/components/section';\nimport { SdCheckbox, SdDate, SdDateRange, SdDatetime, SdInput, SdInputNumber, SdSelect } from '@sdcorejs/angular/forms';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\nimport { BrowserUtilities } from '@sdcorejs/utils/fns';\nimport { FilterValuesPipe } from '../../../pipes';\nimport { SdTableExternalFilter, SdTableOptionFilter, TableFilterRegister } from '../../../services/table-filter/table-filter.model';\n\n@Component({\n selector: 'external-filter',\n templateUrl: './external-filter.component.html',\n styleUrls: ['./external-filter.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n CommonModule,\n MatMenuModule,\n MatCheckboxModule,\n SdSection,\n SdInput,\n SdInputNumber,\n SdSelect,\n SdDate,\n SdDatetime,\n SdDateRange,\n SdButton,\n FilterValuesPipe,\n SdCheckbox,\n TranslatePipe,\n ],\n})\n// eslint-disable-next-line @angular-eslint/component-class-suffix\nexport class ExternalFilterComponent {\n // ==========================================\n // 1. SIGNAL INPUTS\n // ==========================================\n autoIdInput = input<string | null | undefined>(undefined, { alias: 'autoId' });\n filter = input<SdTableOptionFilter | undefined>(undefined);\n externalFilters = input<SdTableExternalFilter[] | null | undefined>([]);\n filterRegister = input<TableFilterRegister | undefined>(undefined);\n\n // ==========================================\n // 2. INJECT\n // ==========================================\n readonly #ref = inject(ChangeDetectorRef);\n\n // ==========================================\n // 3. STATE (signals)\n // ==========================================\n externalFilter = signal<Record<string, any>>({});\n inlineExternal = signal<Record<string, boolean>>({});\n filtered = signal<boolean>(false);\n isMobileOrTablet = BrowserUtilities.isMobile();\n // FormGroup là instance, parent đọc qua viewChild — giữ readonly field.\n readonly form = new FormGroup({});\n\n // ==========================================\n // 4. COMPUTED\n // ==========================================\n // autoId base = `<input>-external-` — template ghép tiếp `<field>` cho mỗi control.\n autoId = computed(() => {\n const base = this.autoIdInput();\n return base ? `${base}-external-` : '';\n });\n\n // Layout column: 4 filter/row → 3 cột; mặc định 6 filter/row → 2 cột.\n col = computed<2 | 3>(() => (this.filter()?.externalFilterPerRow === 4 ? 3 : 2));\n\n // Normalize externalFilters về mảng (input có thể null/undefined).\n filterItems = computed(() => this.externalFilters() || []);\n\n constructor() {\n // Subscribe filterRegister observers — re-subscribe khi input đổi, cleanup khi đổi/destroy.\n // QUAN TRỌNG: phải wrap untracked(). Observer có startWith() → emit ĐỒNG BỘ ngay khi\n // subscribe, callback đọc this.externalFilter() (qua #filtered) sẽ bị effect track →\n // externalFilter.set({}) tạo ref mới → effect rerun → resubscribe → loop vô hạn → OOM.\n effect(onCleanup => {\n const register = this.filterRegister();\n if (!register) return;\n\n untracked(() => {\n const cfgSub = register.configuration.observer.subscribe(cfg => {\n this.inlineExternal.set(cfg.inlineExternal || {});\n });\n\n const valSub = register.value.observer.subscribe(val => {\n this.externalFilter.set(val.externalFilter || {});\n this.filtered.set(this.#filtered());\n });\n\n onCleanup(() => {\n cfgSub.unsubscribe();\n valSub.unsubscribe();\n });\n });\n });\n\n // Khi form values đổi → cập nhật filtered. takeUntilDestroyed() tự lấy DestroyRef từ injection context.\n this.form.valueChanges.pipe(takeUntilDestroyed()).subscribe(() => {\n this.filtered.set(this.#filtered());\n this.#ref.markForCheck();\n });\n }\n\n // ==========================================\n // 5. HANDLERS\n // ==========================================\n onKeyupEnter = () => {\n this.onSubmit();\n };\n\n onFilter = (externalFilter: SdTableExternalFilter) => {\n externalFilter?.onChange?.(this.externalFilter()?.[externalFilter.field]);\n // Nếu không phải manual filter thì submit luôn; manual → đợi user bấm nút Search.\n if (!this.filter()?.manualFilter) {\n this.onSubmit();\n }\n };\n\n onSubmit = () => {\n if (this.form.invalid) {\n this.form.markAllAsTouched();\n return;\n }\n this.filterRegister()?.value.set({\n externalFilter: this.externalFilter(),\n });\n };\n\n // Public API — table.component gọi để commit pending value vào filterRegister mà không trigger reload.\n updateFilter = () => {\n this.filterRegister()?.value.set({\n externalFilter: this.externalFilter(),\n notReload: true,\n });\n };\n\n clearFilter = (event?: Event) => {\n event?.stopPropagation();\n this.filterRegister()?.value.remove();\n this.filter()?.onClearFilter?.();\n };\n\n onCheckboxChange = (event: Event, externalFilter: SdTableExternalFilter) => {\n event?.stopPropagation();\n const next = { ...this.inlineExternal() };\n next[externalFilter.field] = !next[externalFilter.field];\n this.inlineExternal.set(next);\n this.filterRegister()?.configuration.set({\n inlineExternal: next,\n });\n };\n\n // ==========================================\n // 6. INTERNAL\n // ==========================================\n #filtered = (): boolean => {\n return Object.values({ ...this.externalFilter() }).some(val => {\n // Mảng có phần tử → coi như có filter\n if (Array.isArray(val)) return !!val.length;\n // Object (date) có from/to → có filter\n if (val && typeof val === 'object') {\n if ('from' in val && !!val.from) return true;\n if ('to' in val && !!val.to) return true;\n return false;\n }\n return val !== undefined && val !== null && val !== '';\n });\n };\n}\n","@let _filter = filter();\n@let _autoId = autoId();\n@let _items = filterItems();\n@let _externalFilter = externalFilter();\n@let _inlineExternal = inlineExternal();\n@let _filtered = filtered();\n@let _col = col();\n\n@if (!_filter?.disabled) {\n @if (!isMobileOrTablet && _items.length) {\n <sd-section\n [hideHeader]=\"_filter?.hideExternalFilterToolbar\"\n icon=\"filter_alt\"\n iconColor=\"secondary\"\n [title]=\"'core.component.table.filter' | translate\"\n collapsable>\n <div class=\"d-flex mr-4\" sdHeaderRight>\n <sd-button\n [autoId]=\"_autoId + 'clear'\"\n [disabled]=\"!_filtered\"\n type=\"link\"\n prefixIcon=\"cleaning_services\"\n [tooltip]=\"'core.component.table.clear-selection' | translate\"\n (click)=\"$event.stopPropagation(); clearFilter($event)\"></sd-button>\n <sd-button\n [autoId]=\"_autoId + 'setting'\"\n type=\"link\"\n prefixIcon=\"settings\"\n [tooltip]=\"'core.component.table.customize' | translate\"\n [matMenuTriggerFor]=\"menu\"\n (click)=\"$event.stopPropagation()\"></sd-button>\n <mat-menu #menu=\"matMenu\" class=\"sd-custom-panel-filter-configuration\" [attr.data-autoid]=\"_autoId + 'setting-menu'\">\n @for (externalFilter of _items; track externalFilter.field) {\n <button\n [attr.data-autoid]=\"_autoId + 'setting-' + externalFilter.field\"\n mat-menu-item\n (click)=\"onCheckboxChange($event, externalFilter)\"\n [disabled]=\"externalFilter.required\">\n <sd-checkbox\n [autoId]=\"_autoId + 'setting-' + externalFilter.field + '-checkbox'\"\n [label]=\"externalFilter.title\"\n [model]=\"_inlineExternal[externalFilter.field]\"\n [disabled]=\"externalFilter.required\" />\n </button>\n }\n </mat-menu>\n </div>\n <div class=\"row mx-0\" style=\"row-gap: 16px\">\n @for (item of _items; track item.field) {\n @if (_inlineExternal[item.field]) {\n <div class=\"col-md-3 col-sm-6 px-8\" [class.col-lg-2]=\"_col === 2\" [class.col-lg-3]=\"_col === 3\">\n @if (item.type === 'string') {\n <sd-input\n [autoId]=\"_autoId + item.field\"\n [label]=\"item.title\"\n type=\"text\"\n [(model)]=\"_externalFilter[item.field]\"\n (keyupEnter)=\"onKeyupEnter()\"\n appearance=\"outline\"\n [form]=\"form\"\n [required]=\"item.required\"\n hideInlineError>\n </sd-input>\n } @else if (item.type === 'number') {\n <sd-input-number\n [autoId]=\"_autoId + item.field\"\n [label]=\"item.title\"\n [(model)]=\"_externalFilter[item.field]\"\n (keyupEnter)=\"onKeyupEnter()\"\n appearance=\"outline\"\n [form]=\"form\"\n [required]=\"item.required\"\n hideInlineError>\n </sd-input-number>\n } @else if (item.type === 'boolean') {\n <sd-select\n [autoId]=\"_autoId + item.field\"\n [label]=\"item.title\"\n [items]=\"[\n { value: true, display: item.option?.displayOnTrue || 'True' },\n { value: false, display: item.option?.displayOnFalse || 'False' },\n ]\"\n valueField=\"value\"\n displayField=\"display\"\n [(model)]=\"_externalFilter[item.field]\"\n (sdChange)=\"onFilter(item)\"\n appearance=\"outline\"\n [form]=\"form\"\n [required]=\"item.required\"\n hideInlineError>\n </sd-select>\n } @else if (item.type === 'date') {\n <sd-date\n [autoId]=\"_autoId + item.field\"\n [label]=\"item.title\"\n [(model)]=\"_externalFilter[item.field]\"\n (sdChange)=\"onFilter(item)\"\n appearance=\"outline\"\n [form]=\"form\"\n [required]=\"item.required\"\n [min]=\"item.minDate\"\n [max]=\"item.maxDate\"\n hideInlineError>\n </sd-date>\n } @else if (item.type === 'datetime') {\n <sd-datetime\n [autoId]=\"_autoId + item.field\"\n [label]=\"item.title\"\n [(model)]=\"_externalFilter[item.field]\"\n (sdChange)=\"onFilter(item)\"\n appearance=\"outline\"\n [form]=\"form\"\n [required]=\"item.required\"\n [min]=\"item.minDate\"\n [max]=\"item.maxDate\"\n hideInlineError>\n </sd-datetime>\n } @else if (item.type === 'daterange') {\n <sd-date-range\n [autoId]=\"_autoId + item.field\"\n [label]=\"item.title\"\n [(model)]=\"_externalFilter[item.field]\"\n (sdChange)=\"onFilter(item)\"\n [form]=\"form\"\n [required]=\"item.required\"\n [min]=\"item.minDate\"\n [max]=\"item.maxDate\"\n appearance=\"outline\"\n hideInlineError>\n </sd-date-range>\n } @else if (item.type === 'values') {\n @if (item.option.selection === 'MULTIPLE') {\n <sd-select\n [autoId]=\"_autoId + item.field\"\n [label]=\"item.title\"\n [items]=\"item.option.items | filterValues | async\"\n [valueField]=\"item.option.valueField\"\n [displayField]=\"item.option.displayField\"\n [(model)]=\"_externalFilter[item.field]\"\n (sdChange)=\"onFilter(item)\"\n appearance=\"outline\"\n multiple\n [form]=\"form\"\n [required]=\"item.required\"\n hideInlineError>\n </sd-select>\n } @else if (item.option.selection === 'AUTOCOMPLETE') {\n <sd-select\n [autoId]=\"_autoId + item.field\"\n [label]=\"item.title\"\n [items]=\"item.option.items | filterValues | async\"\n [valueField]=\"item.option.valueField\"\n [displayField]=\"item.option.displayField\"\n [(model)]=\"_externalFilter[item.field]\"\n (sdChange)=\"onFilter(item)\"\n appearance=\"outline\"\n [form]=\"form\"\n [required]=\"item.required\"\n hideInlineError>\n </sd-select>\n } @else if (item.option.selection === 'MULTIPLEAUTOCOMPLETE') {\n <sd-select\n [autoId]=\"_autoId + item.field\"\n [label]=\"item.title\"\n [items]=\"item.option.items | filterValues | async\"\n [valueField]=\"item.option.valueField\"\n [displayField]=\"item.option.displayField\"\n [(model)]=\"_externalFilter[item.field]\"\n (sdChange)=\"onFilter(item)\"\n appearance=\"outline\"\n multiple\n [form]=\"form\"\n [required]=\"item.required\"\n hideInlineError>\n </sd-select>\n } @else {\n <sd-select\n [autoId]=\"_autoId + item.field\"\n [label]=\"item.title\"\n [items]=\"item.option.items | filterValues | async\"\n [valueField]=\"item.option.valueField\"\n [displayField]=\"item.option.displayField\"\n [(model)]=\"_externalFilter[item.field]\"\n (sdChange)=\"onFilter(item)\"\n appearance=\"outline\"\n [form]=\"form\"\n [required]=\"item.required\"\n hideInlineError>\n </sd-select>\n }\n } @else if (item.type === 'lazy-values') {\n @if (item.option.selection === 'MULTIPLE') {\n <sd-select\n [autoId]=\"_autoId + item.field\"\n [label]=\"item.title\"\n [items]=\"item.option.items\"\n [valueField]=\"item.option.valueField\"\n [displayField]=\"item.option.displayField\"\n [(model)]=\"_externalFilter[item.field]\"\n (sdChange)=\"onFilter(item)\"\n appearance=\"outline\"\n multiple\n [form]=\"form\"\n [required]=\"item.required\"\n hideInlineError>\n </sd-select>\n } @else {\n <sd-select\n [autoId]=\"_autoId + item.field\"\n [label]=\"item.title\"\n [items]=\"item.option.items\"\n [valueField]=\"item.option.valueField\"\n [displayField]=\"item.option.displayField\"\n [(model)]=\"_externalFilter[item.field]\"\n (sdChange)=\"onFilter(item)\"\n appearance=\"outline\"\n [form]=\"form\"\n [required]=\"item.required\"\n hideInlineError>\n </sd-select>\n }\n } @else if (item.type === 'custom' && item.filterDef) {\n <ng-container\n *ngTemplateOutlet=\"\n item.filterDef;\n context: { form: form, externalFilter: _externalFilter, autoId: _autoId + item.field }\n \">\n </ng-container>\n }\n </div>\n }\n }\n </div>\n @if (_filter?.manualFilter) {\n <div class=\"d-flex justify-content-end mt-16 px-8\">\n <sd-button\n [autoId]=\"_autoId + 'submit'\"\n [disabled]=\"form.invalid\"\n type=\"fill\"\n color=\"primary\"\n [title]=\"'core.component.table.search' | translate\"\n prefixIcon=\"filter_alt\"\n (click)=\"onSubmit()\">\n </sd-button>\n </div>\n }\n </sd-section>\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, input, signal, viewChild } from '@angular/core';\nimport { SdButton } from '@sdcorejs/angular/components/button';\nimport { SdSideDrawer } from '@sdcorejs/angular/components/side-drawer';\nimport { SdDate, SdDateRange, SdDatetime, SdInput, SdInputNumber, SdSelect } from '@sdcorejs/angular/forms';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\nimport { Operator } from '@sdcorejs/utils/models';\nimport { SdTableFilterDefDirective } from '../../../directives/sd-table-filter-def.directive';\nimport { SdTableColumn } from '../../../models/table-column.model';\nimport { FilterValuesPipe } from '../../../pipes';\nimport { SdTableExternalFilter, SdTableOptionFilter, TableFilterRegister } from '../../../services/table-filter/table-filter.model';\nimport { ColumnFilterComponent } from '../column-filter/column-filter.component';\n\n/**\n * Mobile-filter — side-drawer chiếm ~90% width thiết bị. Dùng cho table khi\n * render trên màn hình điện thoại (inline filter bị ẩn).\n *\n * Layout (mỗi filter 1 hàng, size='sm'):\n * 1. External filter (render inline — KHÔNG reuse external-filter component\n * vì component đó dùng grid 2/3 cột + có chọn ẩn/hiện không phù hợp mobile).\n * 2. filterDefs — custom templates do app khai báo qua `[sdTableFilterDef]`.\n * 3. Column filter — 1 column-filter / column.\n *\n * State: local working copy. Cancel = đóng (không ghi). Apply = flush vào\n * filterRegister + đóng.\n */\n@Component({\n selector: 'mobile-filter',\n templateUrl: './mobile-filter.component.html',\n styleUrls: ['./mobile-filter.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n CommonModule,\n SdSideDrawer,\n SdButton,\n ColumnFilterComponent,\n SdInput,\n SdInputNumber,\n SdSelect,\n SdDate,\n SdDatetime,\n SdDateRange,\n FilterValuesPipe,\n TranslatePipe,\n ],\n})\nexport class MobileFilterComponent {\n // ==========================================\n // 1. SIGNAL INPUTS\n // ==========================================\n autoIdInput = input<string | null | undefined>(undefined, { alias: 'autoId' });\n filter = input<SdTableOptionFilter | undefined>(undefined);\n externalFilters = input<SdTableExternalFilter[] | null | undefined>([]);\n columns = input<SdTableColumn[] | null | undefined>([]);\n filterDefs = input<readonly SdTableFilterDefDirective[] | null | undefined>([]);\n filterRegister = input<TableFilterRegister | undefined>(undefined);\n cacheValues = input<Record<string, any[]> | undefined>(undefined);\n\n // ==========================================\n // 2. VIEW QUERY\n // ==========================================\n drawer = viewChild.required(SdSideDrawer);\n\n // ==========================================\n // 3. STATE — local working copies; chỉ flush khi Apply.\n // ==========================================\n workingColumnFilter = signal<Record<string, any>>({});\n workingColumnOperator = signal<Record<string, Operator>>({});\n workingExternalFilter = signal<Record<string, any>>({});\n\n // ==========================================\n // 4. COMPUTED\n // ==========================================\n autoId = computed(() => {\n const base = this.autoIdInput();\n return base ? `${base}-mobile-filter-` : '';\n });\n\n externalFilterItems = computed(() => this.externalFilters() || []);\n columnItems = computed(() => this.columns() || []);\n filterDefItems = computed(() => this.filterDefs() || []);\n\n // ==========================================\n // 5. PUBLIC API\n // ==========================================\n open = () => {\n const reg = this.filterRegister();\n const val = reg?.value.get();\n const cloned = (o: any) => (o ? JSON.parse(JSON.stringify(o)) : {});\n this.workingColumnFilter.set(cloned(val?.columnFilter));\n this.workingColumnOperator.set(cloned(val?.columnOperator));\n this.workingExternalFilter.set(cloned(val?.externalFilter));\n this.drawer().open();\n };\n\n close = () => this.drawer().close();\n\n // ==========================================\n // 6. HANDLERS\n // ==========================================\n onApply = () => {\n this.filterRegister()?.value.set({\n columnFilter: this.workingColumnFilter(),\n columnOperator: this.workingColumnOperator(),\n externalFilter: this.workingExternalFilter(),\n });\n this.drawer().close();\n };\n\n onCancel = () => {\n // Local working state — không ghi gì khi cancel, chỉ đóng drawer.\n this.drawer().close();\n };\n}\n","@let _autoId = autoId();\n@let _externalFilters = externalFilterItems();\n@let _columns = columnItems();\n@let _filterDefs = filterDefItems();\n@let _workingColumnFilter = workingColumnFilter();\n@let _workingColumnOperator = workingColumnOperator();\n@let _workingExternalFilter = workingExternalFilter();\n@let _cacheValues = cacheValues();\n\n<sd-side-drawer\n #drawer\n [title]=\"'core.component.table.filter' | translate\"\n width=\"90vw\">\n <div class=\"mobile-filter-body\">\n <!-- ============================ -->\n <!-- 1. External filters (inline) -->\n <!-- ============================ -->\n @if (_externalFilters.length) {\n <section class=\"mobile-filter-section\">\n @for (item of _externalFilters; track item.field) {\n <div class=\"mobile-filter-row\">\n @if (item.type === 'string') {\n <sd-input\n [autoId]=\"_autoId + 'ext-' + item.field\"\n size=\"sm\"\n [label]=\"item.title\"\n type=\"text\"\n [(model)]=\"_workingExternalFilter[item.field]\"\n appearance=\"outline\"\n [required]=\"item.required\"\n hideInlineError>\n </sd-input>\n } @else if (item.type === 'number') {\n <sd-input-number\n [autoId]=\"_autoId + 'ext-' + item.field\"\n size=\"sm\"\n [label]=\"item.title\"\n [(model)]=\"_workingExternalFilter[item.field]\"\n appearance=\"outline\"\n [required]=\"item.required\"\n hideInlineError>\n </sd-input-number>\n } @else if (item.type === 'boolean') {\n <sd-select\n [autoId]=\"_autoId + 'ext-' + item.field\"\n size=\"sm\"\n [label]=\"item.title\"\n [items]=\"[\n { value: true, display: item.option?.displayOnTrue || 'True' },\n { value: false, display: item.option?.displayOnFalse || 'False' },\n ]\"\n valueField=\"value\"\n displayField=\"display\"\n [(model)]=\"_workingExternalFilter[item.field]\"\n appearance=\"outline\"\n [required]=\"item.required\"\n hideInlineError>\n </sd-select>\n } @else if (item.type === 'date') {\n <sd-date\n [autoId]=\"_autoId + 'ext-' + item.field\"\n size=\"sm\"\n [label]=\"item.title\"\n [(model)]=\"_workingExternalFilter[item.field]\"\n appearance=\"outline\"\n [required]=\"item.required\"\n [min]=\"item.minDate\"\n [max]=\"item.maxDate\"\n hideInlineError>\n </sd-date>\n } @else if (item.type === 'datetime') {\n <sd-datetime\n [autoId]=\"_autoId + 'ext-' + item.field\"\n size=\"sm\"\n [label]=\"item.title\"\n [(model)]=\"_workingExternalFilter[item.field]\"\n appearance=\"outline\"\n [required]=\"item.required\"\n [min]=\"item.minDate\"\n [max]=\"item.maxDate\"\n hideInlineError>\n </sd-datetime>\n } @else if (item.type === 'daterange') {\n <sd-date-range\n [autoId]=\"_autoId + 'ext-' + item.field\"\n size=\"sm\"\n [label]=\"item.title\"\n [(model)]=\"_workingExternalFilter[item.field]\"\n [required]=\"item.required\"\n [min]=\"item.minDate\"\n [max]=\"item.maxDate\"\n appearance=\"outline\"\n hideInlineError>\n </sd-date-range>\n } @else if (item.type === 'values') {\n <sd-select\n [autoId]=\"_autoId + 'ext-' + item.field\"\n size=\"sm\"\n [label]=\"item.title\"\n [items]=\"item.option.items | filterValues | async\"\n [valueField]=\"item.option.valueField\"\n [displayField]=\"item.option.displayField\"\n [(model)]=\"_workingExternalFilter[item.field]\"\n appearance=\"outline\"\n [multiple]=\"item.option.selection === 'MULTIPLE' || item.option.selection === 'MULTIPLEAUTOCOMPLETE'\"\n [required]=\"item.required\"\n hideInlineError>\n </sd-select>\n } @else if (item.type === 'lazy-values') {\n <sd-select\n [autoId]=\"_autoId + 'ext-' + item.field\"\n size=\"sm\"\n [label]=\"item.title\"\n [items]=\"item.option.items\"\n [valueField]=\"item.option.valueField\"\n [displayField]=\"item.option.displayField\"\n [(model)]=\"_workingExternalFilter[item.field]\"\n appearance=\"outline\"\n [multiple]=\"item.option.selection === 'MULTIPLE'\"\n [required]=\"item.required\"\n hideInlineError>\n </sd-select>\n } @else if (item.type === 'custom' && item.filterDef) {\n <ng-container\n *ngTemplateOutlet=\"\n item.filterDef;\n context: { externalFilter: _workingExternalFilter, autoId: _autoId + 'ext-' + item.field }\n \">\n </ng-container>\n }\n </div>\n }\n </section>\n }\n\n <!-- ============================ -->\n <!-- 2. Custom filterDef templates -->\n <!-- ============================ -->\n @if (_filterDefs.length) {\n <section class=\"mobile-filter-section\">\n @for (def of _filterDefs; track def.sdTableFilterDef()) {\n <div class=\"mobile-filter-row\" [attr.data-autoid]=\"_autoId + 'def-' + def.sdTableFilterDef()\">\n <ng-container\n *ngTemplateOutlet=\"def.templateRef!; context: { externalFilter: _workingExternalFilter }\">\n </ng-container>\n </div>\n }\n </section>\n }\n\n <!-- ============================ -->\n <!-- 3. Column filters -->\n <!-- ============================ -->\n @if (_columns.length) {\n <section class=\"mobile-filter-section\">\n @for (column of _columns; track column.field) {\n <div class=\"mobile-filter-row\" [attr.data-autoid]=\"_autoId + 'col-' + column.field\">\n <column-filter\n [autoId]=\"_autoId + 'col'\"\n [column]=\"column\"\n [columnFilter]=\"_workingColumnFilter\"\n [operator]=\"$any(_workingColumnOperator[column.field])\"\n (operatorChange)=\"_workingColumnOperator[column.field] = $event!\"\n [cacheValues]=\"_cacheValues\"\n isMobile>\n </column-filter>\n </div>\n }\n </section>\n }\n </div>\n\n <ng-container sdFooter>\n <div class=\"mobile-filter-footer\">\n <sd-button\n [autoId]=\"_autoId + 'cancel'\"\n class=\"mobile-filter-action\"\n (click)=\"onCancel()\"\n [title]=\"'core.confirm.no' | translate\"\n type=\"link\"\n color=\"secondary\">\n </sd-button>\n <sd-button\n [autoId]=\"_autoId + 'apply'\"\n class=\"mobile-filter-action\"\n (click)=\"onApply()\"\n [title]=\"'core.confirm.yes' | translate\"\n type=\"fill\"\n color=\"primary\">\n </sd-button>\n </div>\n </ng-container>\n</sd-side-drawer>\n","import { Pipe, PipeTransform } from '@angular/core';\n// import hash from 'object-hash';\nimport { Utilities } from '@sdcorejs/utils/fns';\nimport { SdTableAction, SdTableActionNormal } from '../../models/table-option-selector.model';\nimport { SdTableItem } from '../../models/table-item.model';\nimport { SdButton } from '@sdcorejs/angular/components/button';\nimport { SdUnwrapSignal } from '@sdcorejs/angular/utilities/models';\n@Pipe({\n name: 'actionFilter',\n})\nexport class ActionFilterPipe implements PipeTransform {\n #convert = (action: SdTableAction): Action => {\n if ('children' in action) {\n return {\n variant: 'children',\n title: action.title,\n icon: action.icon,\n fontSet: action.fontSet,\n tooltip: action.tooltip,\n color: action.color,\n type: action.type,\n children: action.children.map(e => ({\n variant: 'normal',\n title: e.title,\n icon: e.icon,\n color: action.color,\n type: action.type,\n fontSet: e.fontSet,\n tooltip: e.tooltip,\n click: e.click,\n })),\n };\n }\n return {\n variant: 'normal',\n title: action.title,\n icon: action.icon,\n color: action.color,\n type: action.type,\n fontSet: action.fontSet,\n tooltip: action.tooltip,\n click: action.click,\n };\n };\n transform = (selectedItems: SdTableItem[] | undefined, actions: SdTableAction[] | undefined): Action[] => {\n const results: SdTableAction[] = [];\n if (!actions?.length || !selectedItems?.length) {\n return [];\n }\n for (const action of actions || []) {\n if ('children' in action) {\n const children: SdTableActionNormal[] = [];\n for (const childAction of action.children) {\n const key = Utilities.hash(childAction);\n if (selectedItems.every(e => e?.meta?.selector?.actions?.includes(key))) {\n children.push(childAction);\n }\n }\n if (children.length > 0) {\n results.push({ ...action, children });\n }\n } else {\n const key = Utilities.hash(action);\n if (selectedItems.every(e => e?.meta?.selector?.actions?.includes(key))) {\n results.push(action);\n }\n }\n }\n return results.map(result => this.#convert(result));\n };\n}\n\nexport type Action<T = any> = ActionNormal<T> | ActionChildren<T>;\n\ninterface ActionNormal<T = any> {\n variant: 'normal';\n icon?: string;\n fontSet?: SdUnwrapSignal<SdButton['fontSet']>;\n tooltip?: SdUnwrapSignal<SdButton['tooltip']>;\n title?: SdUnwrapSignal<SdButton['title']>;\n color?: SdUnwrapSignal<SdButton['color']>;\n type?: SdUnwrapSignal<SdButton['type']>;\n click: (selectedItems?: T[]) => void;\n}\n\ninterface ActionChildren<T = any> {\n variant: 'children'\n icon?: string;\n fontSet?: SdUnwrapSignal<SdButton['fontSet']>;\n tooltip?: SdUnwrapSignal<SdButton['tooltip']>;\n title?: SdUnwrapSignal<SdButton['title']>;\n color?: SdUnwrapSignal<SdButton['color']>;\n type?: SdUnwrapSignal<SdButton['type']>;\n children: ActionNormal<T>[];\n}\n","import { ChangeDetectionStrategy, Component, computed, inject, input, output } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { SdButton } from '@sdcorejs/angular/components/button';\nimport { I18nService } from '@sdcorejs/angular/i18n';\nimport { SdQuickAction } from '@sdcorejs/angular/components/quick-action';\nimport { SdTableItem } from '../../models/table-item.model';\nimport { SdTableOption } from '../../models/table-option.model';\nimport { Action, ActionFilterPipe } from './action-filter.pipe';\n\n@Component({\n selector: 'selector-action',\n templateUrl: './selector-action.component.html',\n styleUrls: ['./selector-action.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatIconModule, MatMenuModule, SdButton, SdQuickAction, ActionFilterPipe],\n})\nexport class SelectorActionComponent {\n // ==========================================\n // 1. SIGNAL INPUTS / OUTPUTS\n // ==========================================\n tableOption = input<SdTableOption | undefined>(undefined);\n selectedTableItems = input<SdTableItem[] | undefined>(undefined);\n clear = output<void>();\n\n // ==========================================\n // 2. INJECT\n // ==========================================\n readonly #i18n = inject(I18nService);\n\n // ==========================================\n // 3. COMPUTED\n // ==========================================\n message = computed<string>(() => {\n const msg = this.tableOption()?.selector?.message;\n if (!msg) return this.#i18n.t('core.component.table.selector-action.default-msg');\n if (typeof msg === 'function') {\n return msg(this.selectedTableItems()?.map(e => e.data));\n }\n return msg;\n });\n\n opened = computed(() => !!this.selectedTableItems()?.length);\n\n // ==========================================\n // 4. HANDLERS\n // ==========================================\n onClear = () => this.clear.emit();\n\n onClickAction = (action: Action) => {\n if (action?.variant === 'normal' && action.click) {\n action.click(this.selectedTableItems()?.map(e => e.data));\n }\n };\n}\n","@let _actions = selectedTableItems() | actionFilter: tableOption()?.selector?.actions;\n@let _selected = selectedTableItems();\n\n<sd-quick-action [opened]=\"opened()\">\n <div class=\"d-flex align-items-center\" sdMessage>\n <div class=\"c-bg-length\">\n <span class=\"c-length\">{{ _selected?.length }}</span>\n </div>\n <div class=\"c-message\">\n {{ message() }}\n </div>\n </div>\n\n <div class=\"d-flex align-items-center mr-8\" sdAction>\n @for (action of _actions; track $index) {\n @if (action.variant === 'normal') {\n <sd-button\n class=\"ml-4\"\n [tooltip]=\"action.tooltip\"\n [prefixIcon]=\"action.icon\"\n [color]=\"action.color\"\n [type]=\"action.type || 'light'\"\n [fontSet]=\"action.fontSet\"\n [title]=\"action.title\"\n (click)=\"onClickAction(action)\"></sd-button>\n } @else if (action.variant === 'children') {\n <sd-button\n class=\"ml-4\"\n [tooltip]=\"action.tooltip\"\n [prefixIcon]=\"action.icon || 'more_vert'\"\n [color]=\"action.color || 'secondary'\"\n [type]=\"action.type || 'light'\"\n [fontSet]=\"action.fontSet || 'material-icons-outlined'\"\n [title]=\"action.title\"\n [matMenuTriggerFor]=\"menu\">\n </sd-button>\n <mat-menu #menu=\"matMenu\">\n <span>\n @for (child of action.children; track $index) {\n <button mat-menu-item (click)=\"onClickAction(child)\">\n @if (child.icon) {\n <mat-icon [fontSet]=\"child.fontSet || 'material-icons-outlined'\" class=\"c-icon\">{{ child.icon }}</mat-icon>\n }\n <span> {{ child.title }}</span>\n </button>\n }\n </span>\n </mat-menu>\n }\n }\n <!-- Nút close luôn hiện kể cả không có action — đảm bảo user có lối thoát clear selection -->\n <sd-button class=\"ml-4\" prefixIcon=\"close\" color=\"secondary\" type=\"outline\" (click)=\"onClear()\" width=\"35px\"></sd-button>\n </div>\n</sd-quick-action>\n","import { InjectionToken } from '@angular/core';\nimport { SdTableOptionPaginate } from '../models/table-option-paginate.model';\nimport { SdTableOptionFilter } from '../services/table-filter/table-filter.model';\nimport { Operator } from '@sdcorejs/utils/models';\nimport { SdTableColumn } from '../models';\n\nexport interface ISdTableConfiguration {\n paginate?: {\n /** Số dòng mỗi trang. */\n pageSize?: SdTableOptionPaginate['pageSize'];\n\n /** Danh sách các tuỳ chọn số dòng/trang mà người dùng có thể chọn. */\n pages?: SdTableOptionPaginate['pages'];\n\n showFirstLastButtons?: SdTableOptionPaginate['showFirstLastButtons'];\n };\n filter?: {\n /** Ẩn bộ lọc dưới cột, nếu không cấu hình thì giá trị mặc định là false */\n hideInlineFilter?: SdTableOptionFilter['hideInlineFilter'];\n\n /** Số lượng external filter mỗi dòng, mặc định là 6 */\n externalFilterPerRow?: SdTableOptionFilter['externalFilterPerRow'];\n\n /** Kích hoạt chế độ lọc thủ công, hiển thị nút áp dụng, mặc định là false */\n manualFilter?: SdTableOptionFilter['manualFilter'];\n\n /** Ẩn toolbar (xóa bộ lọc, thiết lập) của external filter, khi có ít external filter user không cần chức năng này, mặc định là false */\n hideExternalFilterToolbar?: SdTableOptionFilter['hideExternalFilterToolbar'];\n\n operator?: {\n list?: Partial<Record<SdTableColumn['type'], Operator[]>>;\n default?: Partial<Record<SdTableColumn['type'], Operator>>;\n };\n };\n images?: {\n filterRequired?: string; // Link ảnh cho table ở trạng thái cần nhập filter\n dataEmpty?: string; // Link ảnh cho table ở trạng thái không có dữ liệu\n filterEmpty?: string; // Link ảnh cho table ở trạng thái filter không có dữ liệu\n };\n}\n\nexport const DEFAULT_TABLE_CONFIG: ISdTableConfiguration = {\n paginate: {\n pageSize: 20,\n pages: [20, 50, 100, 200],\n },\n};\n\nexport const SD_TABLE_CONFIGURATION = new InjectionToken<ISdTableConfiguration>('sd-table.configuration');\n","import { Inject, Injectable, Optional } from '@angular/core';\nimport { SdStorage, SdStorageService } from '@sdcorejs/angular/services';\nimport { Subject } from 'rxjs';\nimport { ConfiguredColumn, ConfiguredTable, ConfiguredTableResult } from '../models/table-option-config.model';\nimport { SdTableOption } from '../models/table-option.model';\nimport { ISdTableConfiguration, SD_TABLE_CONFIGURATION } from '../configurations';\nimport { Utilities } from '@sdcorejs/utils/fns';\n\n@Injectable()\nexport class ConfigService {\n #COLUMNS = {\n SUBINFORMATION: 'sdSubInformationAction',\n COMMAND: 'sdCommand',\n SELECTION: 'sdSelection',\n GROUP: 'sdGroup',\n REORDER: 'sdReorder',\n INDEX: 'sdIndex',\n TREE_TOGGLE: 'sdTreeToggle',\n FILLER: 'sdFiller',\n };\n #prefix = 'TABLE_CONFIG';\n #storage?: SdStorage<ConfiguredTable>;\n #widthChange = new Subject<{ field: string; width: string }>();\n widthChange$ = this.#widthChange.asObservable();\n\n constructor(\n private storageService: SdStorageService,\n @Inject(SD_TABLE_CONFIGURATION) @Optional() public tableConfiguration: ISdTableConfiguration\n ) {}\n\n #loadConfiguredTable = (option: SdTableOption): SdStorage<ConfiguredTable> => {\n // Nếu không có key thì không lấy được setting\n if (!option?.key) {\n return this.storageService.create<ConfiguredTable>(Utilities.hash(option), {\n type: 'session', // Nếu không có key thì lưu theo session\n default: this.#default(option),\n });\n }\n // Key của setting là tổ hợp từ key truyền vào và prefix để tránh chung key với các tính năng khác cũng dùng key trong core table\n return this.storageService.create<ConfiguredTable>(\n { prefix: this.#prefix, key: option?.key },\n {\n default: this.#default(option),\n }\n );\n };\n\n loadConfiguredTable = (option: SdTableOption) => {\n // Nếu không có key thì trả về thông tin mặc định\n if (!option?.key) {\n return this.#default(option);\n }\n const storage = this.#loadConfiguredTable(option)!;\n return storage.get();\n };\n\n loadConfigurationResult = (option: SdTableOption, configuration: ConfiguredTable): ConfiguredTableResult => {\n const result: ConfiguredTableResult = {\n column: {},\n fixedColumn: {},\n firstColumns: [],\n secondColumns: [],\n firstHeaders: [],\n secondHeaders: [],\n displayedColumns: [],\n displayedFooters: [],\n multipleHeader: false,\n };\n const { selector, group } = option || {};\n const commands = option?.command?.commands || option?.commands || [];\n const isCommandRight = option?.command?.align === 'right' || false; // 👈 thêm dòng này\n const columns = option?.columns?.filter(e => !e.hidden) || [];\n if (selector?.visible) {\n result.firstHeaders.push(this.#COLUMNS.SELECTION);\n result.displayedColumns.push(this.#COLUMNS.SELECTION);\n }\n if (option.tree) {\n result.firstHeaders.push(this.#COLUMNS.TREE_TOGGLE);\n result.displayedColumns.push(this.#COLUMNS.TREE_TOGGLE);\n }\n // 👇 Chỉ push vào đầu nếu là left (mặc định)\n if (commands?.length && !isCommandRight) {\n result.firstHeaders.push(this.#COLUMNS.COMMAND);\n result.displayedColumns.push(this.#COLUMNS.COMMAND);\n }\n // why: group header row dùng matRowDef RIÊNG với column list ['sdGroupHeader'] qua predicate\n // when:isGroupHeader — KHÔNG inject vào displayedColumns/firstHeaders để tránh colspan trick\n // (TDs khác vẫn render gây overflow row). Data row dùng displayedColumns nguyên vẹn.\n // group option vẫn cần khai báo (qua option.group) để SdGroupPipe biết bucket items.\n // sdIndex đặt sau selector / tree / command-left / group, ngay trước data columns\n if (option.index?.enabled) {\n result.firstHeaders.push(this.#COLUMNS.INDEX);\n result.displayedColumns.push(this.#COLUMNS.INDEX);\n }\n configuration?.columns\n ?.filter(col => !col.invisible)\n .forEach(col => {\n // Kiểm tra column trong config có còn được khai báo trong option\n // Nếu không thì ẩn column đó đi\n const column = columns.find(e => e.field === col.origin.field);\n if (column) {\n const title =\n typeof column.title === 'string' ? col.title || col.origin.title : { ...column.title, title: col.title || col.origin.title };\n const cell = {\n ...column.cell,\n truncate: {\n ...column.cell?.truncate,\n enable: col?.truncate ?? col.origin.truncate,\n type: column?.cell?.truncate?.type ?? 'tooltip',\n },\n };\n\n result.column[col.origin.field] = {\n title: col.title || col.origin.title,\n width: col.width || col.origin.width,\n };\n\n if (col.fixed) {\n result.fixedColumn[col.origin.field] = {\n title: col.title || col.origin.title,\n width: col.width || col.origin.width,\n };\n }\n\n result.firstColumns.push({\n ...column,\n title: title,\n width: col.width || col.origin.width,\n cell: cell,\n });\n result.firstHeaders.push(col.origin.field);\n result.displayedColumns.push(col.origin.field);\n\n if (column.type === 'children') {\n column.children?.forEach(childColumn => {\n result.secondColumns.push(childColumn);\n result.secondHeaders.push(childColumn.field);\n result.displayedColumns.push(childColumn.field);\n });\n }\n }\n });\n // Nếu có thêm các column mới, chèn các column đó vào cuối\n columns\n ?.filter(column => !configuration?.columns?.some(e => e.origin.field === column.field))\n .forEach(column => {\n result.firstColumns.push({\n ...column,\n title: column.title,\n width: column.width,\n });\n result.firstHeaders.push(column.field);\n result.displayedColumns.push(column.field);\n if (column.type === 'children') {\n column.children?.forEach(childColumn => {\n result.secondColumns.push(childColumn);\n result.secondHeaders.push(childColumn.field);\n result.displayedColumns.push(childColumn.field);\n });\n }\n });\n if (option.expand) {\n result.firstHeaders.push(this.#COLUMNS.SUBINFORMATION);\n result.displayedColumns.push(this.#COLUMNS.SUBINFORMATION);\n }\n if (commands?.length && isCommandRight) {\n result.firstHeaders.push(this.#COLUMNS.COMMAND);\n result.displayedColumns.push(this.#COLUMNS.COMMAND);\n }\n // why: filler column ở cuối hấp thụ leftover space — opt-in qua option.filler.enabled.\n // Khi bật, ngăn các cột utility (selection, index, command) bị table-layout auto stretch trên màn rộng.\n if (option.filler?.enabled) {\n result.firstHeaders.push(this.#COLUMNS.FILLER);\n result.displayedColumns.push(this.#COLUMNS.FILLER);\n }\n result.multipleHeader = result.secondHeaders.length > 0;\n // Sub infomation không thể có footer; filler cũng không cần footer cell.\n result.displayedFooters = result.displayedColumns.filter(\n val => val !== this.#COLUMNS.SUBINFORMATION && val !== this.#COLUMNS.TREE_TOGGLE && val !== this.#COLUMNS.FILLER\n );\n if (option.filler?.enabled) {\n // Footer cũng cần filler cuối để giữ width đồng bộ với data row\n result.displayedFooters.push(this.#COLUMNS.FILLER);\n }\n if (option?.rowReorder?.enabled) {\n result.displayedColumns.unshift(this.#COLUMNS.REORDER);\n result.firstHeaders.unshift(this.#COLUMNS.REORDER);\n result.displayedFooters.unshift(this.#COLUMNS.REORDER);\n }\n return result;\n };\n\n init = (tableOption: SdTableOption) => {\n this.#storage = this.#loadConfiguredTable(tableOption);\n return this.#storage;\n };\n\n persistColumnWidth = (field: string, width: string) => {\n if (!this.#storage) return;\n const current = this.#storage.get();\n const columns = current?.columns ? [...current.columns] : [];\n const idx = columns.findIndex(c => c.origin.field === field);\n if (idx < 0) {\n // Cột chưa có trong storage (vd cột mới thêm vào option) — bỏ qua;\n // sẽ được pick up qua flow loadConfigurationResult bình thường.\n return;\n }\n columns[idx] = { ...columns[idx], width };\n this.#storage.setSilent({ ...current, columns });\n this.#widthChange.next({ field, width });\n };\n\n #default = (tableOption: SdTableOption): ConfiguredTable => {\n const columns: ConfiguredColumn[] =\n tableOption?.columns\n ?.filter(e => !e.hidden)\n .map(e => ({\n origin: {\n field: e.field,\n title: typeof e.title === 'string' ? e.title : e.title?.title,\n width: e.width,\n invisible: e.invisible,\n fixed: e.fixed,\n truncate: e?.cell?.truncate?.enable,\n },\n title: typeof e.title === 'string' ? e.title : e.title?.title,\n width: e.width,\n invisible: e.invisible,\n fixed: e.fixed,\n truncate: e?.cell?.truncate?.enable,\n })) || [];\n return {\n columns,\n };\n };\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { DragDropModule, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { CdkTableModule } from '@angular/cdk/table';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectorRef,\n Component,\n inject,\n input,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { fromEvent } from 'rxjs';\nimport { FormsModule } from '@angular/forms';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatTable, MatTableModule } from '@angular/material/table';\nimport { SdButton } from '@sdcorejs/angular/components/button';\nimport { SdModal } from '@sdcorejs/angular/components/modal';\nimport { SdInput, SdSwitch } from '@sdcorejs/angular/forms';\nimport { I18nService, TranslatePipe } from '@sdcorejs/angular/i18n';\nimport { SdStorage } from '@sdcorejs/angular/services';\nimport { SdConfirmService } from '@sdcorejs/angular/services/confirm';\nimport { SdTableColumn } from '../../models/table-column.model';\nimport { ConfiguredTable, ConfiguredTableResult } from '../../models/table-option-config.model';\nimport { SdTableOption } from '../../models/table-option.model';\nimport { ConfigService } from '../../services/config.service';\n\n@Component({\n selector: 'config',\n templateUrl: './config.component.html',\n styleUrls: ['./config.component.scss'],\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n MatTableModule,\n MatSlideToggleModule,\n CdkTableModule,\n DragDropModule,\n SdButton,\n SdInput,\n SdModal,\n SdSwitch,\n TranslatePipe,\n ],\n providers: [ConfigService],\n})\n// eslint-disable-next-line @angular-eslint/component-class-suffix\nexport class ConfigComponent {\n // ==========================================\n // 1. SIGNAL INPUTS / OUTPUTS\n // ==========================================\n tableOption = input<SdTableOption | undefined>(undefined);\n changes = output<ConfiguredTableResult>();\n\n // ==========================================\n // 2. SIGNAL QUERIES\n // ==========================================\n modal = viewChild<SdModal>(SdModal);\n table = viewChild.required<MatTable<SdTableColumn>>(MatTable);\n\n // ==========================================\n // 3. INJECT\n // ==========================================\n readonly #ref = inject(ChangeDetectorRef);\n readonly #confirmService = inject(SdConfirmService);\n readonly #configService = inject(ConfigService);\n readonly #i18n = inject(I18nService);\n\n // ==========================================\n // 4. STATE\n // ==========================================\n configuration = signal<ConfiguredTable | undefined>(undefined);\n // dragDisabled không nên là signal (mutated trong drag handlers, không trigger render).\n dragDisabled = true;\n #setting?: SdStorage<ConfiguredTable>;\n\n // ==========================================\n // 5. WINDOW MOUSEUP — tự destroy qua takeUntilDestroyed (thay @HostListener)\n // ==========================================\n constructor() {\n fromEvent(window, 'mouseup')\n .pipe(takeUntilDestroyed())\n .subscribe(() => {\n this.dragDisabled = true;\n });\n }\n\n // ==========================================\n // 6. PUBLIC API\n // ==========================================\n open = async () => {\n const opt = this.tableOption();\n if (!opt) return;\n this.#setting = this.#configService.init(opt)!;\n this.configuration.set(this.#setting?.get());\n this.modal()?.open();\n };\n\n close = () => {\n this.modal()?.close();\n };\n\n onSave = () => {\n const cfg = this.configuration();\n if (cfg) this.#setting?.set(cfg);\n this.modal()?.close();\n this.#ref.detectChanges();\n };\n\n onReset = async () => {\n this.#confirmService.confirm(this.#i18n.t('core.component.table.config.confirm-reset')).then(() => {\n this.#setting?.remove();\n this.modal()?.close();\n this.#ref.detectChanges();\n });\n };\n\n dropTable(event: any) {\n const cols = this.configuration()?.columns;\n if (!cols) return;\n moveItemInArray(cols, event.previousIndex, event.currentIndex);\n this.table().renderRows();\n }\n\n handleMouseDown() {\n this.dragDisabled = false;\n }\n\n handleMouseUp() {\n this.dragDisabled = true;\n }\n}\n","@let _configuration = configuration();\n\n<sd-modal width=\"sm\" [title]=\"'core.component.table.setup' | translate\" #modal>\n @if (_configuration) {\n <div class=\"c-container\">\n <div class=\"c-table\" style=\"max-height: 70vh\">\n <table\n mat-table\n [dataSource]=\"_configuration.columns!\"\n cdkDropList\n [cdkDropListData]=\"_configuration.columns\"\n (cdkDropListDropped)=\"dropTable($event)\">\n <ng-container matColumnDef=\"invisible\">\n <th mat-header-cell class=\"c-th text-center px-4\" *matHeaderCellDef style=\"width: 96px\">\n {{ 'core.component.form-builder.display' | translate }}\n </th>\n <td class=\"text-center px-4\" mat-cell *matCellDef=\"let item\">\n <div class=\"d-flex\" style=\"gap: 8px\">\n <div class=\"c-handle\" (mousedown)=\"handleMouseDown()\" (mouseup)=\"handleMouseUp()\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#5f6368\">\n <path d=\"M0 0h24v24H0V0z\" fill=\"none\" />\n <path\n d=\"M11 18c0 1.1-.9 2-2 2s-2-.9-2-2 .9-2 2-2 2 .9 2 2zm-2-8c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0-6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm6 4c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z\" />\n </svg>\n </div>\n <sd-switch [model]=\"!item.invisible\" (modelChange)=\"item.invisible = !item.invisible\" />\n </div>\n </td>\n </ng-container>\n <ng-container matColumnDef=\"title\">\n <th mat-header-cell class=\"c-th px-4\" *matHeaderCellDef>\n {{ 'core.component.table.column-header' | translate }}\n </th>\n <td class=\"px-4\" mat-cell *matCellDef=\"let item\">\n <sd-input class=\"pb-4\" [placeholder]=\"item?.origin?.title\" [(model)]=\"item.title\" hideInlineError></sd-input>\n </td>\n </ng-container>\n <ng-container matColumnDef=\"width\">\n <th mat-header-cell class=\"c-th px-4\" *matHeaderCellDef style=\"width: 80px\">\n {{ 'core.component.table.width' | translate }}\n </th>\n <td class=\"px-4\" mat-cell *matCellDef=\"let item\">\n <sd-input class=\"pb-4\" [placeholder]=\"item?.origin?.width\" [(model)]=\"item.width\" hideInlineError></sd-input>\n </td>\n </ng-container>\n <ng-container matColumnDef=\"fixed\">\n <th mat-header-cell class=\"c-th text-center px-4\" *matHeaderCellDef style=\"width: 80px\">\n {{ 'core.component.table.fixed' | translate }}\n </th>\n <td class=\"text-center px-4\" mat-cell *matCellDef=\"let item\">\n <sd-switch [(model)]=\"item.fixed\" />\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"truncate\">\n <th mat-header-cell class=\"c-th text-center px-4\" *matHeaderCellDef style=\"width: 100px\">\n {{ 'core.component.table.char-limit' | translate }}\n </th>\n <td class=\"text-center px-4\" mat-cell *matCellDef=\"let item\">\n <sd-switch [(model)]=\"item.truncate\" />\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"['invisible', 'title', 'width', 'fixed', 'truncate']; sticky: true\"></tr>\n <tr\n mat-row\n *matRowDef=\"let row; columns: ['invisible', 'title', 'width', 'fixed', 'truncate']\"\n cdkDrag\n [cdkDragData]=\"row\"\n cdkDragLockAxis=\"y\"\n [cdkDragDisabled]=\"dragDisabled\">\n </tr>\n </table>\n </div>\n </div>\n }\n <ng-container sdFooter>\n <sd-button class=\"mr-8\" (click)=\"close()\" [title]=\"'core.component.table.skip' | translate\" color=\"secondary\"> </sd-button>\n <sd-button class=\"mr-8\" (click)=\"onReset()\" [title]=\"'core.component.form-builder.default' | translate\" color=\"primary\"> </sd-button>\n <sd-button (click)=\"onSave()\" [title]=\"'core.component.table.apply' | translate\" type=\"fill\" color=\"primary\"> </sd-button>\n </ng-container>\n</sd-modal>\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Pipe,\n PipeTransform,\n computed,\n effect,\n inject,\n input,\n signal,\n viewChild,\n} from '@angular/core';\nimport { SdBadge } from '@sdcorejs/angular/components/badge';\nimport { SdSafeHtmlPipe } from '@sdcorejs/angular/pipes';\nimport { SdTooltipDirective } from '@sdcorejs/angular/directives';\nimport { SdTableColumn } from '../../../models/table-column.model';\nimport { SdTableItem } from '../../../models/table-item.model';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n@Pipe({\n name: 'asString',\n standalone: true,\n})\nexport class ToStringPipe implements PipeTransform {\n transform(value: any): string {\n return value !== null && value !== undefined ? String(value) : '';\n }\n}\n\n@Component({\n selector: 'view',\n templateUrl: './view.component.html',\n styleUrls: ['./view.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [CommonModule, SdBadge, SdSafeHtmlPipe, SdTooltipDirective, ToStringPipe, TranslatePipe],\n})\nexport class ViewComponent {\n // Inject\n #cdr = inject(ChangeDetectorRef);\n\n contentContainer = viewChild<ElementRef<HTMLElement>>('contentContainer');\n\n isCollapsed = signal<boolean>(true);\n isOverflowing = signal<boolean>(false);\n\n // Inputs\n autoId = input.required<string | undefined | null>();\n column = input.required<SdTableColumn>();\n item = input.required<SdTableItem>();\n\n truncateEnable = computed(() => {\n return this.column()?.cell?.truncate?.enable;\n });\n\n truncateWidth = computed(() => {\n return this.column()?.width;\n });\n\n constructor() {\n effect(() => {\n this.truncateWidth();\n const container = this.contentContainer();\n if (container) {\n this.#checkOverflow(container.nativeElement);\n }\n });\n }\n\n #checkOverflow = (element: HTMLElement) => {\n // Ném vào queue để đợi DOM render\n setTimeout(() => {\n const hasOverflow = element.scrollWidth > element.clientWidth || element.scrollHeight > element.clientHeight;\n if (this.isOverflowing() !== hasOverflow) {\n this.isOverflowing.set(hasOverflow);\n this.#cdr.markForCheck();\n }\n });\n };\n\n toggle = () => {\n this.isCollapsed.update(current => !current);\n };\n}\n","@let _column = column();\n@let _item = item();\n@let _autoId = autoId();\n\n@let view = _item.meta.display[_column.field];\n@let _truncateEnable = truncateEnable();\n@let _truncateWidth = truncateWidth();\n@let isExpandByMore = isOverflowing() && _column?.cell?.truncate?.type === 'more';\n@let isExpandByTooltip = isOverflowing() && _column?.cell?.truncate?.type === 'tooltip';\n\n@if (view) {\n @if (view.isHtml) {\n @if (view.click) {\n <div\n #contentContainer\n [attr.data-autoId]=\"autoId()\"\n (click)=\"view.click()\"\n class=\"text-break cursor-pointer\"\n [sdTooltip]=\"view.tooltip || (isExpandByTooltip ? htmlClickTooltip : '')\"\n [style]=\"view.cellStyle\"\n [style.max-width]=\"_truncateWidth\"\n [class.c-ellipsis-html]=\"_truncateEnable\"\n [innerHTML]=\"view.data | sdSafeHtml\"\n aria-hidden=\"true\"></div>\n\n <ng-template #htmlClickTooltip>\n <div\n class=\"c-tooltip-inner-content\"\n [style.max-width]=\"'calc(' + _truncateWidth + ' * 1.5)'\"\n style=\"max-height: 200px; overflow-y: auto; scrollbar-width: thin\">\n <div [innerHTML]=\"view.data | sdSafeHtml\"></div>\n </div>\n </ng-template>\n } @else {\n <!-- Nếu column có bật \"giới hạn ký tự\" -->\n @if (_truncateEnable) {\n <div\n #contentContainer\n [style.max-width]=\"_truncateWidth\"\n [class.c-ellipsis-html]=\"isCollapsed()\"\n [attr.data-autoId]=\"autoId()\"\n class=\"text-break\"\n [sdTooltip]=\"view.tooltip || (isExpandByTooltip ? htmlTooltip : '')\"\n containerClass=\"c-tooltip-html-d374bd93-f136-425c-bcc2-2d88cb163e44\"\n container=\"body\"\n placement=\"bottom\"\n [sdTooltipDelay]=\"100\"\n [style]=\"view.cellStyle\"\n [innerHTML]=\"view.data | sdSafeHtml\"></div>\n\n <ng-template #htmlTooltip>\n <div\n class=\"c-tooltip-inner-content\"\n [style.max-width]=\"'calc(' + _truncateWidth + ' * 1.5)'\"\n style=\"max-height: 200px; overflow-y: auto; scrollbar-width: thin\">\n <div [innerHTML]=\"view.data | sdSafeHtml\"></div>\n </div>\n </ng-template>\n\n @if (isExpandByMore) {\n <button (click)=\"toggle()\" class=\"c-collapse\">{{ isCollapsed() ? ('core.component.form-builder.show-more' | translate) : ('core.component.form-builder.show-less' | translate) }}</button>\n }\n } @else {\n <div\n [attr.data-autoId]=\"autoId()\"\n class=\"text-break\"\n [sdTooltip]=\"view.tooltip || ''\"\n [style]=\"view.cellStyle\"\n [innerHTML]=\"view.data | sdSafeHtml\"></div>\n }\n <!-- End -->\n }\n } @else {\n <!-- Nếu là giá trị lấy hiển thị lấy trực tiếp từ field -->\n @if (view.badge) {\n @if (view.data) {\n <sd-badge\n [attr.data-autoId]=\"autoId()\"\n [type]=\"view.badge.type\"\n [title]=\"view.data\"\n [color]=\"view.badge.color\"\n [icon]=\"view.badge.icon\"\n [sdTooltip]=\"view.tooltip || ''\"\n (click)=\"!!view.click && view.click()\">\n </sd-badge>\n }\n } @else {\n @if (view.click) {\n <div\n #contentContainer\n class=\"text-break\"\n [style]=\"view.cellStyle\"\n [style.max-width]=\"_truncateWidth\"\n [class.c-ellipsis]=\"_truncateEnable\"\n [sdTooltip]=\"view.tooltip || (isExpandByTooltip ? view.data : '') | asString\">\n <a [attr.data-autoId]=\"_autoId\" href=\"javascript:;\" (click)=\"view.click()\">\n {{ view.data }}\n </a>\n </div>\n } @else {\n <!-- Nếu column có bật \"giới hạn ký tự\" -->\n @if (_truncateEnable) {\n <div\n #contentContainer\n [attr.data-autoId]=\"_autoId\"\n class=\"text-break\"\n [style]=\"view.cellStyle\"\n [style.max-width]=\"_truncateWidth\"\n [class.c-ellipsis]=\"isCollapsed()\"\n [sdTooltip]=\"view.tooltip || (isExpandByTooltip ? view.data : '') | asString\">\n {{ view.data }}\n </div>\n\n <!-- Nếu option xem full thông tin là \"btn xem thêm\" -->\n @if (isExpandByMore) {\n <button (click)=\"toggle()\" class=\"c-collapse\">{{ isCollapsed() ? ('core.component.form-builder.show-more' | translate) : ('core.component.form-builder.show-less' | translate) }}</button>\n }\n } @else {\n <div [attr.data-autoId]=\"_autoId\" class=\"text-break\" [style]=\"view.cellStyle\" [sdTooltip]=\"view.tooltip || ''\">\n {{ view.data }}\n </div>\n }\n <!-- End -->\n }\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n input,\n signal,\n TemplateRef,\n viewChild,\n computed,\n effect,\n inject,\n ChangeDetectorRef,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SdTableCellDefDirective } from '../../directives/sd-table-cell-def.directive';\nimport { SdTableColumn } from '../../models/table-column.model';\nimport { SdTableItem } from '../../models/table-item.model';\nimport { SdTooltipDirective } from '@sdcorejs/angular/directives';\nimport { Utilities } from '@sdcorejs/utils/fns';\nimport { ViewComponent } from './view/view.component';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n\n@Component({\n selector: 'desktop-cell',\n templateUrl: './desktop-cell.component.html',\n styleUrls: ['./desktop-cell.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [CommonModule, SdTooltipDirective, ViewComponent, TranslatePipe],\n})\nexport class DesktopCellComponent {\n // Inject\n #cdr = inject(ChangeDetectorRef);\n\n // ViewChild\n contentContainer = viewChild<ElementRef<HTMLElement>>('contentContainer');\n\n // Inputs\n column = input.required<SdTableColumn>();\n item = input.required<SdTableItem>();\n cellDef = input.required<Record<string, SdTableCellDefDirective>>({});\n\n value = computed(() => {\n return Utilities.getNestedValue(this.item()?.data, this.column()?.field);\n });\n\n key = computed(() => {\n const data = this.item()?.data;\n return data?.id?.toString() || data?.code?.toString() || data?.value?.toString() || '';\n });\n\n autoId = computed(() => {\n const column = this.column();\n const key = this.key();\n return `${key}_${column.field}`;\n });\n\n truncateEnable = computed(() => {\n return this.column()?.cell?.truncate?.enable;\n });\n\n truncateWidth = computed(() => {\n return this.column()?.width;\n });\n\n // why: widen to TemplateRef<any> so ng-packagr doesn't try to surface the\n // directive's internal Context type through this public computed.\n templateRef = computed<TemplateRef<any> | undefined>(() => {\n const cellDef = this.cellDef();\n const column = this.column();\n return cellDef[column?.field]?.templateRef || column?.cell?.templateRef;\n });\n\n isCollapsed = signal<boolean>(true);\n isOverflowing = signal<boolean>(false);\n\n constructor() {\n effect(() => {\n this.truncateWidth();\n const container = this.contentContainer();\n if (container) {\n this.#checkOverflow(container.nativeElement);\n }\n });\n }\n\n toggle = () => {\n this.isCollapsed.update(current => !current);\n };\n\n #checkOverflow = (element: HTMLElement): void => {\n // Ném vào queue để đợi DOM render\n setTimeout(() => {\n const hasOverflow = element.scrollWidth > element.clientWidth || element.scrollHeight > element.clientHeight;\n if (this.isOverflowing() !== hasOverflow) {\n this.isOverflowing.set(hasOverflow);\n this.#cdr.markForCheck();\n }\n });\n };\n}\n","@let _column = column();\n@let _item = item();\n@let _autoId = autoId();\n\n@let _truncateEnable = truncateEnable();\n@let _truncateWidth = truncateWidth();\n@let isExpandByMore = isOverflowing() && _column?.cell?.truncate?.type === 'more';\n@let isExpandByTooltip = isOverflowing() && _column?.cell?.truncate?.type === 'tooltip';\n\n@let _templateRef = templateRef();\n@let context =\n {\n item: _item.data,\n column: _column,\n autoId: _autoId,\n };\n\n@if (_templateRef) {\n <!-- Nếu column có bật \"giới hạn ký tự\" -->\n @if (_truncateEnable) {\n <div\n #contentContainer\n [style.max-width]=\"_truncateWidth\"\n [class.c-ellipsis-html]=\"isCollapsed()\"\n [sdTooltip]=\"isExpandByTooltip ? htmlTooltip : ''\">\n <ng-container *ngTemplateOutlet=\"_templateRef; context: context\" />\n </div>\n\n <!-- Nếu option xem full thông tin là \"tooltip\" -->\n <ng-template #htmlTooltip>\n <div\n [style.max-width]=\"'calc(' + _truncateWidth + ' * 1.5)'\"\n style=\"max-height: 200px; overflow-y: auto; scrollbar-width: thin\">\n <ng-container *ngTemplateOutlet=\"_templateRef; context: context\" />\n </div>\n </ng-template>\n\n <!-- Nếu option xem full thông tin là \"btn xem thêm\" -->\n @if (isExpandByMore) {\n <button (click)=\"toggle()\" class=\"c-collapse\">\n {{ isCollapsed() ? ('core.component.form-builder.show-more' | translate) : ('core.component.form-builder.show-less' | translate) }}\n </button>\n }\n } @else {\n <ng-container *ngTemplateOutlet=\"_templateRef; context: context\" />\n }\n} @else {\n <view [column]=\"column()\" [item]=\"item()\" [autoId]=\"context.autoId\" />\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { SdTableCommand, SdTableCommandNormal } from '../../../models/table-command.model';\nimport { SdTableItem } from '../../../models/table-item.model';\n\n/**\n * Pipe gộp resolve metadata của 1 command theo row hiện tại — return 1 object\n * chứa `disabled`, `title`, `icon`, và `htmlTemplate` (khi command là child có\n * htmlTemplate). Một lần gọi cho cả 4 truy vấn, template dùng `@let` để alias.\n *\n * Trước đây tách thành 3 pipe `commandDisable` / `commandTitle` / `commandIcon`.\n *\n * @example\n * @let meta = item | command:cmd;\n * <button [disabled]=\"meta.disabled\" [matTooltip]=\"meta.title\">\n * <mat-icon>{{ meta.icon }}</mat-icon>\n * <div [innerHTML]=\"meta.htmlTemplate\"></div>\n * </button>\n */\n@Pipe({ name: 'command' })\nexport class CommandPipe implements PipeTransform {\n transform(item: SdTableItem, command: SdTableCommand): CommandMeta {\n return {\n disabled: this.#disabled(item, command),\n title: this.#title(item, command),\n icon: this.#icon(item, command),\n htmlTemplate: this.#htmlTemplate(item, command),\n };\n }\n\n #disabled = (item: SdTableItem, command: SdTableCommand): boolean => {\n const d = command?.disabled;\n if (d == null) return false;\n return typeof d === 'boolean' ? d : d(item.data);\n };\n\n #title = (item: SdTableItem, command: SdTableCommand): string => {\n if (!command?.title) return '';\n return typeof command.title === 'string' ? command.title : command.title(item.data);\n };\n\n #icon = (item: SdTableItem, command: SdTableCommand): string => {\n if (!command?.icon) return '';\n return typeof command.icon === 'string' ? command.icon : command.icon(item.data);\n };\n\n // Chỉ child command (SdTableCommandNormal) mới có htmlTemplate.\n // Parent (SdTableCommandChildren) không khai báo — trả về undefined.\n #htmlTemplate = (item: SdTableItem, command: SdTableCommand): string | undefined => {\n const tpl = (command as SdTableCommandNormal)?.htmlTemplate;\n return typeof tpl === 'function' ? tpl(item.data) : undefined;\n };\n}\n\nexport interface CommandMeta {\n disabled: boolean;\n title: string;\n icon: string;\n htmlTemplate: string | undefined;\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { StringUtilities } from '@sdcorejs/angular/utilities';\nimport { SdTableCommand, SdTableCommandChildren, SdTableCommandNormal } from '../../../models/table-command.model';\nimport { SdTableItem } from '../../../models/table-item.model';\n\n/**\n * Lọc danh sách commands theo `hidden` (sync / async) + pre-resolve `icon`, `title`, `key`\n * cho từng row. Output dùng trực tiếp trong template không cần thêm pipe phụ.\n *\n * Đã rename từ `commandFilter` → `filter` sau khi gom toàn bộ pipe command vào\n * `components/command/pipes/`.\n *\n * @example\n * @let filteredCommands = item | filter:commands | async;\n */\n@Pipe({ name: 'filter' })\nexport class CommandFilterPipe implements PipeTransform {\n async transform(item: SdTableItem, commands: SdTableCommand[]): Promise<Command[]> {\n const results: Command[] = [];\n if (!commands) return results;\n\n for (const command of commands) {\n if (!(await this.#visible(item, command))) continue;\n\n const icon = this.#icon(item, command);\n const title = this.#title(item, command);\n\n if ('children' in command) {\n const children: CommandNormal[] = [];\n for (const child of command.children) {\n if (!(await this.#visible(item, child))) continue;\n children.push({\n ...child,\n type: 'normal',\n icon: this.#icon(item, child),\n title: this.#title(item, child),\n key: this.#key(item, child),\n });\n }\n if (children.length > 0) {\n results.push({\n ...command,\n type: 'children',\n icon,\n title,\n key: this.#key(item, command),\n children,\n });\n }\n } else {\n results.push({\n ...command,\n type: 'normal',\n icon,\n title,\n key: this.#key(item, command),\n });\n }\n }\n return results;\n }\n\n #visible = async (item: SdTableItem, command: SdTableCommand): Promise<boolean> => {\n const { hidden } = command;\n if (hidden === undefined) return true;\n if (typeof hidden === 'boolean') return !hidden;\n const result = hidden(item.data);\n return !(result instanceof Promise ? await result : result);\n };\n\n #icon = (item: SdTableItem, command: SdTableCommand): string => {\n if (!command?.icon) return 'more_vert';\n return typeof command.icon === 'string' ? command.icon : command.icon(item.data);\n };\n\n #title = (item: SdTableItem, command: SdTableCommand): string => {\n if (!command?.title) return '';\n return typeof command.title === 'string' ? command.title : command.title(item.data);\n };\n\n // Key dùng để gán cho autoId — cần stable theo (icon, title).\n #key = (item: SdTableItem, command: SdTableCommand): string => {\n const icon = this.#icon(item, command);\n const title = this.#title(item, command);\n return `${icon || 'noicon'}-${StringUtilities.changeAliasLowerCase(title) || 'notitle'}`;\n };\n}\n\ntype Command<T = any> = CommandNormal<T> | CommandChildren<T>;\n\ninterface CommandNormal<T = any> extends SdTableCommandNormal<T> {\n type: 'normal';\n key: string;\n title: string;\n icon: string;\n}\n\ninterface CommandChildren<T = any> extends SdTableCommandChildren<T> {\n type: 'children';\n key: string;\n title: string;\n icon: string;\n children: CommandNormal<T>[];\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { SdTableCommand } from '../../models/table-command.model';\nimport { SdTableItem } from '../../models/table-item.model';\nimport { CommandPipe } from './pipes/command.pipe';\nimport { CommandFilterPipe } from './pipes/filter.pipe';\n\n@Component({\n selector: 'desktop-command',\n templateUrl: './desktop-command.component.html',\n styleUrls: ['./desktop-command.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n host: {\n '[attr.data-autoid]': 'autoId()',\n },\n imports: [CommonModule, MatTooltipModule, MatMenuModule, MatButtonModule, MatIconModule, CommandPipe, CommandFilterPipe],\n})\n// eslint-disable-next-line @angular-eslint/component-class-suffix\nexport class DesktopCommand {\n // ==========================================\n // 1. SIGNAL INPUTS\n // ==========================================\n autoIdInput = input<string | null | undefined>(undefined, { alias: 'autoId' });\n item = input.required<SdTableItem>();\n itemIndex = input.required<number>();\n commands = input<SdTableCommand[] | null | undefined>([]);\n\n // ==========================================\n // 2. COMPUTED\n // ==========================================\n // Key định danh row dùng để build autoId: ưu tiên id → code → value → fallback itemIndex.\n itemKey = computed(() => {\n const data = this.item()?.data as Record<string, unknown> | undefined;\n return data?.['id']?.toString() || data?.['code']?.toString() || data?.['value']?.toString() || this.itemIndex().toString();\n });\n\n // autoId của host: `<base>-command-<itemKey>` — đã unique theo row.\n // Template ghép tiếp `-<commandKey>` (và `-<childKey>` nếu child) cho mỗi button.\n autoId = computed(() => {\n const base = this.autoIdInput();\n return base ? `${base}-command-${this.itemKey()}` : '';\n });\n\n // Commands signal (mặc định mảng rỗng).\n _commands = computed(() => this.commands() || []);\n}\n","@let _autoId = autoId();\n@let _item = item();\n@let filteredCommands = _item | filter: _commands() | async;\n\n@if (filteredCommands?.length) {\n @for (command of filteredCommands; track command.key) {\n @let _meta = _item | command: command;\n @if (command.type === 'normal') {\n <button\n [attr.data-autoid]=\"_autoId + '-' + command.key\"\n (click)=\"command.click(_item.data)\"\n [matTooltip]=\"_meta.title\"\n aria-hidden=\"true\"\n [disabled]=\"_meta.disabled\"\n mat-icon-button>\n <mat-icon class=\"c-icon\" [color]=\"command.color || 'secondary'\" [fontSet]=\"command.fontSet!\">\n {{ _meta.icon }}\n </mat-icon>\n </button>\n } @else {\n <button\n [attr.data-autoid]=\"_autoId + '-' + command.key\"\n [matMenuTriggerFor]=\"menu\"\n aria-hidden=\"true\"\n mat-icon-button>\n @if (_meta.icon) {\n <mat-icon class=\"c-icon\" [fontSet]=\"command.fontSet!\">{{ _meta.icon }}</mat-icon>\n } @else {\n <mat-icon class=\"c-icon\">more_vert</mat-icon>\n }\n </button>\n <mat-menu #menu=\"matMenu\" [attr.data-autoid]=\"_autoId + '-' + command.key + '-menu'\">\n <span>\n @for (childCommand of command.children; track childCommand.key) {\n @let _childMeta = _item | command: childCommand;\n <button\n [attr.data-autoid]=\"_autoId + '-' + command.key + '-' + childCommand.key\"\n mat-menu-item\n (click)=\"childCommand.click(_item.data)\"\n [disabled]=\"_childMeta.disabled\">\n @if (_childMeta.htmlTemplate) {\n <div [innerHTML]=\"_childMeta.htmlTemplate\"></div>\n } @else {\n <div>\n <mat-icon [color]=\"childCommand.color || 'secondary'\" [fontSet]=\"command.fontSet!\">\n {{ _childMeta.icon }}\n </mat-icon>\n <span> {{ _childMeta.title }}</span>\n </div>\n }\n </button>\n }\n </span>\n </mat-menu>\n }\n }\n}\n","/* eslint-disable @angular-eslint/no-input-rename */\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output, ViewChild, inject } from '@angular/core';\nimport { I18nService } from '@sdcorejs/angular/i18n';\n\nimport { CommonModule } from '@angular/common';\nimport { FormGroup } from '@angular/forms';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatSelectionList } from '@angular/material/list';\nimport { MatTableModule } from '@angular/material/table';\nimport { SdButton } from '@sdcorejs/angular/components/button';\nimport { SdModal } from '@sdcorejs/angular/components/modal';\nimport { SdInput } from '@sdcorejs/angular/forms';\nimport { SdConfirmService, SdExcelColumn, SdExcelService, SdLoadingService, SdNotifyService } from '@sdcorejs/angular/services';\n// import hash from 'object-hash';\nimport { SdTableColumn, SdTableOption } from '../../models';\nimport { ConfiguredTableResult } from '../../models/table-option-config.model';\nimport { SdTableOptionExportDefault } from '../../models/table-option-export.model';\nimport { Utilities } from '@sdcorejs/utils/fns';\nimport { SdExcelSheet } from '@sdcorejs/angular/services/excel';\n\n@Component({\n selector: 'sd-popup-export',\n templateUrl: './popup-export.component.html',\n styleUrls: ['./popup-export.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [CommonModule, MatTableModule, MatIconModule, MatChipsModule, SdButton, SdInput, SdModal],\n})\n// eslint-disable-next-line @angular-eslint/component-class-suffix\nexport class SdPopupExport {\n tableOption!: SdTableOption;\n columns: SdExcelColumn[] = [];\n templateName?: string | null;\n enableCreating = false;\n @ViewChild('modal') modal?: SdModal;\n @ViewChild('listGroups') listGroups?: MatSelectionList;\n\n selected: Record<string, boolean> = {};\n files: any[] = [];\n\n @Output() export = new EventEmitter<{\n file: any | null;\n columns: SdExcelColumn[];\n isCSV?: boolean;\n }>();\n form = new FormGroup({});\n\n exportOption?: SdTableOptionExportDefault;\n @Input('tableOption') set _tableOption(option: SdTableOption) {\n this.tableOption = option;\n if (option.export?.type === 'default') {\n this.exportOption = option.export;\n }\n this.columns = this.#getExportableColumns();\n }\n @Input() configuration?: ConfiguredTableResult;\n private get key(): string | null {\n const prefix = '93889e78-f971-4a1d-8c73-fe2321af9233';\n if (!this.exportOption?.key) {\n return null;\n }\n return Utilities.hash({\n prefix,\n key: this.exportOption?.key,\n });\n }\n\n private get tableColumns() {\n const columns: SdExcelColumn[] = [];\n this.tableOption.columns\n .filter(e => !e.export?.disabled)\n .forEach(column => {\n if (column.type === 'children') {\n column.children\n ?.filter(e => !e.export?.disabled)\n .forEach(childColumn => {\n columns.push({\n title: typeof childColumn.title === 'string' ? childColumn.title : childColumn.title?.title,\n field: childColumn.field,\n width: childColumn.width,\n });\n });\n return;\n }\n columns.push({\n title: typeof column.title === 'string' ? column.title : column.title?.title,\n field: column.field,\n width: column.width,\n });\n });\n return columns.map(e => ({\n field: e.field,\n title: e.title,\n description: e.description,\n width: e.width,\n }));\n }\n private get additionalColumns() {\n return (this.exportOption?.columns?.filter(e => !e.export?.disabled) || []).map(e => ({\n field: e.field,\n title: e.title,\n description: e.description,\n width: e.width,\n }));\n }\n\n #getExportableColumns = (): SdExcelColumn[] => {\n return [...this.tableColumns, ...this.additionalColumns];\n };\n\n readonly #i18n = inject(I18nService);\n constructor(\n private ref: ChangeDetectorRef,\n private loadingService: SdLoadingService,\n private excelService: SdExcelService,\n private notifyService: SdNotifyService,\n private confirmService: SdConfirmService\n ) {}\n\n open = async () => {\n if (!this.key) {\n this.exportDefault();\n return;\n }\n this.loadFiles();\n this.selected = {};\n this.modal?.open();\n this.ref.detectChanges();\n };\n\n #getExportColumns = (): SdExcelColumn[] => {\n if (this.configuration) {\n const columns = [...this.tableColumns];\n const { firstColumns, secondColumns } = this.configuration;\n const displayColumns: SdTableColumn[] = [...firstColumns, ...secondColumns].reduce<SdTableColumn[]>((first, next) => {\n const column = this.tableOption.columns.find(e => e.field === next.field);\n if (!column) {\n return first;\n }\n if (column.type !== 'children') {\n return [...first, column];\n }\n return [...first, ...column.children];\n }, []);\n const results = displayColumns\n .map(e => ({\n ...e,\n data: columns.find(e1 => e1.field === e.field),\n }))\n .filter(e => !!e.data)\n .map(e => e.data!);\n return [...results, ...this.additionalColumns];\n } else {\n return this.columns;\n }\n };\n\n exportDefault = () => {\n this.export.emit({\n file: null,\n columns: this.#getExportColumns(),\n isCSV: false,\n });\n };\n\n exportCSV = () => {\n this.export.emit({\n file: null,\n columns: this.#getExportColumns(),\n isCSV: true,\n });\n };\n\n loadFiles = async (group: string | undefined = undefined) => {\n // TODO: Fix\n // this.files = await this.exportService.filesInFolder({\n // key: this.key!,\n // group,\n // });\n // this.ref.markForCheck();\n };\n\n #initTemplate = async (fileName?: string) => {\n const sheets: SdExcelSheet[] = [];\n if (Array.isArray(this.exportOption?.sheets)) {\n for (const sheet of this.exportOption.sheets) {\n if (sheet.name && sheet.items && sheet.headers) {\n if (Array.isArray(sheet.items)) {\n sheets.push({\n name: sheet.name,\n items: sheet.items,\n headers: sheet.headers,\n });\n } else {\n sheets.push({\n name: sheet.name,\n items: await sheet.items(),\n headers: sheet.headers,\n });\n }\n }\n }\n }\n return await this.excelService.generateTemplate({\n fileName: fileName || this.exportOption?.fileName,\n columns: this.columns,\n sheets,\n });\n };\n\n generateTemplate = async () => {\n this.loadingService.start();\n await this.#initTemplate().finally(this.loadingService.stop);\n };\n\n generateAndUploadTemplate = async (fileName?: string) => {\n const sheets: SdExcelSheet[] = [];\n if (Array.isArray(this.exportOption?.sheets)) {\n for (const sheet of this.exportOption?.sheets) {\n if (sheet.name && sheet.items && sheet.headers) {\n if (Array.isArray(sheet.items)) {\n sheets.push({\n name: sheet.name,\n items: sheet.items,\n headers: sheet.headers,\n });\n } else {\n sheets.push({\n name: sheet.name,\n items: await sheet.items(),\n headers: sheet.headers,\n });\n }\n }\n }\n }\n // TODO: Fix\n // return await this.exportService.generateUploadTemplate({\n // key: this.key!,\n // template: {\n // fileName: fileName || this.tableOption?.export?.fileName,\n // columns: this.columns.filter(e => this.selected[e.field]),\n // sheets,\n // },\n // });\n };\n\n onExport = (file: any) => {\n this.export.emit({\n file,\n columns: this.columns,\n });\n this.ref.detectChanges();\n };\n\n uploadTemplate = async () => {\n // TODO: Fix\n // const file = await this.exportService.uploadTemplate({\n // key: this.key!,\n // });\n // if (file) {\n // this.files = [...this.files, file];\n // this.ref.detectChanges();\n // }\n };\n\n removeFile = (file: any) => {\n this.confirmService.confirm('Remove template').then(() => {\n // TODO: Fix\n // this.exportService.removeFile({\n // key: this.key!,\n // fileName: file.fileName,\n // });\n const idx = this.files.indexOf(file);\n this.files.splice(idx, 1);\n this.files = [...this.files];\n this.ref.detectChanges();\n });\n };\n\n createTemplate = async () => {\n if (this.form.invalid) {\n this.form.markAllAsTouched();\n return;\n }\n if (!this.columns.some(e => this.selected[e.field])) {\n this.notifyService.warning(this.#i18n.t('core.component.table.popup-export.select-columns'));\n return;\n }\n this.loadingService.start();\n const fileName = this.templateName + '.xlsx';\n try {\n const result = await this.generateAndUploadTemplate(fileName);\n // TODO: Fix\n // if (result?.filePath) {\n // const file: SdExportFile = {\n // filePath: result.filePath,\n // fileName: result.fileName,\n // };\n // this.onExport(file);\n // this.templateName = null;\n // this.enableCreating = false;\n // this.files = [...this.files, file];\n // this.ref.detectChanges();\n // }\n } finally {\n this.loadingService.stop();\n }\n };\n\n templateNameValidator = (val: string): string => {\n const regex = /^[A-Za-z0-9 _]*[A-Za-z0-9][A-Za-z0-9 _]*$/;\n if (!val) {\n return 'Please enter your template name';\n }\n if (val.length > 50) {\n return 'Template name is too long';\n }\n if (!regex.test(val)) {\n return 'Template name only contains letters, numbers and spaces';\n }\n return '';\n };\n}\n","<sd-modal width=\"907px\" [title]=\"'Exported template'\" #modal>\n <div class=\"row\">\n <div *ngIf=\"!files?.length\" class=\"col-12\">\n <div class=\"c-empty\">\n <img class=\"sd-image-data-empty\" alt=\"empty-image\" />\n <div class=\"T14R\">{{ 'There are no exported templates' }}</div>\n </div>\n </div>\n <ng-container *ngIf=\"files?.length\">\n <div class=\"col-12\">\n <div class=\"c-table\" style=\"max-height: 50vh\">\n <table mat-table [dataSource]=\"files\">\n <ng-container matColumnDef=\"stt\">\n <th mat-header-cell class=\"c-th text-center px-5\" *matHeaderCellDef style=\"width: 50px\">#</th>\n <td class=\"text-center px-5\" mat-cell *matCellDef=\"let item; let idx = index\">\n {{ idx + 1 }}\n </td>\n </ng-container>\n <ng-container matColumnDef=\"fileName\">\n <th mat-header-cell class=\"c-th px-5\" *matHeaderCellDef>\n {{ 'File name' }}\n </th>\n <td class=\"px-5\" mat-cell *matCellDef=\"let item\">\n {{ item.fileName }}\n </td>\n </ng-container>\n <ng-container matColumnDef=\"action\">\n <th mat-header-cell class=\"c-th px-5\" *matHeaderCellDef style=\"width: 80px\"></th>\n <td class=\"px-5\" mat-cell *matCellDef=\"let item\">\n <div class=\"d-flex\">\n <button mat-icon-button aria-label=\"delete\" (click)=\"removeFile(item)\">\n <mat-icon>delete</mat-icon>\n </button>\n <button mat-icon-button aria-label=\"download\" (click)=\"onExport(item)\">\n <mat-icon>download</mat-icon>\n </button>\n </div>\n </td>\n </ng-container>\n <tr mat-header-row *matHeaderRowDef=\"['stt', 'fileName', 'action']; sticky: true\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: ['stt', 'fileName', 'action']\"></tr>\n </table>\n </div>\n </div>\n <div *ngIf=\"files.length < 5\" class=\"col-12 mt-10\">\n <sd-button class=\"mr-4\" [title]=\"'New template'\" (click)=\"enableCreating = true\" color=\"info\" [disabled]=\"enableCreating\">\n </sd-button>\n <sd-button *ngIf=\"exportOption?.enableUpload\" [title]=\"'Upload template'\" (click)=\"uploadTemplate()\" type=\"outline\">\n </sd-button>\n </div>\n </ng-container>\n <ng-container *ngIf=\"enableCreating || !files?.length\">\n <div class=\"col-12 mt-20\">\n <div class=\"T14R\">{{ 'Select columns for creating template' }}:</div>\n </div>\n <div class=\"col-12\">\n <mat-chip-listbox selectable=\"true\" multiple=\"true\">\n <ng-container *ngFor=\"let column of columns\">\n <mat-chip-option [selected]=\"selected[column.field]\" (click)=\"selected[column.field] = !selected[column.field]\">\n {{ column.title }}\n </mat-chip-option>\n </ng-container>\n </mat-chip-listbox>\n </div>\n <div class=\"col-12 row\">\n <div class=\"col-10\">\n <sd-input [form]=\"form\" [label]=\"'Template name'\" [(model)]=\"templateName\" [validator]=\"templateNameValidator\"></sd-input>\n </div>\n <div class=\"col-2 mt-8\">\n <sd-button width=\"100%\" [title]=\"'Save'\" color=\"info\" (click)=\"createTemplate()\"> </sd-button>\n </div>\n </div>\n </ng-container>\n </div>\n</sd-modal>\n","import { Directive, TemplateRef, inject, input } from '@angular/core';\nimport { SdTableColumn } from '../models/table-column.model';\n\ninterface Context<T = any> {\n column: SdTableColumn<T>;\n field: string;\n disabled?: boolean;\n}\n\n@Directive({\n selector: '[sdTableColumnFilterDef]',\n})\nexport class SdTableColumnFilterDefDirective<T = any> {\n static ngTemplateContextGuard<T>(_dir: SdTableColumnFilterDefDirective<T>, _ctx: unknown): _ctx is Context<T> {\n return true;\n }\n\n sdTableColumnFilterDef = input.required<string>();\n templateRef: TemplateRef<Context<T>> = inject(TemplateRef);\n}\n","// sticky-shadow.directive.ts\nimport { afterNextRender, Directive, DestroyRef, ElementRef, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { fromEvent } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\n\n/**\n * Directive thêm hiệu ứng đổ bóng (elevation-2) vào cột sticky cuối cùng bên trái\n * và cột sticky đầu tiên bên phải, tạo ngăn cách trực quan với phần được scroll.\n *\n * Chỉ dùng nội bộ trong sd-table, không chìa ra ngoài.\n *\n * Gắn vào scroll container của table:\n * @example\n * <div class=\"c-table\" stickyShadow>...</div>\n */\n@Directive({\n selector: '[stickyShadow]',\n standalone: true,\n})\nexport class StickyShadowDirective {\n readonly #el = inject(ElementRef<HTMLElement>);\n readonly #destroyRef = inject(DestroyRef);\n\n constructor() {\n afterNextRender(() => {\n const container = this.#el.nativeElement;\n\n // Dùng MutationObserver để detect khi CDK render rows mới vào table\n // (data load async, phân trang, ...) — lúc này td mới có đủ sticky classes\n const mutationObserver = new MutationObserver(() => {\n this.#updateShadow(container);\n });\n\n mutationObserver.observe(container, {\n childList: true, // Theo dõi thêm/bớt các node con\n subtree: true, // Bao gồm tất cả các cấp con cháu\n });\n\n // Cập nhật shadow mỗi khi user scroll ngang\n fromEvent(container, 'scroll')\n .pipe(debounceTime(10), takeUntilDestroyed(this.#destroyRef))\n .subscribe(() => this.#updateShadow(container));\n\n // Disconnect MutationObserver khi directive bị destroy\n this.#destroyRef.onDestroy(() => mutationObserver.disconnect());\n });\n }\n\n /**\n * Toggle class shadow lên tất cả th và td của một cột.\n * Dùng cdk-column-{field} để xác định cột vì Angular CDK\n * add class này đồng nhất lên cả th lẫn td.\n */\n #setShadow(container: HTMLElement, colClass: string, shadowClass: string, add: boolean) {\n container.querySelectorAll<HTMLElement>(`th.${colClass}, td.${colClass}`).forEach(el => {\n el.classList.toggle(shadowClass, add);\n // Cần position relative để ::after absolute hoạt động\n if (add) {\n el.style.position = 'sticky'; // Các cell sticky đã có sẵn, chỉ đảm bảo\n el.style.overflow = 'visible';\n }\n });\n }\n\n /**\n * Tính toán và cập nhật shadow dựa trên vị trí scroll hiện tại.\n *\n * Angular Material đánh dấu sticky left bằng class `mat-mdc-table-sticky-border-elem-left`\n * và sticky right bằng `mat-mdc-table-sticky-border-elem-right` — dùng các class này\n * để detect thay vì getComputedStyle vì reliable hơn.\n *\n * Chỉ apply shadow cho:\n * - Cột cuối cùng trong nhóm sticky-left (sát phần scroll)\n * - Cột đầu tiên trong nhóm sticky-right (sát phần scroll)\n */\n #updateShadow(container: HTMLElement) {\n const scrollLeft = container.scrollLeft;\n const scrollRight = container.scrollWidth - container.clientWidth - scrollLeft;\n\n // Query trên header row đầu tiên để xác định các cột sticky\n // td sẽ được xử lý thông qua #setShadow theo cdk-column class\n const headerRow = container.querySelector<HTMLElement>('tr.c-first-header');\n if (!headerRow) return;\n\n const allStickyLeft = Array.from(headerRow.querySelectorAll<HTMLElement>('th.mat-mdc-table-sticky-border-elem-left'));\n const allStickyRight = Array.from(headerRow.querySelectorAll<HTMLElement>('th.mat-mdc-table-sticky-border-elem-right'));\n\n // Reset shadow toàn bộ các cột sticky trước khi tính lại\n allStickyLeft.forEach(th => {\n const colClass = [...th.classList].find(c => c.startsWith('cdk-column-'));\n if (colClass) this.#setShadow(container, colClass, 'sticky-shadow-right', false);\n });\n allStickyRight.forEach(th => {\n const colClass = [...th.classList].find(c => c.startsWith('cdk-column-'));\n if (colClass) this.#setShadow(container, colClass, 'sticky-shadow-left', false);\n });\n\n // Chỉ cột cuối cùng sticky-left có shadow khi đang scroll sang phải\n const lastStickyLeft = allStickyLeft.at(-1);\n if (lastStickyLeft && scrollLeft > 0) {\n const colClass = [...lastStickyLeft.classList].find(c => c.startsWith('cdk-column-'));\n if (colClass) this.#setShadow(container, colClass, 'sticky-shadow-right', true);\n }\n\n // Chỉ cột đầu tiên sticky-right có shadow khi chưa scroll hết sang phải\n const firstStickyRight = allStickyRight.at(0);\n if (firstStickyRight && scrollRight > 0) {\n const colClass = [...firstStickyRight.classList].find(c => c.startsWith('cdk-column-'));\n if (colClass) this.#setShadow(container, colClass, 'sticky-shadow-left', true);\n }\n }\n}\n","import {\n Directive,\n ElementRef,\n NgZone,\n OnDestroy,\n Renderer2,\n effect,\n inject,\n input,\n output,\n} from '@angular/core';\n\n@Directive({\n selector: '[sdColumnResize]',\n standalone: true,\n})\nexport class SdColumnResizeDirective implements OnDestroy {\n // Bật/tắt resize cho cell này\n sdColumnResize = input.required<boolean>();\n // min/max width tùy chọn (chuỗi 'NNpx'); nếu không phải px sẽ bỏ qua\n minWidth = input<string | undefined>();\n maxWidth = input<string | undefined>();\n // Emit width cuối cùng dạng 'NNpx' khi mouseup\n resizeEnd = output<string>();\n\n #el = inject(ElementRef<HTMLElement>);\n #renderer = inject(Renderer2);\n #zone = inject(NgZone);\n\n #handle?: HTMLElement;\n #unlistenMousedown?: () => void;\n #unlistenMove?: () => void;\n #unlistenUp?: () => void;\n #unlistenBlur?: () => void;\n\n #startX = 0;\n #startWidth = 0;\n #currentWidth = 0;\n\n constructor() {\n effect(() => {\n const enabled = this.sdColumnResize();\n if (enabled) {\n this.#enable();\n } else {\n this.#disable();\n }\n });\n }\n\n ngOnDestroy() {\n this.#disable();\n }\n\n #enable() {\n if (this.#handle) return;\n const th = this.#el.nativeElement;\n this.#renderer.addClass(th, 'sd-col-resize-host');\n\n const handle = this.#renderer.createElement('span');\n this.#renderer.addClass(handle, 'sd-col-resize-handle');\n this.#renderer.appendChild(th, handle);\n this.#handle = handle;\n\n // mousedown listen ngoài Angular zone — drag không trigger CD\n this.#zone.runOutsideAngular(() => {\n this.#unlistenMousedown = this.#renderer.listen(handle, 'mousedown', (e: MouseEvent) =>\n this.#onMousedown(e)\n );\n });\n }\n\n #disable() {\n this.#cleanupDrag();\n this.#unlistenMousedown?.();\n this.#unlistenMousedown = undefined;\n if (this.#handle) {\n this.#renderer.removeChild(this.#el.nativeElement, this.#handle);\n this.#handle = undefined;\n }\n this.#renderer.removeClass(this.#el.nativeElement, 'sd-col-resize-host');\n }\n\n #onMousedown = (event: MouseEvent) => {\n event.preventDefault();\n // stopPropagation để không trigger mat-sort khi click vào handle\n event.stopPropagation();\n\n const th = this.#el.nativeElement;\n this.#startX = event.clientX;\n this.#startWidth = th.getBoundingClientRect().width;\n this.#currentWidth = this.#startWidth;\n\n this.#renderer.setStyle(document.body, 'cursor', 'col-resize');\n this.#renderer.addClass(th, 'sd-resizing');\n\n this.#zone.runOutsideAngular(() => {\n this.#unlistenMove = this.#renderer.listen('document', 'mousemove', (e: MouseEvent) =>\n this.#onMousemove(e)\n );\n this.#unlistenUp = this.#renderer.listen('document', 'mouseup', () => this.#onMouseup());\n // Nếu user kéo ra ngoài window: cleanup an toàn\n this.#unlistenBlur = this.#renderer.listen('window', 'blur', () => this.#onMouseup());\n });\n };\n\n #onMousemove = (event: MouseEvent) => {\n const delta = event.clientX - this.#startX;\n const minPx = this.#parsePx(this.minWidth()) ?? 40;\n const maxPx = this.#parsePx(this.maxWidth()) ?? Number.POSITIVE_INFINITY;\n const w = Math.min(maxPx, Math.max(minPx, this.#startWidth + delta));\n this.#currentWidth = w;\n\n const th = this.#el.nativeElement;\n const px = `${w}px`;\n this.#renderer.setStyle(th, 'width', px);\n this.#renderer.setStyle(th, 'min-width', px);\n this.#renderer.setStyle(th, 'max-width', px);\n };\n\n #onMouseup = () => {\n const finalPx = `${Math.round(this.#currentWidth)}px`;\n this.#cleanupDrag();\n // emit trong Angular zone để consumer chạy CD bình thường\n this.#zone.run(() => this.resizeEnd.emit(finalPx));\n };\n\n #cleanupDrag() {\n this.#unlistenMove?.();\n this.#unlistenMove = undefined;\n this.#unlistenUp?.();\n this.#unlistenUp = undefined;\n this.#unlistenBlur?.();\n this.#unlistenBlur = undefined;\n this.#renderer.removeStyle(document.body, 'cursor');\n if (this.#el?.nativeElement) {\n this.#renderer.removeClass(this.#el.nativeElement, 'sd-resizing');\n }\n }\n\n #parsePx(value?: string): number | null {\n if (!value) return null;\n const m = /^(\\d+(?:\\.\\d+)?)px$/i.exec(value.trim());\n return m ? parseFloat(m[1]) : null;\n }\n}\n","import { SdBadge } from '@sdcorejs/angular/components/badge';\nimport { Utilities } from '@sdcorejs/utils/fns';\nimport { SdUnwrapSignal } from '@sdcorejs/angular/utilities/models';\n// import hash from 'object-hash';\nexport interface SdTableMetaSelector {\n selectable?: boolean;\n isSelected?: boolean;\n actions?: string[];\n}\n\nexport interface SdTableMetaExpand {\n isExpanded?: boolean;\n isExpanding?: boolean;\n data?: any;\n}\n\nexport interface SdTableMetaTree<T = any> {\n level: number;\n hasChildren: boolean;\n isExpanded: boolean;\n isExpanding?: boolean;\n parentId?: string;\n /** Cached formatted child SdTableItem[] — populated on first expand/format */\n childItems?: SdTableItem<T>[];\n /**\n * Hierarchical index path từ root tới row hiện tại — sibling-index (1-based) per level.\n * Vd root thứ nhất = [1], child thứ 2 của root đó = [1, 2], grandchild thứ 1 = [1, 2, 1].\n * Template STT join('.') → \"1\", \"1.2\", \"1.2.1\". Populate trong `flattenTree`.\n */\n indexPath?: number[];\n}\n\nexport interface SdTableDisplay {\n tooltip?: string;\n badge?: {\n type: SdUnwrapSignal<SdBadge['type']>;\n color: SdUnwrapSignal<SdBadge['color']>;\n icon?: SdUnwrapSignal<SdBadge['icon']>;\n title?: SdUnwrapSignal<SdBadge['title']>;\n };\n cellStyle?: Record<string, string>;\n data: string | number | undefined | null;\n isHtml: boolean;\n click?: () => void;\n}\n\nexport interface SdTableMetaGroup<T = any> {\n /** Children items thuộc group này (chỉ set trên group header row). */\n items?: SdTableItem<T>[];\n /** true = row này là synthetic group header (sinh bởi SdGroupPipe). */\n isGroupHeader?: boolean;\n /** Hash key của group (= Utilities.hash(values)). */\n key?: string;\n /** Resolved group-field values (vd `{ customerId: 1, customerName: 'A' }`). */\n values?: Record<string, any>;\n /** Trạng thái expand. Chỉ ý nghĩa khi `option.group.collapsible = true`. */\n isExpanded?: boolean;\n}\n\nexport interface SdTableMeta<T> {\n id: string;\n display: Record<string, SdTableDisplay>;\n selector?: SdTableMetaSelector;\n expand?: SdTableMetaExpand;\n group?: SdTableMetaGroup<T>;\n tree?: SdTableMetaTree<T>;\n}\n\nexport interface SdTableItem<T = any> {\n meta: SdTableMeta<T>;\n data: T;\n}\n\nexport const MapToSdTableItem = <T = any>(item: T): SdTableItem<T> => ({\n data: item,\n meta: {\n id: Utilities.hash({ data: item }),\n display: {},\n expand: {\n isExpanding: false,\n isExpanded: false,\n },\n group: {},\n selector: { actions: [], isSelected: false, selectable: false },\n tree: { level: 0, hasChildren: false, isExpanded: false, isExpanding: false },\n },\n});\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { SdTableOption } from '../models/table-option.model';\nimport { MapToSdTableItem, SdTableItem } from '../models/table-item.model';\nimport { Utilities } from '@sdcorejs/utils/fns';\n\n@Pipe({ name: 'sdGroup' })\nexport class SdGroupPipe implements PipeTransform {\n /**\n * Nhóm items theo `option.group.fields`. Mỗi group sinh ra 1 synthetic SdTableItem\n * (group header) đặt trước children. Header có `meta.group.isGroupHeader = true` + `key`\n * + `values` + `items` + `isExpanded` để template + table consume.\n *\n * Khi `option.group.collapsible = true` + group đang collapse → children bị lọc khỏi output.\n *\n * `expandState` (optional, owned by component) — Map<key, expanded> giữ trạng thái\n * expand/collapse qua các lần transform. Pipe đọc state từ Map; nếu key chưa tồn tại,\n * dùng `!option.group.defaultCollapsed`. Pipe ghi state về Map cho lần read sau.\n *\n * @example\n * `_items | sdGroup: _tableOption : groupExpandState`\n */\n transform(\n items: SdTableItem[],\n gridOption: SdTableOption,\n expandState?: Map<string, boolean>,\n ): SdTableItem[] {\n if (gridOption?.tree) {\n if (typeof ngDevMode !== 'undefined' && ngDevMode && gridOption.group) {\n console.warn('[sd-table] option.tree and option.group cannot be used together. group is ignored.');\n }\n return items;\n }\n const group = gridOption?.group;\n if (!group?.fields?.length) return items;\n const fields = group.fields;\n const collapsible = !!group.collapsible;\n const defaultExpanded = !group.defaultCollapsed;\n\n // Bucket items theo combined field-value hash.\n // Field hỗ trợ dot-notation (vd 'customer.id') — resolve qua getNestedValue.\n const buckets = new Map<string, { values: Record<string, any>; items: SdTableItem[] }>();\n for (const item of items) {\n const values: Record<string, any> = {};\n for (const f of fields) values[f as string] = Utilities.getNestedValue(item.data, f as string);\n const key = Utilities.hash(values);\n let bucket = buckets.get(key);\n if (!bucket) {\n bucket = { values, items: [] };\n buckets.set(key, bucket);\n }\n bucket.items.push(item);\n }\n\n const result: SdTableItem[] = [];\n buckets.forEach((bucket, key) => {\n const isExpanded = expandState?.has(key) ? !!expandState.get(key) : defaultExpanded;\n if (collapsible && expandState) expandState.set(key, isExpanded);\n\n const header = MapToSdTableItem({} as any);\n header.meta.group = {\n isGroupHeader: true,\n key,\n values: bucket.values,\n items: bucket.items,\n isExpanded,\n };\n header.meta.selector!.selectable = false;\n result.push(header);\n\n if (!collapsible || isExpanded) {\n for (const child of bucket.items) result.push(child);\n }\n });\n return result;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n// import hash from 'object-hash';\nimport { SdTableOptionSelector } from '../models/table-option-selector.model';\nimport { SdTableItem } from '../models/table-item.model';\nimport { Utilities } from '@sdcorejs/utils/fns';\n@Pipe({\n name: 'selectionDisabled',\n})\nexport class SdSelectionDisabledPipe implements PipeTransform {\n transform = (selectedItems: SdTableItem[], rowData: SdTableItem, selection: SdTableOptionSelector): boolean => {\n const { disabled, actions } = selection;\n if (!actions?.length) {\n if (!disabled) {\n rowData.meta.selector!.selectable = true;\n return false;\n }\n rowData.meta.selector!.selectable = !disabled(rowData, selectedItems);\n return !rowData.meta.selector!.selectable;\n }\n // Kiểm tra có bị disabled theo function không\n // Dữ liệu chưa được check thì kiểm tra hàm disable nếu có\n if (disabled && !rowData.meta.selector!.isSelected) {\n // Nếu disabled và dữ liệu chưa được check\n if(disabled(rowData, selectedItems)) {\n return true;\n }\n }\n // Lọc các action theo selectedItems hiện tại\n const availableActions = actions.filter(action => {\n if ('children' in action) {\n for (const childAction of action.children) {\n const key = Utilities.hash(childAction);\n if (selectedItems.every(e => e.meta.selector?.actions?.includes(key))) {\n return true;\n }\n }\n return false;\n } else {\n const key = Utilities.hash(action);\n return selectedItems.every(e => e.meta.selector?.actions?.includes(key));\n }\n });\n // Kiểm tra rowData có action nào thỏa hay ko, nếu ko thì disabled\n for (const action of availableActions) {\n if ('children' in action) {\n for (const childAction of action.children) {\n if (rowData.meta.selector?.actions?.includes(Utilities.hash(childAction))) {\n return false;\n }\n }\n } else {\n if (rowData.meta.selector?.actions?.includes(Utilities.hash(action))) {\n return false;\n }\n }\n }\n return true;\n };\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { SdTableOptionSelector } from '../models/table-option-selector.model';\nimport { SdTableItem } from '../models/table-item.model';\n@Pipe({\n name: 'selectionVisibleSelectAll',\n})\nexport class SdSelectionVisibleSelectAllPipe implements PipeTransform {\n transform = async (items: SdTableItem[], selector: SdTableOptionSelector | undefined): Promise<boolean> => {\n // Nếu chỉ chọn 1 thì không có select all\n if (selector?.single) {\n return false;\n }\n if (!items.length) {\n return false;\n }\n if (!selector?.actions?.length) {\n return true;\n }\n if (selector.actions.some(e => ('children' in e && e.children.some(e1 => e1.isGrouped)) || e.isGrouped)) {\n return false;\n }\n await new Promise(resolve => setTimeout(resolve, 500));\n const first = items.find(t => t.meta.selector?.actions?.length);\n if (first) {\n for (const action of first.meta.selector?.actions!) {\n if (items.filter(t => t.meta.selector?.actions?.length).every(e => e.meta.selector?.actions?.includes(action))) {\n return true;\n }\n }\n }\n return false;\n };\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n// import hash from 'object-hash';\nimport { SdTableOptionSelector } from '../models/table-option-selector.model';\nimport { SdTableItem } from '../models/table-item.model';\nimport { Utilities } from '@sdcorejs/utils/fns';\n\n@Pipe({\n name: 'selectionVisible',\n})\nexport class SdSelectionVisiblePipe implements PipeTransform {\n transform = (rowData: SdTableItem, selection: SdTableOptionSelector | undefined): boolean => {\n const groupedActions: string[] = [];\n rowData.meta.selector!.actions = rowData.meta.selector!.actions || [];\n if (!selection?.actions?.length) {\n rowData.meta.selector!.selectable = true;\n return rowData.meta.selector!.selectable;\n }\n for (const action of selection?.actions) {\n if ('children' in action) {\n let flag = false;\n let hasGroup = false;\n for (const child of action.children) {\n const { hidden, isGrouped } = child;\n const key = Utilities.hash(child);\n if (isGrouped) {\n hasGroup = true;\n }\n if (typeof hidden === 'function') {\n if (!hidden(rowData.data)) {\n flag = true;\n rowData.meta.selector!.actions.push(key);\n if (isGrouped) {\n groupedActions.push(key);\n }\n }\n } else if (!hidden) {\n flag = true;\n rowData.meta.selector!.actions.push(key);\n if (isGrouped) {\n groupedActions.push(key);\n }\n }\n }\n if (flag) {\n rowData.meta.selector!.actions.push(Utilities.hash(action));\n if (hasGroup) {\n groupedActions.push(Utilities.hash(action));\n }\n }\n } else {\n const { hidden, isGrouped } = action;\n const key = Utilities.hash(action);\n if (typeof hidden === 'function') {\n if (!hidden(rowData.data)) {\n rowData.meta.selector!.actions.push(key);\n if (isGrouped) {\n groupedActions.push(key);\n }\n }\n } else if (!hidden) {\n rowData.meta.selector!.actions.push(key);\n if (isGrouped) {\n groupedActions.push(key);\n }\n }\n }\n }\n rowData.meta.selector!.selectable = !!rowData.meta.selector!.actions?.length;\n if (!rowData.meta.selector!.selectable || !groupedActions.length || rowData?.meta.group?.items?.length) {\n return rowData.meta.selector!.selectable;\n }\n // Đối với trường hợp grouped, tuy selectable là true nhưng vẫn ẩn đi checkbox\n // nếu các action đều thuộc groupedActions và rowData ko phải là dòng group\n return rowData.meta.selector!.actions.some(action => !groupedActions.includes(action));\n };\n}\n","import { Injectable, inject, signal } from '@angular/core';\nimport { SdExcelColumn, SdExcelService } from '@sdcorejs/angular/services';\nimport { SdExcelSheet } from '@sdcorejs/angular/services/excel';\nimport { Utilities } from '@sdcorejs/utils/fns';\nimport { DateUtilities } from '@sdcorejs/angular/utilities/extensions';\nimport { SdTableColumn } from '../../models/table-column.model';\nimport { ConfiguredTableResult } from '../../models/table-option-config.model';\nimport { SdTableOptionExportColumn } from '../../models/table-option-export.model';\nimport { SdTableOption } from '../../models/table-option.model';\nimport { SdTableFilterRequest } from '../table-filter/table-filter.model';\n\nexport interface SdTableExportContext<T = any> {\n option: SdTableOption<T>;\n configuration?: ConfiguredTableResult;\n total: number;\n cacheObjValues: Record<string, Record<string, string>>;\n\n // Hàm callback để Service gọi ngược lại Component xin dữ liệu từng trang\n fetchChunk: (\n pageNumber: number,\n pageSize: number\n ) => Promise<\n | T[]\n | {\n items: any[];\n total: number;\n }\n >;\n\n // Dành cho custom export\n getFilterInfo: () => SdTableFilterRequest;\n}\n\n@Injectable()\nexport class TableExportService {\n #excelService = inject(SdExcelService);\n\n // ==========================================\n // SIGNAL STATE (Component sẽ bind trực tiếp vào đây)\n // ==========================================\n exporting = signal(false);\n exportTitle = signal('Export');\n\n // ==========================================\n // PUBLIC METHODS\n // ==========================================\n\n exportExcel = (context: SdTableExportContext, columns?: SdExcelColumn[]) => {\n return this.#processExport(context, { columns, isCSV: false });\n };\n\n exportCSV = (context: SdTableExportContext, columns?: SdExcelColumn[]) => {\n return this.#processExport(context, { columns, isCSV: true });\n };\n\n exportCustom = (context: SdTableExportContext) => {\n const { option, getFilterInfo } = context;\n if (option?.export?.type === 'custom') {\n this.exporting.set(true);\n option.export\n .onExport(getFilterInfo())\n .catch(err => {\n console.error(err);\n throw err;\n })\n .finally(() => {\n this.exporting.set(false);\n });\n }\n };\n\n // ==========================================\n // PRIVATE LOGIC\n // ==========================================\n\n async #processExport(context: SdTableExportContext, args: { columns?: SdExcelColumn[]; isCSV?: boolean }) {\n const { option, total, fetchChunk, cacheObjValues } = context;\n\n // `type` là optional trên SdTableOptionExportDefault — undefined cũng coi như 'default'.\n // Chỉ chặn nhánh 'custom' (đã có exportCustom xử lý riêng).\n if (option.export?.type === 'custom') return;\n\n const { isCSV } = args;\n try {\n const columns = this.#getExportColumns(context, args.columns);\n const pageSize = option.export?.maxItemsPerRequest || 1000;\n const batch = option.export?.batch || 1;\n\n let pageNumber = 0;\n let exportItems: any[] = [];\n let currentTotal = total; // Biến cục bộ để track total trả về từ fetchChunk\n\n this.exporting.set(true);\n const items: any[] = [];\n let promises: Promise<any[] | { items: any[]; total: number }>[] = [];\n\n const handleData = async () => {\n const results = await Promise.all(promises);\n promises = [];\n exportItems = [];\n\n for (const result of results) {\n if (result && 'items' in result) {\n exportItems = [...exportItems, ...result.items];\n currentTotal = result.total;\n } else if (Array.isArray(result)) {\n exportItems = [...exportItems, ...result];\n }\n }\n\n if (option.export?.type !== 'custom' && option.export?.mapping) {\n const mappedResults = option.export.mapping(exportItems);\n exportItems = mappedResults instanceof Promise ? await mappedResults : mappedResults;\n }\n\n const totalPage = Math.max(1, currentTotal / pageSize);\n const percent = Math.round(((pageNumber - 1) * 100.0) / totalPage);\n // Đảm bảo percent không vượt quá 100\n this.exportTitle.set(`Exporting...${Math.min(percent, 100)}%`);\n\n const allColumns = this.#allColumns(option);\n const allExportedColumns = this.#allExportedColumns(option);\n\n for (const item of exportItems) {\n const obj: any = {};\n\n const handle = async (exportColumn: SdExcelColumn) => {\n obj[exportColumn.field] = Utilities.getNestedValue(item, exportColumn.field);\n\n const column = allColumns.find(e => e.field === exportColumn.field);\n const exportedColumn = allExportedColumns.find(e => e.field === exportColumn.field);\n\n if (exportedColumn?.transform) {\n obj[exportedColumn.field] = exportedColumn.transform(Utilities.getNestedValue(item, exportedColumn.field), item);\n return;\n }\n if (!column) return;\n\n if (column.type === 'children') {\n column?.children?.forEach(childColumn =>\n handle({\n field: childColumn.field,\n title: typeof childColumn.title === 'string' ? childColumn.title : childColumn.title?.title,\n width: childColumn.width,\n })\n );\n return;\n }\n if (!columns.some(e => e.field === column.field)) return;\n\n const itemValue = Utilities.getNestedValue(item, column.field as string);\n const fieldStr = column.field as string;\n\n if (column.transform) {\n const transform = column.transform(itemValue, item, { isExport: true });\n obj[fieldStr] = transform instanceof Promise ? await transform : transform;\n obj[fieldStr] = obj[fieldStr] ?? '';\n } else if (itemValue === undefined || itemValue === null || itemValue === '') {\n obj[fieldStr] = '';\n } else if (column.type === 'string' || column.type === 'number') {\n obj[fieldStr] = itemValue;\n } else if (column.type === 'boolean') {\n if (itemValue) {\n obj[fieldStr] = column.option?.displayOnTrue || 'True';\n } else if (obj[fieldStr] !== undefined && obj[fieldStr] !== null) {\n obj[fieldStr] = column.option?.displayOnFalse || 'False';\n }\n } else if (column.type === 'date') {\n obj[fieldStr] = DateUtilities.toFormat(itemValue, 'yyyy/MM/dd');\n } else if (column.type === 'datetime') {\n obj[fieldStr] = DateUtilities.toFormat(itemValue, 'yyyy/MM/dd HH:mm:ss');\n } else if (column.type === 'time') {\n obj[fieldStr] = DateUtilities.toFormat(itemValue, 'HH:mm:ss');\n } else if (column.type === 'values' || column.type === 'lazy-values') {\n const vals = (Array.isArray(itemValue) ? itemValue : [itemValue]).filter(e => !!e?.toString());\n obj[fieldStr] = vals.map(val => cacheObjValues[fieldStr]?.[val]?.[column.option.displayField as any] || val)?.join(', ');\n } else {\n obj[fieldStr] = itemValue;\n }\n };\n\n for (const exportColumn of columns) {\n await handle(exportColumn);\n }\n items.push(obj);\n }\n };\n\n // Vòng lặp lấy dữ liệu\n while (pageNumber * pageSize < currentTotal) {\n promises.push(fetchChunk(pageNumber, pageSize));\n pageNumber++;\n if (promises.length < batch) continue;\n await handleData();\n }\n\n if (promises.length > 0) {\n await handleData();\n }\n\n // Xuất file\n if (isCSV) {\n await this.#excelService.exportCSV({\n columns,\n items,\n fileName: option.export?.fileName,\n });\n return;\n }\n\n const sheets: SdExcelSheet[] = [];\n if (Array.isArray(option.export?.sheets)) {\n for (const sheet of option.export.sheets) {\n if (sheet.name && sheet.items && sheet.headers) {\n sheets.push({\n name: sheet.name,\n items: Array.isArray(sheet.items) ? sheet.items : await sheet.items(),\n headers: sheet.headers,\n });\n }\n }\n }\n\n await this.#excelService.export({\n columns,\n items,\n fileName: option.export?.fileName,\n sheets,\n });\n } finally {\n this.exporting.set(false);\n this.exportTitle.set('Export');\n }\n }\n\n #getExportColumns(context: SdTableExportContext, explicitColumns?: SdExcelColumn[]): SdExcelColumn[] {\n const { option, configuration } = context;\n let tableColumns: SdExcelColumn[] = [];\n\n option.columns\n .filter(e => !e.export?.disabled)\n .forEach(column => {\n if (column.type === 'children') {\n column.children\n ?.filter(e => !e.export?.disabled)\n .forEach(childColumn => {\n tableColumns.push({\n field: childColumn.field as string,\n title: typeof childColumn.title === 'string' ? childColumn.title : childColumn.title?.title,\n description: childColumn.export?.description,\n width: childColumn.width,\n });\n });\n return;\n }\n tableColumns.push({\n field: column.field as string,\n title: typeof column.title === 'string' ? column.title : column.title?.title,\n description: column.export?.description,\n width: column.width,\n });\n });\n\n if (configuration) {\n const displayColumns = [...configuration.firstColumns, ...configuration.secondColumns].reduce<SdTableColumn[]>((first, next) => {\n const column = option.columns.find(e => e.field === next.field);\n if (!column) return first;\n if (column.type !== 'children') return [...first, column];\n return [...first, ...column.children];\n }, []);\n\n tableColumns = displayColumns\n .map(e => ({ ...e, data: tableColumns.find(e1 => e1.field === e.field) }))\n .filter(e => !!e.data)\n .map(e => e.data!);\n }\n\n const columnFields = explicitColumns?.map(e => e.field) || [];\n\n if (option.export?.type !== 'custom') {\n return [...tableColumns, ...(option.export?.columns?.filter(e => !e.export?.disabled) || [])].filter(\n column => !columnFields?.length || columnFields.includes(column.field)\n );\n } else {\n return tableColumns.filter(column => !columnFields?.length || columnFields.includes(column.field));\n }\n }\n\n #allColumns(option: SdTableOption): SdTableColumn[] {\n const columns: SdTableColumn[] = [];\n option.columns\n ?.filter(e => !e.export?.disabled)\n .forEach(column => {\n if (column.type === 'children') {\n column.children?.filter(e => !e.export?.disabled).forEach(childColumn => columns.push(childColumn));\n return;\n }\n columns.push(column);\n });\n return columns;\n }\n\n #allExportedColumns(option: SdTableOption): SdTableOptionExportColumn[] {\n if (option.export?.type !== 'default') return [];\n return option.export?.columns?.filter(e => !e.export?.disabled) || [];\n }\n}\n","import { Injectable, inject, isSignal } from '@angular/core';\nimport { SdFormatNumberPipe } from '@sdcorejs/angular/pipes';\nimport { EMPTY_STR } from '@sdcorejs/utils/constants';\nimport { Utilities } from '@sdcorejs/utils/fns';\nimport { ArrayUtilities, DateUtilities, NumberUtilities } from '@sdcorejs/angular/utilities/extensions';\n\nimport { SdTableColumn, SdTableColumnNormal } from '../../models/table-column.model';\nimport { MapToSdTableItem, SdTableDisplay, SdTableItem } from '../../models/table-item.model';\nimport { ConfiguredTableResult } from '../../models/table-option-config.model';\n\n@Injectable()\nexport class TableFormatService {\n // Inject các pipe/service dùng để format dữ liệu\n #formatNumberPipe = inject(SdFormatNumberPipe);\n\n // ==========================================\n // PUBLIC METHODS\n // ==========================================\n\n /**\n * Tải và cache các giá trị từ điển cho cột 'values'\n */\n async loadValues(\n columns: SdTableColumn[],\n cacheValues: Record<string, any[]>,\n cacheObjValues: Record<string, Record<string, string>>\n ): Promise<void> {\n const promises: Promise<{\n key: string;\n valueField: string;\n displayField: string;\n data: any[];\n }>[] = [];\n\n for (const column of columns) {\n if (column.type === 'values' && !cacheValues[column.field]) {\n // TRƯỜNG HỢP 1: Nếu items là một Signal\n if (isSignal(column.option.items)) {\n // Đọc giá trị hiện tại của Signal\n const data = column.option.items();\n\n cacheValues[column.field] = (Array.isArray(data) ? data : []).map(e => ({\n ...e,\n [column.option.valueField]: Utilities.getNestedValue(e, column.option.valueField),\n [column.option.displayField]: Utilities.getNestedValue(e, column.option.displayField),\n }));\n\n cacheObjValues[column.field] = ArrayUtilities.toObject(column.option.valueField, cacheValues[column.field]);\n }\n // TRƯỜNG HỢP 2: Nếu items là hàm trả về Promise (API Call)\n else if (typeof column.option.items === 'function') {\n promises.push(\n column.option.items().then(data => ({\n key: column.field,\n valueField: column.option.valueField,\n displayField: column.option.displayField,\n data: Array.isArray(data) ? data : [],\n }))\n // ... catch error giữ nguyên\n );\n }\n\n // TRƯỜNG HỢP 3: Mảng tĩnh (K[]) bình thường\n else {\n cacheValues[column.field] = column.option.items.map(e => ({\n ...e,\n [column.option.valueField]: Utilities.getNestedValue(e, column.option.valueField),\n [column.option.displayField]: Utilities.getNestedValue(e, column.option.displayField),\n }));\n\n cacheObjValues[column.field] = ArrayUtilities.toObject(column.option.valueField, cacheValues[column.field]);\n }\n }\n }\n\n if (promises.length) {\n const results = await Promise.all(promises);\n for (const result of results) {\n cacheValues[result.key] = result.data.map(e => ({\n ...e,\n [result.valueField]: Utilities.getNestedValue(e, result.valueField),\n [result.displayField]: Utilities.getNestedValue(e, result.displayField),\n }));\n cacheObjValues[result.key] = ArrayUtilities.toObject(result.valueField, cacheValues[result.key]);\n }\n }\n }\n\n /**\n * Chuyển đổi dữ liệu thô thành SdTableItem kèm các thiết lập hiển thị (Display Meta)\n */\n async format<T = any>(\n rawItems: T[],\n columns: SdTableColumn[],\n cacheValues: Record<string, any[]>,\n cacheObjValues: Record<string, Record<string, string>>\n ): Promise<SdTableItem<T>[]> {\n const items = rawItems.map(MapToSdTableItem);\n const execute = async (column: SdTableColumnNormal) => {\n const { field, click, tooltip, htmlTemplate, transform } = column;\n const fieldStr = field;\n\n // Xử lý nạp từ điển động (lazy-values)\n if (!transform && !htmlTemplate && column.type === 'lazy-values' && typeof column.option.views === 'function') {\n const {\n option: { views, valueField, displayField },\n } = column;\n\n cacheObjValues[fieldStr] = cacheObjValues[fieldStr] || {};\n\n const values = ArrayUtilities.distinct(\n items\n .map(item => Utilities.getNestedValue(item.data, fieldStr))\n .filter(val => val?.toString())\n .reduce<string[]>((current, next) => [...current, ...(Array.isArray(next) ? next : [next])], [])\n .filter(val => !Object.keys(cacheObjValues[fieldStr]).includes(val))\n );\n\n if (values.length) {\n const lazyItems: any[] = (\n await views(values).catch((err: any) => {\n console.error(err);\n return [];\n })\n )\n .filter((item: any) => values.includes(Utilities.getNestedValue(item, valueField)))\n .map((e: any) => ({\n [valueField]: Utilities.getNestedValue(e, valueField),\n [displayField]: Utilities.getNestedValue(e, displayField),\n }));\n Object.assign(cacheObjValues[fieldStr], ArrayUtilities.toObject(valueField, lazyItems) || {});\n }\n }\n\n // Format dữ liệu cho từng hàng\n for (const item of items) {\n const rowData = item.data;\n const value = Utilities.getNestedValue(rowData, fieldStr);\n item.meta.display[fieldStr] = {\n badge: undefined,\n cellStyle: column.align === 'right' ? { 'text-align': 'right!important' } : undefined,\n data: value,\n isHtml: false,\n tooltip: typeof tooltip === 'function' ? tooltip(value, rowData) : undefined,\n click: typeof click === 'function' ? () => click(value, rowData) : undefined,\n };\n\n const display = item.meta.display[fieldStr];\n\n if (typeof htmlTemplate === 'function') {\n display.isHtml = true;\n display.data = htmlTemplate(value, rowData);\n } else if (typeof transform === 'function') {\n const newValue = transform(value, rowData);\n display.data = newValue instanceof Promise ? await newValue : newValue;\n } else {\n // Xử lý các type cơ bản\n if (column.type === 'date' || column.type === 'datetime' || column.type === 'time') {\n display.data = this.#formatDateDisplay(value, column.type);\n display.isHtml = column.type === 'datetime';\n }\n if (column.type === 'values' || column.type === 'lazy-values') {\n display.data = this.#processValuesDisplay(value, column, fieldStr, cacheObjValues);\n }\n if (column.type === 'number' && NumberUtilities.isNumber(value)) {\n display.data = this.#formatNumberPipe.transform(value);\n }\n if (column.type === 'boolean') {\n const { option } = column;\n if (value != null && value !== '') {\n display.data = value === true ? option?.displayOnTrue || 'True' : option?.displayOnFalse || 'False';\n } else {\n display.data = '';\n }\n }\n\n // Xử lý Badge\n const badgeResult = this.#createBadge(column, value, rowData, cacheValues);\n if (badgeResult) {\n display.badge = badgeResult.badge;\n if (badgeResult.title) {\n display.data = badgeResult.title;\n }\n }\n\n if (display.data === null || display.data === undefined || display.data === '') {\n display.data = EMPTY_STR;\n display.badge = undefined;\n }\n }\n }\n };\n\n // Duyệt qua tất cả các cột\n for (const column of columns.filter(e => !e.hidden)) {\n if (column.type === 'children') {\n for (const childColumn of column.children?.filter(e => !e.hidden) || []) {\n await execute(childColumn);\n }\n } else {\n await execute(column);\n }\n }\n return items;\n }\n\n // ==========================================\n // PRIVATE HELPERS\n // ==========================================\n\n #formatDateDisplay(value: any, type: 'date' | 'datetime' | 'time'): string {\n const date = DateUtilities.toFormat(value, 'dd/MM/yyyy');\n const time = DateUtilities.toFormat(value, 'HH:mm:ss');\n if (type === 'datetime') {\n return time && date ? `<div class=\"T14R\">${date}<span class=\"T14R text-black400 ml-4\">${time}</span></div>` : '';\n }\n if (type === 'date') return date || '';\n if (type === 'time') return time || '';\n return '';\n }\n\n #processValuesDisplay(\n value: any,\n column: SdTableColumnNormal & { type: 'values' | 'lazy-values' },\n field: string,\n cacheObjValues: Record<string, Record<string, string>>\n ): string {\n const vals = (Array.isArray(value) ? value : [value]).filter(e => e?.toString());\n return vals.map(val => cacheObjValues[field]?.[val]?.[column.option.displayField as any] || val).join(', ');\n }\n\n #createBadge(\n column: SdTableColumnNormal,\n value: any,\n rowData: any,\n cacheValues: Record<string, any[]>\n ): { badge: SdTableDisplay['badge']; title?: string | number | null } | undefined {\n if (column.useBadge) {\n const badge = column.type === 'values' ? column.useBadge(value, rowData, cacheValues[column.field]) : column.useBadge(value, rowData);\n\n if (badge) {\n return {\n badge: {\n type: badge.type ?? 'round',\n color: badge.color,\n icon: badge.icon,\n },\n title: badge.title,\n };\n }\n }\n if (column.type === 'boolean') {\n return {\n badge: {\n type: 'round',\n color: value ? 'success' : 'error',\n },\n };\n }\n return undefined;\n }\n}\n","/**\n * Build Record<field, width> từ map column hiện tại trong ConfiguredTableResult.\n * Loại bỏ field có width undefined để consumer luôn nhận chuỗi 'NNpx'.\n */\nexport const buildColumnWidthMap = (\n column: Record<string, { width?: string }> | undefined | null\n): Record<string, string> => {\n const result: Record<string, string> = {};\n if (!column) return result;\n for (const key of Object.keys(column)) {\n const w = column[key]?.width;\n if (w) result[key] = w;\n }\n return result;\n};\n","import { Injectable } from '@angular/core';\n// import hash from 'object-hash';\nimport { SdStorageService } from '@sdcorejs/angular/services';\nimport { Utilities } from '@sdcorejs/utils/fns';\nimport { Operator } from '@sdcorejs/utils/models';\nimport { map, startWith } from 'rxjs/operators';\nimport { SdTableFilterDefDirective } from '../../directives/sd-table-filter-def.directive';\nimport { SdTableColumn } from '../../models/table-column.model';\nimport {\n SdTableExternalFilter,\n SdTableOptionFilter,\n TableFilterConfiguration,\n TableFilterRegister,\n TableFilterValue,\n} from './table-filter.model';\n\n@Injectable()\nexport class SdTableFilterService {\n #filterConfiguration = 'GRID-FILTER-CONFIGURATION';\n #filterValue = 'GRID-FILTER-VALUE';\n #cache: Record<string, TableFilterRegister> = {};\n constructor(private storageService: SdStorageService) {}\n register = (\n filter: SdTableOptionFilter | undefined,\n args: {\n id: string;\n columns: SdTableColumn[] | undefined;\n externalFilters: SdTableExternalFilter[] | undefined;\n filterDefs: SdTableFilterDefDirective[] | undefined;\n columnOperator?: Record<string, Operator>;\n }\n ) => {\n let cacheSession = false;\n\n const { id, columns, externalFilters } = args;\n const tempKey = Utilities.hash({\n id,\n columns: columns?.map(e => e.field).filter(field => !!field) || [],\n externalFilters: externalFilters?.map(e => e.field).filter(field => !!field) || [],\n });\n const key = filter?.key || tempKey;\n if (!filter?.key) {\n cacheSession = true; // Nếu không có key thì chỉ lưu theo session\n }\n if (!this.#cache[key]) {\n // Setting của filter configuration\n const filterConfiguration = this.storageService.create<TableFilterConfiguration>(\n {\n prefix: this.#filterConfiguration,\n key,\n },\n {\n default: this.#defaultConfiguration(args),\n type: cacheSession ? 'session' : undefined,\n }\n );\n // Lấy giá trị configuration merge với giá trị defaultShowing của args nếu như args có thay đổi\n filterConfiguration.set(this.#initConfiguration(args, filterConfiguration.get()));\n // Setting của filter value\n const filterValue = this.storageService.create<TableFilterValue>(\n {\n prefix: this.#filterValue,\n key: !filter?.cacheable ? tempKey : key,\n },\n {\n default: this.#defaultValue(args),\n type: cacheSession || !filter?.cacheable ? 'session' : undefined,\n }\n );\n // Lấy giá trị value merge với giá trị default của args nếu như args có thay đổi\n filterValue.set(this.#initValue(args, filterValue.get()));\n this.#cache[key] = {\n configuration: {\n get: (): TableFilterConfiguration => {\n return filterConfiguration.get();\n },\n set: (configuration: Partial<TableFilterConfiguration>): TableFilterConfiguration => {\n const { inlineExternal } = configuration;\n filterConfiguration.set({\n inlineExternal: inlineExternal!,\n });\n return {\n inlineExternal: inlineExternal!,\n };\n },\n remove: () => {\n filterConfiguration.set(this.#defaultConfiguration(args));\n },\n observer: filterConfiguration.observer.pipe(\n startWith(filterConfiguration.get()),\n // Sử dụng mặc định nếu bị reset\n map(configuration => configuration || this.#defaultConfiguration(args))\n ),\n },\n value: {\n get: (): TableFilterValue => {\n return filterValue.get();\n },\n set: (value: Partial<TableFilterValue>): TableFilterValue => {\n const keys = Object.keys(value || {});\n const current = filterValue.get();\n const { columnOperator, columnFilter, externalFilter } = current;\n const updatedFilter = {\n // Filter column\n columnOperator: keys.includes('columnOperator') ? value?.columnOperator || {} : columnOperator,\n columnFilter: keys.includes('columnFilter') ? value?.columnFilter || {} : columnFilter,\n // Filter external\n externalFilter: keys.includes('externalFilter') ? value?.externalFilter || {} : externalFilter,\n // Force\n notReload: !!value?.notReload,\n };\n filterValue.set({\n ...updatedFilter,\n // Kiểm tra có đang lọc hay không\n filtered: this.#filtered(value),\n });\n return updatedFilter;\n },\n remove: () => {\n filterValue.set(this.#defaultValue(args));\n },\n observer: filterValue.observer.pipe(\n startWith(filterValue.get()),\n // Sử dụng mặc định nếu bị reset\n map(value => value || this.#defaultValue(args))\n ),\n },\n };\n }\n return this.#cache[key];\n };\n\n #filtered = (filterReq: Partial<TableFilterValue>): boolean => {\n const { columnFilter, externalFilter } = filterReq;\n if (\n Object.values({ ...columnFilter, ...externalFilter }).some(val => {\n // Nếu là mảng và mảng có phần tử thì xem như là có filter\n if (Array.isArray(val)) {\n return !!val.length;\n }\n // Nếu là object (date) và có from/to thì xem như là có filter\n if (val && typeof val === 'object') {\n if ('from' in val && !!val.from) {\n return true;\n }\n if ('to' in val && !!val.to) {\n return true;\n }\n return false;\n }\n return val !== undefined && val !== null && val !== '';\n })\n ) {\n return true;\n }\n return false;\n };\n\n #defaultConfiguration = (args: {\n columns: SdTableColumn[] | undefined;\n externalFilters: SdTableExternalFilter[] | undefined;\n }): TableFilterConfiguration => {\n const { externalFilters } = args;\n const inlineExternal: Record<string, boolean> = {};\n // Filter external\n for (const item of externalFilters || []) {\n inlineExternal[item.field] = !!item?.defaultShowing;\n }\n return {\n // Filter external\n inlineExternal,\n };\n };\n\n #defaultValue = (args: {\n columns: SdTableColumn[] | undefined;\n externalFilters: SdTableExternalFilter[] | undefined;\n columnOperator?: Record<string, Operator>;\n }): TableFilterValue => {\n const columnFilter: Record<string, any> = {};\n const externalFilter: Record<string, any> = {};\n const columnOperator: Record<string, Operator> = args.columnOperator || {};\n const { columns, externalFilters } = args;\n // Filter column\n for (const item of columns || []) {\n columnFilter[item.field] = item?.filter?.default;\n if (item?.filter?.operator?.enable && item?.filter?.operator?.default) {\n columnOperator[item.field] = item.filter.operator.default;\n }\n }\n // Filter external\n for (const item of externalFilters || []) {\n if (item.type === 'daterange') {\n externalFilter[item.field] = {\n from: item.default?.from,\n to: item.default?.to,\n };\n } else {\n externalFilter[item.field] = item?.default;\n }\n // externalFilter[item.field] = item?.default;\n }\n return {\n // Filter column\n columnFilter,\n // Filter external\n externalFilter,\n // columnOperator\n columnOperator,\n };\n };\n\n #initConfiguration = (\n args: {\n columns: SdTableColumn[] | undefined;\n externalFilters: SdTableExternalFilter[] | undefined;\n filterDefs: SdTableFilterDefDirective[] | undefined;\n },\n configuration: TableFilterConfiguration\n ): TableFilterConfiguration => {\n const { externalFilters } = args;\n const inlineExternal: Record<string, boolean> = {};\n // Filter external\n for (const item of externalFilters || []) {\n inlineExternal[item.field] = configuration?.inlineExternal?.[item.field] ?? item?.defaultShowing;\n }\n return {\n // Filter external\n inlineExternal,\n };\n };\n\n #initValue = (\n args: {\n columns: SdTableColumn[] | undefined;\n externalFilters: SdTableExternalFilter[] | undefined;\n filterDefs: SdTableFilterDefDirective[] | undefined;\n columnOperator?: Record<string, Operator>;\n },\n value: TableFilterValue\n ): TableFilterValue => {\n const columnFilter: Record<string, any> = {};\n const externalFilter: Record<string, any> = {};\n const columnOperator: Record<string, Operator> = args.columnOperator || {};\n const { columns, externalFilters } = args;\n // Filter column\n for (const item of columns || []) {\n columnFilter[item.field] = value?.columnFilter?.[item.field] ?? item?.filter?.default;\n if (item?.filter?.operator?.enable && item?.filter?.operator?.default) {\n columnOperator[item.field] = item.filter.operator.default;\n }\n }\n // Filter external\n for (const item of externalFilters || []) {\n if (item.type === 'daterange') {\n externalFilter[item.field] = {\n from: value?.externalFilter?.[item.field]?.from ?? item.default?.from,\n to: value?.externalFilter?.[item.field]?.to ?? item.default?.to,\n };\n } else {\n externalFilter[item.field] = value?.externalFilter?.[item.field] ?? item?.default;\n }\n }\n return {\n // Filter column\n columnFilter,\n // Filter external\n externalFilter,\n // columnOperator\n columnOperator,\n };\n };\n}\n","import { animate, state, style, transition, trigger } from '@angular/animations';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Injectable,\n OnDestroy,\n OnInit,\n TemplateRef,\n computed,\n contentChild,\n contentChildren,\n effect,\n inject,\n input,\n signal,\n untracked,\n viewChild,\n} from '@angular/core';\nimport { MatPaginator, MatPaginatorIntl, MatPaginatorModule } from '@angular/material/paginator';\nimport { MatSort, MatSortModule } from '@angular/material/sort';\nimport { MatTable, MatTableModule } from '@angular/material/table';\nimport { SdExcelColumn, SdNotifyService } from '@sdcorejs/angular/services';\nimport { Subject, Subscription, firstValueFrom, isObservable } from 'rxjs';\nimport { debounceTime, map, startWith, switchMap } from 'rxjs/operators';\nimport * as uuid from 'uuid';\nimport { SdTableCellDefDirective } from './directives/sd-table-cell-def.directive';\nimport { SdTableExpandDefDirective } from './directives/sd-table-expand-def.directive';\nimport { SdTableGroupDefDirective, SdTableGroupDefContext } from './directives/sd-table-group-def.directive';\nimport { SdTableFilterDefDirective } from './directives/sd-table-filter-def.directive';\nimport { SdMaterialFooterDefDirective } from './directives/sd-table-footer-def.directive';\nimport { SdTableTitleDefDirective } from './directives/sd-table-title-def.directive';\nimport { SdTableColumn, SdTableColumnLazyValues, SdTableColumnValues } from './models/table-column.model';\nimport { SdTableOption } from './models/table-option.model';\nimport { SdTableFilterRequest, TableFilterRegister } from './services/table-filter/table-filter.model';\n\nimport { CdkColumnDef } from '@angular/cdk/table';\nimport { CdkDrag, CdkDragDrop, CdkDropList, DragDropModule, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { CommonModule, DatePipe, DecimalPipe } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatRadioModule } from '@angular/material/radio';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { SdBaseSecureComponent } from '@sdcorejs/angular/components/base';\nimport { SdButton } from '@sdcorejs/angular/components/button';\nimport { SdQuickAction } from '@sdcorejs/angular/components/quick-action';\nimport { SdDesktopDirective, SdHoverCopyDirective, SdMobileDirective, SdScrollDirective } from '@sdcorejs/angular/directives';\nimport { SdSafeHtmlPipe } from '@sdcorejs/angular/pipes';\n\n// ĐÃ THÊM: Import Utilities để dùng hàm getNestedValue\nimport { Operator, PagingReq } from '@sdcorejs/utils/models';\nimport { Utilities } from '@sdcorejs/utils/fns';\nimport { ArrayUtilities, DateUtilities, NumberUtilities } from '@sdcorejs/angular/utilities/extensions';\n\nimport { ColumnFilterComponent, ColumnTitleComponent, ExternalFilterComponent, MobileFilterComponent } from './components';\nimport { ConfigComponent } from './components/config/config.component';\nimport { DesktopCellComponent } from './components/desktop-cell/desktop-cell.component';\nimport { DesktopCommand } from './components/command/desktop-command.component';\nimport { SdPopupExport } from './components/popup-export/popup-export.component';\nimport { SelectorActionComponent } from './components/selector-action/selector-action.component';\nimport { DEFAULT_TABLE_CONFIG, ISdTableConfiguration, SD_TABLE_CONFIGURATION } from './configurations';\nimport { SdColumnResizeDirective, StickyShadowDirective } from './directives';\nimport { SdTableItem } from './models/table-item.model';\nimport { ConfiguredTableResult } from './models/table-option-config.model';\nimport { SdGroupPipe } from './pipes/sd-group.pipe';\nimport { SdTreePipe } from './pipes/sd-tree.pipe';\nimport { SdSelectionDisabledPipe } from './pipes/selection-disabled.pipe';\nimport { SdSelectionVisibleSelectAllPipe } from './pipes/selection-visible-select-all.pipe';\nimport { SdSelectionVisiblePipe } from './pipes/selection-visible.pipe';\nimport { SdTableExportContext, TableExportService, TableFormatService } from './services';\nimport { ConfigService } from './services/config.service';\nimport { buildColumnWidthMap } from './services/column-width.util';\nimport { SdTableFilterService } from './services/table-filter/table-filter.service';\nimport {\n collectFormattedTreeRows,\n flattenDataTree,\n flattenTree,\n getChildrenFromData,\n getChildrenKey,\n hasLazyChildren,\n resolveDefaultExpanded,\n resolveHasChildren,\n} from './services/tree/tree.util';\nimport { I18nService, TranslatePipe } from '@sdcorejs/angular/i18n';\n\n@Injectable()\nexport class MatPaginatorIntlCro extends MatPaginatorIntl {\n // i18n labels resolved at construction. Reads VI/EN from I18nService.\n readonly #i18n = inject(I18nService);\n override firstPageLabel = this.#i18n.t('core.component.table.paginator.first-page');\n override lastPageLabel = this.#i18n.t('core.component.table.paginator.last-page');\n override itemsPerPageLabel = this.#i18n.t('core.component.table.paginator.items-per-page');\n override nextPageLabel = this.#i18n.t('core.component.table.paginator.next-page');\n override previousPageLabel = this.#i18n.t('core.component.table.paginator.previous-page');\n\n override getRangeLabel = (page: number, pageSize: number, length: number) => {\n if (length === 0 || pageSize === 0) {\n return '';\n }\n const from = page * pageSize + 1;\n const to = from + (length - page * pageSize > pageSize ? pageSize : length - page * pageSize) - 1;\n return `${from}-${to}/${NumberUtilities.toISO(length)}`;\n };\n}\n\n@Component({\n selector: 'sd-table',\n templateUrl: './table.component.html',\n styleUrls: ['./table.component.scss', 'table-sticky-shadow.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: [\n trigger('detailExpand', [\n state('collapsed', style({ height: '0', minHeight: '0', visibility: 'hidden' })),\n state('expanded', style({ height: '*', visibility: 'visible' })),\n transition('expanded <=> collapsed', animate('225ms cubic-bezier(0.4, 0.0, 0.2, 1)')),\n ]),\n ],\n host: {\n '[attr.data-autoid]': 'autoId()',\n '[attr.data-loading]': 'loading() ? \"true\" : \"false\"',\n },\n providers: [\n DatePipe,\n DecimalPipe,\n CdkColumnDef,\n SdTableFilterService,\n TableFormatService,\n TableExportService,\n ConfigService,\n {\n provide: MatPaginatorIntl,\n useClass: MatPaginatorIntlCro,\n },\n ],\n imports: [\n CommonModule,\n FormsModule,\n MatMenuModule,\n MatPaginatorModule,\n MatIconModule,\n MatTableModule,\n MatSortModule,\n MatProgressSpinnerModule,\n MatCheckboxModule,\n MatRadioModule,\n DragDropModule,\n SdButton,\n DesktopCommand,\n DesktopCellComponent,\n ColumnTitleComponent,\n ExternalFilterComponent,\n ConfigComponent,\n ColumnFilterComponent,\n MobileFilterComponent,\n SdGroupPipe,\n SdTreePipe,\n SdSelectionVisiblePipe,\n SdSelectionVisibleSelectAllPipe,\n SdSafeHtmlPipe,\n SdSelectionDisabledPipe,\n SdScrollDirective,\n SdDesktopDirective,\n SdMobileDirective,\n SdHoverCopyDirective,\n SelectorActionComponent,\n StickyShadowDirective,\n SdColumnResizeDirective,\n TranslatePipe,\n ],\n})\nexport class SdTable<T = unknown> extends SdBaseSecureComponent implements OnInit, AfterViewInit, OnDestroy {\n // ... (Giữ nguyên toàn bộ phần khai báo biến, constructor, lifecycle hooks và các hàm filter, load, export, v.v...)\n // ==========================================\n // 1. SIGNAL INPUTS\n // ==========================================\n autoIdInput = input<string | undefined | null>(undefined, { alias: 'autoId' });\n autoId = computed(() => (this.autoIdInput() ? `components-table-${this.autoIdInput()}` : undefined));\n option = input.required<SdTableOption<T>>();\n\n // ==========================================\n // 2. SIGNAL QUERIES\n // ==========================================\n table = viewChild(MatTable);\n configComponent = viewChild(ConfigComponent);\n sdPopupExport = viewChild(SdPopupExport);\n scroll = viewChild(SdScrollDirective);\n quickAction = viewChild(SdQuickAction);\n externalFilter = viewChild(ExternalFilterComponent);\n mobileFilter = viewChild(MobileFilterComponent);\n paginator = viewChild(MatPaginator);\n sort = viewChild(MatSort);\n\n sdSubInformation = contentChild(SdTableExpandDefDirective);\n sdGroupDef = contentChild(SdTableGroupDefDirective);\n sdCellDefs = contentChildren(SdTableCellDefDirective);\n sdFooterDefs = contentChildren(SdMaterialFooterDefDirective);\n sdFilterDefs = contentChildren(SdTableFilterDefDirective);\n sdTitleDefs = contentChildren(SdTableTitleDefDirective);\n\n // ==========================================\n // 3. COMPUTED FROM QUERIES\n // ==========================================\n cellDef = computed(() => {\n const map: Record<string, SdTableCellDefDirective> = {};\n for (const def of this.sdCellDefs()) {\n const field = def.sdTableCellDef();\n if (field) map[field] = def;\n }\n return map;\n });\n\n footerDef = computed(() => {\n const map: Record<string, SdMaterialFooterDefDirective> = {};\n for (const def of this.sdFooterDefs()) {\n const field = def.sdTableFooterDef();\n if (field) map[field] = def;\n }\n return map;\n });\n\n hasFooter = computed(() => Object.keys(this.footerDef()).length > 0);\n\n titleDef = computed(() => {\n const map: Record<string, SdTableTitleDefDirective> = {};\n for (const def of this.sdTitleDefs()) {\n const field = def.sdTableTitleDef();\n if (field) map[field] = def;\n }\n return map;\n });\n\n // ==========================================\n // 4. SIGNAL STATE\n // ==========================================\n tableOption = signal<SdTableOption<T> | undefined>(undefined);\n configuration = signal<ConfiguredTableResult | undefined>(undefined);\n\n items = signal<SdTableItem<T>[]>([]);\n selectedTableItems = signal<SdTableItem<T>[]>([]);\n total = signal<number | undefined>(undefined);\n\n loading = signal(false);\n isSelectAll = signal(false);\n\n isFiltered = signal(false);\n requireFiltered = signal(false);\n\n #tableId = uuid.v4();\n filterRegister!: TableFilterRegister;\n key = uuid.v4();\n\n columnOperator: Record<string, Operator> = {};\n columnFilter?: Record<string, any> = {};\n\n #localItems: SdTableItem<T>[] = [];\n #subscription = new Subscription();\n #reload = new Subject<{ force: boolean }>();\n #loadCompleted = false;\n\n cacheValues: Record<string, any[]> = {};\n #cacheObjValues: Record<string, Record<string, string>> = {};\n #itemIndexMap = new WeakMap<SdTableItem<T>, number>();\n #treeExpandState = new Map<string, boolean>();\n treeRevision = signal(0);\n\n // 1. Private Services\n #ref = inject(ChangeDetectorRef);\n #configService = inject(ConfigService);\n #gridFilterService = inject(SdTableFilterService);\n #notifyService = inject(SdNotifyService);\n readonly #i18n = inject(I18nService);\n #tableFormatService = inject(TableFormatService);\n #tableExportService = inject(TableExportService);\n\n // Expose state signals từ TableExportService cho template binding.\n exporting = this.#tableExportService.exporting;\n exportTitle = this.#tableExportService.exportTitle;\n\n // 2. Public & Optional Token\n tableConfiguration = inject<ISdTableConfiguration>(SD_TABLE_CONFIGURATION, { optional: true });\n\n constructor() {\n super();\n\n effect(() => {\n const option = this.option();\n if (option) {\n untracked(() => {\n const initOpt = this.#initConfiguration({ ...option });\n this.tableOption.set(initOpt);\n this.#loadCompleted = false;\n\n const storage = this.#configService.init(initOpt);\n this.#subscription.add(\n storage.observer.pipe(startWith(storage.subject.getValue())).subscribe(() => {\n const configurationResult = this.#configService.loadConfigurationResult(initOpt, storage.get());\n const displayColumns = configurationResult.displayedColumns || [];\n this.#ref.detectChanges();\n this.#tableFormatService\n .loadValues(\n initOpt.columns.filter(column => displayColumns.includes(column.field)),\n this.cacheValues,\n this.#cacheObjValues\n )\n .then(() => {\n this.configuration.set(configurationResult);\n this.#loadFilterRegister();\n if (this.filterRegister) {\n this.#reload.next({ force: true });\n }\n })\n .finally(() => {\n this.#ref.detectChanges();\n });\n })\n );\n });\n }\n });\n\n effect(() => {\n const paginator = this.paginator();\n if (paginator) {\n untracked(() => {\n this.#subscription.add(paginator.page.subscribe(() => this.#reload.next({ force: false })));\n });\n }\n });\n\n effect(() => {\n const sort = this.sort();\n if (sort) {\n untracked(() => {\n this.#subscription.add(sort.sortChange.subscribe(() => this.#reload.next({ force: false })));\n });\n }\n });\n\n effect(() => {\n const items = this.items();\n this.#itemIndexMap = new WeakMap();\n items.forEach((item, idx) => this.#itemIndexMap.set(item, idx));\n });\n\n this.#subscription.add(\n this.#configService.widthChange$.subscribe(({ field, width }) => {\n // Update configuration signal local — KHÔNG gọi loadValues/reload\n const conf = this.configuration();\n if (!conf) return;\n const firstColumns = conf.firstColumns.map(c =>\n c.field === field ? { ...c, width } : c\n );\n const column = { ...conf.column };\n if (column[field]) {\n column[field] = { ...column[field], width };\n }\n const fixedColumn = { ...conf.fixedColumn };\n if (fixedColumn[field]) {\n fixedColumn[field] = { ...fixedColumn[field], width };\n }\n this.configuration.set({ ...conf, firstColumns, column, fixedColumn });\n })\n );\n }\n\n ngOnInit() {}\n\n ngAfterViewInit() {\n this.#subscription.add(\n this.#reload\n .pipe(\n debounceTime(200),\n switchMap(async data => {\n const filterInfo = this.getFilterRequest();\n const result = await this.#load(filterInfo, !this.#loadCompleted || data.force);\n this.#loadCompleted = true;\n return result;\n })\n )\n .subscribe(this.#render)\n );\n }\n\n ngOnDestroy() {\n this.#subscription.unsubscribe();\n }\n\n // --- GIỮ NGUYÊN TẤT CẢ CÁC HÀM FILTER VÀ EXPORT CŨ CỦA BẠN ---\n #filterExportInfo = (pageNumber: number, pageSize: number): SdTableFilterRequest => {\n const { columnOperator, columnFilter, externalFilter } = this.filterRegister.value.get();\n return {\n columnOperator: columnOperator || {},\n rawColumnFilter: columnFilter || {},\n rawExternalFilter: externalFilter || {},\n orderBy: this.sort()?.active || '',\n orderDirection: this.sort()?.direction === 'asc' ? 'ASC' : this.sort()?.direction === 'desc' ? 'DESC' : undefined,\n pageNumber,\n pageSize,\n isExported: true,\n };\n };\n\n #initConfiguration = (option: SdTableOption): SdTableOption => {\n option.paginate = {\n hidden: option?.paginate?.hidden,\n pageSize: option?.paginate?.pageSize ?? this.tableConfiguration?.paginate?.pageSize ?? DEFAULT_TABLE_CONFIG.paginate?.pageSize,\n pages: option?.paginate?.pages ?? this.tableConfiguration?.paginate?.pages ?? DEFAULT_TABLE_CONFIG.paginate?.pages,\n showFirstLastButtons: option?.paginate?.showFirstLastButtons ?? this.tableConfiguration?.paginate?.showFirstLastButtons ?? false,\n hidePageSize: option?.paginate?.hidePageSize ?? false,\n };\n option.filter = option.filter || {};\n option.filter.hideInlineFilter = option?.filter?.hideInlineFilter ?? this.tableConfiguration?.filter?.hideInlineFilter;\n option.filter.externalFilterPerRow = option?.filter?.externalFilterPerRow ?? this.tableConfiguration?.filter?.externalFilterPerRow;\n option.filter.manualFilter = option?.filter?.manualFilter ?? this.tableConfiguration?.filter?.manualFilter;\n option.filter.hideExternalFilterToolbar =\n option?.filter?.hideExternalFilterToolbar ?? this.tableConfiguration?.filter?.hideExternalFilterToolbar;\n for (const column of option.columns || []) {\n if (column.filter?.operator?.enable) {\n if (!column.filter?.operator?.list?.length) {\n column.filter.operator.list = this.tableConfiguration?.filter?.operator?.list?.[column.type] || [];\n }\n\n this.columnOperator[column?.field] = this.tableConfiguration?.filter?.operator?.default?.[column.type]!;\n if (column.filter.operator.default && column.filter.operator.list?.some(el => el === column.filter?.operator?.default)) {\n this.columnOperator[column.field] = column.filter.operator.default;\n }\n }\n }\n return option;\n };\n\n #loadFilterRegister = () => {\n const opt = this.tableOption();\n if (opt && !this.filterRegister) {\n this.filterRegister = this.#gridFilterService.register(opt?.filter, {\n id: this.#tableId,\n columns: opt?.columns,\n externalFilters: opt?.filter?.externalFilters,\n filterDefs: [...this.sdFilterDefs()],\n columnOperator: this.columnOperator,\n });\n\n this.#subscription.add(\n this.filterRegister.value.observer\n .pipe(\n debounceTime(500),\n map(filterValue => {\n const { columnOperator, columnFilter, notReload } = filterValue;\n this.columnOperator = columnOperator || {};\n // Sync IN PLACE — không gán object clone mới. column-filter chia sẻ\n // reference this.columnFilter qua [columnFilter] input; nếu gán clone\n // mới, cf giữ ref cũ (do OnPush + reload async lag) → ghi clear vào\n // object orphan → giá trị cũ persist. Giữ ref ổn định để cf + table\n // luôn trỏ cùng 1 object.\n this.#syncColumnFilterInPlace(columnFilter || {});\n if (!notReload) {\n if (this.paginator()) {\n this.paginator()!.pageIndex = 0;\n }\n this.#reload.next({ force: false });\n }\n })\n )\n .subscribe()\n );\n }\n };\n\n // Đồng bộ this.columnFilter với `next` mà GIỮ NGUYÊN reference object.\n // column-filter chia sẻ ref này qua [columnFilter] — reassign clone mới sẽ\n // orphan ref cũ (cf vẫn ghi vào đó do CD lag) khiến clear/giá trị stale.\n #syncColumnFilterInPlace = (next: Record<string, any>) => {\n const cur = this.columnFilter ?? (this.columnFilter = {});\n if (cur === next) return;\n for (const key of Object.keys(cur)) {\n if (!(key in next)) delete cur[key];\n }\n Object.assign(cur, next);\n };\n\n #filterLocal = (localItems: SdTableItem<T>[], filterInfo: SdTableFilterRequest) => {\n const opt = this.tableOption()!;\n const { columns } = opt;\n const { rawColumnFilter, orderBy, orderDirection, pageSize, pageNumber } = filterInfo;\n const items = localItems.filter(tableItem => {\n const item = tableItem.data;\n for (const column of columns) {\n const { field, type } = column;\n const filterValue: string = (rawColumnFilter[field] || '').toString().trim().toLowerCase();\n\n // SỬA: Dùng getNestedValue để hỗ trợ nested field trong filterLocal\n const rawColVal = Utilities.getNestedValue(item, field);\n const columnValue: string = (rawColVal || '').toString().trim().toLowerCase();\n\n if (filterValue) {\n if (!columnValue && type !== 'datetime' && type !== 'date' && type !== 'time') {\n return false;\n }\n if (type === 'string') {\n if (columnValue.indexOf(filterValue) === -1) {\n return false;\n }\n } else if (type === 'values' || type === 'lazy-values') {\n const columnType = column as SdTableColumnValues<T> | SdTableColumnLazyValues<T>;\n const isMultiple = columnType.option.selection === 'MULTIPLE';\n if (isMultiple && Array.isArray(rawColVal)) {\n const columnValues: string[] =\n rawColVal.map((i: any) =>\n (Utilities.getNestedValue(i, columnType.option.valueField) ?? '').toString().trim().toLowerCase()\n ) ?? [];\n const filterValues: string[] = rawColumnFilter[field]?.map((v: any) => (v ?? '').toString().trim().toLowerCase());\n if (filterValues?.length && filterValues.every(fv => !columnValues.includes(fv))) {\n return false;\n }\n } else {\n if (columnValue !== filterValue) {\n return false;\n }\n }\n } else if (type === 'number') {\n const fValue = +filterValue.replace('>=', '').replace('<=', '').replace('>', '').replace('<', '');\n const cValue = +columnValue;\n if (fValue || fValue === 0) {\n if (!cValue && cValue !== 0) {\n return false;\n }\n if (filterValue.indexOf('>=') > -1 && cValue < fValue) {\n return false;\n } else if (filterValue.indexOf('<=') > -1 && cValue > fValue) {\n return false;\n } else if (filterValue.indexOf('<') > -1 && cValue >= fValue) {\n return false;\n } else if (filterValue.indexOf('>') > -1 && cValue <= fValue) {\n return false;\n } else if (cValue !== fValue) {\n return false;\n }\n }\n } else if (type === 'boolean') {\n if ((filterValue === '1' || filterValue === 'true') && columnValue !== '1' && columnValue !== 'true') {\n return false;\n } else if ((filterValue === '0' || filterValue === 'false') && columnValue !== '0' && columnValue !== 'false') {\n return false;\n }\n } else if (type === 'datetime' || type === 'date' || type === 'time') {\n const from = rawColumnFilter[field]?.from ?? rawColumnFilter[field];\n const to = rawColumnFilter[field]?.to ?? rawColumnFilter[field];\n const fromDate = DateUtilities.begin(from);\n const toDate = DateUtilities.end(to);\n if (fromDate || toDate) {\n if (!columnValue) {\n return false;\n }\n\n const columnTime = new Date(columnValue).getTime();\n const fromDateTime = fromDate?.getTime() || null;\n const toDateTime = toDate?.getTime() || null;\n\n if (fromDateTime && fromDateTime > columnTime) {\n return false;\n }\n if (toDateTime && columnTime > toDateTime) {\n return false;\n }\n }\n }\n }\n }\n return true;\n });\n // Sort\n if (orderBy && orderDirection) {\n const column = columns.find(e => e.field === orderBy);\n if (column) {\n const { type, field } = column;\n items.sort((tableItemCurrent, tableItemNext) => {\n const data = tableItemCurrent.data;\n const next = tableItemNext.data;\n // SỬA: Dùng getNestedValue cho sorting\n const dataVal = Utilities.getNestedValue(data, field);\n const nextVal = Utilities.getNestedValue(next, field);\n\n if (type === 'number') {\n return (dataVal || 0) - (nextVal || 0);\n }\n if (type === 'date' || type === 'datetime' || type === 'time') {\n const d1 = new Date(dataVal || '').getTime();\n const d2 = new Date(nextVal || '').getTime();\n return d1 - d2;\n }\n const s1 = (dataVal || '').toString();\n const s2 = (nextVal || '').toString();\n if (s1 > s2) {\n return 1;\n }\n if (s1 < s2) {\n return -1;\n }\n return 0;\n });\n if (orderDirection === 'DESC') {\n items.reverse();\n }\n }\n }\n return {\n items: items.filter((item, index) => {\n return index >= pageNumber * pageSize && index < (pageNumber + 1) * pageSize;\n }),\n total: items.length,\n };\n };\n\n getFilterRequest = (): SdTableFilterRequest => {\n const { columnOperator, columnFilter, externalFilter } = this.filterRegister.value.get();\n return {\n columnOperator: columnOperator || {},\n rawColumnFilter: columnFilter || {},\n rawExternalFilter: externalFilter || {},\n orderBy: this.sort()?.active || '',\n orderDirection: this.sort()?.direction === 'asc' ? 'ASC' : this.sort()?.direction === 'desc' ? 'DESC' : undefined,\n pageNumber: this.paginator()?.pageIndex || 0,\n pageSize: this.paginator()?.pageSize || this.tableOption()?.paginate?.pageSize || 50,\n visibledColumns: ArrayUtilities.union('field', this.configuration()?.firstColumns || [], this.configuration()?.secondColumns || []),\n };\n };\n\n #isFiltered = (filterReq: SdTableFilterRequest) => {\n const { pageNumber, rawColumnFilter, rawExternalFilter } = filterReq;\n if (pageNumber !== 0) {\n return true;\n }\n if (\n Object.values({ ...rawColumnFilter }).some(val => {\n if (Array.isArray(val)) {\n return !!val.length;\n }\n if (val && typeof val === 'object') {\n if ('from' in val && !!val.from) {\n return true;\n }\n if ('to' in val && !!val.to) {\n return true;\n }\n return false;\n }\n return val !== undefined && val !== null && val !== '';\n })\n ) {\n return true;\n }\n if (\n Object.values({ ...rawExternalFilter }).some(val => {\n if (Array.isArray(val)) {\n return !!val.length;\n }\n if (val && typeof val === 'object') {\n if ('from' in val && !!val.from) {\n return true;\n }\n if ('to' in val && !!val.to) {\n return true;\n }\n return false;\n }\n return val !== undefined && val !== null && val !== '';\n })\n ) {\n return true;\n }\n return false;\n };\n\n #checkFilter = (filterReq: SdTableFilterRequest) => {\n this.isFiltered.set(this.#isFiltered(filterReq));\n this.requireFiltered.set(!!this.tableOption()?.filter?.externalFilters?.some(e => e.required));\n };\n\n #load = async (\n filterReq: SdTableFilterRequest,\n force = true\n ): Promise<{\n items: SdTableItem<T>[];\n total: number;\n }> => {\n this.loading.set(true);\n this.#ref.detectChanges();\n this.#checkFilter(filterReq);\n\n const opt = this.tableOption()!;\n if (opt.type === 'server') {\n const { items, onFilter } = opt;\n try {\n onFilter?.(filterReq, {\n externalFilterValid: !this.externalFilter()?.form?.invalid,\n });\n } catch (err) {\n console.error(err);\n }\n if (this.externalFilter()?.form?.invalid) {\n this.loading.set(false);\n this.#ref.detectChanges();\n return {\n items: [],\n total: 0,\n };\n }\n const pagingReq = this.#convertPagingReq(filterReq);\n const data = await items(filterReq, pagingReq).catch(err => {\n console.error(err);\n return {\n items: [] as T[],\n total: 0,\n };\n });\n return {\n items: await this.#tableFormatService.format(data?.items, opt.columns, this.cacheValues, this.#cacheObjValues).finally(() => {\n this.loading.set(false);\n this.#ref.detectChanges();\n }),\n total: data?.total || 0,\n };\n }\n if (force) {\n const { items } = opt;\n const results = items();\n let data: T[] = [];\n if (results instanceof Promise) {\n data = await results.catch(err => {\n this.#notifyService.warning(this.#i18n.t('core.component.table.error-occurred'));\n console.error(err);\n return [];\n });\n } else {\n data = results;\n }\n if (!Array.isArray(data)) {\n this.#notifyService.warning(this.#i18n.t('core.component.table.not-an-array'));\n data = [];\n }\n this.#localItems = await this.#tableFormatService.format(data, opt.columns, this.cacheValues, this.#cacheObjValues);\n }\n this.loading.set(false);\n this.#ref.detectChanges();\n return this.#filterLocal(this.#localItems, filterReq);\n };\n\n #render = async (\n args: { items: SdTableItem<T>[]; total: number },\n scrollTop = true,\n additionArgs?: { fromSource?: 'PAGING' | 'RELOAD' }\n ) => {\n if (scrollTop) {\n this.scroll()?.scrollTop();\n }\n\n const treeOpt = this.tableOption()?.tree;\n if (treeOpt) {\n this.#saveTreeExpandState(this.items());\n }\n\n this.items.set(args?.items || []);\n this.total.set(args?.total || 0);\n\n if (treeOpt) {\n this.#initTreeMeta(this.items(), treeOpt);\n await this.#expandDefaultBranches(this.items(), treeOpt);\n this.treeRevision.update(n => n + 1);\n }\n\n // Restore selection từ preservedSelectedMap (chỉ khi preserveSelection bật).\n // Phải chạy TRƯỚC applyDefaultSelected để user-selection ưu tiên hơn default.\n this.#restorePreservedSelection();\n\n // Áp dụng defaultSelected: pre-select các item thỏa predicate\n this.#applyDefaultSelected();\n\n await this.tableOption()?.reload?.onReload?.(this.items(), additionArgs);\n this.#syncSelectAllState();\n this.#updateSelectedItems();\n\n setTimeout(() => {\n this.table()?.updateStickyColumnStyles();\n }, 0);\n };\n\n reload = async (force = true, scrollTop = true) => {\n this.externalFilter()?.updateFilter?.();\n // Commit pending column filter value (input/input-number gõ dở chưa enter/blur)\n // vào filterRegister trước khi đọc filter request — tránh storage stale.\n this.filterRegister?.value.set({\n columnOperator: this.columnOperator || {},\n columnFilter: this.columnFilter,\n notReload: true,\n });\n const data = await this.#load(this.getFilterRequest(), force);\n this.#render(data, scrollTop, { fromSource: 'RELOAD' });\n };\n\n #exportedItems = async (pageNumber = 0, pageSize = 100) => {\n const opt = this.tableOption()!;\n if (opt.export?.type === 'default' && opt.export?.items) {\n let result = opt.export?.items(this.#filterExportInfo(pageNumber, pageSize));\n if (Array.isArray(result)) {\n return result;\n }\n if (isObservable(result)) {\n result = firstValueFrom(result) as any;\n }\n if (isObservable(result)) {\n result = firstValueFrom(result) as any;\n }\n return await result;\n } else {\n const filterReq = this.#filterExportInfo(pageNumber, pageSize);\n if (opt.type === 'server') {\n const pagingReq = this.#convertPagingReq(filterReq);\n const result = opt.items(filterReq, pagingReq);\n return await result;\n } else {\n let exportedItems: any[] = [];\n if (typeof opt.items === 'function') {\n const results = opt.items();\n if (results instanceof Promise) {\n exportedItems = await results;\n } else {\n exportedItems = results;\n }\n } else {\n exportedItems = opt.items;\n }\n if (opt.tree) {\n exportedItems = flattenDataTree(exportedItems, opt.tree);\n }\n return this.#filterLocal(exportedItems, filterReq);\n }\n }\n };\n\n // Helper tạo Context truyền cho Service\n #createExportContext = (): SdTableExportContext => {\n return {\n option: this.tableOption()!,\n configuration: this.configuration(),\n total: this.total() || 0,\n cacheObjValues: this.#cacheObjValues,\n getFilterInfo: () => this.getFilterRequest(),\n fetchChunk: (pageNumber: number, pageSize: number) => this.#exportedItems(pageNumber, pageSize),\n };\n };\n\n exportExcel = (columns?: SdExcelColumn[]) => {\n this.#tableExportService.exportExcel(this.#createExportContext(), columns);\n };\n\n exportCSV = (columns?: SdExcelColumn[]) => {\n this.#tableExportService.exportCSV(this.#createExportContext(), columns);\n };\n\n exportCustom = () => {\n this.#tableExportService.exportCustom(this.#createExportContext());\n };\n\n #saveTreeExpandState = (rows: SdTableItem<T>[]) => {\n for (const row of rows) {\n if (row.meta.tree?.isExpanded) {\n this.#treeExpandState.set(row.meta.id, true);\n }\n for (const child of row.meta.tree?.childItems ?? []) {\n this.#saveTreeExpandState([child]);\n }\n }\n };\n\n #initTreeMeta = (rows: SdTableItem<T>[], option: NonNullable<SdTableOption<T>['tree']>, level = 0, parentId?: string) => {\n for (const row of rows) {\n const saved = this.#treeExpandState.get(row.meta.id);\n row.meta.tree = {\n ...row.meta.tree,\n level,\n parentId,\n hasChildren: resolveHasChildren(row, option),\n isExpanded: saved ?? resolveDefaultExpanded(level, option),\n isExpanding: false,\n };\n }\n };\n\n #ensureChildItemsFormatted = async (row: SdTableItem<T>) => {\n if (row.meta.tree?.childItems?.length) return;\n const opt = this.tableOption()!;\n const treeOpt = opt.tree!;\n const raw = getChildrenFromData(row.data, treeOpt);\n if (!raw.length) return;\n const formatted = await this.#tableFormatService.format(raw, opt.columns, this.cacheValues, this.#cacheObjValues);\n row.meta.tree!.childItems = formatted;\n const childLevel = (row.meta.tree!.level ?? 0) + 1;\n for (const child of formatted) {\n const saved = this.#treeExpandState.get(child.meta.id);\n child.meta.tree = {\n level: childLevel,\n parentId: row.meta.id,\n hasChildren: resolveHasChildren(child, treeOpt),\n isExpanded: saved ?? resolveDefaultExpanded(childLevel, treeOpt),\n isExpanding: false,\n };\n }\n };\n\n #expandDefaultBranches = async (rows: SdTableItem<T>[], option: NonNullable<SdTableOption<T>['tree']>) => {\n const maxDepth = option.maxDepth;\n for (const row of rows) {\n if (!row.meta.tree?.isExpanded || !row.meta.tree.hasChildren) continue;\n const level = row.meta.tree.level ?? 0;\n const depthOk = maxDepth === undefined || level < maxDepth;\n if (!depthOk) continue;\n await this.#ensureChildItemsFormatted(row);\n const children = row.meta.tree.childItems ?? [];\n if (children.length) {\n await this.#expandDefaultBranches(children, option);\n }\n }\n };\n\n onTreeToggle = async (row: SdTableItem<T>) => {\n const treeOpt = this.tableOption()?.tree;\n if (!treeOpt || !row.meta.tree?.hasChildren || row.meta.tree.isExpanding) return;\n\n if (row.meta.tree.isExpanded) {\n row.meta.tree.isExpanded = false;\n this.#treeExpandState.delete(row.meta.id);\n this.treeRevision.update(n => n + 1);\n this.#ref.markForCheck();\n return;\n }\n\n try {\n if (hasLazyChildren(row, treeOpt)) {\n row.meta.tree.isExpanding = true;\n this.#ref.markForCheck();\n const key = getChildrenKey(treeOpt);\n const result = await Promise.resolve(treeOpt.onExpandChildren!(row.data));\n (row.data as Record<string, unknown>)[key] = Array.isArray(result) ? result : [];\n row.meta.tree.hasChildren = resolveHasChildren(row, treeOpt);\n }\n await this.#ensureChildItemsFormatted(row);\n if (!row.meta.tree.childItems?.length && getChildrenFromData(row.data, treeOpt).length === 0) {\n row.meta.tree.hasChildren = false;\n return;\n }\n row.meta.tree.isExpanded = true;\n this.#treeExpandState.set(row.meta.id, true);\n const maxDepth = treeOpt.maxDepth;\n const level = row.meta.tree.level ?? 0;\n if (maxDepth === undefined || level + 1 < maxDepth) {\n await this.#expandDefaultBranches(row.meta.tree.childItems ?? [], treeOpt);\n }\n } catch (err) {\n console.error(err);\n this.#notifyService.warning(this.#i18n.t('core.component.table.error-occurred'));\n } finally {\n if (row.meta.tree) {\n row.meta.tree.isExpanding = false;\n }\n this.treeRevision.update(n => n + 1);\n this.#ref.markForCheck();\n }\n };\n\n onFilterChange = () => {\n this.externalFilter()?.updateFilter?.();\n this.filterRegister.value.set({\n columnOperator: this.columnOperator || {},\n columnFilter: this.columnFilter,\n });\n };\n\n // Blur input filter: chỉ commit giá trị vào filterRegister, KHÔNG trigger reload.\n // Reload chỉ chạy khi user enter hoặc bấm nút tải lại.\n onFilterCommit = () => {\n this.filterRegister?.value.set({\n columnOperator: this.columnOperator || {},\n columnFilter: this.columnFilter,\n notReload: true,\n });\n };\n\n onExpand = async (rowData: SdTableItem<T>) => {\n const opt = this.tableOption()!;\n if (opt.expand?.always || rowData.meta.expand?.isExpanding) {\n return;\n }\n if (rowData.meta.expand?.isExpanded) {\n rowData.meta.expand.isExpanded = false;\n return;\n }\n const data = opt.expand?.onExpand?.(rowData.data);\n if (!opt.expand?.multiple) {\n this.items().forEach(item => (item.meta.expand!.isExpanding = item.meta.expand!.isExpanded = false));\n }\n if (data instanceof Promise) {\n rowData.meta.expand!.isExpanding = true;\n data\n .then(res => {\n rowData.meta.expand!.data = res;\n rowData.meta.expand!.isExpanded = true;\n })\n .finally(() => (rowData.meta.expand!.isExpanding = false));\n } else {\n rowData.meta.expand!.data = data;\n rowData.meta.expand!.isExpanded = true;\n }\n };\n\n onSelect = (rowData: SdTableItem<T>) => {\n const opt = this.tableOption()!;\n const selectedData = () => this.#getSelectedRowData();\n if (rowData.meta.group?.items?.length) {\n rowData.meta.group.items.forEach(e => (e.meta.selector!.isSelected = rowData.meta.selector!.isSelected));\n opt.selector?.onSelect?.(rowData.data, selectedData());\n this.#syncSelectAllState();\n this.#updateSelectedItems();\n } else {\n if (opt.selector?.single) {\n this.#getSelectionRows()\n .filter(e => e !== rowData)\n .forEach(e => (e.meta.selector!.isSelected = false));\n // single + preserve: chỉ giữ MỘT item trong map (item vừa chọn nếu isSelected,\n // hoặc empty nếu vừa bỏ chọn). Off-page items có thể đã ở trong map → xoá hết\n // trước khi #updateSelectedItems sync entry mới.\n if (this.#preserveEnabled()) {\n this.#preservedSelectedMap.clear();\n }\n opt.selector?.onSelect?.(rowData.data, selectedData());\n this.isSelectAll.set(false);\n this.#updateSelectedItems();\n return;\n }\n opt.selector?.onSelect?.(rowData.data, selectedData());\n this.#syncSelectAllState();\n this.#updateSelectedItems();\n }\n };\n\n onSelectAll = () => {\n const opt = this.tableOption();\n const isSelected = this.isSelectAll();\n this.#getSelectionRows().forEach(e => {\n if (e.meta.selector!.selectable && (!opt?.selector?.actions?.length || e.meta.selector!.actions?.length)) {\n e.meta.selector!.isSelected = isSelected;\n }\n });\n opt?.selector?.onSelectAll?.(this.#getSelectedRowData());\n this.#updateSelectedItems();\n };\n\n onClearSelection = (items?: SdTableItem<T>[]) => {\n items = items || this.items();\n this.isSelectAll.set(false);\n items?.forEach(e => (e.meta.selector!.isSelected = false));\n // User explicit X — clear toàn bộ preserved map (bao gồm cả off-page items).\n if (this.#preserveEnabled()) {\n this.#preservedSelectedMap.clear();\n }\n this.#updateSelectedItems();\n };\n\n #getSelectionRows = (): SdTableItem<T>[] => {\n const roots = this.items();\n const treeOpt = this.tableOption()?.tree;\n if (!treeOpt) return roots;\n return flattenTree(roots, treeOpt);\n };\n\n #getSelectedRowData = (): T[] =>\n this.#getSelectionRows()\n .filter(e => e.meta.selector!.isSelected)\n .map(e => e.data);\n\n #applyDefaultSelected = () => {\n const defaultSelected = this.tableOption()?.selector?.defaultSelected;\n if (!defaultSelected) return;\n const treeOpt = this.tableOption()?.tree;\n const rows = treeOpt ? collectFormattedTreeRows(this.items()) : this.items();\n rows.forEach(item => {\n item.meta.selector!.isSelected = defaultSelected(item.data);\n });\n };\n\n #syncSelectAllState = () => {\n const visible = this.#getSelectionRows();\n this.isSelectAll.set(visible.length > 0 && visible.every(e => e.meta.selector?.isSelected));\n };\n\n // ==========================================\n // GROUP HELPERS — sync selection + expand state cho group header rows\n // ==========================================\n\n /** Children selectable của 1 group header (lọc bỏ children không selectable). */\n #groupSelectableChildren = (header: SdTableItem<T>): SdTableItem<T>[] => {\n const children = header.meta.group?.items || [];\n return children.filter(c => c.meta.selector?.selectable !== false);\n };\n\n /** true nếu MỌI selectable child trong group đều selected. Group rỗng (không child) → false. */\n isGroupAllSelected = (header: SdTableItem<T>): boolean => {\n const sel = this.#groupSelectableChildren(header);\n return sel.length > 0 && sel.every(c => c.meta.selector!.isSelected);\n };\n\n /** true nếu CÓ MỘT VÀI selectable child selected nhưng KHÔNG phải tất cả. */\n isGroupIndeterminate = (header: SdTableItem<T>): boolean => {\n const sel = this.#groupSelectableChildren(header);\n if (sel.length === 0) return false;\n const some = sel.some(c => c.meta.selector!.isSelected);\n const all = sel.every(c => c.meta.selector!.isSelected);\n return some && !all;\n };\n\n /** Toggle select-all cho 1 group: set isSelected cho mọi selectable child, sync state. */\n onSelectGroup = (header: SdTableItem<T>, checked: boolean) => {\n const sel = this.#groupSelectableChildren(header);\n sel.forEach(c => (c.meta.selector!.isSelected = checked));\n const opt = this.tableOption();\n opt?.selector?.onSelectAll?.(this.#getSelectedRowData());\n this.#syncSelectAllState();\n this.#updateSelectedItems();\n };\n\n // Map<groupKey, isExpanded> — table own state, pass vào SdGroupPipe arg 3.\n // why: pipe stateless, persist toggle qua các lần re-eval bằng Map external. Mutate Map\n // KHÔNG tự re-trigger pipe (default pure: true) — gọi items.update để invalidate input.\n groupExpandState = new Map<string, boolean>();\n\n /** Toggle expand/collapse cho 1 group (chỉ ý nghĩa khi option.group.collapsible). */\n toggleGroupExpand = (header: SdTableItem<T>) => {\n if (!header.meta.group?.key) return;\n const key = header.meta.group.key;\n const defaultExpanded = !this.tableOption()?.group?.defaultCollapsed;\n const current = this.groupExpandState.has(key)\n ? !!this.groupExpandState.get(key)\n : defaultExpanded;\n this.groupExpandState.set(key, !current);\n header.meta.group.isExpanded = !current;\n // why: trigger pipe re-eval — Map mutation không thay đổi reference items() nên cần update.\n this.items.update(arr => [...arr]);\n };\n\n /**\n * Predicate cho matRowDef.when — phân biệt group header row vs data row.\n * Group header row dùng matRowDef riêng với column list ['sdGroupHeader'] (1 cell duy nhất).\n * Data row dùng displayedColumns nguyên vẹn.\n */\n isGroupHeaderRow = (_idx: number, row: SdTableItem<T>): boolean =>\n row?.meta?.group?.isGroupHeader === true;\n isDataRow = (_idx: number, row: SdTableItem<T>): boolean =>\n row?.meta?.group?.isGroupHeader !== true;\n\n /**\n * Colspan cho cell sdGroupHeader trên group row = displayedColumns.length.\n * Span TOÀN BỘ width data row vì group row chỉ có 1 cell.\n */\n sdGroupColspan = computed(() => (this.configuration()?.displayedColumns?.length || 1));\n\n /** Build context object truyền vào SdTableGroupDefDirective template. */\n groupContext = (header: SdTableItem<T>): SdTableGroupDefContext<T> => {\n const g = header.meta.group;\n const items = g?.items || [];\n return {\n items,\n data: items.map(i => i.data),\n key: g?.key || '',\n values: g?.values || {},\n isExpanded: g?.isExpanded ?? true,\n isSelected: this.isGroupAllSelected(header),\n indeterminate: this.isGroupIndeterminate(header),\n toggleExpand: () => this.toggleGroupExpand(header),\n toggleSelect: () => this.onSelectGroup(header, !this.isGroupAllSelected(header)),\n };\n };\n\n rowStyle = (row: SdTableItem<T>, index?: number): Record<string, string> | null => {\n const fn = this.tableOption()?.style?.rowCss;\n if (!fn) return null;\n const tree = row.meta?.tree;\n const ctx =\n this.tableOption()?.tree && tree\n ? { level: tree.level, hasChildren: tree.hasChildren, isExpanded: tree.isExpanded }\n : undefined;\n return fn(row.data, index, ctx);\n };\n\n // why: khi preserveSelection bật, giữ map nội bộ id → SdTableItem để selection\n // không mất qua filter / paginate / sort / reload (kể cả server re-fetch tạo refs mới).\n // Map chỉ bị clear khi user gọi onClearSelection (nút X) hoặc bỏ chọn từng item.\n #preservedSelectedMap = new Map<string, SdTableItem<T>>();\n\n #preserveEnabled = () => this.tableOption()?.selector?.preserveSelection === true;\n\n // Restore isSelected cho item visible nào id đã có trong preserved map.\n // Đồng thời update reference trong map sang SdTableItem mới (cần thiết khi server\n // re-fetch tạo refs mới, ta muốn map giữ ref hiện hành để các tham chiếu downstream OK).\n #restorePreservedSelection = () => {\n if (!this.#preserveEnabled()) return;\n const rows = this.#getSelectionRows();\n rows.forEach(item => {\n if (this.#preservedSelectedMap.has(item.meta.id)) {\n item.meta.selector!.isSelected = true;\n this.#preservedSelectedMap.set(item.meta.id, item);\n }\n });\n };\n\n #updateSelectedItems = () => {\n const rows = this.#getSelectionRows();\n if (this.#preserveEnabled()) {\n // Sync map theo state visible: add nếu selected, remove nếu deselected.\n // Off-page items giữ nguyên trong map (không bị visit ở đây).\n rows.forEach(item => {\n const id = item.meta.id;\n if (item.meta.selector!.isSelected) {\n this.#preservedSelectedMap.set(id, item);\n } else {\n this.#preservedSelectedMap.delete(id);\n }\n });\n this.selectedTableItems.set(Array.from(this.#preservedSelectedMap.values()));\n } else {\n this.selectedTableItems.set(rows.filter(item => item.meta.selector!.isSelected));\n }\n this.#ref.detectChanges();\n };\n\n clearFilter = () => {\n this.filterRegister.value.remove();\n };\n\n setFilter = (args: { columnFilter?: Record<string, any>; externalFilter?: Record<string, any> }) => {\n const { columnFilter, externalFilter } = args || {};\n if (columnFilter) {\n // Giữ reference ổn định cho column-filter (xem #syncColumnFilterInPlace).\n this.#syncColumnFilterInPlace(columnFilter);\n }\n this.filterRegister.value.set({\n columnFilter,\n externalFilter,\n });\n };\n\n get dataItems(): T[] {\n return this.items().map(item => item.data);\n }\n\n get selectedItems(): T[] {\n return this.selectedTableItems().map(item => item.data);\n }\n\n detectChanges = () => this.#ref.detectChanges();\n\n onColumnResize = (field: string, width: string) => {\n // persistColumnWidth ghi storage (silent) và emit widthChange$,\n // subscriber trong constructor đã update configuration() signal đồng bộ.\n this.#configService.persistColumnWidth(field, width);\n\n const onResize = this.tableOption()?.config?.onResize;\n if (!onResize) return;\n onResize(field, width, buildColumnWidthMap(this.configuration()?.column));\n };\n\n onOperatorChange = (column: SdTableColumn, operator: Operator | undefined) => {\n if (operator == null) return;\n this.tableOption()?.filter?.operatorChange?.(column, operator);\n };\n\n trackBy = (index: number, item: SdTableItem) => {\n return item.meta.id;\n };\n\n // Offset STT theo paging — computed memoize, không tính lại trừ khi paginator đổi.\n // Template chỉ cần đọc pageOffset() rồi cộng `i + 1` (rẻ hơn gọi function).\n pageOffset = computed(() => {\n const p = this.paginator();\n return (p?.pageIndex ?? 0) * (p?.pageSize ?? 0);\n });\n\n isReorderDisabled(item: SdTableItem<T>): boolean {\n if ((item.meta.tree?.level ?? 0) > 0) return true;\n const opt = this.tableOption()?.rowReorder;\n if (!opt?.disabled || item.meta?.group?.items?.length) return false;\n const idx = this.#itemIndexMap.get(item) ?? -1;\n return opt.disabled(item.data, idx);\n }\n\n #sameGroup(a: SdTableItem<T>, b: SdTableItem<T>, allItems: SdTableItem<T>[]): boolean {\n const groupOf = (item: SdTableItem<T>): number => {\n let lastGroupIdx = -1;\n for (let i = 0; i < allItems.length; i++) {\n if (allItems[i].meta?.group?.items?.length) lastGroupIdx = i;\n if (allItems[i] === item) return lastGroupIdx;\n }\n return -1;\n };\n return groupOf(a) === groupOf(b);\n }\n\n reorderSortPredicate = (index: number, drag: CdkDrag<SdTableItem<T>>, drop: CdkDropList<SdTableItem<T>[]>): boolean => {\n const opt = this.tableOption()?.rowReorder;\n if (!opt?.enabled) return false;\n const allItems = drop.data;\n const targetItem = allItems?.[index];\n if (!targetItem) return false;\n if ((targetItem.meta.tree?.level ?? 0) > 0) return false;\n if ((drag.data.meta.tree?.level ?? 0) > 0) return false;\n if (targetItem.meta?.group?.items?.length) return false;\n if (this.tableOption()?.group) {\n return this.#sameGroup(drag.data, targetItem, allItems);\n }\n return true;\n };\n\n onReorderDrop(event: CdkDragDrop<SdTableItem<T>[]>): void {\n const { previousIndex, currentIndex } = event;\n if (previousIndex === currentIndex) return;\n const groupedItems = event.container.data;\n const toItemsIndex = (domIdx: number): number => {\n let count = 0;\n for (let i = 0; i < domIdx; i++) {\n if (!groupedItems[i]?.meta?.group?.items?.length && (groupedItems[i]?.meta?.tree?.level ?? 0) === 0) count++;\n }\n return count;\n };\n const fromIdx = toItemsIndex(previousIndex);\n const toIdx = toItemsIndex(currentIndex);\n const current = [...this.items()];\n const localPositions = current.map(item => this.#localItems.indexOf(item));\n moveItemInArray(current, fromIdx, toIdx);\n this.items.set(current);\n if (this.tableOption()?.type === 'local' && localPositions.every(p => p >= 0)) {\n const newLocal = [...this.#localItems];\n current.forEach((item, i) => {\n newLocal[localPositions[i]] = item;\n });\n this.#localItems = newLocal;\n }\n this.table()?.renderRows();\n this.tableOption()?.rowReorder?.onChange?.(\n current.map(i => i.data),\n event.item.data.data,\n fromIdx,\n toIdx\n );\n }\n\n #convertPagingReq = (filterReq: SdTableFilterRequest): PagingReq => {\n const opt = this.tableOption()!;\n const { columns, filter } = opt;\n const externalFilters = filter?.externalFilters || [];\n const req: PagingReq = {\n filters: [],\n orders: [],\n pageNumber: filterReq.pageNumber,\n pageSize: filterReq.pageSize,\n };\n const { filters, orders } = req;\n const { rawColumnFilter, columnOperator, rawExternalFilter, orderBy, orderDirection } = filterReq;\n\n for (const externalFilter of externalFilters || []) {\n const { field } = externalFilter;\n const value = rawExternalFilter?.[field];\n if (value !== undefined && value !== null && value !== '') {\n if (externalFilter.type === 'string') {\n if (externalFilter.defaultOperator === 'EQUAL' && value?.includes(',')) {\n filters!.push({\n field,\n operator: 'IN',\n data: (value as string).split(',').map(val => val.trim()),\n });\n } else {\n filters!.push({\n field,\n operator: externalFilter.defaultOperator || 'CONTAIN',\n data: value,\n });\n }\n } else if (externalFilter.type === 'boolean') {\n filters!.push({\n field,\n operator: 'EQUAL',\n data: value === true || value === 1 || value === 'true' || value === '1',\n });\n } else if (externalFilter.type === 'daterange') {\n if (typeof value === 'object' && 'from' in value && 'to' in value) {\n if (value?.from) {\n filters!.push({\n field,\n operator: 'GREATER_OR_EQUAL',\n data: DateUtilities.begin(value?.from)!.toISOString(),\n });\n }\n if (value?.to) {\n filters!.push({\n field,\n operator: 'LESS_THAN',\n data: DateUtilities.begin(DateUtilities.addDays(value?.to, 1))!.toISOString(),\n });\n }\n }\n } else if (externalFilter.type === 'date' || externalFilter.type === 'datetime') {\n if (DateUtilities.isDate(value)) {\n if (externalFilter.type === 'date') {\n if (externalFilter.defaultOperator === 'GREATER_OR_EQUAL') {\n filters!.push({\n field,\n operator: 'GREATER_OR_EQUAL',\n data: DateUtilities.begin(value)!.toISOString(),\n });\n }\n if (externalFilter.defaultOperator === 'LESS_OR_EQUAL') {\n filters!.push({\n field,\n operator: 'LESS_THAN',\n data: DateUtilities.begin(DateUtilities.addDays(value, 1))!.toISOString(),\n });\n }\n } else {\n if (externalFilter.defaultOperator === 'GREATER_OR_EQUAL') {\n filters!.push({\n field,\n operator: 'GREATER_OR_EQUAL',\n data: new Date(value).toISOString(),\n });\n }\n if (externalFilter.defaultOperator === 'LESS_OR_EQUAL') {\n filters!.push({\n field,\n operator: 'LESS_OR_EQUAL',\n data: new Date(value).toISOString(),\n });\n }\n }\n }\n } else {\n if (Array.isArray(value)) {\n if (value.length) {\n filters!.push({\n field,\n operator: 'IN',\n data: value,\n });\n }\n } else if (typeof value === 'object' && 'from' in value && 'to' in value) {\n if (value?.from) {\n filters!.push({\n field,\n operator: 'GREATER_OR_EQUAL',\n data: DateUtilities.begin(value?.from)!.toISOString(),\n });\n }\n if (value?.to) {\n filters!.push({\n field,\n operator: 'LESS_THAN',\n data: DateUtilities.begin(DateUtilities.addDays(value?.to, 1))!.toISOString(),\n });\n }\n } else {\n filters!.push({\n field,\n operator: externalFilter.defaultOperator || 'EQUAL',\n data: value,\n });\n }\n }\n }\n }\n\n for (const column of columns || []) {\n const { field } = column;\n const value: any = rawColumnFilter?.[field];\n const operator = columnOperator?.[field] || column.filter?.operator?.default;\n if (value !== undefined && value !== null && value !== '') {\n if (column.type === 'string') {\n filters!.push({\n field: field,\n operator: operator || 'CONTAIN',\n data: value,\n });\n } else if (column.type === 'boolean') {\n filters!.push({\n field: field,\n operator: 'EQUAL',\n data: value === true || value === 1 || value === 'true' || value === '1',\n });\n } else if (column.type === 'date' || column.type === 'datetime') {\n if (value && typeof value === 'object' && 'from' in value && 'to' in value) {\n if (value?.from && value?.to) {\n filters!.push({\n field: field,\n operator: 'BETWEEN',\n data: {\n from: DateUtilities.begin(value?.from)!.toISOString(),\n to: DateUtilities.end(value?.to)!.toISOString(),\n },\n });\n } else if (value?.from) {\n filters!.push({\n field: field,\n operator: 'GREATER_OR_EQUAL',\n data: DateUtilities.begin(value?.from)!.toISOString(),\n });\n } else if (value?.to) {\n filters!.push({\n field: field,\n operator: 'LESS_THAN',\n data: DateUtilities.begin(DateUtilities.addDays(value?.to, 1))!.toISOString(),\n });\n }\n } else {\n if (DateUtilities.isDate(value)) {\n filters!.push({\n field: field,\n operator: 'BETWEEN',\n data: {\n from: DateUtilities.begin(value)!.toISOString(),\n to: DateUtilities.end(value)!.toISOString(),\n },\n });\n }\n }\n } else {\n if (Array.isArray(value)) {\n if (value.length) {\n filters!.push({\n field: field,\n operator: 'IN',\n data: value,\n });\n }\n } else {\n filters!.push({\n field: field,\n operator: operator || 'EQUAL',\n data: value,\n });\n }\n }\n }\n }\n\n if (orderBy && orderDirection) {\n orders!.push({\n field: orderBy,\n direction: orderDirection,\n });\n }\n return req;\n };\n}\n","@let _configuration = configuration();\n@let _tableOption = tableOption()!;\n@let _loading = loading();\n@let _items = items();\n@let _total = total();\n@let _isFiltered = isFiltered();\n@let _requireFiltered = requireFiltered();\n@let _export = _tableOption?.export;\n@let _exporting = exporting();\n@let _titleDef = titleDef();\n\n@if (_configuration) {\n @if (!_tableOption.filter?.disabled && !!_tableOption.filter?.externalFilters?.length && filterRegister) {\n <external-filter\n class=\"mb-16\"\n [autoId]=\"autoId()\"\n [filterRegister]=\"filterRegister\"\n [filter]=\"_tableOption.filter!\"\n [externalFilters]=\"_tableOption.filter?.externalFilters!\">\n </external-filter>\n }\n @let groupedItems = _items | sdTree: _tableOption.tree : treeRevision() | sdGroup: _tableOption : groupExpandState;\n <ng-content select=\"[sdTableTop]\"></ng-content>\n <div class=\"c-container\">\n @if (_loading) {\n <div class=\"c-loading\">\n <mat-spinner></mat-spinner>\n </div>\n }\n <div\n class=\"c-table\"\n sdScroll\n stickyShadow\n [style.max-height]=\"_tableOption.style?.maxHeight\"\n [style.min-height]=\"_tableOption.style?.minHeight\">\n <table\n mat-table\n [dataSource]=\"groupedItems\"\n [trackBy]=\"trackBy\"\n matSort\n [matSortDisabled]=\"!_tableOption.sort?.enable\"\n multiTemplateDataRows\n cdkDropList\n [cdkDropListData]=\"groupedItems\"\n [cdkDropListDisabled]=\"!_tableOption.rowReorder?.enabled\"\n [cdkDropListSortPredicate]=\"reorderSortPredicate\"\n (cdkDropListDropped)=\"onReorderDrop($event)\">\n @if (_tableOption.rowReorder?.enabled) {\n <ng-container matColumnDef=\"sdReorder\">\n <th mat-header-cell *matHeaderCellDef class=\"sd-reorder-header\" [attr.rowspan]=\"_configuration.multipleHeader ? 2 : 1\"></th>\n <td mat-cell *matCellDef=\"let row\" class=\"sd-reorder-cell\">\n @if (!row.meta?.group?.items?.length) {\n <mat-icon cdkDragHandle [class.sd-reorder-disabled]=\"isReorderDisabled(row)\">\n {{ _tableOption.rowReorder?.icon || 'drag_indicator' }}\n </mat-icon>\n }\n </td>\n <td mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n }\n\n @if (_tableOption.tree) {\n <ng-container matColumnDef=\"sdTreeToggle\">\n <th\n mat-header-cell\n *matHeaderCellDef\n class=\"sd-tree-toggle-cell p-0\"\n [attr.rowspan]=\"_configuration.multipleHeader ? 2 : 1\"></th>\n <td mat-cell *matCellDef=\"let row\" class=\"sd-tree-toggle-cell p-0\">\n @if (row.meta?.tree) {\n <div\n class=\"sd-tree-toggle-inner\"\n [style.padding-left.px]=\"(row.meta.tree.level ?? 0) * (_tableOption.tree?.indentSize ?? 20)\">\n @if (row.meta.tree.hasChildren) {\n @if (row.meta.tree.isExpanding) {\n <div class=\"lds-ring sd-tree-spinner\">\n <div></div>\n <div></div>\n <div></div>\n <div></div>\n </div>\n } @else {\n <sd-button\n type=\"link\"\n [prefixIcon]=\"row.meta.tree.isExpanded ? 'expand_less' : 'expand_more'\"\n (click)=\"onTreeToggle(row); $event.stopPropagation()\"\n width=\"35px\">\n </sd-button>\n }\n }\n </div>\n }\n </td>\n <td mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n }\n\n <ng-container matColumnDef=\"sdSubInformation\" sticky>\n <td class=\"p-0\" mat-cell *matCellDef=\"let item\" [attr.colspan]=\"_configuration.displayedColumns.length\">\n @if (sdSubInformation()?.templateRef) {\n @if (_tableOption.expand?.always) {\n <ng-container *ngTemplateOutlet=\"sdSubInformation()?.templateRef!; context: { item: item }\"> </ng-container>\n } @else {\n <div [@detailExpand]=\"item.isExpanded ? 'expanded' : 'collapsed'\">\n @if (item.isExpanded) {\n <ng-container *ngTemplateOutlet=\"sdSubInformation()?.templateRef!; context: { item: item }\"> </ng-container>\n }\n </div>\n }\n }\n </td>\n <td mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n\n <ng-container matColumnDef=\"sdSubInformationAction\" stickyEnd>\n <th class=\"p-0\" mat-header-cell *matHeaderCellDef style=\"width: 1px\" [attr.rowspan]=\"_configuration.multipleHeader ? 2 : 1\"></th>\n <td mat-cell *matCellDef=\"let element\">\n @if (!element.isExpanding && !_tableOption.expand?.always) {\n <sd-button\n type=\"link\"\n [prefixIcon]=\"element.isExpanded ? 'expand_less' : 'expand_more'\"\n (click)=\"onExpand(element)\"\n width=\"35px\">\n </sd-button>\n }\n @if (element.isExpanding) {\n <div class=\"lds-ring\">\n <div></div>\n <div></div>\n <div></div>\n <div></div>\n </div>\n }\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"sdSelection\" sticky>\n <th class=\"sd-selection-cell p-0\" mat-header-cell *matHeaderCellDef [attr.rowspan]=\"_configuration.multipleHeader ? 2 : 1\">\n @let visibleSelectAll = _items | selectionVisibleSelectAll: _tableOption.selector | async;\n @if (visibleSelectAll) {\n <mat-checkbox\n class=\"c-selection px-8\"\n color=\"primary\"\n [ngModel]=\"isSelectAll()\"\n (ngModelChange)=\"isSelectAll.set($event)\"\n (change)=\"onSelectAll()\">\n </mat-checkbox>\n }\n </th>\n\n <td class=\"sd-selection-cell p-0\" mat-cell *matCellDef=\"let item\">\n @let visible = item | selectionVisible: _tableOption.selector;\n @if (visible) {\n @if (_tableOption.selector?.single) {\n <mat-radio-button\n class=\"c-selection px-8\"\n color=\"primary\"\n [checked]=\"item.meta.selector.isSelected\"\n (change)=\"item.meta.selector.isSelected = true; onSelect(item)\"\n [disabled]=\"selectedTableItems() | selectionDisabled: item : _tableOption.selector!\">\n </mat-radio-button>\n } @else {\n <mat-checkbox\n class=\"c-selection px-8\"\n color=\"primary\"\n [(ngModel)]=\"item.meta.selector.isSelected\"\n (change)=\"onSelect(item)\"\n [disabled]=\"selectedTableItems() | selectionDisabled: item : _tableOption.selector!\">\n </mat-checkbox>\n }\n }\n </td>\n <td mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n @if (_tableOption.index?.enabled) {\n @let _pageOffset = pageOffset();\n @let _indexWidth = _tableOption.index?.width || '50px';\n <ng-container matColumnDef=\"sdIndex\" sticky>\n <th\n class=\"text-center p-0\"\n mat-header-cell\n *matHeaderCellDef\n [style.width]=\"_indexWidth\"\n [style.min-width]=\"_indexWidth\"\n [style.max-width]=\"_indexWidth\"\n [attr.rowspan]=\"_configuration.multipleHeader ? 2 : 1\">\n {{ _tableOption.index?.title || '#' }}\n </th>\n <td class=\"text-center px-4\" mat-cell *matCellDef=\"let item; let i = dataIndex\" [style.min-width]=\"_indexWidth\" [style.max-width]=\"_indexWidth\">\n @if (!item?.meta?.group?.isGroupHeader) {\n @if (_tableOption.tree && item?.meta?.tree?.indexPath?.length) {\n <!-- why: tree → STT phân cấp 1, 1.2, 1.2.1 (indexPath join '.'). Tô đậm root (level 0). -->\n <span [class.sd-stt-root]=\"(item.meta.tree.level ?? 0) === 0\">\n {{ item.meta.tree.indexPath.join('.') }}\n </span>\n } @else {\n {{ _pageOffset + i + 1 }}\n }\n }\n </td>\n <td mat-footer-cell *matFooterCellDef [style.min-width]=\"_indexWidth\" [style.max-width]=\"_indexWidth\"></td>\n </ng-container>\n }\n <ng-container\n matColumnDef=\"sdCommand\"\n [sticky]=\"_tableOption.command?.align !== 'right'\"\n [stickyEnd]=\"_tableOption.command?.align === 'right'\">\n <th class=\"p-0\" mat-header-cell *matHeaderCellDef style=\"width: 50px\" [attr.rowspan]=\"_configuration.multipleHeader ? 2 : 1\"></th>\n <td class=\"px-8\" mat-cell *matCellDef=\"let item\">\n <desktop-command\n [autoId]=\"autoId()\"\n [commands]=\"_tableOption.command?.commands || _tableOption.commands || []\"\n [item]=\"item\"\n [itemIndex]=\"groupedItems.indexOf(item)\"></desktop-command>\n </td>\n <td mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n <!-- why: group header row dùng matRowDef RIÊNG với column list ['sdGroupHeader']\n qua predicate when:isGroupHeaderRow. Cell colspan = displayedColumns.length để\n span TOÀN BỘ width data row. Tránh colspan trick overflow row khi các TD khác render. -->\n <ng-container matColumnDef=\"sdGroupHeader\">\n <td\n class=\"p-0 sd-group-header-cell\"\n mat-cell\n *matCellDef=\"let item\"\n [attr.colspan]=\"sdGroupColspan()\">\n <div class=\"sd-group-row d-flex align-items-center py-8\">\n <!-- why: slot 42px khớp width với sd-selection-cell data row → checkbox group căn TRỤC dọc đúng với checkbox data. -->\n @if (_tableOption.selector?.visible && !_tableOption.selector?.single) {\n <div class=\"sd-group-selection-slot d-flex align-items-center justify-content-center\">\n <mat-checkbox\n class=\"c-selection\"\n color=\"primary\"\n [checked]=\"isGroupAllSelected(item)\"\n [indeterminate]=\"isGroupIndeterminate(item)\"\n (change)=\"onSelectGroup(item, $event.checked)\">\n </mat-checkbox>\n </div>\n } @else {\n <div class=\"sd-group-selection-slot\"></div>\n }\n @if (_tableOption.group?.collapsible) {\n <sd-button\n type=\"link\"\n [prefixIcon]=\"item.meta.group.isExpanded ? 'expand_more' : 'chevron_right'\"\n width=\"32px\"\n (click)=\"toggleGroupExpand(item)\">\n </sd-button>\n }\n @if (sdGroupDef()?.templateRef; as tpl) {\n <ng-container *ngTemplateOutlet=\"tpl; context: groupContext(item)\"></ng-container>\n } @else {\n <span class=\"T14R\">{{ item.meta.group.values | json }}</span>\n }\n </div>\n </td>\n </ng-container>\n <!-- why: filler column ở cuối hấp thụ leftover space khi tổng width các cột data < container — giữ cho selection/STT/command không bị dãn. -->\n <ng-container matColumnDef=\"sdFiller\">\n <th class=\"sd-filler-cell p-0\" mat-header-cell *matHeaderCellDef [attr.rowspan]=\"_configuration.multipleHeader ? 2 : 1\"></th>\n <td class=\"sd-filler-cell p-0\" mat-cell *matCellDef=\"let item\"></td>\n <td class=\"sd-filler-cell p-0\" mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n @for (column of _configuration.firstColumns; track column.field) {\n <ng-container [matColumnDef]=\"column.field\" [sticky]=\"_configuration.fixedColumn[column.field]\">\n <th\n mat-header-cell\n *matHeaderCellDef\n class=\"px-8 py-8 c-th\"\n [sdColumnResize]=\"!!_tableOption.config?.resizable && column.type !== 'children'\"\n [minWidth]=\"column.minWidth\"\n [maxWidth]=\"column.maxWidth\"\n (resizeEnd)=\"onColumnResize(column.field, $event)\"\n [style.width]=\"column.width\"\n [style.min-width]=\"column.minWidth || column.width\"\n [style.max-width]=\"column.maxWidth\"\n [attr.rowspan]=\"_configuration.multipleHeader && column.type !== 'children' ? 2 : 1\"\n [attr.colspan]=\"column.type === 'children' ? column.children.length : 1\">\n <div>\n @if (column.type === 'children') {\n <div\n aria-hidden=\"true\"\n class=\"c-header-title\"\n [class.justify-content-end]=\"column.align === 'right'\"\n [class.text-right]=\"column.align === 'right'\">\n <column-title [column]=\"column\" [titleDef]=\"_titleDef[column.field]\"></column-title>\n </div>\n } @else {\n <div\n aria-hidden=\"true\"\n mat-sort-header\n class=\"c-header-title\"\n [class.justify-content-end]=\"column.align === 'right'\"\n [class.text-right]=\"column.align === 'right'\"\n [disabled]=\"!column.sortable\">\n <column-title [column]=\"column\" [titleDef]=\"_titleDef[column.field]\"></column-title>\n </div>\n @let hideInlineFilter =\n _tableOption.filter?.disabled ||\n _tableOption.filter?.hideInlineFilter === true ||\n (_tableOption.filter?.hideInlineFilter === 'auto' && !_isFiltered && _total! <= 10);\n @if (!hideInlineFilter) {\n <ng-container *sdDesktop>\n <column-filter\n [autoId]=\"autoId()\"\n [value]=\"columnFilter?.[column.field!]!\"\n [operator]=\"columnOperator[column.field]\"\n (operatorChange)=\"columnOperator[column.field] = $event!; onOperatorChange(column, $event)\"\n [columnFilter]=\"columnFilter!\"\n [cacheValues]=\"cacheValues\"\n [column]=\"column\"\n (filterChange)=\"onFilterChange()\"\n (filterCommit)=\"onFilterCommit()\">\n </column-filter>\n </ng-container>\n }\n }\n </div>\n </th>\n <td\n class=\"c-td px-0\"\n [class.d-none]=\"column.type === 'children'\"\n mat-cell\n *matCellDef=\"let item\"\n [sdHoverCopy]=\"(item.data && item.data[column.field]) || ''\"\n [sdHoverCopyDisabled]=\"!column.cell?.copiable\">\n @if (column.type !== 'children' && !item?.meta?.group?.isGroupHeader) {\n <desktop-cell class=\"d-block px-8\" [column]=\"column\" [item]=\"item\" [cellDef]=\"cellDef()\"> </desktop-cell>\n }\n </td>\n <td mat-footer-cell *matFooterCellDef>\n <ng-container *ngIf=\"footerDef()[column.field]\">\n <ng-container *ngTemplateOutlet=\"footerDef()[column.field].templateRef; context: { items: _items, column: column }\">\n </ng-container>\n </ng-container>\n </td>\n </ng-container>\n }\n @for (column of _configuration.secondColumns; track column.field) {\n <ng-container [matColumnDef]=\"column.field\">\n <th\n mat-header-cell\n *matHeaderCellDef\n class=\"c-th px-8\"\n [style.width]=\"column.width\"\n [style.min-width]=\"column.minWidth || column.width\"\n [style.max-width]=\"column.maxWidth\">\n <div>\n <div\n aria-hidden=\"true\"\n mat-sort-header\n class=\"c-header-title\"\n [class.justify-content-end]=\"column.align === 'right'\"\n [class.text-right]=\"column.align === 'right'\"\n [disabled]=\"!column.sortable\">\n <column-title [column]=\"column\" [titleDef]=\"_titleDef[column.field]\"></column-title>\n </div>\n @if (!_tableOption.filter?.disabled && !_tableOption.filter?.hideInlineFilter && columnOperator) {\n <ng-container *sdDesktop>\n <column-filter\n [autoId]=\"autoId()\"\n [value]=\"columnFilter?.[column.field!]!\"\n [operator]=\"columnOperator[column.field]\"\n [columnFilter]=\"columnFilter!\"\n [cacheValues]=\"cacheValues\"\n [column]=\"column\"\n (operatorChange)=\"columnOperator[column.field] = $event!; onOperatorChange(column, $event)\"\n (filterChange)=\"onFilterChange()\"\n (filterCommit)=\"onFilterCommit()\">\n </column-filter>\n </ng-container>\n }\n </div>\n </th>\n <td\n class=\"c-td px-0\"\n mat-cell\n *matCellDef=\"let item\"\n [sdHoverCopy]=\"item[column.field]\"\n [sdHoverCopyDisabled]=\"!column.cell?.copiable\">\n @if (column.type !== 'children') {\n <desktop-cell class=\"d-block px-8\" [column]=\"column\" [item]=\"item\" [cellDef]=\"cellDef()\"> </desktop-cell>\n }\n </td>\n <td mat-footer-cell *matFooterCellDef>\n <ng-container *ngIf=\"footerDef()[column.field]\">\n <ng-container *ngTemplateOutlet=\"footerDef()[column.field].templateRef; context: { items: _items, column: column }\">\n </ng-container>\n </ng-container>\n </td>\n </ng-container>\n }\n <tr class=\"c-first-header\" mat-header-row *matHeaderRowDef=\"_configuration.firstHeaders; sticky: true\"></tr>\n @if (!!_configuration.secondHeaders.length) {\n <tr class=\"c-second-header\" mat-header-row *matHeaderRowDef=\"_configuration.secondHeaders; sticky: true\"></tr>\n }\n <!-- Group header row — chỉ 1 cell sdGroupHeader colspan toàn width. -->\n <tr\n mat-row\n *matRowDef=\"let row; columns: ['sdGroupHeader']; when: isGroupHeaderRow\"\n class=\"c-group-row-tr\"></tr>\n\n <!-- Data row — dùng displayedColumns đầy đủ; when isDataRow để loại trừ group header. -->\n <tr\n mat-row\n cdkDrag\n [cdkDragData]=\"row\"\n [cdkDragDisabled]=\"\n !_tableOption.rowReorder?.enabled ||\n !!row.meta?.group?.items?.length ||\n (row.meta?.tree?.level ?? 0) > 0 ||\n isReorderDisabled(row)\n \"\n *matRowDef=\"let row; columns: _configuration.displayedColumns; when: isDataRow\"\n matRipple\n class=\"c-row\"\n [class.sd-tree-row]=\"!!_tableOption.tree\"\n [ngClass]=\"_tableOption.tree ? 'sd-tree-level-' + (row.meta?.tree?.level ?? 0) : null\"\n [ngStyle]=\"rowStyle(row)\"\n [class.selected]=\"row.meta.selector.isSelected\"></tr>\n\n <!-- Sub-information row — also gated bởi isDataRow để KHÔNG render empty expand row dưới group header. -->\n <tr mat-row *matRowDef=\"let row; columns: ['sdSubInformation']; when: isDataRow\" class=\"c-detail-row\"></tr>\n @if (hasFooter() && !!_configuration.displayedFooters.length) {\n <tr mat-footer-row *matFooterRowDef=\"_configuration.displayedFooters; sticky: true\"></tr>\n }\n </table>\n @if (!_loading && !_total) {\n <div class=\"c-no-data-row\">\n @if (_isFiltered) {\n @if (tableConfiguration?.images?.filterEmpty) {\n <img class=\"c-image\" [src]=\"tableConfiguration!.images!.filterEmpty\" alt=\"filter-empty\" />\n } @else {\n <img class=\"c-image sd-image-filter-empty\" alt=\"filter-empty\" />\n }\n <div class=\"T16M\">{{ 'core.component.table.no-results' | translate }}</div>\n <div class=\"T16R text-secondary\">{{ 'core.component.table.no-results-hint' | translate }}</div>\n } @else {\n @if (_requireFiltered) {\n @if (tableConfiguration?.images?.filterRequired) {\n <img class=\"c-image\" [src]=\"tableConfiguration!.images!.filterRequired\" alt=\"filter-required\" />\n } @else {\n <img class=\"c-image sd-image-filter-required\" alt=\"filter-required\" />\n }\n <div class=\"T16R text-secondary\">{{ 'core.component.table.choose-filter-hint' | translate }}</div>\n } @else {\n @if (tableConfiguration?.images?.dataEmpty) {\n <img class=\"c-image\" [src]=\"tableConfiguration!.images!.dataEmpty\" alt=\"data-empty\" />\n } @else {\n <img class=\"c-image sd-image-data-empty\" alt=\"data-empty\" />\n }\n <div class=\"T16R text-secondary\">{{ 'core.component.table.no-data' | translate }}</div>\n }\n }\n </div>\n }\n </div>\n <div class=\"c-paginator\">\n <div class=\"c-action\">\n <ng-container *sdDesktop>\n @if (_tableOption.reload?.visible) {\n <sd-button\n class=\"mr-8\"\n [title]=\"'core.component.table.reload' | translate\"\n prefixIcon=\"refresh\"\n (click)=\"reload()\"\n [disabled]=\"!_items.length\"\n type=\"link\">\n </sd-button>\n }\n </ng-container>\n @if (_export && _items.length) {\n @if (_export.type === 'custom') {\n <sd-button class=\"mr-8\" [title]=\"exportTitle()\" prefixIcon=\"get_app\" (click)=\"exportCustom()\" type=\"link\"> </sd-button>\n } @else {\n @if (_export.visible) {\n @if (_exporting) {\n <sd-button class=\"mr-8\" [loading]=\"_exporting\" [title]=\"exportTitle()\" prefixIcon=\"get_app\" type=\"link\"> </sd-button>\n } @else {\n @if (_export.visible === 'ALL' || !_export.visible) {\n <sd-button class=\"mr-8\" [title]=\"exportTitle()\" prefixIcon=\"get_app\" [matMenuTriggerFor]=\"menu\" type=\"link\"> </sd-button>\n <mat-menu #menu=\"matMenu\">\n <button mat-menu-item (click)=\"exportExcel()\" type=\"button\">\n <mat-icon fontSet=\"material-icons-outlined\">file_download</mat-icon>\n <span> {{ 'core.component.table.export-excel' | translate }}</span>\n </button>\n <button mat-menu-item (click)=\"exportCSV()\" type=\"button\">\n <mat-icon fontSet=\"material-icons-outlined\">file_download</mat-icon>\n <span> {{ 'core.component.table.export-csv' | translate }}</span>\n </button>\n </mat-menu>\n } @else if (_export.visible === 'EXCEL') {\n <sd-button class=\"mr-8\" [title]=\"exportTitle()\" prefixIcon=\"get_app\" (click)=\"exportExcel()\" type=\"link\"> </sd-button>\n } @else if (_export.visible === 'CSV') {\n <sd-button class=\"mr-8\" [title]=\"exportTitle()\" prefixIcon=\"get_app\" (click)=\"exportCSV()\" type=\"link\"> </sd-button>\n }\n }\n }\n }\n }\n\n <ng-container *sdDesktop>\n @if (configComponent()) {\n <sd-button\n class=\"mr-8\"\n [title]=\"'core.component.table.setup-short' | translate\"\n prefixIcon=\"settings\"\n (click)=\"configComponent()!.open()\"\n type=\"link\">\n </sd-button>\n }\n </ng-container>\n <!-- Mobile: nút Filter mở mobile-filter drawer (inline filter ẩn trên mobile) -->\n <ng-container *sdMobile>\n @if (!_tableOption.filter?.disabled && mobileFilter()) {\n <sd-button\n [autoId]=\"autoId() + 'mobile-filter-open'\"\n class=\"mr-8\"\n prefixIcon=\"filter_alt\"\n (click)=\"mobileFilter()!.open()\"\n type=\"link\">\n </sd-button>\n }\n </ng-container>\n </div>\n @let hidePaginator = !_tableOption.paginate?.pageSize || _total === undefined || _total <= _tableOption.paginate?.pageSize!;\n <!-- Desktop paginator: full config (pageSize dropdown, first/last buttons) -->\n <ng-container *sdDesktop>\n <mat-paginator\n [class.d-none]=\"_tableOption.paginate?.hidden || hidePaginator\"\n [length]=\"_total\"\n [pageSize]=\"_tableOption.paginate?.pageSize\"\n [pageSizeOptions]=\"_tableOption.paginate?.pages!\"\n [showFirstLastButtons]=\"_tableOption.paginate?.showFirstLastButtons\"\n [hidePageSize]=\"_tableOption.paginate?.hidePageSize\"></mat-paginator>\n </ng-container>\n <!-- Mobile paginator: ẩn pageSize dropdown + first/last buttons để tiết kiệm không gian -->\n <ng-container *sdMobile>\n <mat-paginator\n [class.d-none]=\"_tableOption.paginate?.hidden || hidePaginator\"\n [length]=\"_total\"\n [pageSize]=\"_tableOption.paginate?.pageSize\"\n [showFirstLastButtons]=\"false\"\n hidePageSize></mat-paginator>\n </ng-container>\n <!-- \"Đang hiển thị...\" chỉ desktop -->\n <ng-container *sdDesktop>\n @if (!_tableOption.paginate?.hidden && hidePaginator && _total !== undefined && _total > 0) {\n <div class=\"T14R pr-16\">\n {{ 'core.component.table.showing' | translate }} <span class=\"T14M ml-2\">1-{{ _total }}/{{ _total }}</span>\n </div>\n }\n </ng-container>\n </div>\n </div>\n <selector-action [tableOption]=\"_tableOption\" [selectedTableItems]=\"selectedTableItems()\" (clear)=\"onClearSelection(groupedItems)\" />\n @if (_tableOption.config?.visible) {\n <config [tableOption]=\"_tableOption\" />\n }\n <!-- Mobile filter drawer — chỉ instantiate khi cần render trên mobile -->\n @if (!_tableOption.filter?.disabled && filterRegister) {\n <mobile-filter\n [autoId]=\"autoId()\"\n [filter]=\"_tableOption.filter!\"\n [externalFilters]=\"_tableOption.filter?.externalFilters!\"\n [columns]=\"_configuration.firstColumns\"\n [filterDefs]=\"sdFilterDefs()\"\n [filterRegister]=\"filterRegister\"\n [cacheValues]=\"cacheValues\">\n </mobile-filter>\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { TemplateRef } from '@angular/core';\nimport { SdSearch } from '@sdcorejs/angular/forms';\nimport { DateUtilities } from '@sdcorejs/angular/utilities';\nimport { NestedKeyOf, Operator, Order, PagingReq } from '@sdcorejs/utils/models';\nimport { Observable } from 'rxjs';\nimport { SdTableColumn } from '../../models/table-column.model';\n\nexport interface SdTableQuickFilter {\n code: string;\n columnFilter: Record<string, any>;\n externalFilter: Record<string, any>;\n}\n\nexport interface TableFilterConfiguration {\n // selectedQuickFilter: string;\n // quickFilters: SdGridMaterialQuickFilter[];\n // columnFilter?: Record<string, any>; // Giá trị filter column\n inlineExternal: Record<string, boolean>; // Ẩn hiện filter external\n // externalFilter?: Record<string, any>; // Giá trị filter external\n}\n\nexport interface TableFilterValue {\n columnOperator?: Record<string, Operator>;\n\n columnFilter?: Record<string, any>; // Giá trị filter column\n\n externalFilter?: Record<string, any>; // Giá trị filter external\n\n notReload?: boolean; // Để nhận biết là chỉ set giá trị, không trigger change\n\n filtered?: boolean; // Để nhận biết là có đang lọc hay không\n}\n\nexport interface SdTableFilterRequest<T = any> {\n columnOperator: Record<NestedKeyOf<T>, Operator>;\n rawColumnFilter: Record<NestedKeyOf<T>, any>;\n rawExternalFilter: Record<string, any>;\n pageNumber: number;\n pageSize: number;\n orderBy?: string;\n orderDirection?: Order['direction'];\n isExported?: boolean;\n visibledColumns?: SdTableColumn[];\n}\n\nexport interface SdTableOptionFilter<T = any> {\n /** Key định danh nếu muốn lưu cache */\n key?: string;\n\n /** Có bật cache giá trị filter hay không */\n cacheable?: boolean;\n\n /** Vô hiệu toàn bộ filter */\n disabled?: boolean;\n\n /** Ẩn tất cả inline filter (chỉ còn external), nếu chọn auto thì sẽ ẩn khi total row <= 10, phù hợp cho các màn detail có ít dữ liệu */\n hideInlineFilter?: boolean | 'auto';\n\n /** Hàm xử lý khi đổi Operator của filter column */\n operatorChange?: (column?: SdTableColumn, operator?: Operator) => void;\n\n /** Danh sách external filter */\n externalFilters?: SdTableExternalFilter[];\n\n /** Số lượng cột external filter trên mỗi hàng (mặc định: 6) */\n externalFilterPerRow?: 4 | 6;\n\n /** Chế độ thủ công: phải nhấn nút áp dụng mới gửi filter */\n manualFilter?: boolean;\n\n /** Có thể thu gọn bộ lọc hay không */\n collapsable?: boolean;\n\n /** Ẩn toolbar (xóa bộ lọc, thiết lập) của external filter, khi có ít external filter user không cần chức năng này */\n hideExternalFilterToolbar?: boolean;\n\n /** Hàm xử lý khi trigger clear filter từ external filter */\n onClearFilter?: () => void;\n}\n\nexport const SdConvertToPagingReq = (\n filterRequest: SdTableFilterRequest,\n args: {\n columns?: SdTableColumn[];\n externalFilters?: SdTableExternalFilter[];\n fieldMapping?: Record<string, string>;\n orders?: Order[];\n }\n): PagingReq => {\n const { externalFilters, columns, fieldMapping } = args;\n const req: PagingReq = {\n filters: [],\n orders: args?.orders || [],\n pageNumber: filterRequest.pageNumber,\n pageSize: filterRequest.pageSize,\n };\n const { filters } = req;\n const { rawExternalFilter, rawColumnFilter, columnOperator, orderBy, orderDirection } = filterRequest;\n // Xử lý external filter\n for (const externalFilter of externalFilters || []) {\n const value = rawExternalFilter?.[externalFilter.field];\n const field = fieldMapping?.[externalFilter.field] || externalFilter.field;\n // Nếu có giá trị thì mới xử lý filter\n if (value !== undefined && value !== null && value !== '') {\n if (externalFilter.type === 'string') {\n filters!.push({\n field,\n operator: externalFilter.defaultOperator || 'CONTAIN',\n data: value,\n });\n } else if (externalFilter.type === 'boolean') {\n filters!.push({\n field,\n operator: 'EQUAL',\n data: value === true || value === 1 || value === 'true' || value === '1',\n });\n } else if (externalFilter.type === 'date') {\n if (typeof value === 'object' && 'from' in value && 'to' in value) {\n if (value?.from) {\n filters!.push({\n field,\n operator: 'GREATER_OR_EQUAL',\n data: DateUtilities.begin(value?.from)!.toISOString(),\n });\n }\n if (value?.to) {\n filters!.push({\n field,\n operator: 'LESS_THAN',\n data: DateUtilities.begin(DateUtilities.addDays(value?.to, 1))!.toISOString(),\n });\n }\n } else {\n if (DateUtilities.isDate(value)) {\n if (externalFilter.defaultOperator === 'GREATER_OR_EQUAL') {\n filters!.push({\n field,\n operator: 'GREATER_OR_EQUAL',\n data: DateUtilities.begin(value)!.toISOString(),\n });\n }\n if (externalFilter.defaultOperator === 'LESS_OR_EQUAL') {\n filters!.push({\n field,\n operator: 'LESS_THAN',\n data: DateUtilities.begin(DateUtilities.addDays(value, 1))!.toISOString(),\n });\n }\n }\n }\n } else {\n if (Array.isArray(value)) {\n if (value.length) {\n filters!.push({\n field,\n operator: 'IN',\n data: value,\n });\n }\n } else {\n filters!.push({\n field,\n operator: externalFilter.defaultOperator || 'EQUAL',\n data: value,\n });\n }\n }\n }\n }\n // Xử lý column filter\n for (const column of columns || []) {\n const value = rawColumnFilter?.[column.field];\n const field = fieldMapping?.[column.field] || column.field;\n const operator = columnOperator?.[column.field] || column.filter?.operator?.default;\n // Nếu có giá trị thì mới xử lý filter\n if (value !== undefined && value !== null && value !== '') {\n if (column.type === 'string') {\n filters!.push({\n field,\n operator: operator || 'CONTAIN',\n data: value,\n });\n } else if (column.type === 'boolean') {\n filters!.push({\n field,\n operator: 'EQUAL',\n data: value === true || value === 1 || value === 'true' || value === '1',\n });\n } else if (column.type === 'date' || column.type === 'datetime') {\n if (typeof value === 'object' && 'from' in value && 'to' in value) {\n if (value?.from && value?.to) {\n filters!.push({\n field,\n operator: 'BETWEEN',\n data: {\n from: DateUtilities.begin(value?.from)!.toISOString(),\n to: DateUtilities.end(value?.to)!.toISOString(),\n },\n });\n } else if (value?.from) {\n filters!.push({\n field,\n operator: 'GREATER_OR_EQUAL',\n data: DateUtilities.begin(value?.from)!.toISOString(),\n });\n } else if (value?.to) {\n filters!.push({\n field,\n operator: 'LESS_THAN',\n data: DateUtilities.begin(DateUtilities.addDays(value?.to, 1))!.toISOString(),\n });\n }\n } else {\n if (DateUtilities.isDate(value)) {\n filters!.push({\n field,\n operator: 'BETWEEN',\n data: {\n from: DateUtilities.begin(value)!.toISOString(),\n to: DateUtilities.end(value)!.toISOString(),\n },\n });\n }\n }\n } else {\n if (Array.isArray(value)) {\n if (value.length) {\n filters!.push({\n field,\n operator: 'IN',\n data: value,\n });\n }\n } else {\n filters!.push({\n field,\n operator: operator || 'EQUAL',\n data: value,\n });\n }\n }\n }\n }\n // Xử lý orders\n if (orderBy && orderDirection) {\n req.orders!.push({\n field: orderBy,\n direction: orderDirection,\n });\n }\n return req;\n};\n\nexport declare type SdTableExternalFilter<TData = any> =\n | TextFilter<TData>\n | DateFilter<TData>\n | DateTimeFilter<TData>\n | DateRangeFilter<TData>\n | NumberFilter<TData>\n | ValuesFilter<TData>\n | LazyValuesFilter<TData>\n | BooleanFilter<TData>\n | CustomFilter<TData>;\n\ninterface BaseFilter<TData = any> {\n field: string;\n title: string;\n defaultShowing?: boolean;\n required?: boolean; // Bật lên nếu bắt buộc phải có giá trị- mới thực hiện gọi API filter\n hidden?: boolean; // Ẩn filter\n defaultOperator?: Operator; // Đôi lúc cột string nhưng lại muốn tìm kiếm chính xác\n data?: TData; // Các tham số muốn truyền thêm để đánh dấu/nhận biết ..., ví dụ mappingField\n onChange?: (value: any) => void;\n}\n\ninterface TextFilter<TData = any> extends BaseFilter<TData> {\n type: 'string';\n default?: string;\n}\n\ninterface DateFilter<TData = any> extends BaseFilter<TData> {\n type: 'date';\n default?: Date | string;\n minDate?: string | number | Date;\n maxDate?: string | number | Date;\n}\n\ninterface DateTimeFilter<TData = any> extends BaseFilter<TData> {\n type: 'datetime';\n default?: Date | string;\n minDate?: string | number | Date;\n maxDate?: string | number | Date;\n}\n\ninterface DateRangeFilter<TData = any> extends BaseFilter<TData> {\n type: 'daterange';\n enableTime?: boolean;\n minDate?: string | number | Date;\n maxDate?: string | number | Date;\n default?: {\n from?: Date | string;\n to?: Date | string;\n };\n}\n\ninterface NumberFilter<TData = any> extends BaseFilter<TData> {\n type: 'number';\n default?: number;\n}\n\ninterface ValuesFilter<TData = any> extends BaseFilter<TData> {\n type: 'values';\n option: {\n valueField: string;\n displayField: string;\n items: any[] | (() => Promise<any[]>);\n selection?: 'AUTOCOMPLETE' | 'MULTIPLE' | 'MULTIPLEAUTOCOMPLETE';\n };\n default?: string | string[];\n}\n\ninterface LazyValuesFilter<TData = any> extends BaseFilter<TData> {\n type: 'lazy-values';\n option: {\n valueField: string;\n displayField: string;\n items: SdSearch; // Filter\n selection?: 'MULTIPLE';\n };\n default?: string | string[];\n}\n\ninterface BooleanFilter<TData = any> extends BaseFilter<TData> {\n type: 'boolean';\n option?: {\n displayOnTrue?: string;\n displayOnFalse?: string;\n };\n default?: boolean;\n}\n\ninterface CustomFilter<TData = any> extends BaseFilter<TData> {\n type: 'custom';\n // filterDef?: TemplateRef<SdTableFilterDefDirective>;\n filterDef?: TemplateRef<any>;\n default?: any;\n}\n\nexport interface TableFilterRegister {\n configuration: {\n get: () => TableFilterConfiguration;\n set: (configuration: Partial<TableFilterConfiguration>) => TableFilterConfiguration;\n remove: () => void;\n observer: Observable<TableFilterConfiguration>;\n };\n value: {\n get: () => TableFilterValue;\n set: (value: Partial<TableFilterValue>) => TableFilterValue;\n remove: () => void;\n observer: Observable<TableFilterValue>;\n };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["SdDateRange","i1","i2","i5","i3","i4","DateUtilities"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAYa,uBAAuB,CAAA;AAClC,IAAA,OAAO,sBAAsB,CAAI,IAAgC,EAAE,IAAa,EAAA;AAC9E,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,cAAc,GAAG,KAAK,CAAC,QAAQ,yDAAU;AACzC,IAAA,WAAW,GAA4B,MAAM,CAAC,WAAW,CAAC;wGAN/C,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAvB,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAHnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kBAAkB;AAC7B,iBAAA;;;MCDY,yBAAyB,CAAA;AACpC,IAAA,OAAO,sBAAsB,CAAI,IAAkC,EAAE,IAAa,EAAA;AAChF,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,WAAW,GAA4B,MAAM,CAAC,WAAW,CAAC;wGAL/C,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAzB,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAAzB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAHrC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,oBAAoB;AAC/B,iBAAA;;;MCAY,yBAAyB,CAAA;AACpC,IAAA,OAAO,sBAAsB,CAAC,IAA+B,EAAE,IAAa,EAAA;AAC1E,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,gBAAgB,GAAG,KAAK,CAAC,QAAQ,2DAAU;AAC3C,IAAA,cAAc,GAAG,KAAK,CAAC,KAAK,kDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAA,GAAA,CAA7B,EAAE,SAAS,EAAE,gBAAgB,EAAE,GAAC;IAC9D,WAAW,GAAgC,MAAM,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;wGAPvE,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAzB,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAAzB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAHrC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,oBAAoB;AAC/B,iBAAA;;;MCIY,4BAA4B,CAAA;AACvC,IAAA,OAAO,sBAAsB,CAAI,IAAqC,EAAE,IAAa,EAAA;AACnF,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,gBAAgB,GAAG,KAAK,CAAC,QAAQ,2DAAU;AAC3C,IAAA,WAAW,GAA4B,MAAM,CAAC,WAAW,CAAC;wGAN/C,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAA5B,4BAA4B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAA5B,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAHxC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,oBAAoB;AAC/B,iBAAA;;;ACaD;;;;;;;;;;;;;;AAcG;MAEU,wBAAwB,CAAA;AACnC,IAAA,OAAO,sBAAsB,CAC3B,IAAiC,EACjC,IAAa,EAAA;AAEb,QAAA,OAAO,IAAI;IACb;AACA,IAAA,WAAW,GAA2C,MAAM,CAAC,WAAW,CAAC;wGAP9D,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAxB,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBADpC,SAAS;mBAAC,EAAE,QAAQ,EAAE,mBAAmB,EAAE;;;MC7B/B,wBAAwB,CAAA;AACnC,IAAA,OAAO,sBAAsB,CAAI,IAAiC,EAAE,IAAa,EAAA;AAC/E,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,eAAe,GAAG,KAAK,CAAC,QAAQ,0DAAU;AAC1C,IAAA,WAAW,GAA4B,MAAM,CAAC,WAAW,CAAC;wGAN/C,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAxB,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAHpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,mBAAmB;AAC9B,iBAAA;;;ACTD;MAaa,oBAAoB,CAAA;AAC/B,IAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,iDAAiB;AACxC,IAAA,QAAQ,GAAG,KAAK,CAAuC,SAAS,oDAAC;AAEjE,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;QAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,KAAK;AAClC,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAC7B,OAAO,KAAK,EAAE,WAAW,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE,WAAW;QAC3D;AACA,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,EAAE,WAAW;AACrC,IAAA,CAAC,uDAAC;wGAVS,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECbjC,iMAQA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDGY,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAEf,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAPhC,SAAS;+BACE,cAAc,EAAA,eAAA,EAEP,uBAAuB,CAAC,MAAM,cACnC,IAAI,EAAA,OAAA,EACP,CAAC,gBAAgB,CAAC,EAAA,QAAA,EAAA,iMAAA,EAAA;;;AEX7B;MA8Ba,qBAAqB,CAAA;;;;AAIhC,IAAA,WAAW,GAAG,KAAK,CAA4B,SAAS,+CAAI,KAAK,EAAE,QAAQ,EAAA,CAAA,GAAA,CAAjB,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAC;AAC9E,IAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,iDAAiB;AACxC,IAAA,YAAY,GAAG,KAAK,CAAsB,EAAE,wDAAC;AAC7C,IAAA,WAAW,GAAG,KAAK,CAAoC,SAAS,uDAAC;;IAEjE,KAAK,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,OAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAO;;AAEpB,IAAA,QAAQ,GAAG,KAAK,CAAuB,SAAS,oDAAC;;;AAGjD,IAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,4CAAI,SAAS,EAAE,gBAAgB,EAAA,CAAA,GAAA,CAA7B,EAAE,SAAS,EAAE,gBAAgB,EAAE,GAAC;;;;IAKxD,YAAY,GAAG,MAAM,EAAQ;IAC7B,YAAY,GAAG,MAAM,EAAQ;;;;;AAM7B,IAAA,MAAM,GAAG,QAAQ,CAAC,MAAK;AACrB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE;QAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,KAAK,IAAI,EAAE;AACxC,QAAA,OAAO,IAAI,GAAG,CAAA,EAAG,IAAI,CAAA,QAAA,EAAW,KAAK,CAAA,CAAE,GAAG,EAAE;AAC9C,IAAA,CAAC,kDAAC;;AAGF,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,SAAS,uDAAC;;;AAI9D,IAAA,KAAK,GAAG,QAAQ,CAAqB,MAAK;AACxC,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAAE,YAAA,OAAO,SAAS;AACtC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE;AACzB,QAAA,MAAM,KAAK,GAAG,GAAG,EAAE,KAAK;AACxB,QAAA,IAAI,CAAC,KAAK;YAAE,OAAO,GAAG,EAAE,KAAK;AAC7B,QAAA,OAAO,OAAO,KAAK,KAAK,QAAQ,GAAG,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,GAAG,EAAE,KAAK;AACtE,IAAA,CAAC,iDAAC;;AAGF,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAK;AACxB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE;AACzB,QAAA,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,IAAI,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE;YAC3D,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;QAC/E;AACA,QAAA,OAAO,EAAE;AACX,IAAA,CAAC,qDAAC;;IAGF,cAAc,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;AAGnE,IAAA,oBAAoB,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE,GAAG,WAAW,GAAG,MAAM,CAAC,gEAAC;;AAGnH,IAAA,KAAK,GAAG,QAAQ,CAAmC,MAAK;AACtD,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE;AACzB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE;AAChC,QAAA,IAAI,GAAG,EAAE,IAAI,KAAK,QAAQ,EAAE;AAC1B,YAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,EAAE,KAAK;AAClC,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;AAAE,gBAAA,OAAO,QAAQ;YAC5C,IAAI,QAAQ,CAAC,QAAQ,CAAC;AAAE,gBAAA,OAAO,QAAyB;YACxD,OAAO,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE;QACjC;AACA,QAAA,IAAI,GAAG,EAAE,IAAI,KAAK,aAAa,EAAE;AAC/B,YAAA,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK;QACzB;AACA,QAAA,OAAO,EAAE;AACX,IAAA,CAAC,iDAAC;AAEF,IAAA,WAAA,GAAA;;;QAGE,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE;AACzB,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE;AAClC,YAAA,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM;gBAAE;AACrB,YAAA,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,IAAI,GAAG,CAAC,IAAI,KAAK,UAAU,EAAE;gBACzE,IAAI,GAAG,CAAC,MAAM,EAAE,IAAI,KAAK,MAAM,EAAE;oBAC/B,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE;gBACnE;YACF;AACA,YAAA,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,EAAE,IAAI,KAAK,cAAc,EAAE;gBAChE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE;YACnE;AACF,QAAA,CAAC,CAAC;IACJ;;;;IAKA,cAAc,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;;IAG/C,cAAc,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;wGApGpC,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,0kCC9BlC,+qQA2NA,EAAA,MAAA,EAAA,CAAA,uFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED/LY,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,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,UAAU,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,WAAA,EAAA,UAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,OAAO,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,MAAA,EAAA,YAAA,EAAA,YAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,YAAA,EAAA,aAAA,EAAA,MAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,WAAA,EAAA,WAAA,EAAA,SAAA,EAAA,qBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,WAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,SAAA,EAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,aAAa,icAAE,QAAQ,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,YAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,eAAA,EAAA,eAAA,EAAA,OAAA,EAAA,WAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,EAAA,YAAA,EAAA,OAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,MAAM,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,YAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,MAAA,EAAA,aAAA,EAAA,WAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,SAAA,EAAA,KAAA,EAAA,SAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,WAAW,mRAAE,OAAO,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,SAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,aAAA,EAAA,SAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,OAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAEvF,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBARjC,SAAS;+BACE,eAAe,EAAA,eAAA,EAGR,uBAAuB,CAAC,MAAM,cACnC,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,CAAC,EAAA,QAAA,EAAA,+qQAAA,EAAA,MAAA,EAAA,CAAA,uFAAA,CAAA,EAAA;;;AE1BrG;MAIa,gBAAgB,CAAA;AAC3B,IAAA,WAAA,GAAA,EAAe;IACf,MAAM,SAAS,CAAC,KAAwD,EAAA;AACtE,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACxB,YAAA,OAAO,KAAK;QACd;AACA,QAAA,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE;AAC/B,YAAA,MAAM,OAAO,GAAG,MAAM,KAAK,EAAE;AAC7B,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AAC1B,gBAAA,OAAO,OAAO;YAChB;QACF;AACA,QAAA,OAAO,EAAE;IACX;wGAbW,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;sGAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,cAAA,EAAA,CAAA;;4FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAH5B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,cAAc;AACrB,iBAAA;;;ACFM,MAAM,cAAc,GAAG,CAAC,MAA0B,KAAa,MAAM,EAAE,WAAW,IAAI,UAAU;AAEhG,MAAM,mBAAmB,GAAG,CAAI,IAAO,EAAE,MAA0B,KAAS;AACjF,IAAA,MAAM,GAAG,GAAG,cAAc,CAAC,MAAM,CAAC;AAClC,IAAA,MAAM,GAAG,GAAI,IAAgC,GAAG,GAAG,CAAC;AACpD,IAAA,OAAO,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAI,GAAW,GAAG,EAAE;AAC/C,CAAC;AAEM,MAAM,sBAAsB,GAAG,CAAC,KAAa,EAAE,MAA0B,KAAa;AAC3F,IAAA,MAAM,GAAG,GAAG,MAAM,EAAE,eAAe,IAAI,KAAK;IAC5C,IAAI,GAAG,KAAK,IAAI;AAAE,QAAA,OAAO,IAAI;IAC7B,IAAI,GAAG,KAAK,KAAK;AAAE,QAAA,OAAO,KAAK;IAC/B,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,KAAK,GAAG,GAAG;AAC/C,IAAA,OAAO,KAAK;AACd,CAAC;AAEM,MAAM,kBAAkB,GAAG,CAAI,GAAmB,EAAE,MAA0B,KAAa;IAChG,MAAM,QAAQ,GAAG,mBAAmB,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC;AACtD,IAAA,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;AAAE,QAAA,OAAO,IAAI;AACpC,IAAA,OAAO,CAAC,CAAC,MAAM,EAAE,gBAAgB;AACnC,CAAC;AAEM,MAAM,eAAe,GAAG,CAAI,GAAmB,EAAE,MAA0B,KAAa;IAC7F,IAAI,CAAC,MAAM,EAAE,gBAAgB;AAAE,QAAA,OAAO,KAAK;AAC3C,IAAA,OAAO,mBAAmB,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC;AAC3D,CAAC;AAEM,MAAM,WAAW,GAAG,CACzB,KAAuB,EACvB,MAA0B,EAC1B,OAAA,GAAuB,IAAI,GAAG,EAAE,KACZ;AACpB,IAAA,IAAI,CAAC,MAAM;AAAE,QAAA,OAAO,KAAK;AACzB,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ;IAChC,MAAM,MAAM,GAAqB,EAAE;IAEnC,MAAM,IAAI,GAAG,CAAC,IAAsB,EAAE,KAAa,EAAE,UAAoB,KAAI;QAC3E,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,UAAU,KAAI;YAC/B,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAAE;YAC9B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;AACxB,YAAA,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;YAClE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK;;YAE3B,MAAM,SAAS,GAAG,CAAC,GAAG,UAAU,EAAE,UAAU,GAAG,CAAC,CAAC;YACjD,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,SAAS;AACnC,YAAA,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;AAEhB,YAAA,MAAM,UAAU,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW;YACxE,MAAM,OAAO,GAAG,QAAQ,KAAK,SAAS,IAAI,KAAK,GAAG,QAAQ;AAC1D,YAAA,IAAI,CAAC,UAAU,IAAI,CAAC,OAAO;gBAAE;YAE7B,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE;YAC/C,IAAI,CAAC,QAAQ,EAAE,KAAK,GAAG,CAAC,EAAE,SAAS,CAAC;AACtC,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC;AAED,IAAA,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;AAClB,IAAA,OAAO,MAAM;AACf,CAAC;AAED;AACO,MAAM,wBAAwB,GAAG,CAAI,KAAuB,KAAsB;IACvF,MAAM,MAAM,GAAqB,EAAE;AACnC,IAAA,MAAM,IAAI,GAAG,CAAC,IAAsB,KAAI;AACtC,QAAA,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;AACtB,YAAA,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;YAChB,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU;YAC1C,IAAI,QAAQ,EAAE,MAAM;gBAAE,IAAI,CAAC,QAAQ,CAAC;QACtC;AACF,IAAA,CAAC;IACD,IAAI,CAAC,KAAK,CAAC;AACX,IAAA,OAAO,MAAM;AACf,CAAC;AAED;AACO,MAAM,cAAc,GAAG,CAC5B,KAAuB,EACvB,MAA0B,EAC1B,OAAA,GAAuB,IAAI,GAAG,EAAE,KACZ;AACpB,IAAA,IAAI,CAAC,MAAM;AAAE,QAAA,OAAO,KAAK;AACzB,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ;IAChC,MAAM,MAAM,GAAqB,EAAE;AAEnC,IAAA,MAAM,IAAI,GAAG,CAAC,IAAsB,EAAE,KAAa,KAAI;AACrD,QAAA,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;YACtB,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAAE;YAC9B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;AACxB,YAAA,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;YAChB,MAAM,OAAO,GAAG,QAAQ,KAAK,SAAS,IAAI,KAAK,GAAG,QAAQ;AAC1D,YAAA,IAAI,CAAC,OAAO;gBAAE;YACd,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,IAAI,EAAE;AAChD,YAAA,IAAI,CAAC,QAAQ,EAAE,KAAK,GAAG,CAAC,CAAC;QAC3B;AACF,IAAA,CAAC;AAED,IAAA,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;AACd,IAAA,OAAO,MAAM;AACf,CAAC;AAED;AACO,MAAM,eAAe,GAAG,CAAI,KAAU,EAAE,MAA0B,EAAE,OAAA,GAAwB,IAAI,GAAG,EAAE,KAAS;AACnH,IAAA,IAAI,CAAC,MAAM;AAAE,QAAA,OAAO,KAAK;AACzB,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ;IAChC,MAAM,MAAM,GAAQ,EAAE;AAEtB,IAAA,MAAM,IAAI,GAAG,CAAC,IAAS,EAAE,KAAa,KAAI;AACxC,QAAA,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;AACtB,YAAA,IAAI,OAAO,CAAC,GAAG,CAAC,GAAa,CAAC;gBAAE;AAChC,YAAA,OAAO,CAAC,GAAG,CAAC,GAAa,CAAC;AAC1B,YAAA,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;YAChB,MAAM,OAAO,GAAG,QAAQ,KAAK,SAAS,IAAI,KAAK,GAAG,QAAQ;AAC1D,YAAA,IAAI,CAAC,OAAO;gBAAE;AACd,YAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC;QACnD;AACF,IAAA,CAAC;AAED,IAAA,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;AACd,IAAA,OAAO,MAAM;AACf,CAAC;;MCpHY,UAAU,CAAA;AACrB,IAAA,SAAS,CAAC,KAAoB,EAAE,UAA8B,EAAE,SAAS,GAAG,CAAC,EAAA;AAC3E,QAAA,IAAI,CAAC,UAAU;AAAE,YAAA,OAAO,KAAK;AAC7B,QAAA,OAAO,WAAW,CAAC,KAAK,EAAE,UAAU,CAAC;IACvC;wGAJW,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;sGAAV,UAAU,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,QAAA,EAAA,CAAA;;4FAAV,UAAU,EAAA,UAAA,EAAA,CAAA;kBADtB,IAAI;mBAAC,EAAE,IAAI,EAAE,QAAQ,EAAE;;;ACLxB;AAgDA;MACa,uBAAuB,CAAA;;;;AAIlC,IAAA,WAAW,GAAG,KAAK,CAA4B,SAAS,+CAAI,KAAK,EAAE,QAAQ,EAAA,CAAA,GAAA,CAAjB,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAC;AAC9E,IAAA,MAAM,GAAG,KAAK,CAAkC,SAAS,kDAAC;AAC1D,IAAA,eAAe,GAAG,KAAK,CAA6C,EAAE,2DAAC;AACvE,IAAA,cAAc,GAAG,KAAK,CAAkC,SAAS,0DAAC;;;;AAKzD,IAAA,IAAI,GAAG,MAAM,CAAC,iBAAiB,CAAC;;;;AAKzC,IAAA,cAAc,GAAG,MAAM,CAAsB,EAAE,0DAAC;AAChD,IAAA,cAAc,GAAG,MAAM,CAA0B,EAAE,0DAAC;AACpD,IAAA,QAAQ,GAAG,MAAM,CAAU,KAAK,oDAAC;AACjC,IAAA,gBAAgB,GAAG,gBAAgB,CAAC,QAAQ,EAAE;;AAErC,IAAA,IAAI,GAAG,IAAI,SAAS,CAAC,EAAE,CAAC;;;;;AAMjC,IAAA,MAAM,GAAG,QAAQ,CAAC,MAAK;AACrB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE;QAC/B,OAAO,IAAI,GAAG,CAAA,EAAG,IAAI,CAAA,UAAA,CAAY,GAAG,EAAE;AACxC,IAAA,CAAC,kDAAC;;IAGF,GAAG,GAAG,QAAQ,CAAQ,OAAO,IAAI,CAAC,MAAM,EAAE,EAAE,oBAAoB,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,KAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;AAGhF,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,IAAI,EAAE,uDAAC;AAE1D,IAAA,WAAA,GAAA;;;;;QAKE,MAAM,CAAC,SAAS,IAAG;AACjB,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,EAAE;AACtC,YAAA,IAAI,CAAC,QAAQ;gBAAE;YAEf,SAAS,CAAC,MAAK;AACb,gBAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,IAAG;oBAC7D,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,IAAI,EAAE,CAAC;AACnD,gBAAA,CAAC,CAAC;AAEF,gBAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,IAAG;oBACrD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,IAAI,EAAE,CAAC;oBACjD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;AACrC,gBAAA,CAAC,CAAC;gBAEF,SAAS,CAAC,MAAK;oBACb,MAAM,CAAC,WAAW,EAAE;oBACpB,MAAM,CAAC,WAAW,EAAE;AACtB,gBAAA,CAAC,CAAC;AACJ,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;;AAGF,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,SAAS,CAAC,MAAK;YAC/D,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;AACnC,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AAC1B,QAAA,CAAC,CAAC;IACJ;;;;IAKA,YAAY,GAAG,MAAK;QAClB,IAAI,CAAC,QAAQ,EAAE;AACjB,IAAA,CAAC;AAED,IAAA,QAAQ,GAAG,CAAC,cAAqC,KAAI;AACnD,QAAA,cAAc,EAAE,QAAQ,GAAG,IAAI,CAAC,cAAc,EAAE,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;;QAEzE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,YAAY,EAAE;YAChC,IAAI,CAAC,QAAQ,EAAE;QACjB;AACF,IAAA,CAAC;IAED,QAAQ,GAAG,MAAK;AACd,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACrB,YAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;YAC5B;QACF;AACA,QAAA,IAAI,CAAC,cAAc,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC;AAC/B,YAAA,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE;AACtC,SAAA,CAAC;AACJ,IAAA,CAAC;;IAGD,YAAY,GAAG,MAAK;AAClB,QAAA,IAAI,CAAC,cAAc,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC;AAC/B,YAAA,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE;AACrC,YAAA,SAAS,EAAE,IAAI;AAChB,SAAA,CAAC;AACJ,IAAA,CAAC;AAED,IAAA,WAAW,GAAG,CAAC,KAAa,KAAI;QAC9B,KAAK,EAAE,eAAe,EAAE;QACxB,IAAI,CAAC,cAAc,EAAE,EAAE,KAAK,CAAC,MAAM,EAAE;AACrC,QAAA,IAAI,CAAC,MAAM,EAAE,EAAE,aAAa,IAAI;AAClC,IAAA,CAAC;AAED,IAAA,gBAAgB,GAAG,CAAC,KAAY,EAAE,cAAqC,KAAI;QACzE,KAAK,EAAE,eAAe,EAAE;QACxB,MAAM,IAAI,GAAG,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE,EAAE;AACzC,QAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;AACxD,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;AAC7B,QAAA,IAAI,CAAC,cAAc,EAAE,EAAE,aAAa,CAAC,GAAG,CAAC;AACvC,YAAA,cAAc,EAAE,IAAI;AACrB,SAAA,CAAC;AACJ,IAAA,CAAC;;;;IAKD,SAAS,GAAG,MAAc;AACxB,QAAA,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,IAAG;;AAE5D,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;AAAE,gBAAA,OAAO,CAAC,CAAC,GAAG,CAAC,MAAM;;AAE3C,YAAA,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;gBAClC,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI;AAAE,oBAAA,OAAO,IAAI;gBAC5C,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE;AAAE,oBAAA,OAAO,IAAI;AACxC,gBAAA,OAAO,KAAK;YACd;YACA,OAAO,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,EAAE;AACxD,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC;wGAxIU,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAvB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECjDpC,kyVAyPA,EAAA,MAAA,EAAA,CAAA,oJAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDzNI,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,6CAAA,EAAA,MAAA,EAAA,CAAA,sBAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,4BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,SAAS,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,WAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACT,OAAO,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,MAAA,EAAA,YAAA,EAAA,YAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,YAAA,EAAA,aAAA,EAAA,MAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,WAAA,EAAA,WAAA,EAAA,SAAA,EAAA,qBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,WAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,SAAA,EAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACP,aAAa,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,YAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,MAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,KAAA,EAAA,WAAA,EAAA,aAAA,EAAA,WAAA,EAAA,YAAA,EAAA,YAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,SAAA,EAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,QAAQ,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,YAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,eAAA,EAAA,eAAA,EAAA,OAAA,EAAA,WAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,EAAA,YAAA,EAAA,OAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACR,MAAM,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,YAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,MAAA,EAAA,aAAA,EAAA,WAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,SAAA,EAAA,KAAA,EAAA,SAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACN,UAAU,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,YAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,aAAA,EAAA,WAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,SAAA,EAAA,KAAA,EAAA,SAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACVA,aAAW,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,KAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,QAAQ,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,MAAA,EAAA,OAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,YAAA,EAAA,YAAA,EAAA,UAAA,EAAA,SAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAER,UAAU,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,OAAA,EAAA,UAAA,EAAA,QAAA,EAAA,aAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EADV,gBAAgB,gDAEhB,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAIJ,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAxBnC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,mBAGV,uBAAuB,CAAC,MAAM,EAAA,UAAA,EACnC,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,aAAa;wBACb,iBAAiB;wBACjB,SAAS;wBACT,OAAO;wBACP,aAAa;wBACb,QAAQ;wBACR,MAAM;wBACN,UAAU;wBACVA,aAAW;wBACX,QAAQ;wBACR,gBAAgB;wBAChB,UAAU;wBACV,aAAa;AACd,qBAAA,EAAA,QAAA,EAAA,kyVAAA,EAAA,MAAA,EAAA,CAAA,oJAAA,CAAA,EAAA;;;AE9CH;AAcA;;;;;;;;;;;;AAYG;MAsBU,qBAAqB,CAAA;;;;AAIhC,IAAA,WAAW,GAAG,KAAK,CAA4B,SAAS,+CAAI,KAAK,EAAE,QAAQ,EAAA,CAAA,GAAA,CAAjB,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAC;AAC9E,IAAA,MAAM,GAAG,KAAK,CAAkC,SAAS,kDAAC;AAC1D,IAAA,eAAe,GAAG,KAAK,CAA6C,EAAE,2DAAC;AACvE,IAAA,OAAO,GAAG,KAAK,CAAqC,EAAE,mDAAC;AACvD,IAAA,UAAU,GAAG,KAAK,CAA0D,EAAE,sDAAC;AAC/E,IAAA,cAAc,GAAG,KAAK,CAAkC,SAAS,0DAAC;AAClE,IAAA,WAAW,GAAG,KAAK,CAAoC,SAAS,uDAAC;;;;AAKjE,IAAA,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC;;;;AAKzC,IAAA,mBAAmB,GAAG,MAAM,CAAsB,EAAE,+DAAC;AACrD,IAAA,qBAAqB,GAAG,MAAM,CAA2B,EAAE,iEAAC;AAC5D,IAAA,qBAAqB,GAAG,MAAM,CAAsB,EAAE,iEAAC;;;;AAKvD,IAAA,MAAM,GAAG,QAAQ,CAAC,MAAK;AACrB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE;QAC/B,OAAO,IAAI,GAAG,CAAA,EAAG,IAAI,CAAA,eAAA,CAAiB,GAAG,EAAE;AAC7C,IAAA,CAAC,kDAAC;AAEF,IAAA,mBAAmB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,IAAI,EAAE,+DAAC;AAClE,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,uDAAC;AAClD,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,0DAAC;;;;IAKxD,IAAI,GAAG,MAAK;AACV,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,EAAE;QACjC,MAAM,GAAG,GAAG,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE;AAC5B,QAAA,MAAM,MAAM,GAAG,CAAC,CAAM,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AACnE,QAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;AACvD,QAAA,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;AAC3D,QAAA,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;AAC3D,QAAA,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE;AACtB,IAAA,CAAC;IAED,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE;;;;IAKnC,OAAO,GAAG,MAAK;AACb,QAAA,IAAI,CAAC,cAAc,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC;AAC/B,YAAA,YAAY,EAAE,IAAI,CAAC,mBAAmB,EAAE;AACxC,YAAA,cAAc,EAAE,IAAI,CAAC,qBAAqB,EAAE;AAC5C,YAAA,cAAc,EAAE,IAAI,CAAC,qBAAqB,EAAE;AAC7C,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE;AACvB,IAAA,CAAC;IAED,QAAQ,GAAG,MAAK;;AAEd,QAAA,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE;AACvB,IAAA,CAAC;wGAlEU,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAeJ,YAAY,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC/D1C,gnPAiMA,EAAA,MAAA,EAAA,CAAA,sVAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED/JI,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,YAAY,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,WAAA,EAAA,sBAAA,EAAA,aAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,QAAQ,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,MAAA,EAAA,OAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,YAAA,EAAA,YAAA,EAAA,UAAA,EAAA,SAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACR,qBAAqB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,cAAA,EAAA,aAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,cAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,OAAO,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,MAAA,EAAA,YAAA,EAAA,YAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,YAAA,EAAA,aAAA,EAAA,MAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,WAAA,EAAA,WAAA,EAAA,SAAA,EAAA,qBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,WAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,SAAA,EAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACP,aAAa,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,YAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,MAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,KAAA,EAAA,WAAA,EAAA,aAAA,EAAA,WAAA,EAAA,YAAA,EAAA,YAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,SAAA,EAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,QAAQ,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,YAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,eAAA,EAAA,eAAA,EAAA,OAAA,EAAA,WAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,EAAA,YAAA,EAAA,OAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACR,MAAM,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,YAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,MAAA,EAAA,aAAA,EAAA,WAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,SAAA,EAAA,KAAA,EAAA,SAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACN,UAAU,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,YAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,aAAA,EAAA,WAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,SAAA,EAAA,KAAA,EAAA,SAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACVA,aAAW,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,KAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EACX,gBAAgB,EAAA,IAAA,EAAA,cAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAChB,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAGJ,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBArBjC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,mBAGR,uBAAuB,CAAC,MAAM,EAAA,UAAA,EACnC,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,YAAY;wBACZ,QAAQ;wBACR,qBAAqB;wBACrB,OAAO;wBACP,aAAa;wBACb,QAAQ;wBACR,MAAM;wBACN,UAAU;wBACVA,aAAW;wBACX,gBAAgB;wBAChB,aAAa;AACd,qBAAA,EAAA,QAAA,EAAA,gnPAAA,EAAA,MAAA,EAAA,CAAA,sVAAA,CAAA,EAAA;uxBAiB2B,YAAY,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;MErD7B,gBAAgB,CAAA;AAC3B,IAAA,QAAQ,GAAG,CAAC,MAAqB,KAAY;AAC3C,QAAA,IAAI,UAAU,IAAI,MAAM,EAAE;YACxB,OAAO;AACL,gBAAA,OAAO,EAAE,UAAU;gBACnB,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK;AAClC,oBAAA,OAAO,EAAE,QAAQ;oBACjB,KAAK,EAAE,CAAC,CAAC,KAAK;oBACd,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,OAAO,EAAE,CAAC,CAAC,OAAO;oBAClB,OAAO,EAAE,CAAC,CAAC,OAAO;oBAClB,KAAK,EAAE,CAAC,CAAC,KAAK;AACf,iBAAA,CAAC,CAAC;aACJ;QACH;QACA,OAAO;AACL,YAAA,OAAO,EAAE,QAAQ;YACjB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,KAAK,EAAE,MAAM,CAAC,KAAK;SACpB;AACH,IAAA,CAAC;AACD,IAAA,SAAS,GAAG,CAAC,aAAwC,EAAE,OAAoC,KAAc;QACvG,MAAM,OAAO,GAAoB,EAAE;QACnC,IAAI,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,aAAa,EAAE,MAAM,EAAE;AAC9C,YAAA,OAAO,EAAE;QACX;AACA,QAAA,KAAK,MAAM,MAAM,IAAI,OAAO,IAAI,EAAE,EAAE;AAClC,YAAA,IAAI,UAAU,IAAI,MAAM,EAAE;gBACxB,MAAM,QAAQ,GAA0B,EAAE;AAC1C,gBAAA,KAAK,MAAM,WAAW,IAAI,MAAM,CAAC,QAAQ,EAAE;oBACzC,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC;oBACvC,IAAI,aAAa,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE;AACvE,wBAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC;oBAC5B;gBACF;AACA,gBAAA,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;oBACvB,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,CAAC;gBACvC;YACF;iBAAO;gBACL,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;gBAClC,IAAI,aAAa,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE;AACvE,oBAAA,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;gBACtB;YACF;QACF;AACA,QAAA,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACrD,IAAA,CAAC;wGA3DU,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;sGAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,cAAA,EAAA,CAAA;;4FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAH5B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,cAAc;AACrB,iBAAA;;;MCQY,uBAAuB,CAAA;;;;AAIlC,IAAA,WAAW,GAAG,KAAK,CAA4B,SAAS,uDAAC;AACzD,IAAA,kBAAkB,GAAG,KAAK,CAA4B,SAAS,8DAAC;IAChE,KAAK,GAAG,MAAM,EAAQ;;;;AAKb,IAAA,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC;;;;AAKpC,IAAA,OAAO,GAAG,QAAQ,CAAS,MAAK;QAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,OAAO;AACjD,QAAA,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,kDAAkD,CAAC;AACjF,QAAA,IAAI,OAAO,GAAG,KAAK,UAAU,EAAE;AAC7B,YAAA,OAAO,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;QACzD;AACA,QAAA,OAAO,GAAG;AACZ,IAAA,CAAC,mDAAC;AAEF,IAAA,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,MAAM,kDAAC;;;;IAK5D,OAAO,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;AAEjC,IAAA,aAAa,GAAG,CAAC,MAAc,KAAI;QACjC,IAAI,MAAM,EAAE,OAAO,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,EAAE;AAChD,YAAA,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;QAC3D;AACF,IAAA,CAAC;wGApCU,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAvB,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECjBpC,2qEAsDA,EAAA,MAAA,EAAA,CAAA,8lBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDvCY,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,6CAAA,EAAA,MAAA,EAAA,CAAA,sBAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,4BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,QAAQ,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,MAAA,EAAA,OAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,YAAA,EAAA,YAAA,EAAA,UAAA,EAAA,SAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,aAAa,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,IAAA,EAAA,cAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAEtE,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAPnC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,EAAA,eAAA,EAGV,uBAAuB,CAAC,MAAM,WACtC,CAAC,aAAa,EAAE,aAAa,EAAE,QAAQ,EAAE,aAAa,EAAE,gBAAgB,CAAC,EAAA,QAAA,EAAA,2qEAAA,EAAA,MAAA,EAAA,CAAA,8lBAAA,CAAA,EAAA;;;AE0B7E,MAAM,oBAAoB,GAA0B;AACzD,IAAA,QAAQ,EAAE;AACR,QAAA,QAAQ,EAAE,EAAE;QACZ,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;AAC1B,KAAA;CACF;MAEY,sBAAsB,GAAG,IAAI,cAAc,CAAwB,wBAAwB;;MCvC3F,aAAa,CAAA;AAiBd,IAAA,cAAA;AAC2C,IAAA,kBAAA;AAjBrD,IAAA,QAAQ,GAAG;AACT,QAAA,cAAc,EAAE,wBAAwB;AACxC,QAAA,OAAO,EAAE,WAAW;AACpB,QAAA,SAAS,EAAE,aAAa;AACxB,QAAA,KAAK,EAAE,SAAS;AAChB,QAAA,OAAO,EAAE,WAAW;AACpB,QAAA,KAAK,EAAE,SAAS;AAChB,QAAA,WAAW,EAAE,cAAc;AAC3B,QAAA,MAAM,EAAE,UAAU;KACnB;IACD,OAAO,GAAG,cAAc;AACxB,IAAA,QAAQ;AACR,IAAA,YAAY,GAAG,IAAI,OAAO,EAAoC;AAC9D,IAAA,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE;IAE/C,WAAA,CACU,cAAgC,EACW,kBAAyC,EAAA;QADpF,IAAA,CAAA,cAAc,GAAd,cAAc;QAC6B,IAAA,CAAA,kBAAkB,GAAlB,kBAAkB;IACpE;AAEH,IAAA,oBAAoB,GAAG,CAAC,MAAqB,KAAgC;;AAE3E,QAAA,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE;AAChB,YAAA,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAAkB,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;gBACzE,IAAI,EAAE,SAAS;AACf,gBAAA,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC/B,aAAA,CAAC;QACJ;;AAEA,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAC/B,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,EAC1C;AACE,YAAA,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC/B,SAAA,CACF;AACH,IAAA,CAAC;AAED,IAAA,mBAAmB,GAAG,CAAC,MAAqB,KAAI;;AAE9C,QAAA,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE;AAChB,YAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC9B;QACA,MAAM,OAAO,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAE;AAClD,QAAA,OAAO,OAAO,CAAC,GAAG,EAAE;AACtB,IAAA,CAAC;AAED,IAAA,uBAAuB,GAAG,CAAC,MAAqB,EAAE,aAA8B,KAA2B;AACzG,QAAA,MAAM,MAAM,GAA0B;AACpC,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,WAAW,EAAE,EAAE;AACf,YAAA,YAAY,EAAE,EAAE;AAChB,YAAA,aAAa,EAAE,EAAE;AACjB,YAAA,YAAY,EAAE,EAAE;AAChB,YAAA,aAAa,EAAE,EAAE;AACjB,YAAA,gBAAgB,EAAE,EAAE;AACpB,YAAA,gBAAgB,EAAE,EAAE;AACpB,YAAA,cAAc,EAAE,KAAK;SACtB;QACD,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,EAAE;AACxC,QAAA,MAAM,QAAQ,GAAG,MAAM,EAAE,OAAO,EAAE,QAAQ,IAAI,MAAM,EAAE,QAAQ,IAAI,EAAE;AACpE,QAAA,MAAM,cAAc,GAAG,MAAM,EAAE,OAAO,EAAE,KAAK,KAAK,OAAO,IAAI,KAAK,CAAC;AACnE,QAAA,MAAM,OAAO,GAAG,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE;AAC7D,QAAA,IAAI,QAAQ,EAAE,OAAO,EAAE;YACrB,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;YACjD,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;QACvD;AACA,QAAA,IAAI,MAAM,CAAC,IAAI,EAAE;YACf,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;YACnD,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;QACzD;;AAEA,QAAA,IAAI,QAAQ,EAAE,MAAM,IAAI,CAAC,cAAc,EAAE;YACvC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;YAC/C,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;QACrD;;;;;;AAMA,QAAA,IAAI,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE;YACzB,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;YAC7C,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QACnD;AACA,QAAA,aAAa,EAAE;cACX,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS;aAC7B,OAAO,CAAC,GAAG,IAAG;;;YAGb,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;YAC9D,IAAI,MAAM,EAAE;AACV,gBAAA,MAAM,KAAK,GACT,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,GAAG,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,EAAE,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE;AAC9H,gBAAA,MAAM,IAAI,GAAG;oBACX,GAAG,MAAM,CAAC,IAAI;AACd,oBAAA,QAAQ,EAAE;AACR,wBAAA,GAAG,MAAM,CAAC,IAAI,EAAE,QAAQ;wBACxB,MAAM,EAAE,GAAG,EAAE,QAAQ,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ;wBAC5C,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,IAAI,SAAS;AAChD,qBAAA;iBACF;gBAED,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG;oBAChC,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK;oBACpC,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK;iBACrC;AAED,gBAAA,IAAI,GAAG,CAAC,KAAK,EAAE;oBACb,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG;wBACrC,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK;wBACpC,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK;qBACrC;gBACH;AAEA,gBAAA,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC;AACvB,oBAAA,GAAG,MAAM;AACT,oBAAA,KAAK,EAAE,KAAK;oBACZ,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK;AACpC,oBAAA,IAAI,EAAE,IAAI;AACX,iBAAA,CAAC;gBACF,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;gBAC1C,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;AAE9C,gBAAA,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE;AAC9B,oBAAA,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,WAAW,IAAG;AACrC,wBAAA,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC;wBACtC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;wBAC5C,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AACjD,oBAAA,CAAC,CAAC;gBACJ;YACF;AACF,QAAA,CAAC,CAAC;;QAEJ;cACI,MAAM,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC;aACrF,OAAO,CAAC,MAAM,IAAG;AAChB,YAAA,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC;AACvB,gBAAA,GAAG,MAAM;gBACT,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,KAAK,EAAE,MAAM,CAAC,KAAK;AACpB,aAAA,CAAC;YACF,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;YACtC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;AAC1C,YAAA,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE;AAC9B,gBAAA,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,WAAW,IAAG;AACrC,oBAAA,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC;oBACtC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;oBAC5C,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AACjD,gBAAA,CAAC,CAAC;YACJ;AACF,QAAA,CAAC,CAAC;AACJ,QAAA,IAAI,MAAM,CAAC,MAAM,EAAE;YACjB,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC;YACtD,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC;QAC5D;AACA,QAAA,IAAI,QAAQ,EAAE,MAAM,IAAI,cAAc,EAAE;YACtC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;YAC/C,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;QACrD;;;AAGA,QAAA,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE;YAC1B,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC9C,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QACpD;QACA,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC;;AAEvD,QAAA,MAAM,CAAC,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC,MAAM,CACtD,GAAG,IAAI,GAAG,KAAK,IAAI,CAAC,QAAQ,CAAC,cAAc,IAAI,GAAG,KAAK,IAAI,CAAC,QAAQ,CAAC,WAAW,IAAI,GAAG,KAAK,IAAI,CAAC,QAAQ,CAAC,MAAM,CACjH;AACD,QAAA,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE;;YAE1B,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QACpD;AACA,QAAA,IAAI,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE;YAC/B,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;YACtD,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;YAClD,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;QACxD;AACA,QAAA,OAAO,MAAM;AACf,IAAA,CAAC;AAED,IAAA,IAAI,GAAG,CAAC,WAA0B,KAAI;QACpC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC;QACtD,OAAO,IAAI,CAAC,QAAQ;AACtB,IAAA,CAAC;AAED,IAAA,kBAAkB,GAAG,CAAC,KAAa,EAAE,KAAa,KAAI;QACpD,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE;QACpB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;AACnC,QAAA,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,GAAG,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE;AAC5D,QAAA,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,KAAK,KAAK,CAAC;AAC5D,QAAA,IAAI,GAAG,GAAG,CAAC,EAAE;;;YAGX;QACF;AACA,QAAA,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE;AACzC,QAAA,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,CAAC;QAChD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAC1C,IAAA,CAAC;AAED,IAAA,QAAQ,GAAG,CAAC,WAA0B,KAAqB;AACzD,QAAA,MAAM,OAAO,GACX,WAAW,EAAE;cACT,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM;AACtB,aAAA,GAAG,CAAC,CAAC,KAAK;AACT,YAAA,MAAM,EAAE;gBACN,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,KAAK,EAAE,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK;gBAC7D,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,SAAS,EAAE,CAAC,CAAC,SAAS;gBACtB,KAAK,EAAE,CAAC,CAAC,KAAK;AACd,gBAAA,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM;AACpC,aAAA;YACD,KAAK,EAAE,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK;YAC7D,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,SAAS,EAAE,CAAC,CAAC,SAAS;YACtB,KAAK,EAAE,CAAC,CAAC,KAAK;AACd,YAAA,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM;SACpC,CAAC,CAAC,IAAI,EAAE;QACb,OAAO;YACL,OAAO;SACR;AACH,IAAA,CAAC;AAjOU,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,oDAkBd,sBAAsB,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;4GAlBrB,aAAa,EAAA,CAAA;;4FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBADzB;;0BAmBI,MAAM;2BAAC,sBAAsB;;0BAAG;;;AC3BrC;AAiDA;MACa,eAAe,CAAA;;;;AAI1B,IAAA,WAAW,GAAG,KAAK,CAA4B,SAAS,uDAAC;IACzD,OAAO,GAAG,MAAM,EAAyB;;;;AAKzC,IAAA,KAAK,GAAG,SAAS,CAAU,OAAO,iDAAC;AACnC,IAAA,KAAK,GAAG,SAAS,CAAC,QAAQ,CAA0B,QAAQ,CAAC;;;;AAKpD,IAAA,IAAI,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAChC,IAAA,eAAe,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC1C,IAAA,cAAc,GAAG,MAAM,CAAC,aAAa,CAAC;AACtC,IAAA,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC;;;;AAKpC,IAAA,aAAa,GAAG,MAAM,CAA8B,SAAS,yDAAC;;IAE9D,YAAY,GAAG,IAAI;AACnB,IAAA,QAAQ;;;;AAKR,IAAA,WAAA,GAAA;AACE,QAAA,SAAS,CAAC,MAAM,EAAE,SAAS;aACxB,IAAI,CAAC,kBAAkB,EAAE;aACzB,SAAS,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AAC1B,QAAA,CAAC,CAAC;IACN;;;;IAKA,IAAI,GAAG,YAAW;AAChB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE;AAC9B,QAAA,IAAI,CAAC,GAAG;YAAE;QACV,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAE;AAC9C,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC;AAC5C,QAAA,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE;AACtB,IAAA,CAAC;IAED,KAAK,GAAG,MAAK;AACX,QAAA,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE;AACvB,IAAA,CAAC;IAED,MAAM,GAAG,MAAK;AACZ,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,EAAE;AAChC,QAAA,IAAI,GAAG;AAAE,YAAA,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC;AAChC,QAAA,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE;AACrB,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AAC3B,IAAA,CAAC;IAED,OAAO,GAAG,YAAW;AACnB,QAAA,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,2CAA2C,CAAC,CAAC,CAAC,IAAI,CAAC,MAAK;AAChG,YAAA,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE;AACvB,YAAA,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE;AACrB,YAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AAC3B,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC;AAED,IAAA,SAAS,CAAC,KAAU,EAAA;QAClB,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,EAAE,OAAO;AAC1C,QAAA,IAAI,CAAC,IAAI;YAAE;QACX,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,YAAY,CAAC;AAC9D,QAAA,IAAI,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE;IAC3B;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;IAC3B;IAEA,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;IAC1B;wGAnFW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAf,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EAHf,CAAC,aAAa,CAAC,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,OAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAaC,OAAO,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,OAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EACkB,QAAQ,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC7D9D,i2IAkFA,EAAA,MAAA,EAAA,CAAA,kOAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED/CI,YAAY,8BACZ,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,uBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,oCAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,oBAAoB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACpB,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,GAAA,CAAA,WAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,IAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,4BAAA,EAAA,2BAAA,EAAA,0BAAA,EAAA,+BAAA,EAAA,2BAAA,EAAA,6BAAA,EAAA,sBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,GAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,yBAAA,EAAA,iBAAA,EAAA,0BAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACd,QAAQ,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,MAAA,EAAA,OAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,YAAA,EAAA,YAAA,EAAA,UAAA,EAAA,SAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACR,OAAO,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,MAAA,EAAA,YAAA,EAAA,YAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,YAAA,EAAA,aAAA,EAAA,MAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,WAAA,EAAA,WAAA,EAAA,SAAA,EAAA,qBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,WAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,SAAA,EAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACP,OAAO,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,OAAA,EAAA,OAAA,EAAA,OAAA,EAAA,QAAA,EAAA,MAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,sBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACP,QAAQ,2MACR,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA;;4FAKJ,eAAe,EAAA,UAAA,EAAA,CAAA;kBArB3B,SAAS;+BACE,QAAQ,EAAA,UAAA,EAGN,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,WAAW;wBACX,cAAc;wBACd,oBAAoB;wBACpB,cAAc;wBACd,cAAc;wBACd,QAAQ;wBACR,OAAO;wBACP,OAAO;wBACP,QAAQ;wBACR,aAAa;qBACd,EAAA,SAAA,EACU,CAAC,aAAa,CAAC,EAAA,QAAA,EAAA,i2IAAA,EAAA,MAAA,EAAA,CAAA,kOAAA,CAAA,EAAA;AAaC,SAAA,CAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAAA,OAAO,oFACkB,QAAQ,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;MEnCjD,YAAY,CAAA;AACvB,IAAA,SAAS,CAAC,KAAU,EAAA;AAClB,QAAA,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE;IACnE;wGAHW,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;sGAAZ,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,UAAA,EAAA,CAAA;;4FAAZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBAJxB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,UAAU;AAChB,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;MAeY,aAAa,CAAA;;AAExB,IAAA,IAAI,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAEhC,IAAA,gBAAgB,GAAG,SAAS,CAA0B,kBAAkB,4DAAC;AAEzE,IAAA,WAAW,GAAG,MAAM,CAAU,IAAI,uDAAC;AACnC,IAAA,aAAa,GAAG,MAAM,CAAU,KAAK,yDAAC;;AAGtC,IAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,iDAA6B;AACpD,IAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,iDAAiB;AACxC,IAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,+CAAe;AAEpC,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;QAC7B,OAAO,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM;AAC9C,IAAA,CAAC,0DAAC;AAEF,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AAC5B,QAAA,OAAO,IAAI,CAAC,MAAM,EAAE,EAAE,KAAK;AAC7B,IAAA,CAAC,yDAAC;AAEF,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;YACV,IAAI,CAAC,aAAa,EAAE;AACpB,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE;YACzC,IAAI,SAAS,EAAE;AACb,gBAAA,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,aAAa,CAAC;YAC9C;AACF,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,cAAc,GAAG,CAAC,OAAoB,KAAI;;QAExC,UAAU,CAAC,MAAK;AACd,YAAA,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY;AAC5G,YAAA,IAAI,IAAI,CAAC,aAAa,EAAE,KAAK,WAAW,EAAE;AACxC,gBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC;AACnC,gBAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YAC1B;AACF,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC;IAED,MAAM,GAAG,MAAK;AACZ,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC;AAC9C,IAAA,CAAC;wGA7CU,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAb,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,MAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECxC1B,i6JA+HA,EAAA,MAAA,EAAA,CAAA,4TAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDzFY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,OAAO,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,SAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,aAAA,EAAA,SAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAkB,kBAAkB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,mBAAA,EAAA,gBAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAlC,cAAc,EAAA,IAAA,EAAA,YAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAZpC,YAAY,4CAY4D,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAErF,aAAa,EAAA,UAAA,EAAA,CAAA;kBARzB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,MAAM,mBAGC,uBAAuB,CAAC,MAAM,EAAA,UAAA,EACnC,IAAI,WACP,CAAC,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,YAAY,EAAE,aAAa,CAAC,EAAA,QAAA,EAAA,i6JAAA,EAAA,MAAA,EAAA,CAAA,4TAAA,CAAA,EAAA;wGAM3C,kBAAkB,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;MEb7D,oBAAoB,CAAA;;AAE/B,IAAA,IAAI,GAAG,MAAM,CAAC,iBAAiB,CAAC;;AAGhC,IAAA,gBAAgB,GAAG,SAAS,CAA0B,kBAAkB,4DAAC;;AAGzE,IAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,iDAAiB;AACxC,IAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,+CAAe;AACpC,IAAA,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,SAAA,EAAA,CAAA,GAAA,CAA0C,EAAE,GAAC;AAErE,IAAA,KAAK,GAAG,QAAQ,CAAC,MAAK;AACpB,QAAA,OAAO,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC;AAC1E,IAAA,CAAC,iDAAC;AAEF,IAAA,GAAG,GAAG,QAAQ,CAAC,MAAK;QAClB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI;QAC9B,OAAO,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE;AACxF,IAAA,CAAC,+CAAC;AAEF,IAAA,MAAM,GAAG,QAAQ,CAAC,MAAK;AACrB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;AAC5B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;AACtB,QAAA,OAAO,GAAG,GAAG,CAAA,CAAA,EAAI,MAAM,CAAC,KAAK,EAAE;AACjC,IAAA,CAAC,kDAAC;AAEF,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;QAC7B,OAAO,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM;AAC9C,IAAA,CAAC,0DAAC;AAEF,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AAC5B,QAAA,OAAO,IAAI,CAAC,MAAM,EAAE,EAAE,KAAK;AAC7B,IAAA,CAAC,yDAAC;;;AAIF,IAAA,WAAW,GAAG,QAAQ,CAA+B,MAAK;AACxD,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;AAC9B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;AAC5B,QAAA,OAAO,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,WAAW,IAAI,MAAM,EAAE,IAAI,EAAE,WAAW;AACzE,IAAA,CAAC,uDAAC;AAEF,IAAA,WAAW,GAAG,MAAM,CAAU,IAAI,uDAAC;AACnC,IAAA,aAAa,GAAG,MAAM,CAAU,KAAK,yDAAC;AAEtC,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;YACV,IAAI,CAAC,aAAa,EAAE;AACpB,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE;YACzC,IAAI,SAAS,EAAE;AACb,gBAAA,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,aAAa,CAAC;YAC9C;AACF,QAAA,CAAC,CAAC;IACJ;IAEA,MAAM,GAAG,MAAK;AACZ,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC;AAC9C,IAAA,CAAC;AAED,IAAA,cAAc,GAAG,CAAC,OAAoB,KAAU;;QAE9C,UAAU,CAAC,MAAK;AACd,YAAA,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY;AAC5G,YAAA,IAAI,IAAI,CAAC,aAAa,EAAE,KAAK,WAAW,EAAE;AACxC,gBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC;AACnC,gBAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YAC1B;AACF,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC;wGArEU,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC/BjC,uvDAiDA,EAAA,MAAA,EAAA,CAAA,sPAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDpBY,YAAY,sMAAE,kBAAkB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,mBAAA,EAAA,gBAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,aAAa,EAAA,QAAA,EAAA,MAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAE,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAE7D,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBARhC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAc,EAAA,eAAA,EAGP,uBAAuB,CAAC,MAAM,cACnC,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,kBAAkB,EAAE,aAAa,EAAE,aAAa,CAAC,EAAA,QAAA,EAAA,uvDAAA,EAAA,MAAA,EAAA,CAAA,sPAAA,CAAA,EAAA;wGAOnB,kBAAkB,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AEhC1E;;;;;;;;;;;;;AAaG;MAEU,WAAW,CAAA;IACtB,SAAS,CAAC,IAAiB,EAAE,OAAuB,EAAA;QAClD,OAAO;YACL,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC;YACvC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC;YACjC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC;YAC/B,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC;SAChD;IACH;AAEA,IAAA,SAAS,GAAG,CAAC,IAAiB,EAAE,OAAuB,KAAa;AAClE,QAAA,MAAM,CAAC,GAAG,OAAO,EAAE,QAAQ;QAC3B,IAAI,CAAC,IAAI,IAAI;AAAE,YAAA,OAAO,KAAK;AAC3B,QAAA,OAAO,OAAO,CAAC,KAAK,SAAS,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;AAClD,IAAA,CAAC;AAED,IAAA,MAAM,GAAG,CAAC,IAAiB,EAAE,OAAuB,KAAY;QAC9D,IAAI,CAAC,OAAO,EAAE,KAAK;AAAE,YAAA,OAAO,EAAE;QAC9B,OAAO,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,GAAG,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AACrF,IAAA,CAAC;AAED,IAAA,KAAK,GAAG,CAAC,IAAiB,EAAE,OAAuB,KAAY;QAC7D,IAAI,CAAC,OAAO,EAAE,IAAI;AAAE,YAAA,OAAO,EAAE;QAC7B,OAAO,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,GAAG,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AAClF,IAAA,CAAC;;;AAID,IAAA,aAAa,GAAG,CAAC,IAAiB,EAAE,OAAuB,KAAwB;AACjF,QAAA,MAAM,GAAG,GAAI,OAAgC,EAAE,YAAY;AAC3D,QAAA,OAAO,OAAO,GAAG,KAAK,UAAU,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,SAAS;AAC/D,IAAA,CAAC;wGA/BU,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;sGAAX,WAAW,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA;;4FAAX,WAAW,EAAA,UAAA,EAAA,CAAA;kBADvB,IAAI;mBAAC,EAAE,IAAI,EAAE,SAAS,EAAE;;;ACbzB;;;;;;;;;AASG;MAEU,iBAAiB,CAAA;AAC5B,IAAA,MAAM,SAAS,CAAC,IAAiB,EAAE,QAA0B,EAAA;QAC3D,MAAM,OAAO,GAAc,EAAE;AAC7B,QAAA,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,OAAO;AAE7B,QAAA,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;YAC9B,IAAI,EAAE,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;gBAAE;YAE3C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC;YACtC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC;AAExC,YAAA,IAAI,UAAU,IAAI,OAAO,EAAE;gBACzB,MAAM,QAAQ,GAAoB,EAAE;AACpC,gBAAA,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,QAAQ,EAAE;oBACpC,IAAI,EAAE,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;wBAAE;oBACzC,QAAQ,CAAC,IAAI,CAAC;AACZ,wBAAA,GAAG,KAAK;AACR,wBAAA,IAAI,EAAE,QAAQ;wBACd,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC;wBAC7B,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC;wBAC/B,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC;AAC5B,qBAAA,CAAC;gBACJ;AACA,gBAAA,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;oBACvB,OAAO,CAAC,IAAI,CAAC;AACX,wBAAA,GAAG,OAAO;AACV,wBAAA,IAAI,EAAE,UAAU;wBAChB,IAAI;wBACJ,KAAK;wBACL,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC;wBAC7B,QAAQ;AACT,qBAAA,CAAC;gBACJ;YACF;iBAAO;gBACL,OAAO,CAAC,IAAI,CAAC;AACX,oBAAA,GAAG,OAAO;AACV,oBAAA,IAAI,EAAE,QAAQ;oBACd,IAAI;oBACJ,KAAK;oBACL,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC;AAC9B,iBAAA,CAAC;YACJ;QACF;AACA,QAAA,OAAO,OAAO;IAChB;AAEA,IAAA,QAAQ,GAAG,OAAO,IAAiB,EAAE,OAAuB,KAAsB;AAChF,QAAA,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO;QAC1B,IAAI,MAAM,KAAK,SAAS;AAAE,YAAA,OAAO,IAAI;QACrC,IAAI,OAAO,MAAM,KAAK,SAAS;YAAE,OAAO,CAAC,MAAM;QAC/C,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;AAChC,QAAA,OAAO,EAAE,MAAM,YAAY,OAAO,GAAG,MAAM,MAAM,GAAG,MAAM,CAAC;AAC7D,IAAA,CAAC;AAED,IAAA,KAAK,GAAG,CAAC,IAAiB,EAAE,OAAuB,KAAY;QAC7D,IAAI,CAAC,OAAO,EAAE,IAAI;AAAE,YAAA,OAAO,WAAW;QACtC,OAAO,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,GAAG,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AAClF,IAAA,CAAC;AAED,IAAA,MAAM,GAAG,CAAC,IAAiB,EAAE,OAAuB,KAAY;QAC9D,IAAI,CAAC,OAAO,EAAE,KAAK;AAAE,YAAA,OAAO,EAAE;QAC9B,OAAO,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,GAAG,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AACrF,IAAA,CAAC;;AAGD,IAAA,IAAI,GAAG,CAAC,IAAiB,EAAE,OAAuB,KAAY;QAC5D,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC;AACxC,QAAA,OAAO,CAAA,EAAG,IAAI,IAAI,QAAQ,IAAI,eAAe,CAAC,oBAAoB,CAAC,KAAK,CAAC,IAAI,SAAS,EAAE;AAC1F,IAAA,CAAC;wGArEU,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;sGAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,QAAA,EAAA,CAAA;;4FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAD7B,IAAI;mBAAC,EAAE,IAAI,EAAE,QAAQ,EAAE;;;ACOxB;MACa,cAAc,CAAA;;;;AAIzB,IAAA,WAAW,GAAG,KAAK,CAA4B,SAAS,+CAAI,KAAK,EAAE,QAAQ,EAAA,CAAA,GAAA,CAAjB,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAC;AAC9E,IAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,+CAAe;AACpC,IAAA,SAAS,GAAG,KAAK,CAAC,QAAQ,oDAAU;AACpC,IAAA,QAAQ,GAAG,KAAK,CAAsC,EAAE,oDAAC;;;;;AAMzD,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAK;QACtB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,IAA2C;AACrE,QAAA,OAAO,IAAI,GAAG,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,IAAI,GAAG,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,IAAI,GAAG,OAAO,CAAC,EAAE,QAAQ,EAAE,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAE;AAC7H,IAAA,CAAC,mDAAC;;;AAIF,IAAA,MAAM,GAAG,QAAQ,CAAC,MAAK;AACrB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE;AAC/B,QAAA,OAAO,IAAI,GAAG,CAAA,EAAG,IAAI,CAAA,SAAA,EAAY,IAAI,CAAC,OAAO,EAAE,CAAA,CAAE,GAAG,EAAE;AACxD,IAAA,CAAC,kDAAC;;AAGF,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,qDAAC;wGA1BtC,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAd,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECvB3B,snEAyDA,EAAA,MAAA,EAAA,CAAA,8kJAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDrCY,YAAY,8BAAE,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,6CAAA,EAAA,MAAA,EAAA,CAAA,sBAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,4BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sFAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAE,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAE,WAAW,2CAAE,iBAAiB,EAAA,IAAA,EAAA,QAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAG5G,cAAc,EAAA,UAAA,EAAA,CAAA;kBAZ1B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,mBAGV,uBAAuB,CAAC,MAAM,EAAA,UAAA,EACnC,IAAI,EAAA,IAAA,EACV;AACJ,wBAAA,oBAAoB,EAAE,UAAU;AACjC,qBAAA,EAAA,OAAA,EACQ,CAAC,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,WAAW,EAAE,iBAAiB,CAAC,EAAA,QAAA,EAAA,snEAAA,EAAA,MAAA,EAAA,CAAA,8kJAAA,CAAA,EAAA;;;AEpB1H;AA6BA;MACa,aAAa,CAAA;AAmFd,IAAA,GAAA;AACA,IAAA,cAAA;AACA,IAAA,YAAA;AACA,IAAA,aAAA;AACA,IAAA,cAAA;AAtFV,IAAA,WAAW;IACX,OAAO,GAAoB,EAAE;AAC7B,IAAA,YAAY;IACZ,cAAc,GAAG,KAAK;AACF,IAAA,KAAK;AACA,IAAA,UAAU;IAEnC,QAAQ,GAA4B,EAAE;IACtC,KAAK,GAAU,EAAE;AAEP,IAAA,MAAM,GAAG,IAAI,YAAY,EAI/B;AACJ,IAAA,IAAI,GAAG,IAAI,SAAS,CAAC,EAAE,CAAC;AAExB,IAAA,YAAY;IACZ,IAA0B,YAAY,CAAC,MAAqB,EAAA;AAC1D,QAAA,IAAI,CAAC,WAAW,GAAG,MAAM;QACzB,IAAI,MAAM,CAAC,MAAM,EAAE,IAAI,KAAK,SAAS,EAAE;AACrC,YAAA,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,MAAM;QACnC;AACA,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,qBAAqB,EAAE;IAC7C;AACS,IAAA,aAAa;AACtB,IAAA,IAAY,GAAG,GAAA;QACb,MAAM,MAAM,GAAG,sCAAsC;AACrD,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE;AAC3B,YAAA,OAAO,IAAI;QACb;QACA,OAAO,SAAS,CAAC,IAAI,CAAC;YACpB,MAAM;AACN,YAAA,GAAG,EAAE,IAAI,CAAC,YAAY,EAAE,GAAG;AAC5B,SAAA,CAAC;IACJ;AAEA,IAAA,IAAY,YAAY,GAAA;QACtB,MAAM,OAAO,GAAoB,EAAE;QACnC,IAAI,CAAC,WAAW,CAAC;aACd,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,QAAQ;aAC/B,OAAO,CAAC,MAAM,IAAG;AAChB,YAAA,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE;AAC9B,gBAAA,MAAM,CAAC;AACL,sBAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,QAAQ;qBAChC,OAAO,CAAC,WAAW,IAAG;oBACrB,OAAO,CAAC,IAAI,CAAC;wBACX,KAAK,EAAE,OAAO,WAAW,CAAC,KAAK,KAAK,QAAQ,GAAG,WAAW,CAAC,KAAK,GAAG,WAAW,CAAC,KAAK,EAAE,KAAK;wBAC3F,KAAK,EAAE,WAAW,CAAC,KAAK;wBACxB,KAAK,EAAE,WAAW,CAAC,KAAK;AACzB,qBAAA,CAAC;AACJ,gBAAA,CAAC,CAAC;gBACJ;YACF;YACA,OAAO,CAAC,IAAI,CAAC;gBACX,KAAK,EAAE,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK;gBAC5E,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,KAAK,EAAE,MAAM,CAAC,KAAK;AACpB,aAAA,CAAC;AACJ,QAAA,CAAC,CAAC;QACJ,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK;YACvB,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,KAAK,EAAE,CAAC,CAAC,KAAK;AACf,SAAA,CAAC,CAAC;IACL;AACA,IAAA,IAAY,iBAAiB,GAAA;AAC3B,QAAA,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,KAAK;YACpF,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,KAAK,EAAE,CAAC,CAAC,KAAK;AACf,SAAA,CAAC,CAAC;IACL;IAEA,qBAAqB,GAAG,MAAsB;QAC5C,OAAO,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC,iBAAiB,CAAC;AAC1D,IAAA,CAAC;AAEQ,IAAA,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC;IACpC,WAAA,CACU,GAAsB,EACtB,cAAgC,EAChC,YAA4B,EAC5B,aAA8B,EAC9B,cAAgC,EAAA;QAJhC,IAAA,CAAA,GAAG,GAAH,GAAG;QACH,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,YAAY,GAAZ,YAAY;QACZ,IAAA,CAAA,aAAa,GAAb,aAAa;QACb,IAAA,CAAA,cAAc,GAAd,cAAc;IACrB;IAEH,IAAI,GAAG,YAAW;AAChB,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;YACb,IAAI,CAAC,aAAa,EAAE;YACpB;QACF;QACA,IAAI,CAAC,SAAS,EAAE;AAChB,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;AAClB,QAAA,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE;AAClB,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;AAC1B,IAAA,CAAC;IAED,iBAAiB,GAAG,MAAsB;AACxC,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC;YACtC,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC,aAAa;AAC1D,YAAA,MAAM,cAAc,GAAoB,CAAC,GAAG,YAAY,EAAE,GAAG,aAAa,CAAC,CAAC,MAAM,CAAkB,CAAC,KAAK,EAAE,IAAI,KAAI;gBAClH,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC;gBACzE,IAAI,CAAC,MAAM,EAAE;AACX,oBAAA,OAAO,KAAK;gBACd;AACA,gBAAA,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE;AAC9B,oBAAA,OAAO,CAAC,GAAG,KAAK,EAAE,MAAM,CAAC;gBAC3B;gBACA,OAAO,CAAC,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC;YACvC,CAAC,EAAE,EAAE,CAAC;YACN,MAAM,OAAO,GAAG;AACb,iBAAA,GAAG,CAAC,CAAC,KAAK;AACT,gBAAA,GAAG,CAAC;AACJ,gBAAA,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,CAAC;AAC/C,aAAA,CAAC;iBACD,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI;iBACpB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAK,CAAC;YACpB,OAAO,CAAC,GAAG,OAAO,EAAE,GAAG,IAAI,CAAC,iBAAiB,CAAC;QAChD;aAAO;YACL,OAAO,IAAI,CAAC,OAAO;QACrB;AACF,IAAA,CAAC;IAED,aAAa,GAAG,MAAK;AACnB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;AACf,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,OAAO,EAAE,IAAI,CAAC,iBAAiB,EAAE;AACjC,YAAA,KAAK,EAAE,KAAK;AACb,SAAA,CAAC;AACJ,IAAA,CAAC;IAED,SAAS,GAAG,MAAK;AACf,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;AACf,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,OAAO,EAAE,IAAI,CAAC,iBAAiB,EAAE;AACjC,YAAA,KAAK,EAAE,IAAI;AACZ,SAAA,CAAC;AACJ,IAAA,CAAC;AAED,IAAA,SAAS,GAAG,OAAO,KAAA,GAA4B,SAAS,KAAI;;;;;;;AAO5D,IAAA,CAAC;AAED,IAAA,aAAa,GAAG,OAAO,QAAiB,KAAI;QAC1C,MAAM,MAAM,GAAmB,EAAE;QACjC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,EAAE;YAC5C,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;AAC5C,gBAAA,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,EAAE;oBAC9C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;wBAC9B,MAAM,CAAC,IAAI,CAAC;4BACV,IAAI,EAAE,KAAK,CAAC,IAAI;4BAChB,KAAK,EAAE,KAAK,CAAC,KAAK;4BAClB,OAAO,EAAE,KAAK,CAAC,OAAO;AACvB,yBAAA,CAAC;oBACJ;yBAAO;wBACL,MAAM,CAAC,IAAI,CAAC;4BACV,IAAI,EAAE,KAAK,CAAC,IAAI;AAChB,4BAAA,KAAK,EAAE,MAAM,KAAK,CAAC,KAAK,EAAE;4BAC1B,OAAO,EAAE,KAAK,CAAC,OAAO;AACvB,yBAAA,CAAC;oBACJ;gBACF;YACF;QACF;AACA,QAAA,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC;AAC9C,YAAA,QAAQ,EAAE,QAAQ,IAAI,IAAI,CAAC,YAAY,EAAE,QAAQ;YACjD,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,MAAM;AACP,SAAA,CAAC;AACJ,IAAA,CAAC;IAED,gBAAgB,GAAG,YAAW;AAC5B,QAAA,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;AAC3B,QAAA,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;AAC9D,IAAA,CAAC;AAED,IAAA,yBAAyB,GAAG,OAAO,QAAiB,KAAI;QACtD,MAAM,MAAM,GAAmB,EAAE;QACjC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,EAAE;YAC5C,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE;AAC7C,gBAAA,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,EAAE;oBAC9C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;wBAC9B,MAAM,CAAC,IAAI,CAAC;4BACV,IAAI,EAAE,KAAK,CAAC,IAAI;4BAChB,KAAK,EAAE,KAAK,CAAC,KAAK;4BAClB,OAAO,EAAE,KAAK,CAAC,OAAO;AACvB,yBAAA,CAAC;oBACJ;yBAAO;wBACL,MAAM,CAAC,IAAI,CAAC;4BACV,IAAI,EAAE,KAAK,CAAC,IAAI;AAChB,4BAAA,KAAK,EAAE,MAAM,KAAK,CAAC,KAAK,EAAE;4BAC1B,OAAO,EAAE,KAAK,CAAC,OAAO;AACvB,yBAAA,CAAC;oBACJ;gBACF;YACF;QACF;;;;;;;;;;AAUF,IAAA,CAAC;AAED,IAAA,QAAQ,GAAG,CAAC,IAAS,KAAI;AACvB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YACf,IAAI;YACJ,OAAO,EAAE,IAAI,CAAC,OAAO;AACtB,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;AAC1B,IAAA,CAAC;IAED,cAAc,GAAG,YAAW;;;;;;;;;AAS5B,IAAA,CAAC;AAED,IAAA,UAAU,GAAG,CAAC,IAAS,KAAI;QACzB,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,MAAK;;;;;;YAMvD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;YACpC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;YACzB,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;AAC5B,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;AAC1B,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC;IAED,cAAc,GAAG,YAAW;AAC1B,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACrB,YAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;YAC5B;QACF;QACA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE;AACnD,YAAA,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,kDAAkD,CAAC,CAAC;YAC5F;QACF;AACA,QAAA,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;AAC3B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,GAAG,OAAO;AAC5C,QAAA,IAAI;YACF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,yBAAyB,CAAC,QAAQ,CAAC;;;;;;;;;;;;;QAa/D;gBAAU;AACR,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;QAC5B;AACF,IAAA,CAAC;AAED,IAAA,qBAAqB,GAAG,CAAC,GAAW,KAAY;QAC9C,MAAM,KAAK,GAAG,2CAA2C;QACzD,IAAI,CAAC,GAAG,EAAE;AACR,YAAA,OAAO,iCAAiC;QAC1C;AACA,QAAA,IAAI,GAAG,CAAC,MAAM,GAAG,EAAE,EAAE;AACnB,YAAA,OAAO,2BAA2B;QACpC;QACA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;AACpB,YAAA,OAAO,yDAAyD;QAClE;AACA,QAAA,OAAO,EAAE;AACX,IAAA,CAAC;wGArSU,aAAa,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAF,IAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAb,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,YAAA,EAAA,CAAA,aAAA,EAAA,cAAA,CAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,OAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,OAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,YAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC9B1B,wiHA2EA,EAAA,MAAA,EAAA,CAAA,oYAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDhDY,YAAY,+PAAE,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,uBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,oCAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,oFAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,QAAQ,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,MAAA,EAAA,OAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,YAAA,EAAA,YAAA,EAAA,UAAA,EAAA,SAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,OAAO,idAAE,OAAO,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,OAAA,EAAA,OAAA,EAAA,OAAA,EAAA,QAAA,EAAA,MAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,sBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAGtF,aAAa,EAAA,UAAA,EAAA,CAAA;kBATzB,SAAS;+BACE,iBAAiB,EAAA,eAAA,EAGV,uBAAuB,CAAC,MAAM,cACnC,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,cAAc,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,EAAA,QAAA,EAAA,wiHAAA,EAAA,MAAA,EAAA,CAAA,oYAAA,CAAA,EAAA;;sBAQjG,SAAS;uBAAC,OAAO;;sBACjB,SAAS;uBAAC,YAAY;;sBAKtB;;sBAQA,KAAK;uBAAC,aAAa;;sBAOnB;;;ME5CU,+BAA+B,CAAA;AAC1C,IAAA,OAAO,sBAAsB,CAAI,IAAwC,EAAE,IAAa,EAAA;AACtF,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,sBAAsB,GAAG,KAAK,CAAC,QAAQ,iEAAU;AACjD,IAAA,WAAW,GAA4B,MAAM,CAAC,WAAW,CAAC;wGAN/C,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAA/B,+BAA+B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,EAAA,sBAAA,EAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAA/B,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAH3C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,0BAA0B;AACrC,iBAAA;;;ACXD;AAMA;;;;;;;;;AASG;MAKU,qBAAqB,CAAA;AACvB,IAAA,GAAG,GAAG,MAAM,EAAC,UAAuB,EAAC;AACrC,IAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;AAEzC,IAAA,WAAA,GAAA;QACE,eAAe,CAAC,MAAK;AACnB,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa;;;AAIxC,YAAA,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,MAAK;AACjD,gBAAA,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC;AAC/B,YAAA,CAAC,CAAC;AAEF,YAAA,gBAAgB,CAAC,OAAO,CAAC,SAAS,EAAE;gBAClC,SAAS,EAAE,IAAI;gBACf,OAAO,EAAE,IAAI;AACd,aAAA,CAAC;;AAGF,YAAA,SAAS,CAAC,SAAS,EAAE,QAAQ;AAC1B,iBAAA,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;iBAC3D,SAAS,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;;AAGjD,YAAA,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,gBAAgB,CAAC,UAAU,EAAE,CAAC;AACjE,QAAA,CAAC,CAAC;IACJ;AAEA;;;;AAIG;AACH,IAAA,UAAU,CAAC,SAAsB,EAAE,QAAgB,EAAE,WAAmB,EAAE,GAAY,EAAA;AACpF,QAAA,SAAS,CAAC,gBAAgB,CAAc,CAAA,GAAA,EAAM,QAAQ,CAAA,KAAA,EAAQ,QAAQ,CAAA,CAAE,CAAC,CAAC,OAAO,CAAC,EAAE,IAAG;YACrF,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC;;YAErC,IAAI,GAAG,EAAE;gBACP,EAAE,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;AAC7B,gBAAA,EAAE,CAAC,KAAK,CAAC,QAAQ,GAAG,SAAS;YAC/B;AACF,QAAA,CAAC,CAAC;IACJ;AAEA;;;;;;;;;;AAUG;AACH,IAAA,aAAa,CAAC,SAAsB,EAAA;AAClC,QAAA,MAAM,UAAU,GAAG,SAAS,CAAC,UAAU;QACvC,MAAM,WAAW,GAAG,SAAS,CAAC,WAAW,GAAG,SAAS,CAAC,WAAW,GAAG,UAAU;;;QAI9E,MAAM,SAAS,GAAG,SAAS,CAAC,aAAa,CAAc,mBAAmB,CAAC;AAC3E,QAAA,IAAI,CAAC,SAAS;YAAE;AAEhB,QAAA,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAc,0CAA0C,CAAC,CAAC;AACrH,QAAA,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAc,2CAA2C,CAAC,CAAC;;AAGvH,QAAA,aAAa,CAAC,OAAO,CAAC,EAAE,IAAG;YACzB,MAAM,QAAQ,GAAG,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AACzE,YAAA,IAAI,QAAQ;gBAAE,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,QAAQ,EAAE,qBAAqB,EAAE,KAAK,CAAC;AAClF,QAAA,CAAC,CAAC;AACF,QAAA,cAAc,CAAC,OAAO,CAAC,EAAE,IAAG;YAC1B,MAAM,QAAQ,GAAG,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AACzE,YAAA,IAAI,QAAQ;gBAAE,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,QAAQ,EAAE,oBAAoB,EAAE,KAAK,CAAC;AACjF,QAAA,CAAC,CAAC;;QAGF,MAAM,cAAc,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC3C,QAAA,IAAI,cAAc,IAAI,UAAU,GAAG,CAAC,EAAE;YACpC,MAAM,QAAQ,GAAG,CAAC,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AACrF,YAAA,IAAI,QAAQ;gBAAE,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,QAAQ,EAAE,qBAAqB,EAAE,IAAI,CAAC;QACjF;;QAGA,MAAM,gBAAgB,GAAG,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC;AAC7C,QAAA,IAAI,gBAAgB,IAAI,WAAW,GAAG,CAAC,EAAE;YACvC,MAAM,QAAQ,GAAG,CAAC,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AACvF,YAAA,IAAI,QAAQ;gBAAE,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,QAAQ,EAAE,oBAAoB,EAAE,IAAI,CAAC;QAChF;IACF;wGA3FW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAJjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;;MCHY,uBAAuB,CAAA;;AAElC,IAAA,cAAc,GAAG,KAAK,CAAC,QAAQ,yDAAW;;IAE1C,QAAQ,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,UAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAsB;IACtC,QAAQ,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,UAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAsB;;IAEtC,SAAS,GAAG,MAAM,EAAU;AAE5B,IAAA,GAAG,GAAG,MAAM,EAAC,UAAuB,EAAC;AACrC,IAAA,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;AAC7B,IAAA,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;AAEtB,IAAA,OAAO;AACP,IAAA,kBAAkB;AAClB,IAAA,aAAa;AACb,IAAA,WAAW;AACX,IAAA,aAAa;IAEb,OAAO,GAAG,CAAC;IACX,WAAW,GAAG,CAAC;IACf,aAAa,GAAG,CAAC;AAEjB,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE;YACrC,IAAI,OAAO,EAAE;gBACX,IAAI,CAAC,OAAO,EAAE;YAChB;iBAAO;gBACL,IAAI,CAAC,QAAQ,EAAE;YACjB;AACF,QAAA,CAAC,CAAC;IACJ;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,QAAQ,EAAE;IACjB;IAEA,OAAO,GAAA;QACL,IAAI,IAAI,CAAC,OAAO;YAAE;AAClB,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa;QACjC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,EAAE,oBAAoB,CAAC;QAEjD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC;QACnD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,sBAAsB,CAAC;QACvD,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,EAAE,MAAM,CAAC;AACtC,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM;;AAGrB,QAAA,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAK;YAChC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,CAAa,KACjF,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CACrB;AACH,QAAA,CAAC,CAAC;IACJ;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,YAAY,EAAE;AACnB,QAAA,IAAI,CAAC,kBAAkB,IAAI;AAC3B,QAAA,IAAI,CAAC,kBAAkB,GAAG,SAAS;AACnC,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,YAAA,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC;AAChE,YAAA,IAAI,CAAC,OAAO,GAAG,SAAS;QAC1B;AACA,QAAA,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,oBAAoB,CAAC;IAC1E;AAEA,IAAA,YAAY,GAAG,CAAC,KAAiB,KAAI;QACnC,KAAK,CAAC,cAAc,EAAE;;QAEtB,KAAK,CAAC,eAAe,EAAE;AAEvB,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa;AACjC,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO;QAC5B,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,qBAAqB,EAAE,CAAC,KAAK;AACnD,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,WAAW;AAErC,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,YAAY,CAAC;QAC9D,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,EAAE,aAAa,CAAC;AAE1C,QAAA,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAK;YAChC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE,WAAW,EAAE,CAAC,CAAa,KAChF,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CACrB;YACD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;;YAExF,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;AACvF,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC;AAED,IAAA,YAAY,GAAG,CAAC,KAAiB,KAAI;QACnC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO;AAC1C,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE;AAClD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,MAAM,CAAC,iBAAiB;QACxE,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,CAAC;AACpE,QAAA,IAAI,CAAC,aAAa,GAAG,CAAC;AAEtB,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa;AACjC,QAAA,MAAM,EAAE,GAAG,CAAA,EAAG,CAAC,IAAI;QACnB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC;QACxC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC;QAC5C,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC;AAC9C,IAAA,CAAC;IAED,UAAU,GAAG,MAAK;AAChB,QAAA,MAAM,OAAO,GAAG,CAAA,EAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA,EAAA,CAAI;QACrD,IAAI,CAAC,YAAY,EAAE;;AAEnB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACpD,IAAA,CAAC;IAED,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,aAAa,IAAI;AACtB,QAAA,IAAI,CAAC,aAAa,GAAG,SAAS;AAC9B,QAAA,IAAI,CAAC,WAAW,IAAI;AACpB,QAAA,IAAI,CAAC,WAAW,GAAG,SAAS;AAC5B,QAAA,IAAI,CAAC,aAAa,IAAI;AACtB,QAAA,IAAI,CAAC,aAAa,GAAG,SAAS;QAC9B,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;AACnD,QAAA,IAAI,IAAI,CAAC,GAAG,EAAE,aAAa,EAAE;AAC3B,YAAA,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,aAAa,CAAC;QACnE;IACF;AAEA,IAAA,QAAQ,CAAC,KAAc,EAAA;AACrB,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,IAAI;QACvB,MAAM,CAAC,GAAG,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;AACnD,QAAA,OAAO,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;IACpC;wGAhIW,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAvB,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAJnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;;AC0DM,MAAM,gBAAgB,GAAG,CAAU,IAAO,MAAsB;AACrE,IAAA,IAAI,EAAE,IAAI;AACV,IAAA,IAAI,EAAE;QACJ,EAAE,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAClC,QAAA,OAAO,EAAE,EAAE;AACX,QAAA,MAAM,EAAE;AACN,YAAA,WAAW,EAAE,KAAK;AAClB,YAAA,UAAU,EAAE,KAAK;AAClB,SAAA;AACD,QAAA,KAAK,EAAE,EAAE;AACT,QAAA,QAAQ,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;AAC/D,QAAA,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE;AAC9E,KAAA;AACF,CAAA,CAAC;;MChFW,WAAW,CAAA;AACtB;;;;;;;;;;;;;AAaG;AACH,IAAA,SAAS,CACP,KAAoB,EACpB,UAAyB,EACzB,WAAkC,EAAA;AAElC,QAAA,IAAI,UAAU,EAAE,IAAI,EAAE;YACpB,IAAI,OAAO,SAAS,KAAK,WAAW,IAAI,SAAS,IAAI,UAAU,CAAC,KAAK,EAAE;AACrE,gBAAA,OAAO,CAAC,IAAI,CAAC,oFAAoF,CAAC;YACpG;AACA,YAAA,OAAO,KAAK;QACd;AACA,QAAA,MAAM,KAAK,GAAG,UAAU,EAAE,KAAK;AAC/B,QAAA,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM;AAAE,YAAA,OAAO,KAAK;AACxC,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM;AAC3B,QAAA,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,WAAW;AACvC,QAAA,MAAM,eAAe,GAAG,CAAC,KAAK,CAAC,gBAAgB;;;AAI/C,QAAA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAiE;AACxF,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACxB,MAAM,MAAM,GAAwB,EAAE;YACtC,KAAK,MAAM,CAAC,IAAI,MAAM;AAAE,gBAAA,MAAM,CAAC,CAAW,CAAC,GAAG,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,CAAW,CAAC;YAC9F,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;YAClC,IAAI,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;YAC7B,IAAI,CAAC,MAAM,EAAE;gBACX,MAAM,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE;AAC9B,gBAAA,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC;YAC1B;AACA,YAAA,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;QACzB;QAEA,MAAM,MAAM,GAAkB,EAAE;QAChC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,GAAG,KAAI;YAC9B,MAAM,UAAU,GAAG,WAAW,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,eAAe;YACnF,IAAI,WAAW,IAAI,WAAW;AAAE,gBAAA,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC;AAEhE,YAAA,MAAM,MAAM,GAAG,gBAAgB,CAAC,EAAS,CAAC;AAC1C,YAAA,MAAM,CAAC,IAAI,CAAC,KAAK,GAAG;AAClB,gBAAA,aAAa,EAAE,IAAI;gBACnB,GAAG;gBACH,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,UAAU;aACX;YACD,MAAM,CAAC,IAAI,CAAC,QAAS,CAAC,UAAU,GAAG,KAAK;AACxC,YAAA,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;AAEnB,YAAA,IAAI,CAAC,WAAW,IAAI,UAAU,EAAE;AAC9B,gBAAA,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,KAAK;AAAE,oBAAA,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;YACtD;AACF,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,MAAM;IACf;wGApEW,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;sGAAX,WAAW,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA;;4FAAX,WAAW,EAAA,UAAA,EAAA,CAAA;kBADvB,IAAI;mBAAC,EAAE,IAAI,EAAE,SAAS,EAAE;;;MCGZ,uBAAuB,CAAA;IAClC,SAAS,GAAG,CAAC,aAA4B,EAAE,OAAoB,EAAE,SAAgC,KAAa;AAC5G,QAAA,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,SAAS;AACvC,QAAA,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE;YACpB,IAAI,CAAC,QAAQ,EAAE;gBACb,OAAO,CAAC,IAAI,CAAC,QAAS,CAAC,UAAU,GAAG,IAAI;AACxC,gBAAA,OAAO,KAAK;YACd;AACA,YAAA,OAAO,CAAC,IAAI,CAAC,QAAS,CAAC,UAAU,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;YACrE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,QAAS,CAAC,UAAU;QAC3C;;;QAGA,IAAI,QAAQ,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAS,CAAC,UAAU,EAAE;;AAElD,YAAA,IAAG,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,EAAE;AACnC,gBAAA,OAAO,IAAI;YACb;QACF;;QAEA,MAAM,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,IAAG;AAC/C,YAAA,IAAI,UAAU,IAAI,MAAM,EAAE;AACxB,gBAAA,KAAK,MAAM,WAAW,IAAI,MAAM,CAAC,QAAQ,EAAE;oBACzC,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC;oBACvC,IAAI,aAAa,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE;AACrE,wBAAA,OAAO,IAAI;oBACb;gBACF;AACA,gBAAA,OAAO,KAAK;YACd;iBAAO;gBACL,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;gBAClC,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;YAC1E;AACF,QAAA,CAAC,CAAC;;AAEF,QAAA,KAAK,MAAM,MAAM,IAAI,gBAAgB,EAAE;AACrC,YAAA,IAAI,UAAU,IAAI,MAAM,EAAE;AACxB,gBAAA,KAAK,MAAM,WAAW,IAAI,MAAM,CAAC,QAAQ,EAAE;AACzC,oBAAA,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE;AACzE,wBAAA,OAAO,KAAK;oBACd;gBACF;YACF;iBAAO;AACL,gBAAA,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE;AACpE,oBAAA,OAAO,KAAK;gBACd;YACF;QACF;AACA,QAAA,OAAO,IAAI;AACb,IAAA,CAAC;wGAjDU,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;sGAAvB,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,mBAAA,EAAA,CAAA;;4FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAHnC,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,mBAAmB;AAC1B,iBAAA;;;MCDY,+BAA+B,CAAA;AAC1C,IAAA,SAAS,GAAG,OAAO,KAAoB,EAAE,QAA2C,KAAsB;;AAExG,QAAA,IAAI,QAAQ,EAAE,MAAM,EAAE;AACpB,YAAA,OAAO,KAAK;QACd;AACA,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AACjB,YAAA,OAAO,KAAK;QACd;AACA,QAAA,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE;AAC9B,YAAA,OAAO,IAAI;QACb;AACA,QAAA,IAAI,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,EAAE;AACvG,YAAA,OAAO,KAAK;QACd;AACA,QAAA,MAAM,IAAI,OAAO,CAAC,OAAO,IAAI,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACtD,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC;QAC/D,IAAI,KAAK,EAAE;YACT,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAQ,EAAE;AAClD,gBAAA,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE;AAC9G,oBAAA,OAAO,IAAI;gBACb;YACF;QACF;AACA,QAAA,OAAO,KAAK;AACd,IAAA,CAAC;wGAzBU,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;sGAA/B,+BAA+B,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,2BAAA,EAAA,CAAA;;4FAA/B,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAH3C,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,2BAA2B;AAClC,iBAAA;;;MCIY,sBAAsB,CAAA;AACjC,IAAA,SAAS,GAAG,CAAC,OAAoB,EAAE,SAA4C,KAAa;QAC1F,MAAM,cAAc,GAAa,EAAE;AACnC,QAAA,OAAO,CAAC,IAAI,CAAC,QAAS,CAAC,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,QAAS,CAAC,OAAO,IAAI,EAAE;AACrE,QAAA,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE;YAC/B,OAAO,CAAC,IAAI,CAAC,QAAS,CAAC,UAAU,GAAG,IAAI;AACxC,YAAA,OAAO,OAAO,CAAC,IAAI,CAAC,QAAS,CAAC,UAAU;QAC1C;AACA,QAAA,KAAK,MAAM,MAAM,IAAI,SAAS,EAAE,OAAO,EAAE;AACvC,YAAA,IAAI,UAAU,IAAI,MAAM,EAAE;gBACxB,IAAI,IAAI,GAAG,KAAK;gBAChB,IAAI,QAAQ,GAAG,KAAK;AACpB,gBAAA,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,QAAQ,EAAE;AACnC,oBAAA,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK;oBACnC,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;oBACjC,IAAI,SAAS,EAAE;wBACb,QAAQ,GAAG,IAAI;oBACjB;AACA,oBAAA,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE;wBAChC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;4BACzB,IAAI,GAAG,IAAI;4BACX,OAAO,CAAC,IAAI,CAAC,QAAS,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;4BACxC,IAAI,SAAS,EAAE;AACb,gCAAA,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC;4BAC1B;wBACF;oBACF;yBAAO,IAAI,CAAC,MAAM,EAAE;wBAClB,IAAI,GAAG,IAAI;wBACX,OAAO,CAAC,IAAI,CAAC,QAAS,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;wBACxC,IAAI,SAAS,EAAE;AACb,4BAAA,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC;wBAC1B;oBACF;gBACF;gBACA,IAAI,IAAI,EAAE;AACR,oBAAA,OAAO,CAAC,IAAI,CAAC,QAAS,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBAC3D,IAAI,QAAQ,EAAE;wBACZ,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBAC7C;gBACF;YACF;iBAAO;AACL,gBAAA,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM;gBACpC,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;AAClC,gBAAA,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE;oBAChC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;wBACzB,OAAO,CAAC,IAAI,CAAC,QAAS,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;wBACxC,IAAI,SAAS,EAAE;AACb,4BAAA,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC;wBAC1B;oBACF;gBACF;qBAAO,IAAI,CAAC,MAAM,EAAE;oBAClB,OAAO,CAAC,IAAI,CAAC,QAAS,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;oBACxC,IAAI,SAAS,EAAE;AACb,wBAAA,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC;oBAC1B;gBACF;YACF;QACF;AACA,QAAA,OAAO,CAAC,IAAI,CAAC,QAAS,CAAC,UAAU,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,QAAS,CAAC,OAAO,EAAE,MAAM;QAC5E,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAS,CAAC,UAAU,IAAI,CAAC,cAAc,CAAC,MAAM,IAAI,OAAO,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE;AACtG,YAAA,OAAO,OAAO,CAAC,IAAI,CAAC,QAAS,CAAC,UAAU;QAC1C;;;QAGA,OAAO,OAAO,CAAC,IAAI,CAAC,QAAS,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACxF,IAAA,CAAC;wGAjEU,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;sGAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,kBAAA,EAAA,CAAA;;4FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAHlC,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,kBAAkB;AACzB,iBAAA;;;MC0BY,kBAAkB,CAAA;AAC7B,IAAA,aAAa,GAAG,MAAM,CAAC,cAAc,CAAC;;;;AAKtC,IAAA,SAAS,GAAG,MAAM,CAAC,KAAK,qDAAC;AACzB,IAAA,WAAW,GAAG,MAAM,CAAC,QAAQ,uDAAC;;;;AAM9B,IAAA,WAAW,GAAG,CAAC,OAA6B,EAAE,OAAyB,KAAI;AACzE,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAChE,IAAA,CAAC;AAED,IAAA,SAAS,GAAG,CAAC,OAA6B,EAAE,OAAyB,KAAI;AACvE,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAC/D,IAAA,CAAC;AAED,IAAA,YAAY,GAAG,CAAC,OAA6B,KAAI;AAC/C,QAAA,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO;QACzC,IAAI,MAAM,EAAE,MAAM,EAAE,IAAI,KAAK,QAAQ,EAAE;AACrC,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AACxB,YAAA,MAAM,CAAC;iBACJ,QAAQ,CAAC,aAAa,EAAE;iBACxB,KAAK,CAAC,GAAG,IAAG;AACX,gBAAA,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;AAClB,gBAAA,MAAM,GAAG;AACX,YAAA,CAAC;iBACA,OAAO,CAAC,MAAK;AACZ,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AAC3B,YAAA,CAAC,CAAC;QACN;AACF,IAAA,CAAC;;;;AAMD,IAAA,MAAM,cAAc,CAAC,OAA6B,EAAE,IAAoD,EAAA;QACtG,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,GAAG,OAAO;;;AAI7D,QAAA,IAAI,MAAM,CAAC,MAAM,EAAE,IAAI,KAAK,QAAQ;YAAE;AAEtC,QAAA,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI;AACtB,QAAA,IAAI;AACF,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC;YAC7D,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,kBAAkB,IAAI,IAAI;YAC1D,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC;YAEvC,IAAI,UAAU,GAAG,CAAC;YAClB,IAAI,WAAW,GAAU,EAAE;AAC3B,YAAA,IAAI,YAAY,GAAG,KAAK,CAAC;AAEzB,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;YACxB,MAAM,KAAK,GAAU,EAAE;YACvB,IAAI,QAAQ,GAAuD,EAAE;AAErE,YAAA,MAAM,UAAU,GAAG,YAAW;gBAC5B,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;gBAC3C,QAAQ,GAAG,EAAE;gBACb,WAAW,GAAG,EAAE;AAEhB,gBAAA,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;AAC5B,oBAAA,IAAI,MAAM,IAAI,OAAO,IAAI,MAAM,EAAE;wBAC/B,WAAW,GAAG,CAAC,GAAG,WAAW,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC;AAC/C,wBAAA,YAAY,GAAG,MAAM,CAAC,KAAK;oBAC7B;AAAO,yBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;wBAChC,WAAW,GAAG,CAAC,GAAG,WAAW,EAAE,GAAG,MAAM,CAAC;oBAC3C;gBACF;AAEA,gBAAA,IAAI,MAAM,CAAC,MAAM,EAAE,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE;oBAC9D,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC;AACxD,oBAAA,WAAW,GAAG,aAAa,YAAY,OAAO,GAAG,MAAM,aAAa,GAAG,aAAa;gBACtF;AAEA,gBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,GAAG,QAAQ,CAAC;AACtD,gBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,IAAI,KAAK,IAAI,SAAS,CAAC;;AAElE,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,eAAe,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA,CAAA,CAAG,CAAC;gBAE9D,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;gBAC3C,MAAM,kBAAkB,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC;AAE3D,gBAAA,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE;oBAC9B,MAAM,GAAG,GAAQ,EAAE;AAEnB,oBAAA,MAAM,MAAM,GAAG,OAAO,YAA2B,KAAI;AACnD,wBAAA,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,YAAY,CAAC,KAAK,CAAC;AAE5E,wBAAA,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,YAAY,CAAC,KAAK,CAAC;AACnE,wBAAA,MAAM,cAAc,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,YAAY,CAAC,KAAK,CAAC;AAEnF,wBAAA,IAAI,cAAc,EAAE,SAAS,EAAE;4BAC7B,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,cAAc,CAAC,SAAS,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,cAAc,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC;4BAChH;wBACF;AACA,wBAAA,IAAI,CAAC,MAAM;4BAAE;AAEb,wBAAA,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE;4BAC9B,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,WAAW,IACnC,MAAM,CAAC;gCACL,KAAK,EAAE,WAAW,CAAC,KAAK;gCACxB,KAAK,EAAE,OAAO,WAAW,CAAC,KAAK,KAAK,QAAQ,GAAG,WAAW,CAAC,KAAK,GAAG,WAAW,CAAC,KAAK,EAAE,KAAK;gCAC3F,KAAK,EAAE,WAAW,CAAC,KAAK;AACzB,6BAAA,CAAC,CACH;4BACD;wBACF;AACA,wBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC;4BAAE;AAElD,wBAAA,MAAM,SAAS,GAAG,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,KAAe,CAAC;AACxE,wBAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAe;AAEvC,wBAAA,IAAI,MAAM,CAAC,SAAS,EAAE;AACpB,4BAAA,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACvE,4BAAA,GAAG,CAAC,QAAQ,CAAC,GAAG,SAAS,YAAY,OAAO,GAAG,MAAM,SAAS,GAAG,SAAS;4BAC1E,GAAG,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE;wBACrC;AAAO,6BAAA,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,EAAE,EAAE;AAC5E,4BAAA,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE;wBACpB;AAAO,6BAAA,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE;AAC/D,4BAAA,GAAG,CAAC,QAAQ,CAAC,GAAG,SAAS;wBAC3B;AAAO,6BAAA,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE;4BACpC,IAAI,SAAS,EAAE;gCACb,GAAG,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,aAAa,IAAI,MAAM;4BACxD;AAAO,iCAAA,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,SAAS,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE;gCAChE,GAAG,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,cAAc,IAAI,OAAO;4BAC1D;wBACF;AAAO,6BAAA,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE;AACjC,4BAAA,GAAG,CAAC,QAAQ,CAAC,GAAG,aAAa,CAAC,QAAQ,CAAC,SAAS,EAAE,YAAY,CAAC;wBACjE;AAAO,6BAAA,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE;AACrC,4BAAA,GAAG,CAAC,QAAQ,CAAC,GAAG,aAAa,CAAC,QAAQ,CAAC,SAAS,EAAE,qBAAqB,CAAC;wBAC1E;AAAO,6BAAA,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE;AACjC,4BAAA,GAAG,CAAC,QAAQ,CAAC,GAAG,aAAa,CAAC,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC;wBAC/D;AAAO,6BAAA,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,KAAK,aAAa,EAAE;AACpE,4BAAA,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,SAAS,GAAG,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC;AAC9F,4BAAA,GAAG,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,cAAc,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,YAAmB,CAAC,IAAI,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC;wBAC1H;6BAAO;AACL,4BAAA,GAAG,CAAC,QAAQ,CAAC,GAAG,SAAS;wBAC3B;AACF,oBAAA,CAAC;AAED,oBAAA,KAAK,MAAM,YAAY,IAAI,OAAO,EAAE;AAClC,wBAAA,MAAM,MAAM,CAAC,YAAY,CAAC;oBAC5B;AACA,oBAAA,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;gBACjB;AACF,YAAA,CAAC;;AAGD,YAAA,OAAO,UAAU,GAAG,QAAQ,GAAG,YAAY,EAAE;gBAC3C,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;AAC/C,gBAAA,UAAU,EAAE;AACZ,gBAAA,IAAI,QAAQ,CAAC,MAAM,GAAG,KAAK;oBAAE;gBAC7B,MAAM,UAAU,EAAE;YACpB;AAEA,YAAA,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;gBACvB,MAAM,UAAU,EAAE;YACpB;;YAGA,IAAI,KAAK,EAAE;AACT,gBAAA,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC;oBACjC,OAAO;oBACP,KAAK;AACL,oBAAA,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ;AAClC,iBAAA,CAAC;gBACF;YACF;YAEA,MAAM,MAAM,GAAmB,EAAE;YACjC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE;gBACxC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE;AACxC,oBAAA,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,EAAE;wBAC9C,MAAM,CAAC,IAAI,CAAC;4BACV,IAAI,EAAE,KAAK,CAAC,IAAI;4BAChB,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,KAAK,GAAG,MAAM,KAAK,CAAC,KAAK,EAAE;4BACrE,OAAO,EAAE,KAAK,CAAC,OAAO;AACvB,yBAAA,CAAC;oBACJ;gBACF;YACF;AAEA,YAAA,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;gBAC9B,OAAO;gBACP,KAAK;AACL,gBAAA,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ;gBACjC,MAAM;AACP,aAAA,CAAC;QACJ;gBAAU;AACR,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AACzB,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC;QAChC;IACF;IAEA,iBAAiB,CAAC,OAA6B,EAAE,eAAiC,EAAA;AAChF,QAAA,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO;QACzC,IAAI,YAAY,GAAoB,EAAE;AAEtC,QAAA,MAAM,CAAC;aACJ,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,QAAQ;aAC/B,OAAO,CAAC,MAAM,IAAG;AAChB,YAAA,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE;AAC9B,gBAAA,MAAM,CAAC;AACL,sBAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,QAAQ;qBAChC,OAAO,CAAC,WAAW,IAAG;oBACrB,YAAY,CAAC,IAAI,CAAC;wBAChB,KAAK,EAAE,WAAW,CAAC,KAAe;wBAClC,KAAK,EAAE,OAAO,WAAW,CAAC,KAAK,KAAK,QAAQ,GAAG,WAAW,CAAC,KAAK,GAAG,WAAW,CAAC,KAAK,EAAE,KAAK;AAC3F,wBAAA,WAAW,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW;wBAC5C,KAAK,EAAE,WAAW,CAAC,KAAK;AACzB,qBAAA,CAAC;AACJ,gBAAA,CAAC,CAAC;gBACJ;YACF;YACA,YAAY,CAAC,IAAI,CAAC;gBAChB,KAAK,EAAE,MAAM,CAAC,KAAe;gBAC7B,KAAK,EAAE,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK;AAC5E,gBAAA,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW;gBACvC,KAAK,EAAE,MAAM,CAAC,KAAK;AACpB,aAAA,CAAC;AACJ,QAAA,CAAC,CAAC;QAEJ,IAAI,aAAa,EAAE;YACjB,MAAM,cAAc,GAAG,CAAC,GAAG,aAAa,CAAC,YAAY,EAAE,GAAG,aAAa,CAAC,aAAa,CAAC,CAAC,MAAM,CAAkB,CAAC,KAAK,EAAE,IAAI,KAAI;gBAC7H,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC;AAC/D,gBAAA,IAAI,CAAC,MAAM;AAAE,oBAAA,OAAO,KAAK;AACzB,gBAAA,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU;AAAE,oBAAA,OAAO,CAAC,GAAG,KAAK,EAAE,MAAM,CAAC;gBACzD,OAAO,CAAC,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC;YACvC,CAAC,EAAE,EAAE,CAAC;AAEN,YAAA,YAAY,GAAG;AACZ,iBAAA,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;iBACxE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI;iBACpB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAK,CAAC;QACtB;AAEA,QAAA,MAAM,YAAY,GAAG,eAAe,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE;QAE7D,IAAI,MAAM,CAAC,MAAM,EAAE,IAAI,KAAK,QAAQ,EAAE;YACpC,OAAO,CAAC,GAAG,YAAY,EAAE,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAClG,MAAM,IAAI,CAAC,YAAY,EAAE,MAAM,IAAI,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CACvE;QACH;aAAO;YACL,OAAO,YAAY,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,MAAM,IAAI,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACpG;IACF;AAEA,IAAA,WAAW,CAAC,MAAqB,EAAA;QAC/B,MAAM,OAAO,GAAoB,EAAE;AACnC,QAAA,MAAM,CAAC;AACL,cAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,QAAQ;aAChC,OAAO,CAAC,MAAM,IAAG;AAChB,YAAA,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE;AAC9B,gBAAA,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBACnG;YACF;AACA,YAAA,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;AACtB,QAAA,CAAC,CAAC;AACJ,QAAA,OAAO,OAAO;IAChB;AAEA,IAAA,mBAAmB,CAAC,MAAqB,EAAA;AACvC,QAAA,IAAI,MAAM,CAAC,MAAM,EAAE,IAAI,KAAK,SAAS;AAAE,YAAA,OAAO,EAAE;QAChD,OAAO,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE;IACvE;wGA/QW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;4GAAlB,kBAAkB,EAAA,CAAA;;4FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAD9B;;;MCtBY,kBAAkB,CAAA;;AAE7B,IAAA,iBAAiB,GAAG,MAAM,CAAC,kBAAkB,CAAC;;;;AAM9C;;AAEG;AACH,IAAA,MAAM,UAAU,CACd,OAAwB,EACxB,WAAkC,EAClC,cAAsD,EAAA;QAEtD,MAAM,QAAQ,GAKP,EAAE;AAET,QAAA,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;AAC5B,YAAA,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;;gBAE1D,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;;oBAEjC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE;AAElC,oBAAA,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC,KAAK;AACtE,wBAAA,GAAG,CAAC;AACJ,wBAAA,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC,cAAc,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC;AACjF,wBAAA,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,GAAG,SAAS,CAAC,cAAc,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC;AACtF,qBAAA,CAAC,CAAC;oBAEH,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC7G;;qBAEK,IAAI,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,KAAK,UAAU,EAAE;AAClD,oBAAA,QAAQ,CAAC,IAAI,CACX,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK;wBAClC,GAAG,EAAE,MAAM,CAAC,KAAK;AACjB,wBAAA,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU;AACpC,wBAAA,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,YAAY;AACxC,wBAAA,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,EAAE;AACtC,qBAAA,CAAC;;qBAEH;gBACH;;qBAGK;AACH,oBAAA,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK;AACxD,wBAAA,GAAG,CAAC;AACJ,wBAAA,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC,cAAc,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC;AACjF,wBAAA,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,GAAG,SAAS,CAAC,cAAc,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC;AACtF,qBAAA,CAAC,CAAC;oBAEH,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC7G;YACF;QACF;AAEA,QAAA,IAAI,QAAQ,CAAC,MAAM,EAAE;YACnB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC3C,YAAA,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;AAC5B,gBAAA,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK;AAC9C,oBAAA,GAAG,CAAC;AACJ,oBAAA,CAAC,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC,cAAc,CAAC,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;AACnE,oBAAA,CAAC,MAAM,CAAC,YAAY,GAAG,SAAS,CAAC,cAAc,CAAC,CAAC,EAAE,MAAM,CAAC,YAAY,CAAC;AACxE,iBAAA,CAAC,CAAC;gBACH,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAClG;QACF;IACF;AAEA;;AAEG;IACH,MAAM,MAAM,CACV,QAAa,EACb,OAAwB,EACxB,WAAkC,EAClC,cAAsD,EAAA;QAEtD,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,gBAAgB,CAAC;AAC5C,QAAA,MAAM,OAAO,GAAG,OAAO,MAA2B,KAAI;AACpD,YAAA,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,MAAM;YACjE,MAAM,QAAQ,GAAG,KAAK;;YAGtB,IAAI,CAAC,SAAS,IAAI,CAAC,YAAY,IAAI,MAAM,CAAC,IAAI,KAAK,aAAa,IAAI,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,KAAK,UAAU,EAAE;AAC7G,gBAAA,MAAM,EACJ,MAAM,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,GAC5C,GAAG,MAAM;gBAEV,cAAc,CAAC,QAAQ,CAAC,GAAG,cAAc,CAAC,QAAQ,CAAC,IAAI,EAAE;AAEzD,gBAAA,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,CACpC;AACG,qBAAA,GAAG,CAAC,IAAI,IAAI,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC;qBACzD,MAAM,CAAC,GAAG,IAAI,GAAG,EAAE,QAAQ,EAAE;AAC7B,qBAAA,MAAM,CAAW,CAAC,OAAO,EAAE,IAAI,KAAK,CAAC,GAAG,OAAO,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;qBAC9F,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CACvE;AAED,gBAAA,IAAI,MAAM,CAAC,MAAM,EAAE;AACjB,oBAAA,MAAM,SAAS,GAAU,CACvB,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,GAAQ,KAAI;AACrC,wBAAA,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;AAClB,wBAAA,OAAO,EAAE;AACX,oBAAA,CAAC,CAAC;AAED,yBAAA,MAAM,CAAC,CAAC,IAAS,KAAK,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;AACjF,yBAAA,GAAG,CAAC,CAAC,CAAM,MAAM;wBAChB,CAAC,UAAU,GAAG,SAAS,CAAC,cAAc,CAAC,CAAC,EAAE,UAAU,CAAC;wBACrD,CAAC,YAAY,GAAG,SAAS,CAAC,cAAc,CAAC,CAAC,EAAE,YAAY,CAAC;AAC1D,qBAAA,CAAC,CAAC;AACL,oBAAA,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,cAAc,CAAC,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC;gBAC/F;YACF;;AAGA,YAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,gBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI;gBACzB,MAAM,KAAK,GAAG,SAAS,CAAC,cAAc,CAAC,OAAO,EAAE,QAAQ,CAAC;AACzD,gBAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG;AAC5B,oBAAA,KAAK,EAAE,SAAS;AAChB,oBAAA,SAAS,EAAE,MAAM,CAAC,KAAK,KAAK,OAAO,GAAG,EAAE,YAAY,EAAE,iBAAiB,EAAE,GAAG,SAAS;AACrF,oBAAA,IAAI,EAAE,KAAK;AACX,oBAAA,MAAM,EAAE,KAAK;AACb,oBAAA,OAAO,EAAE,OAAO,OAAO,KAAK,UAAU,GAAG,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,SAAS;oBAC5E,KAAK,EAAE,OAAO,KAAK,KAAK,UAAU,GAAG,MAAM,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,SAAS;iBAC7E;gBAED,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;AAE3C,gBAAA,IAAI,OAAO,YAAY,KAAK,UAAU,EAAE;AACtC,oBAAA,OAAO,CAAC,MAAM,GAAG,IAAI;oBACrB,OAAO,CAAC,IAAI,GAAG,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC;gBAC7C;AAAO,qBAAA,IAAI,OAAO,SAAS,KAAK,UAAU,EAAE;oBAC1C,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC;AAC1C,oBAAA,OAAO,CAAC,IAAI,GAAG,QAAQ,YAAY,OAAO,GAAG,MAAM,QAAQ,GAAG,QAAQ;gBACxE;qBAAO;;AAEL,oBAAA,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE;AAClF,wBAAA,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC;wBAC1D,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,IAAI,KAAK,UAAU;oBAC7C;AACA,oBAAA,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,KAAK,aAAa,EAAE;AAC7D,wBAAA,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,CAAC;oBACpF;AACA,oBAAA,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;wBAC/D,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,KAAK,CAAC;oBACxD;AACA,oBAAA,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE;AAC7B,wBAAA,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM;wBACzB,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,EAAE,EAAE;4BACjC,OAAO,CAAC,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,MAAM,EAAE,aAAa,IAAI,MAAM,GAAG,MAAM,EAAE,cAAc,IAAI,OAAO;wBACrG;6BAAO;AACL,4BAAA,OAAO,CAAC,IAAI,GAAG,EAAE;wBACnB;oBACF;;AAGA,oBAAA,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC;oBAC1E,IAAI,WAAW,EAAE;AACf,wBAAA,OAAO,CAAC,KAAK,GAAG,WAAW,CAAC,KAAK;AACjC,wBAAA,IAAI,WAAW,CAAC,KAAK,EAAE;AACrB,4BAAA,OAAO,CAAC,IAAI,GAAG,WAAW,CAAC,KAAK;wBAClC;oBACF;AAEA,oBAAA,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,CAAC,IAAI,KAAK,EAAE,EAAE;AAC9E,wBAAA,OAAO,CAAC,IAAI,GAAG,SAAS;AACxB,wBAAA,OAAO,CAAC,KAAK,GAAG,SAAS;oBAC3B;gBACF;YACF;AACF,QAAA,CAAC;;AAGD,QAAA,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE;AACnD,YAAA,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE;gBAC9B,KAAK,MAAM,WAAW,IAAI,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE;AACvE,oBAAA,MAAM,OAAO,CAAC,WAAW,CAAC;gBAC5B;YACF;iBAAO;AACL,gBAAA,MAAM,OAAO,CAAC,MAAM,CAAC;YACvB;QACF;AACA,QAAA,OAAO,KAAK;IACd;;;;IAMA,kBAAkB,CAAC,KAAU,EAAE,IAAkC,EAAA;QAC/D,MAAM,IAAI,GAAG,aAAa,CAAC,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;QACxD,MAAM,IAAI,GAAG,aAAa,CAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;AACtD,QAAA,IAAI,IAAI,KAAK,UAAU,EAAE;AACvB,YAAA,OAAO,IAAI,IAAI,IAAI,GAAG,CAAA,kBAAA,EAAqB,IAAI,CAAA,sCAAA,EAAyC,IAAI,CAAA,aAAA,CAAe,GAAG,EAAE;QAClH;QACA,IAAI,IAAI,KAAK,MAAM;YAAE,OAAO,IAAI,IAAI,EAAE;QACtC,IAAI,IAAI,KAAK,MAAM;YAAE,OAAO,IAAI,IAAI,EAAE;AACtC,QAAA,OAAO,EAAE;IACX;AAEA,IAAA,qBAAqB,CACnB,KAAU,EACV,MAAgE,EAChE,KAAa,EACb,cAAsD,EAAA;AAEtD,QAAA,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC;AAChF,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,cAAc,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,YAAmB,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;IAC7G;AAEA,IAAA,YAAY,CACV,MAA2B,EAC3B,KAAU,EACV,OAAY,EACZ,WAAkC,EAAA;AAElC,QAAA,IAAI,MAAM,CAAC,QAAQ,EAAE;AACnB,YAAA,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,KAAK,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;YAErI,IAAI,KAAK,EAAE;gBACT,OAAO;AACL,oBAAA,KAAK,EAAE;AACL,wBAAA,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,OAAO;wBAC3B,KAAK,EAAE,KAAK,CAAC,KAAK;wBAClB,IAAI,EAAE,KAAK,CAAC,IAAI;AACjB,qBAAA;oBACD,KAAK,EAAE,KAAK,CAAC,KAAK;iBACnB;YACH;QACF;AACA,QAAA,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE;YAC7B,OAAO;AACL,gBAAA,KAAK,EAAE;AACL,oBAAA,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE,KAAK,GAAG,SAAS,GAAG,OAAO;AACnC,iBAAA;aACF;QACH;AACA,QAAA,OAAO,SAAS;IAClB;wGAzPW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;4GAAlB,kBAAkB,EAAA,CAAA;;4FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAD9B;;;ACVD;;;AAGG;AACI,MAAM,mBAAmB,GAAG,CACjC,MAA6D,KACnC;IAC1B,MAAM,MAAM,GAA2B,EAAE;AACzC,IAAA,IAAI,CAAC,MAAM;AAAE,QAAA,OAAO,MAAM;IAC1B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;QACrC,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,KAAK;AAC5B,QAAA,IAAI,CAAC;AAAE,YAAA,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;IACxB;AACA,IAAA,OAAO,MAAM;AACf,CAAC;;MCGY,oBAAoB,CAAA;AAIX,IAAA,cAAA;IAHpB,oBAAoB,GAAG,2BAA2B;IAClD,YAAY,GAAG,mBAAmB;IAClC,MAAM,GAAwC,EAAE;AAChD,IAAA,WAAA,CAAoB,cAAgC,EAAA;QAAhC,IAAA,CAAA,cAAc,GAAd,cAAc;IAAqB;AACvD,IAAA,QAAQ,GAAG,CACT,MAAuC,EACvC,IAMC,KACC;QACF,IAAI,YAAY,GAAG,KAAK;QAExB,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE,GAAG,IAAI;AAC7C,QAAA,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC;YAC7B,EAAE;YACF,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE;YAClE,eAAe,EAAE,eAAe,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE;AACnF,SAAA,CAAC;AACF,QAAA,MAAM,GAAG,GAAG,MAAM,EAAE,GAAG,IAAI,OAAO;AAClC,QAAA,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE;AAChB,YAAA,YAAY,GAAG,IAAI,CAAC;QACtB;QACA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;;AAErB,YAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CACpD;gBACE,MAAM,EAAE,IAAI,CAAC,oBAAoB;gBACjC,GAAG;aACJ,EACD;AACE,gBAAA,OAAO,EAAE,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC;gBACzC,IAAI,EAAE,YAAY,GAAG,SAAS,GAAG,SAAS;AAC3C,aAAA,CACF;;AAED,YAAA,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,mBAAmB,CAAC,GAAG,EAAE,CAAC,CAAC;;AAEjF,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAC5C;gBACE,MAAM,EAAE,IAAI,CAAC,YAAY;AACzB,gBAAA,GAAG,EAAE,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,GAAG,GAAG;aACxC,EACD;AACE,gBAAA,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;AACjC,gBAAA,IAAI,EAAE,YAAY,IAAI,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS;AACjE,aAAA,CACF;;AAED,YAAA,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC;AACzD,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG;AACjB,gBAAA,aAAa,EAAE;oBACb,GAAG,EAAE,MAA+B;AAClC,wBAAA,OAAO,mBAAmB,CAAC,GAAG,EAAE;oBAClC,CAAC;AACD,oBAAA,GAAG,EAAE,CAAC,aAAgD,KAA8B;AAClF,wBAAA,MAAM,EAAE,cAAc,EAAE,GAAG,aAAa;wBACxC,mBAAmB,CAAC,GAAG,CAAC;AACtB,4BAAA,cAAc,EAAE,cAAe;AAChC,yBAAA,CAAC;wBACF,OAAO;AACL,4BAAA,cAAc,EAAE,cAAe;yBAChC;oBACH,CAAC;oBACD,MAAM,EAAE,MAAK;wBACX,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;oBAC3D,CAAC;AACD,oBAAA,QAAQ,EAAE,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CACzC,SAAS,CAAC,mBAAmB,CAAC,GAAG,EAAE,CAAC;;AAEpC,oBAAA,GAAG,CAAC,aAAa,IAAI,aAAa,IAAI,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CACxE;AACF,iBAAA;AACD,gBAAA,KAAK,EAAE;oBACL,GAAG,EAAE,MAAuB;AAC1B,wBAAA,OAAO,WAAW,CAAC,GAAG,EAAE;oBAC1B,CAAC;AACD,oBAAA,GAAG,EAAE,CAAC,KAAgC,KAAsB;wBAC1D,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;AACrC,wBAAA,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE;wBACjC,MAAM,EAAE,cAAc,EAAE,YAAY,EAAE,cAAc,EAAE,GAAG,OAAO;AAChE,wBAAA,MAAM,aAAa,GAAG;;AAEpB,4BAAA,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,GAAG,KAAK,EAAE,cAAc,IAAI,EAAE,GAAG,cAAc;AAC9F,4BAAA,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,KAAK,EAAE,YAAY,IAAI,EAAE,GAAG,YAAY;;AAEtF,4BAAA,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,GAAG,KAAK,EAAE,cAAc,IAAI,EAAE,GAAG,cAAc;;AAE9F,4BAAA,SAAS,EAAE,CAAC,CAAC,KAAK,EAAE,SAAS;yBAC9B;wBACD,WAAW,CAAC,GAAG,CAAC;AACd,4BAAA,GAAG,aAAa;;AAEhB,4BAAA,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;AAChC,yBAAA,CAAC;AACF,wBAAA,OAAO,aAAa;oBACtB,CAAC;oBACD,MAAM,EAAE,MAAK;wBACX,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;oBAC3C,CAAC;AACD,oBAAA,QAAQ,EAAE,WAAW,CAAC,QAAQ,CAAC,IAAI,CACjC,SAAS,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC;;AAE5B,oBAAA,GAAG,CAAC,KAAK,IAAI,KAAK,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAChD;AACF,iBAAA;aACF;QACH;AACA,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;AACzB,IAAA,CAAC;AAED,IAAA,SAAS,GAAG,CAAC,SAAoC,KAAa;AAC5D,QAAA,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,GAAG,SAAS;AAClD,QAAA,IACE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,YAAY,EAAE,GAAG,cAAc,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,IAAG;;AAE/D,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AACtB,gBAAA,OAAO,CAAC,CAAC,GAAG,CAAC,MAAM;YACrB;;AAEA,YAAA,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;gBAClC,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE;AAC/B,oBAAA,OAAO,IAAI;gBACb;gBACA,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE;AAC3B,oBAAA,OAAO,IAAI;gBACb;AACA,gBAAA,OAAO,KAAK;YACd;YACA,OAAO,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,EAAE;QACxD,CAAC,CAAC,EACF;AACA,YAAA,OAAO,IAAI;QACb;AACA,QAAA,OAAO,KAAK;AACd,IAAA,CAAC;AAED,IAAA,qBAAqB,GAAG,CAAC,IAGxB,KAA8B;AAC7B,QAAA,MAAM,EAAE,eAAe,EAAE,GAAG,IAAI;QAChC,MAAM,cAAc,GAA4B,EAAE;;AAElD,QAAA,KAAK,MAAM,IAAI,IAAI,eAAe,IAAI,EAAE,EAAE;YACxC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,cAAc;QACrD;QACA,OAAO;;YAEL,cAAc;SACf;AACH,IAAA,CAAC;AAED,IAAA,aAAa,GAAG,CAAC,IAIhB,KAAsB;QACrB,MAAM,YAAY,GAAwB,EAAE;QAC5C,MAAM,cAAc,GAAwB,EAAE;AAC9C,QAAA,MAAM,cAAc,GAA6B,IAAI,CAAC,cAAc,IAAI,EAAE;AAC1E,QAAA,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,GAAG,IAAI;;AAEzC,QAAA,KAAK,MAAM,IAAI,IAAI,OAAO,IAAI,EAAE,EAAE;YAChC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,OAAO;AAChD,YAAA,IAAI,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE;AACrE,gBAAA,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO;YAC3D;QACF;;AAEA,QAAA,KAAK,MAAM,IAAI,IAAI,eAAe,IAAI,EAAE,EAAE;AACxC,YAAA,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE;AAC7B,gBAAA,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG;AAC3B,oBAAA,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI;AACxB,oBAAA,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE;iBACrB;YACH;iBAAO;gBACL,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO;YAC5C;;QAEF;QACA,OAAO;;YAEL,YAAY;;YAEZ,cAAc;;YAEd,cAAc;SACf;AACH,IAAA,CAAC;AAED,IAAA,kBAAkB,GAAG,CACnB,IAIC,EACD,aAAuC,KACX;AAC5B,QAAA,MAAM,EAAE,eAAe,EAAE,GAAG,IAAI;QAChC,MAAM,cAAc,GAA4B,EAAE;;AAElD,QAAA,KAAK,MAAM,IAAI,IAAI,eAAe,IAAI,EAAE,EAAE;AACxC,YAAA,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,aAAa,EAAE,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,cAAc;QAClG;QACA,OAAO;;YAEL,cAAc;SACf;AACH,IAAA,CAAC;AAED,IAAA,UAAU,GAAG,CACX,IAKC,EACD,KAAuB,KACH;QACpB,MAAM,YAAY,GAAwB,EAAE;QAC5C,MAAM,cAAc,GAAwB,EAAE;AAC9C,QAAA,MAAM,cAAc,GAA6B,IAAI,CAAC,cAAc,IAAI,EAAE;AAC1E,QAAA,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,GAAG,IAAI;;AAEzC,QAAA,KAAK,MAAM,IAAI,IAAI,OAAO,IAAI,EAAE,EAAE;YAChC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,MAAM,EAAE,OAAO;AACrF,YAAA,IAAI,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE;AACrE,gBAAA,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO;YAC3D;QACF;;AAEA,QAAA,KAAK,MAAM,IAAI,IAAI,eAAe,IAAI,EAAE,EAAE;AACxC,YAAA,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE;AAC7B,gBAAA,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG;AAC3B,oBAAA,IAAI,EAAE,KAAK,EAAE,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI;AACrE,oBAAA,EAAE,EAAE,KAAK,EAAE,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;iBAChE;YACH;iBAAO;AACL,gBAAA,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,EAAE,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,OAAO;YACnF;QACF;QACA,OAAO;;YAEL,YAAY;;YAEZ,cAAc;;YAEd,cAAc;SACf;AACH,IAAA,CAAC;wGA9PU,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAH,IAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;4GAApB,oBAAoB,EAAA,CAAA;;4FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBADhC;;;ACyEK,MAAO,mBAAoB,SAAQ,gBAAgB,CAAA;;AAE9C,IAAA,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC;IAC3B,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,2CAA2C,CAAC;IAC1E,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,0CAA0C,CAAC;IACxE,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,+CAA+C,CAAC;IACjF,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,0CAA0C,CAAC;IACxE,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,8CAA8C,CAAC;IAEhF,aAAa,GAAG,CAAC,IAAY,EAAE,QAAgB,EAAE,MAAc,KAAI;QAC1E,IAAI,MAAM,KAAK,CAAC,IAAI,QAAQ,KAAK,CAAC,EAAE;AAClC,YAAA,OAAO,EAAE;QACX;AACA,QAAA,MAAM,IAAI,GAAG,IAAI,GAAG,QAAQ,GAAG,CAAC;QAChC,MAAM,EAAE,GAAG,IAAI,IAAI,MAAM,GAAG,IAAI,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC;AACjG,QAAA,OAAO,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,EAAI,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA,CAAE;AACzD,IAAA,CAAC;wGAhBU,mBAAmB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;4GAAnB,mBAAmB,EAAA,CAAA;;4FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAD/B;;AAqFK,MAAO,OAAqB,SAAQ,qBAAqB,CAAA;;;;;AAK7D,IAAA,WAAW,GAAG,KAAK,CAA4B,SAAS,+CAAI,KAAK,EAAE,QAAQ,EAAA,CAAA,GAAA,CAAjB,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAC;IAC9E,MAAM,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,WAAW,EAAE,GAAG,CAAA,iBAAA,EAAoB,IAAI,CAAC,WAAW,EAAE,CAAA,CAAE,GAAG,SAAS,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,QAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AACpG,IAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,iDAAoB;;;;AAK3C,IAAA,KAAK,GAAG,SAAS,CAAC,QAAQ,iDAAC;AAC3B,IAAA,eAAe,GAAG,SAAS,CAAC,eAAe,2DAAC;AAC5C,IAAA,aAAa,GAAG,SAAS,CAAC,aAAa,yDAAC;AACxC,IAAA,MAAM,GAAG,SAAS,CAAC,iBAAiB,kDAAC;AACrC,IAAA,WAAW,GAAG,SAAS,CAAC,aAAa,uDAAC;AACtC,IAAA,cAAc,GAAG,SAAS,CAAC,uBAAuB,0DAAC;AACnD,IAAA,YAAY,GAAG,SAAS,CAAC,qBAAqB,wDAAC;AAC/C,IAAA,SAAS,GAAG,SAAS,CAAC,YAAY,qDAAC;AACnC,IAAA,IAAI,GAAG,SAAS,CAAC,OAAO,gDAAC;AAEzB,IAAA,gBAAgB,GAAG,YAAY,CAAC,yBAAyB,4DAAC;AAC1D,IAAA,UAAU,GAAG,YAAY,CAAC,wBAAwB,sDAAC;AACnD,IAAA,UAAU,GAAG,eAAe,CAAC,uBAAuB,sDAAC;AACrD,IAAA,YAAY,GAAG,eAAe,CAAC,4BAA4B,wDAAC;AAC5D,IAAA,YAAY,GAAG,eAAe,CAAC,yBAAyB,wDAAC;AACzD,IAAA,WAAW,GAAG,eAAe,CAAC,wBAAwB,uDAAC;;;;AAKvD,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAK;QACtB,MAAM,GAAG,GAA4C,EAAE;QACvD,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;AACnC,YAAA,MAAM,KAAK,GAAG,GAAG,CAAC,cAAc,EAAE;AAClC,YAAA,IAAI,KAAK;AAAE,gBAAA,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG;QAC7B;AACA,QAAA,OAAO,GAAG;AACZ,IAAA,CAAC,mDAAC;AAEF,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAK;QACxB,MAAM,GAAG,GAAiD,EAAE;QAC5D,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;AACrC,YAAA,MAAM,KAAK,GAAG,GAAG,CAAC,gBAAgB,EAAE;AACpC,YAAA,IAAI,KAAK;AAAE,gBAAA,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG;QAC7B;AACA,QAAA,OAAO,GAAG;AACZ,IAAA,CAAC,qDAAC;IAEF,SAAS,GAAG,QAAQ,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,qDAAC;AAEpE,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAK;QACvB,MAAM,GAAG,GAA6C,EAAE;QACxD,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;AACpC,YAAA,MAAM,KAAK,GAAG,GAAG,CAAC,eAAe,EAAE;AACnC,YAAA,IAAI,KAAK;AAAE,gBAAA,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG;QAC7B;AACA,QAAA,OAAO,GAAG;AACZ,IAAA,CAAC,oDAAC;;;;AAKF,IAAA,WAAW,GAAG,MAAM,CAA+B,SAAS,uDAAC;AAC7D,IAAA,aAAa,GAAG,MAAM,CAAoC,SAAS,yDAAC;AAEpE,IAAA,KAAK,GAAG,MAAM,CAAmB,EAAE,iDAAC;AACpC,IAAA,kBAAkB,GAAG,MAAM,CAAmB,EAAE,8DAAC;AACjD,IAAA,KAAK,GAAG,MAAM,CAAqB,SAAS,iDAAC;AAE7C,IAAA,OAAO,GAAG,MAAM,CAAC,KAAK,mDAAC;AACvB,IAAA,WAAW,GAAG,MAAM,CAAC,KAAK,uDAAC;AAE3B,IAAA,UAAU,GAAG,MAAM,CAAC,KAAK,sDAAC;AAC1B,IAAA,eAAe,GAAG,MAAM,CAAC,KAAK,2DAAC;AAE/B,IAAA,QAAQ,GAAG,IAAI,CAAC,EAAE,EAAE;AACpB,IAAA,cAAc;AACd,IAAA,GAAG,GAAG,IAAI,CAAC,EAAE,EAAE;IAEf,cAAc,GAA6B,EAAE;IAC7C,YAAY,GAAyB,EAAE;IAEvC,WAAW,GAAqB,EAAE;AAClC,IAAA,aAAa,GAAG,IAAI,YAAY,EAAE;AAClC,IAAA,OAAO,GAAG,IAAI,OAAO,EAAsB;IAC3C,cAAc,GAAG,KAAK;IAEtB,WAAW,GAA0B,EAAE;IACvC,eAAe,GAA2C,EAAE;AAC5D,IAAA,aAAa,GAAG,IAAI,OAAO,EAA0B;AACrD,IAAA,gBAAgB,GAAG,IAAI,GAAG,EAAmB;AAC7C,IAAA,YAAY,GAAG,MAAM,CAAC,CAAC,wDAAC;;AAGxB,IAAA,IAAI,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAChC,IAAA,cAAc,GAAG,MAAM,CAAC,aAAa,CAAC;AACtC,IAAA,kBAAkB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AACjD,IAAA,cAAc,GAAG,MAAM,CAAC,eAAe,CAAC;AAC/B,IAAA,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC;AACpC,IAAA,mBAAmB,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAChD,IAAA,mBAAmB,GAAG,MAAM,CAAC,kBAAkB,CAAC;;AAGhD,IAAA,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,SAAS;AAC9C,IAAA,WAAW,GAAG,IAAI,CAAC,mBAAmB,CAAC,WAAW;;IAGlD,kBAAkB,GAAG,MAAM,CAAwB,sBAAsB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAE9F,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;QAEP,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;YAC5B,IAAI,MAAM,EAAE;gBACV,SAAS,CAAC,MAAK;oBACb,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC;AACtD,oBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC;AAC7B,oBAAA,IAAI,CAAC,cAAc,GAAG,KAAK;oBAE3B,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC;oBACjD,IAAI,CAAC,aAAa,CAAC,GAAG,CACpB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;AAC1E,wBAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,cAAc,CAAC,uBAAuB,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;AAC/F,wBAAA,MAAM,cAAc,GAAG,mBAAmB,CAAC,gBAAgB,IAAI,EAAE;AACjE,wBAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AACzB,wBAAA,IAAI,CAAC;AACF,6BAAA,UAAU,CACT,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EACvE,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,eAAe;6BAErB,IAAI,CAAC,MAAK;AACT,4BAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,mBAAmB,CAAC;4BAC3C,IAAI,CAAC,mBAAmB,EAAE;AAC1B,4BAAA,IAAI,IAAI,CAAC,cAAc,EAAE;gCACvB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;4BACpC;AACF,wBAAA,CAAC;6BACA,OAAO,CAAC,MAAK;AACZ,4BAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AAC3B,wBAAA,CAAC,CAAC;oBACN,CAAC,CAAC,CACH;AACH,gBAAA,CAAC,CAAC;YACJ;AACF,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;YAClC,IAAI,SAAS,EAAE;gBACb,SAAS,CAAC,MAAK;AACb,oBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AAC7F,gBAAA,CAAC,CAAC;YACJ;AACF,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;YACxB,IAAI,IAAI,EAAE;gBACR,SAAS,CAAC,MAAK;AACb,oBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AAC9F,gBAAA,CAAC,CAAC;YACJ;AACF,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;AAC1B,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,OAAO,EAAE;YAClC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACjE,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,aAAa,CAAC,GAAG,CACpB,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAI;;AAE9D,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE;AACjC,YAAA,IAAI,CAAC,IAAI;gBAAE;AACX,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,IAC1C,CAAC,CAAC,KAAK,KAAK,KAAK,GAAG,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,CACxC;YACD,MAAM,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE;AACjC,YAAA,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE;AACjB,gBAAA,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE;YAC7C;YACA,MAAM,WAAW,GAAG,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE;AAC3C,YAAA,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE;AACtB,gBAAA,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,WAAW,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE;YACvD;AACA,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;QACxE,CAAC,CAAC,CACH;IACH;AAEA,IAAA,QAAQ,KAAI;IAEZ,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CACpB,IAAI,CAAC;AACF,aAAA,IAAI,CACH,YAAY,CAAC,GAAG,CAAC,EACjB,SAAS,CAAC,OAAM,IAAI,KAAG;AACrB,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,EAAE;AAC1C,YAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,KAAK,CAAC;AAC/E,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,YAAA,OAAO,MAAM;AACf,QAAA,CAAC,CAAC;AAEH,aAAA,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAC3B;IACH;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE;IAClC;;AAGA,IAAA,iBAAiB,GAAG,CAAC,UAAkB,EAAE,QAAgB,KAA0B;AACjF,QAAA,MAAM,EAAE,cAAc,EAAE,YAAY,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,EAAE;QACxF,OAAO;YACL,cAAc,EAAE,cAAc,IAAI,EAAE;YACpC,eAAe,EAAE,YAAY,IAAI,EAAE;YACnC,iBAAiB,EAAE,cAAc,IAAI,EAAE;YACvC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,IAAI,EAAE;AAClC,YAAA,cAAc,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,SAAS,KAAK,KAAK,GAAG,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,SAAS,KAAK,MAAM,GAAG,MAAM,GAAG,SAAS;YACjH,UAAU;YACV,QAAQ;AACR,YAAA,UAAU,EAAE,IAAI;SACjB;AACH,IAAA,CAAC;AAED,IAAA,kBAAkB,GAAG,CAAC,MAAqB,KAAmB;QAC5D,MAAM,CAAC,QAAQ,GAAG;AAChB,YAAA,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;AAChC,YAAA,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,IAAI,IAAI,CAAC,kBAAkB,EAAE,QAAQ,EAAE,QAAQ,IAAI,oBAAoB,CAAC,QAAQ,EAAE,QAAQ;AAC9H,YAAA,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,IAAI,IAAI,CAAC,kBAAkB,EAAE,QAAQ,EAAE,KAAK,IAAI,oBAAoB,CAAC,QAAQ,EAAE,KAAK;AAClH,YAAA,oBAAoB,EAAE,MAAM,EAAE,QAAQ,EAAE,oBAAoB,IAAI,IAAI,CAAC,kBAAkB,EAAE,QAAQ,EAAE,oBAAoB,IAAI,KAAK;AAChI,YAAA,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,IAAI,KAAK;SACtD;QACD,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE;AACnC,QAAA,MAAM,CAAC,MAAM,CAAC,gBAAgB,GAAG,MAAM,EAAE,MAAM,EAAE,gBAAgB,IAAI,IAAI,CAAC,kBAAkB,EAAE,MAAM,EAAE,gBAAgB;AACtH,QAAA,MAAM,CAAC,MAAM,CAAC,oBAAoB,GAAG,MAAM,EAAE,MAAM,EAAE,oBAAoB,IAAI,IAAI,CAAC,kBAAkB,EAAE,MAAM,EAAE,oBAAoB;AAClI,QAAA,MAAM,CAAC,MAAM,CAAC,YAAY,GAAG,MAAM,EAAE,MAAM,EAAE,YAAY,IAAI,IAAI,CAAC,kBAAkB,EAAE,MAAM,EAAE,YAAY;QAC1G,MAAM,CAAC,MAAM,CAAC,yBAAyB;AACrC,YAAA,MAAM,EAAE,MAAM,EAAE,yBAAyB,IAAI,IAAI,CAAC,kBAAkB,EAAE,MAAM,EAAE,yBAAyB;QACzG,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,OAAO,IAAI,EAAE,EAAE;YACzC,IAAI,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE;gBACnC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE;oBAC1C,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,kBAAkB,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE;gBACpG;gBAEA,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,kBAAkB,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,MAAM,CAAC,IAAI,CAAE;AACvG,gBAAA,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE;AACtH,oBAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO;gBACpE;YACF;QACF;AACA,QAAA,OAAO,MAAM;AACf,IAAA,CAAC;IAED,mBAAmB,GAAG,MAAK;AACzB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE;AAC9B,QAAA,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AAC/B,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE;gBAClE,EAAE,EAAE,IAAI,CAAC,QAAQ;gBACjB,OAAO,EAAE,GAAG,EAAE,OAAO;AACrB,gBAAA,eAAe,EAAE,GAAG,EAAE,MAAM,EAAE,eAAe;AAC7C,gBAAA,UAAU,EAAE,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;gBACpC,cAAc,EAAE,IAAI,CAAC,cAAc;AACpC,aAAA,CAAC;YAEF,IAAI,CAAC,aAAa,CAAC,GAAG,CACpB,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;iBACvB,IAAI,CACH,YAAY,CAAC,GAAG,CAAC,EACjB,GAAG,CAAC,WAAW,IAAG;gBAChB,MAAM,EAAE,cAAc,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,WAAW;AAC/D,gBAAA,IAAI,CAAC,cAAc,GAAG,cAAc,IAAI,EAAE;;;;;;AAM1C,gBAAA,IAAI,CAAC,wBAAwB,CAAC,YAAY,IAAI,EAAE,CAAC;gBACjD,IAAI,CAAC,SAAS,EAAE;AACd,oBAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;AACpB,wBAAA,IAAI,CAAC,SAAS,EAAG,CAAC,SAAS,GAAG,CAAC;oBACjC;oBACA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;gBACrC;AACF,YAAA,CAAC,CAAC;iBAEH,SAAS,EAAE,CACf;QACH;AACF,IAAA,CAAC;;;;AAKD,IAAA,wBAAwB,GAAG,CAAC,IAAyB,KAAI;AACvD,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;QACzD,IAAI,GAAG,KAAK,IAAI;YAAE;QAClB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;AAClC,YAAA,IAAI,EAAE,GAAG,IAAI,IAAI,CAAC;AAAE,gBAAA,OAAO,GAAG,CAAC,GAAG,CAAC;QACrC;AACA,QAAA,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC;AAC1B,IAAA,CAAC;AAED,IAAA,YAAY,GAAG,CAAC,UAA4B,EAAE,UAAgC,KAAI;AAChF,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAG;AAC/B,QAAA,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG;AACvB,QAAA,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,UAAU;QACrF,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,SAAS,IAAG;AAC1C,YAAA,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI;AAC3B,YAAA,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;AAC5B,gBAAA,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM;AAC9B,gBAAA,MAAM,WAAW,GAAW,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;;gBAG1F,MAAM,SAAS,GAAG,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC;AACvD,gBAAA,MAAM,WAAW,GAAW,CAAC,SAAS,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;gBAE7E,IAAI,WAAW,EAAE;AACf,oBAAA,IAAI,CAAC,WAAW,IAAI,IAAI,KAAK,UAAU,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,MAAM,EAAE;AAC7E,wBAAA,OAAO,KAAK;oBACd;AACA,oBAAA,IAAI,IAAI,KAAK,QAAQ,EAAE;wBACrB,IAAI,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE;AAC3C,4BAAA,OAAO,KAAK;wBACd;oBACF;yBAAO,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,aAAa,EAAE;wBACtD,MAAM,UAAU,GAAG,MAA6D;wBAChF,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,SAAS,KAAK,UAAU;wBAC7D,IAAI,UAAU,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;AAC1C,4BAAA,MAAM,YAAY,GAChB,SAAS,CAAC,GAAG,CAAC,CAAC,CAAM,KACnB,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAClG,IAAI,EAAE;AACT,4BAAA,MAAM,YAAY,GAAa,eAAe,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;4BACjH,IAAI,YAAY,EAAE,MAAM,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE;AAChF,gCAAA,OAAO,KAAK;4BACd;wBACF;6BAAO;AACL,4BAAA,IAAI,WAAW,KAAK,WAAW,EAAE;AAC/B,gCAAA,OAAO,KAAK;4BACd;wBACF;oBACF;AAAO,yBAAA,IAAI,IAAI,KAAK,QAAQ,EAAE;AAC5B,wBAAA,MAAM,MAAM,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;AACjG,wBAAA,MAAM,MAAM,GAAG,CAAC,WAAW;AAC3B,wBAAA,IAAI,MAAM,IAAI,MAAM,KAAK,CAAC,EAAE;AAC1B,4BAAA,IAAI,CAAC,MAAM,IAAI,MAAM,KAAK,CAAC,EAAE;AAC3B,gCAAA,OAAO,KAAK;4BACd;AACA,4BAAA,IAAI,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,GAAG,MAAM,EAAE;AACrD,gCAAA,OAAO,KAAK;4BACd;AAAO,iCAAA,IAAI,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,GAAG,MAAM,EAAE;AAC5D,gCAAA,OAAO,KAAK;4BACd;AAAO,iCAAA,IAAI,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,IAAI,MAAM,EAAE;AAC5D,gCAAA,OAAO,KAAK;4BACd;AAAO,iCAAA,IAAI,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,IAAI,MAAM,EAAE;AAC5D,gCAAA,OAAO,KAAK;4BACd;AAAO,iCAAA,IAAI,MAAM,KAAK,MAAM,EAAE;AAC5B,gCAAA,OAAO,KAAK;4BACd;wBACF;oBACF;AAAO,yBAAA,IAAI,IAAI,KAAK,SAAS,EAAE;AAC7B,wBAAA,IAAI,CAAC,WAAW,KAAK,GAAG,IAAI,WAAW,KAAK,MAAM,KAAK,WAAW,KAAK,GAAG,IAAI,WAAW,KAAK,MAAM,EAAE;AACpG,4BAAA,OAAO,KAAK;wBACd;AAAO,6BAAA,IAAI,CAAC,WAAW,KAAK,GAAG,IAAI,WAAW,KAAK,OAAO,KAAK,WAAW,KAAK,GAAG,IAAI,WAAW,KAAK,OAAO,EAAE;AAC7G,4BAAA,OAAO,KAAK;wBACd;oBACF;AAAO,yBAAA,IAAI,IAAI,KAAK,UAAU,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,MAAM,EAAE;AACpE,wBAAA,MAAM,IAAI,GAAG,eAAe,CAAC,KAAK,CAAC,EAAE,IAAI,IAAI,eAAe,CAAC,KAAK,CAAC;AACnE,wBAAA,MAAM,EAAE,GAAG,eAAe,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,eAAe,CAAC,KAAK,CAAC;wBAC/D,MAAM,QAAQ,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC;wBAC1C,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;AACpC,wBAAA,IAAI,QAAQ,IAAI,MAAM,EAAE;4BACtB,IAAI,CAAC,WAAW,EAAE;AAChB,gCAAA,OAAO,KAAK;4BACd;4BAEA,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE;4BAClD,MAAM,YAAY,GAAG,QAAQ,EAAE,OAAO,EAAE,IAAI,IAAI;4BAChD,MAAM,UAAU,GAAG,MAAM,EAAE,OAAO,EAAE,IAAI,IAAI;AAE5C,4BAAA,IAAI,YAAY,IAAI,YAAY,GAAG,UAAU,EAAE;AAC7C,gCAAA,OAAO,KAAK;4BACd;AACA,4BAAA,IAAI,UAAU,IAAI,UAAU,GAAG,UAAU,EAAE;AACzC,gCAAA,OAAO,KAAK;4BACd;wBACF;oBACF;gBACF;YACF;AACA,YAAA,OAAO,IAAI;AACb,QAAA,CAAC,CAAC;;AAEF,QAAA,IAAI,OAAO,IAAI,cAAc,EAAE;AAC7B,YAAA,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC;YACrD,IAAI,MAAM,EAAE;AACV,gBAAA,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM;gBAC9B,KAAK,CAAC,IAAI,CAAC,CAAC,gBAAgB,EAAE,aAAa,KAAI;AAC7C,oBAAA,MAAM,IAAI,GAAG,gBAAgB,CAAC,IAAI;AAClC,oBAAA,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI;;oBAE/B,MAAM,OAAO,GAAG,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC;oBACrD,MAAM,OAAO,GAAG,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC;AAErD,oBAAA,IAAI,IAAI,KAAK,QAAQ,EAAE;wBACrB,OAAO,CAAC,OAAO,IAAI,CAAC,KAAK,OAAO,IAAI,CAAC,CAAC;oBACxC;AACA,oBAAA,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,UAAU,IAAI,IAAI,KAAK,MAAM,EAAE;AAC7D,wBAAA,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE;AAC5C,wBAAA,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE;wBAC5C,OAAO,EAAE,GAAG,EAAE;oBAChB;oBACA,MAAM,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE,EAAE,QAAQ,EAAE;oBACrC,MAAM,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE,EAAE,QAAQ,EAAE;AACrC,oBAAA,IAAI,EAAE,GAAG,EAAE,EAAE;AACX,wBAAA,OAAO,CAAC;oBACV;AACA,oBAAA,IAAI,EAAE,GAAG,EAAE,EAAE;wBACX,OAAO,CAAC,CAAC;oBACX;AACA,oBAAA,OAAO,CAAC;AACV,gBAAA,CAAC,CAAC;AACF,gBAAA,IAAI,cAAc,KAAK,MAAM,EAAE;oBAC7B,KAAK,CAAC,OAAO,EAAE;gBACjB;YACF;QACF;QACA,OAAO;YACL,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,KAAK,KAAI;AAClC,gBAAA,OAAO,KAAK,IAAI,UAAU,GAAG,QAAQ,IAAI,KAAK,GAAG,CAAC,UAAU,GAAG,CAAC,IAAI,QAAQ;AAC9E,YAAA,CAAC,CAAC;YACF,KAAK,EAAE,KAAK,CAAC,MAAM;SACpB;AACH,IAAA,CAAC;IAED,gBAAgB,GAAG,MAA2B;AAC5C,QAAA,MAAM,EAAE,cAAc,EAAE,YAAY,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,EAAE;QACxF,OAAO;YACL,cAAc,EAAE,cAAc,IAAI,EAAE;YACpC,eAAe,EAAE,YAAY,IAAI,EAAE;YACnC,iBAAiB,EAAE,cAAc,IAAI,EAAE;YACvC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,IAAI,EAAE;AAClC,YAAA,cAAc,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,SAAS,KAAK,KAAK,GAAG,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,SAAS,KAAK,MAAM,GAAG,MAAM,GAAG,SAAS;YACjH,UAAU,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,SAAS,IAAI,CAAC;AAC5C,YAAA,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,QAAQ,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,QAAQ,IAAI,EAAE;YACpF,eAAe,EAAE,cAAc,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,EAAE,YAAY,IAAI,EAAE,EAAE,IAAI,CAAC,aAAa,EAAE,EAAE,aAAa,IAAI,EAAE,CAAC;SACpI;AACH,IAAA,CAAC;AAED,IAAA,WAAW,GAAG,CAAC,SAA+B,KAAI;QAChD,MAAM,EAAE,UAAU,EAAE,eAAe,EAAE,iBAAiB,EAAE,GAAG,SAAS;AACpE,QAAA,IAAI,UAAU,KAAK,CAAC,EAAE;AACpB,YAAA,OAAO,IAAI;QACb;AACA,QAAA,IACE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,eAAe,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,IAAG;AAC/C,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AACtB,gBAAA,OAAO,CAAC,CAAC,GAAG,CAAC,MAAM;YACrB;AACA,YAAA,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;gBAClC,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE;AAC/B,oBAAA,OAAO,IAAI;gBACb;gBACA,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE;AAC3B,oBAAA,OAAO,IAAI;gBACb;AACA,gBAAA,OAAO,KAAK;YACd;YACA,OAAO,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,EAAE;QACxD,CAAC,CAAC,EACF;AACA,YAAA,OAAO,IAAI;QACb;AACA,QAAA,IACE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,iBAAiB,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,IAAG;AACjD,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AACtB,gBAAA,OAAO,CAAC,CAAC,GAAG,CAAC,MAAM;YACrB;AACA,YAAA,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;gBAClC,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE;AAC/B,oBAAA,OAAO,IAAI;gBACb;gBACA,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE;AAC3B,oBAAA,OAAO,IAAI;gBACb;AACA,gBAAA,OAAO,KAAK;YACd;YACA,OAAO,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,EAAE;QACxD,CAAC,CAAC,EACF;AACA,YAAA,OAAO,IAAI;QACb;AACA,QAAA,OAAO,KAAK;AACd,IAAA,CAAC;AAED,IAAA,YAAY,GAAG,CAAC,SAA+B,KAAI;AACjD,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QAChD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,eAAe,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC;AAChG,IAAA,CAAC;IAED,KAAK,GAAG,OACN,SAA+B,EAC/B,KAAK,GAAG,IAAI,KAIT;AACH,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AACzB,QAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC;AAE5B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAG;AAC/B,QAAA,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE;AACzB,YAAA,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,GAAG;AAC/B,YAAA,IAAI;gBACF,QAAQ,GAAG,SAAS,EAAE;oBACpB,mBAAmB,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,OAAO;AAC3D,iBAAA,CAAC;YACJ;YAAE,OAAO,GAAG,EAAE;AACZ,gBAAA,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;YACpB;YACA,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;AACxC,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;AACvB,gBAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;gBACzB,OAAO;AACL,oBAAA,KAAK,EAAE,EAAE;AACT,oBAAA,KAAK,EAAE,CAAC;iBACT;YACH;YACA,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC;AACnD,YAAA,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,IAAG;AACzD,gBAAA,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;gBAClB,OAAO;AACL,oBAAA,KAAK,EAAE,EAAS;AAChB,oBAAA,KAAK,EAAE,CAAC;iBACT;AACH,YAAA,CAAC,CAAC;YACF,OAAO;AACL,gBAAA,KAAK,EAAE,MAAM,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,MAAK;AAC1H,oBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;AACvB,oBAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AAC3B,gBAAA,CAAC,CAAC;AACF,gBAAA,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC;aACxB;QACH;QACA,IAAI,KAAK,EAAE;AACT,YAAA,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG;AACrB,YAAA,MAAM,OAAO,GAAG,KAAK,EAAE;YACvB,IAAI,IAAI,GAAQ,EAAE;AAClB,YAAA,IAAI,OAAO,YAAY,OAAO,EAAE;gBAC9B,IAAI,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,GAAG,IAAG;AAC/B,oBAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,qCAAqC,CAAC,CAAC;AAChF,oBAAA,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;AAClB,oBAAA,OAAO,EAAE;AACX,gBAAA,CAAC,CAAC;YACJ;iBAAO;gBACL,IAAI,GAAG,OAAO;YAChB;YACA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AACxB,gBAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,mCAAmC,CAAC,CAAC;gBAC9E,IAAI,GAAG,EAAE;YACX;YACA,IAAI,CAAC,WAAW,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC;QACrH;AACA,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;AACvB,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;QACzB,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC;AACvD,IAAA,CAAC;IAED,OAAO,GAAG,OACR,IAAgD,EAChD,SAAS,GAAG,IAAI,EAChB,YAAmD,KACjD;QACF,IAAI,SAAS,EAAE;AACb,YAAA,IAAI,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE;QAC5B;QAEA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI;QACxC,IAAI,OAAO,EAAE;YACX,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QACzC;QAEA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;QACjC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,IAAI,CAAC,CAAC;QAEhC,IAAI,OAAO,EAAE;YACX,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,OAAO,CAAC;YACzC,MAAM,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,OAAO,CAAC;AACxD,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACtC;;;QAIA,IAAI,CAAC,0BAA0B,EAAE;;QAGjC,IAAI,CAAC,qBAAqB,EAAE;AAE5B,QAAA,MAAM,IAAI,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,YAAY,CAAC;QACxE,IAAI,CAAC,mBAAmB,EAAE;QAC1B,IAAI,CAAC,oBAAoB,EAAE;QAE3B,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,KAAK,EAAE,EAAE,wBAAwB,EAAE;QAC1C,CAAC,EAAE,CAAC,CAAC;AACP,IAAA,CAAC;IAED,MAAM,GAAG,OAAO,KAAK,GAAG,IAAI,EAAE,SAAS,GAAG,IAAI,KAAI;AAChD,QAAA,IAAI,CAAC,cAAc,EAAE,EAAE,YAAY,IAAI;;;AAGvC,QAAA,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,GAAG,CAAC;AAC7B,YAAA,cAAc,EAAE,IAAI,CAAC,cAAc,IAAI,EAAE;YACzC,YAAY,EAAE,IAAI,CAAC,YAAY;AAC/B,YAAA,SAAS,EAAE,IAAI;AAChB,SAAA,CAAC;AACF,QAAA,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,KAAK,CAAC;AAC7D,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;AACzD,IAAA,CAAC;IAED,cAAc,GAAG,OAAO,UAAU,GAAG,CAAC,EAAE,QAAQ,GAAG,GAAG,KAAI;AACxD,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAG;AAC/B,QAAA,IAAI,GAAG,CAAC,MAAM,EAAE,IAAI,KAAK,SAAS,IAAI,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE;AACvD,YAAA,IAAI,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;AAC5E,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AACzB,gBAAA,OAAO,MAAM;YACf;AACA,YAAA,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE;AACxB,gBAAA,MAAM,GAAG,cAAc,CAAC,MAAM,CAAQ;YACxC;AACA,YAAA,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE;AACxB,gBAAA,MAAM,GAAG,cAAc,CAAC,MAAM,CAAQ;YACxC;YACA,OAAO,MAAM,MAAM;QACrB;aAAO;YACL,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,QAAQ,CAAC;AAC9D,YAAA,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE;gBACzB,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC;gBACnD,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE,SAAS,CAAC;gBAC9C,OAAO,MAAM,MAAM;YACrB;iBAAO;gBACL,IAAI,aAAa,GAAU,EAAE;AAC7B,gBAAA,IAAI,OAAO,GAAG,CAAC,KAAK,KAAK,UAAU,EAAE;AACnC,oBAAA,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,EAAE;AAC3B,oBAAA,IAAI,OAAO,YAAY,OAAO,EAAE;wBAC9B,aAAa,GAAG,MAAM,OAAO;oBAC/B;yBAAO;wBACL,aAAa,GAAG,OAAO;oBACzB;gBACF;qBAAO;AACL,oBAAA,aAAa,GAAG,GAAG,CAAC,KAAK;gBAC3B;AACA,gBAAA,IAAI,GAAG,CAAC,IAAI,EAAE;oBACZ,aAAa,GAAG,eAAe,CAAC,aAAa,EAAE,GAAG,CAAC,IAAI,CAAC;gBAC1D;gBACA,OAAO,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,SAAS,CAAC;YACpD;QACF;AACF,IAAA,CAAC;;IAGD,oBAAoB,GAAG,MAA2B;QAChD,OAAO;AACL,YAAA,MAAM,EAAE,IAAI,CAAC,WAAW,EAAG;AAC3B,YAAA,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE;AACnC,YAAA,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;YACxB,cAAc,EAAE,IAAI,CAAC,eAAe;AACpC,YAAA,aAAa,EAAE,MAAM,IAAI,CAAC,gBAAgB,EAAE;AAC5C,YAAA,UAAU,EAAE,CAAC,UAAkB,EAAE,QAAgB,KAAK,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,QAAQ,CAAC;SAChG;AACH,IAAA,CAAC;AAED,IAAA,WAAW,GAAG,CAAC,OAAyB,KAAI;AAC1C,QAAA,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,OAAO,CAAC;AAC5E,IAAA,CAAC;AAED,IAAA,SAAS,GAAG,CAAC,OAAyB,KAAI;AACxC,QAAA,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,OAAO,CAAC;AAC1E,IAAA,CAAC;IAED,YAAY,GAAG,MAAK;QAClB,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;AACpE,IAAA,CAAC;AAED,IAAA,oBAAoB,GAAG,CAAC,IAAsB,KAAI;AAChD,QAAA,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;YACtB,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE;AAC7B,gBAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC;YAC9C;AACA,YAAA,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,IAAI,EAAE,EAAE;AACnD,gBAAA,IAAI,CAAC,oBAAoB,CAAC,CAAC,KAAK,CAAC,CAAC;YACpC;QACF;AACF,IAAA,CAAC;AAED,IAAA,aAAa,GAAG,CAAC,IAAsB,EAAE,MAA6C,EAAE,KAAK,GAAG,CAAC,EAAE,QAAiB,KAAI;AACtH,QAAA,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;AACtB,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;AACpD,YAAA,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG;AACd,gBAAA,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI;gBAChB,KAAK;gBACL,QAAQ;AACR,gBAAA,WAAW,EAAE,kBAAkB,CAAC,GAAG,EAAE,MAAM,CAAC;gBAC5C,UAAU,EAAE,KAAK,IAAI,sBAAsB,CAAC,KAAK,EAAE,MAAM,CAAC;AAC1D,gBAAA,WAAW,EAAE,KAAK;aACnB;QACH;AACF,IAAA,CAAC;AAED,IAAA,0BAA0B,GAAG,OAAO,GAAmB,KAAI;QACzD,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM;YAAE;AACvC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAG;AAC/B,QAAA,MAAM,OAAO,GAAG,GAAG,CAAC,IAAK;QACzB,MAAM,GAAG,GAAG,mBAAmB,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC;QAClD,IAAI,CAAC,GAAG,CAAC,MAAM;YAAE;QACjB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC;QACjH,GAAG,CAAC,IAAI,CAAC,IAAK,CAAC,UAAU,GAAG,SAAS;AACrC,QAAA,MAAM,UAAU,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAK,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC;AAClD,QAAA,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE;AAC7B,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;AACtD,YAAA,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG;AAChB,gBAAA,KAAK,EAAE,UAAU;AACjB,gBAAA,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE;AACrB,gBAAA,WAAW,EAAE,kBAAkB,CAAC,KAAK,EAAE,OAAO,CAAC;gBAC/C,UAAU,EAAE,KAAK,IAAI,sBAAsB,CAAC,UAAU,EAAE,OAAO,CAAC;AAChE,gBAAA,WAAW,EAAE,KAAK;aACnB;QACH;AACF,IAAA,CAAC;AAED,IAAA,sBAAsB,GAAG,OAAO,IAAsB,EAAE,MAA6C,KAAI;AACvG,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ;AAChC,QAAA,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;AACtB,YAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW;gBAAE;YAC9D,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;YACtC,MAAM,OAAO,GAAG,QAAQ,KAAK,SAAS,IAAI,KAAK,GAAG,QAAQ;AAC1D,YAAA,IAAI,CAAC,OAAO;gBAAE;AACd,YAAA,MAAM,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC;YAC1C,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE;AAC/C,YAAA,IAAI,QAAQ,CAAC,MAAM,EAAE;gBACnB,MAAM,IAAI,CAAC,sBAAsB,CAAC,QAAQ,EAAE,MAAM,CAAC;YACrD;QACF;AACF,IAAA,CAAC;AAED,IAAA,YAAY,GAAG,OAAO,GAAmB,KAAI;QAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI;AACxC,QAAA,IAAI,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE;QAE1E,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAC5B,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,KAAK;YAChC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;AACzC,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACpC,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACxB;QACF;AAEA,QAAA,IAAI;AACF,YAAA,IAAI,eAAe,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE;gBACjC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI;AAChC,gBAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACxB,gBAAA,MAAM,GAAG,GAAG,cAAc,CAAC,OAAO,CAAC;AACnC,gBAAA,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,gBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACxE,GAAG,CAAC,IAAgC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,EAAE;AAChF,gBAAA,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,kBAAkB,CAAC,GAAG,EAAE,OAAO,CAAC;YAC9D;AACA,YAAA,MAAM,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC;YAC1C,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,IAAI,mBAAmB,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;gBAC5F,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,KAAK;gBACjC;YACF;YACA,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI;AAC/B,YAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC;AAC5C,YAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ;YACjC,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;YACtC,IAAI,QAAQ,KAAK,SAAS,IAAI,KAAK,GAAG,CAAC,GAAG,QAAQ,EAAE;AAClD,gBAAA,MAAM,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,EAAE,OAAO,CAAC;YAC5E;QACF;QAAE,OAAO,GAAG,EAAE;AACZ,YAAA,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;AAClB,YAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,qCAAqC,CAAC,CAAC;QAClF;gBAAU;AACR,YAAA,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;gBACjB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,KAAK;YACnC;AACA,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACpC,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;QAC1B;AACF,IAAA,CAAC;IAED,cAAc,GAAG,MAAK;AACpB,QAAA,IAAI,CAAC,cAAc,EAAE,EAAE,YAAY,IAAI;AACvC,QAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC;AAC5B,YAAA,cAAc,EAAE,IAAI,CAAC,cAAc,IAAI,EAAE;YACzC,YAAY,EAAE,IAAI,CAAC,YAAY;AAChC,SAAA,CAAC;AACJ,IAAA,CAAC;;;IAID,cAAc,GAAG,MAAK;AACpB,QAAA,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,GAAG,CAAC;AAC7B,YAAA,cAAc,EAAE,IAAI,CAAC,cAAc,IAAI,EAAE;YACzC,YAAY,EAAE,IAAI,CAAC,YAAY;AAC/B,YAAA,SAAS,EAAE,IAAI;AAChB,SAAA,CAAC;AACJ,IAAA,CAAC;AAED,IAAA,QAAQ,GAAG,OAAO,OAAuB,KAAI;AAC3C,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAG;AAC/B,QAAA,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE;YAC1D;QACF;QACA,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE;YACnC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,KAAK;YACtC;QACF;AACA,QAAA,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;AACjD,QAAA,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE;AACzB,YAAA,IAAI,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,MAAO,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,MAAO,CAAC,UAAU,GAAG,KAAK,CAAC,CAAC;QACtG;AACA,QAAA,IAAI,IAAI,YAAY,OAAO,EAAE;YAC3B,OAAO,CAAC,IAAI,CAAC,MAAO,CAAC,WAAW,GAAG,IAAI;YACvC;iBACG,IAAI,CAAC,GAAG,IAAG;gBACV,OAAO,CAAC,IAAI,CAAC,MAAO,CAAC,IAAI,GAAG,GAAG;gBAC/B,OAAO,CAAC,IAAI,CAAC,MAAO,CAAC,UAAU,GAAG,IAAI;AACxC,YAAA,CAAC;AACA,iBAAA,OAAO,CAAC,OAAO,OAAO,CAAC,IAAI,CAAC,MAAO,CAAC,WAAW,GAAG,KAAK,CAAC,CAAC;QAC9D;aAAO;YACL,OAAO,CAAC,IAAI,CAAC,MAAO,CAAC,IAAI,GAAG,IAAI;YAChC,OAAO,CAAC,IAAI,CAAC,MAAO,CAAC,UAAU,GAAG,IAAI;QACxC;AACF,IAAA,CAAC;AAED,IAAA,QAAQ,GAAG,CAAC,OAAuB,KAAI;AACrC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAG;QAC/B,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,mBAAmB,EAAE;QACrD,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE;AACrC,YAAA,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAS,CAAC,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,QAAS,CAAC,UAAU,CAAC,CAAC;AACxG,YAAA,GAAG,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,EAAE,YAAY,EAAE,CAAC;YACtD,IAAI,CAAC,mBAAmB,EAAE;YAC1B,IAAI,CAAC,oBAAoB,EAAE;QAC7B;aAAO;AACL,YAAA,IAAI,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE;gBACxB,IAAI,CAAC,iBAAiB;qBACnB,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,OAAO;AACzB,qBAAA,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAS,CAAC,UAAU,GAAG,KAAK,CAAC,CAAC;;;;AAItD,gBAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;AAC3B,oBAAA,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE;gBACpC;AACA,gBAAA,GAAG,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,EAAE,YAAY,EAAE,CAAC;AACtD,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;gBAC3B,IAAI,CAAC,oBAAoB,EAAE;gBAC3B;YACF;AACA,YAAA,GAAG,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,EAAE,YAAY,EAAE,CAAC;YACtD,IAAI,CAAC,mBAAmB,EAAE;YAC1B,IAAI,CAAC,oBAAoB,EAAE;QAC7B;AACF,IAAA,CAAC;IAED,WAAW,GAAG,MAAK;AACjB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE;AAC9B,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE;QACrC,IAAI,CAAC,iBAAiB,EAAE,CAAC,OAAO,CAAC,CAAC,IAAG;AACnC,YAAA,IAAI,CAAC,CAAC,IAAI,CAAC,QAAS,CAAC,UAAU,KAAK,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,QAAS,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE;gBACxG,CAAC,CAAC,IAAI,CAAC,QAAS,CAAC,UAAU,GAAG,UAAU;YAC1C;AACF,QAAA,CAAC,CAAC;QACF,GAAG,EAAE,QAAQ,EAAE,WAAW,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACxD,IAAI,CAAC,oBAAoB,EAAE;AAC7B,IAAA,CAAC;AAED,IAAA,gBAAgB,GAAG,CAAC,KAAwB,KAAI;AAC9C,QAAA,KAAK,GAAG,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE;AAC7B,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;AAC3B,QAAA,KAAK,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAS,CAAC,UAAU,GAAG,KAAK,CAAC,CAAC;;AAE1D,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;AAC3B,YAAA,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE;QACpC;QACA,IAAI,CAAC,oBAAoB,EAAE;AAC7B,IAAA,CAAC;IAED,iBAAiB,GAAG,MAAuB;AACzC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;QAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI;AACxC,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,KAAK;AAC1B,QAAA,OAAO,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC;AACpC,IAAA,CAAC;AAED,IAAA,mBAAmB,GAAG,MACpB,IAAI,CAAC,iBAAiB;AACnB,SAAA,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAS,CAAC,UAAU;SACvC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;IAErB,qBAAqB,GAAG,MAAK;QAC3B,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,eAAe;AACrE,QAAA,IAAI,CAAC,eAAe;YAAE;QACtB,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI;QACxC,MAAM,IAAI,GAAG,OAAO,GAAG,wBAAwB,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE;AAC5E,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,IAAG;AAClB,YAAA,IAAI,CAAC,IAAI,CAAC,QAAS,CAAC,UAAU,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;AAC7D,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC;IAED,mBAAmB,GAAG,MAAK;AACzB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,EAAE;AACxC,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;AAC7F,IAAA,CAAC;;;;;AAOD,IAAA,wBAAwB,GAAG,CAAC,MAAsB,KAAsB;QACtE,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE;AAC/C,QAAA,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,KAAK,KAAK,CAAC;AACpE,IAAA,CAAC;;AAGD,IAAA,kBAAkB,GAAG,CAAC,MAAsB,KAAa;QACvD,MAAM,GAAG,GAAG,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC;QACjD,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAS,CAAC,UAAU,CAAC;AACtE,IAAA,CAAC;;AAGD,IAAA,oBAAoB,GAAG,CAAC,MAAsB,KAAa;QACzD,MAAM,GAAG,GAAG,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC;AACjD,QAAA,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,KAAK;AAClC,QAAA,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAS,CAAC,UAAU,CAAC;AACvD,QAAA,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAS,CAAC,UAAU,CAAC;AACvD,QAAA,OAAO,IAAI,IAAI,CAAC,GAAG;AACrB,IAAA,CAAC;;AAGD,IAAA,aAAa,GAAG,CAAC,MAAsB,EAAE,OAAgB,KAAI;QAC3D,MAAM,GAAG,GAAG,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC;AACjD,QAAA,GAAG,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAS,CAAC,UAAU,GAAG,OAAO,CAAC,CAAC;AACzD,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE;QAC9B,GAAG,EAAE,QAAQ,EAAE,WAAW,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACxD,IAAI,CAAC,mBAAmB,EAAE;QAC1B,IAAI,CAAC,oBAAoB,EAAE;AAC7B,IAAA,CAAC;;;;AAKD,IAAA,gBAAgB,GAAG,IAAI,GAAG,EAAmB;;AAG7C,IAAA,iBAAiB,GAAG,CAAC,MAAsB,KAAI;AAC7C,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG;YAAE;QAC7B,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG;QACjC,MAAM,eAAe,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,gBAAgB;QACpE,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG;cACzC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG;cAC/B,eAAe;QACnB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC;QACxC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,OAAO;;AAEvC,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;AACpC,IAAA,CAAC;AAED;;;;AAIG;AACH,IAAA,gBAAgB,GAAG,CAAC,IAAY,EAAE,GAAmB,KACnD,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,aAAa,KAAK,IAAI;AAC1C,IAAA,SAAS,GAAG,CAAC,IAAY,EAAE,GAAmB,KAC5C,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,aAAa,KAAK,IAAI;AAE1C;;;AAGG;AACH,IAAA,cAAc,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,aAAa,EAAE,EAAE,gBAAgB,EAAE,MAAM,IAAI,CAAC,CAAC,0DAAC;;AAGtF,IAAA,YAAY,GAAG,CAAC,MAAsB,KAA+B;AACnE,QAAA,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK;AAC3B,QAAA,MAAM,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,EAAE;QAC5B,OAAO;YACL,KAAK;AACL,YAAA,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;AAC5B,YAAA,GAAG,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE;AACjB,YAAA,MAAM,EAAE,CAAC,EAAE,MAAM,IAAI,EAAE;AACvB,YAAA,UAAU,EAAE,CAAC,EAAE,UAAU,IAAI,IAAI;AACjC,YAAA,UAAU,EAAE,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC;AAC3C,YAAA,aAAa,EAAE,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC;YAChD,YAAY,EAAE,MAAM,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC;AAClD,YAAA,YAAY,EAAE,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;SACjF;AACH,IAAA,CAAC;AAED,IAAA,QAAQ,GAAG,CAAC,GAAmB,EAAE,KAAc,KAAmC;QAChF,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,MAAM;AAC5C,QAAA,IAAI,CAAC,EAAE;AAAE,YAAA,OAAO,IAAI;AACpB,QAAA,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,IAAI;QAC3B,MAAM,GAAG,GACP,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,IAAI;AAC1B,cAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU;cAC/E,SAAS;QACf,OAAO,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC;AACjC,IAAA,CAAC;;;;AAKD,IAAA,qBAAqB,GAAG,IAAI,GAAG,EAA0B;AAEzD,IAAA,gBAAgB,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,iBAAiB,KAAK,IAAI;;;;IAKjF,0BAA0B,GAAG,MAAK;AAChC,QAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;YAAE;AAC9B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,EAAE;AACrC,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,IAAG;AAClB,YAAA,IAAI,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;gBAChD,IAAI,CAAC,IAAI,CAAC,QAAS,CAAC,UAAU,GAAG,IAAI;AACrC,gBAAA,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC;YACpD;AACF,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC;IAED,oBAAoB,GAAG,MAAK;AAC1B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,EAAE;AACrC,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;;;AAG3B,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,IAAG;AAClB,gBAAA,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE;gBACvB,IAAI,IAAI,CAAC,IAAI,CAAC,QAAS,CAAC,UAAU,EAAE;oBAClC,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC;gBAC1C;qBAAO;AACL,oBAAA,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,EAAE,CAAC;gBACvC;AACF,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,CAAC,CAAC;QAC9E;aAAO;YACL,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,QAAS,CAAC,UAAU,CAAC,CAAC;QAClF;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AAC3B,IAAA,CAAC;IAED,WAAW,GAAG,MAAK;AACjB,QAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE;AACpC,IAAA,CAAC;AAED,IAAA,SAAS,GAAG,CAAC,IAAkF,KAAI;QACjG,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,GAAG,IAAI,IAAI,EAAE;QACnD,IAAI,YAAY,EAAE;;AAEhB,YAAA,IAAI,CAAC,wBAAwB,CAAC,YAAY,CAAC;QAC7C;AACA,QAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC;YAC5B,YAAY;YACZ,cAAc;AACf,SAAA,CAAC;AACJ,IAAA,CAAC;AAED,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC;IAC5C;AAEA,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,kBAAkB,EAAE,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC;IACzD;IAEA,aAAa,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AAE/C,IAAA,cAAc,GAAG,CAAC,KAAa,EAAE,KAAa,KAAI;;;QAGhD,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC;QAEpD,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,QAAQ;AACrD,QAAA,IAAI,CAAC,QAAQ;YAAE;AACf,QAAA,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,mBAAmB,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,MAAM,CAAC,CAAC;AAC3E,IAAA,CAAC;AAED,IAAA,gBAAgB,GAAG,CAAC,MAAqB,EAAE,QAA8B,KAAI;QAC3E,IAAI,QAAQ,IAAI,IAAI;YAAE;AACtB,QAAA,IAAI,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,cAAc,GAAG,MAAM,EAAE,QAAQ,CAAC;AAChE,IAAA,CAAC;AAED,IAAA,OAAO,GAAG,CAAC,KAAa,EAAE,IAAiB,KAAI;AAC7C,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE;AACrB,IAAA,CAAC;;;AAID,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;AACzB,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE;AAC1B,QAAA,OAAO,CAAC,CAAC,EAAE,SAAS,IAAI,CAAC,KAAK,CAAC,EAAE,QAAQ,IAAI,CAAC,CAAC;AACjD,IAAA,CAAC,sDAAC;AAEF,IAAA,iBAAiB,CAAC,IAAoB,EAAA;AACpC,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC;AAAE,YAAA,OAAO,IAAI;QACjD,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE,UAAU;AAC1C,QAAA,IAAI,CAAC,GAAG,EAAE,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM;AAAE,YAAA,OAAO,KAAK;AACnE,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9C,OAAO,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC;IACrC;AAEA,IAAA,UAAU,CAAC,CAAiB,EAAE,CAAiB,EAAE,QAA0B,EAAA;AACzE,QAAA,MAAM,OAAO,GAAG,CAAC,IAAoB,KAAY;AAC/C,YAAA,IAAI,YAAY,GAAG,CAAC,CAAC;AACrB,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACxC,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM;oBAAE,YAAY,GAAG,CAAC;AAC5D,gBAAA,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI;AAAE,oBAAA,OAAO,YAAY;YAC/C;YACA,OAAO,CAAC,CAAC;AACX,QAAA,CAAC;QACD,OAAO,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC;IAClC;IAEA,oBAAoB,GAAG,CAAC,KAAa,EAAE,IAA6B,EAAE,IAAmC,KAAa;QACpH,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE,UAAU;QAC1C,IAAI,CAAC,GAAG,EAAE,OAAO;AAAE,YAAA,OAAO,KAAK;AAC/B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI;AAC1B,QAAA,MAAM,UAAU,GAAG,QAAQ,GAAG,KAAK,CAAC;AACpC,QAAA,IAAI,CAAC,UAAU;AAAE,YAAA,OAAO,KAAK;AAC7B,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC;AAAE,YAAA,OAAO,KAAK;AACxD,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC;AAAE,YAAA,OAAO,KAAK;QACvD,IAAI,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM;AAAE,YAAA,OAAO,KAAK;AACvD,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE;AAC7B,YAAA,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,CAAC;QACzD;AACA,QAAA,OAAO,IAAI;AACb,IAAA,CAAC;AAED,IAAA,aAAa,CAAC,KAAoC,EAAA;AAChD,QAAA,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,GAAG,KAAK;QAC7C,IAAI,aAAa,KAAK,YAAY;YAAE;AACpC,QAAA,MAAM,YAAY,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI;AACzC,QAAA,MAAM,YAAY,GAAG,CAAC,MAAc,KAAY;YAC9C,IAAI,KAAK,GAAG,CAAC;AACb,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;AAC/B,gBAAA,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC,MAAM,CAAC;AAAE,oBAAA,KAAK,EAAE;YAC9G;AACA,YAAA,OAAO,KAAK;AACd,QAAA,CAAC;AACD,QAAA,MAAM,OAAO,GAAG,YAAY,CAAC,aAAa,CAAC;AAC3C,QAAA,MAAM,KAAK,GAAG,YAAY,CAAC,YAAY,CAAC;QACxC,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;AACjC,QAAA,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC1E,QAAA,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AACxC,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC;QACvB,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,KAAK,OAAO,IAAI,cAAc,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE;YAC7E,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;YACtC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,KAAI;gBAC1B,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;AACpC,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,WAAW,GAAG,QAAQ;QAC7B;AACA,QAAA,IAAI,CAAC,KAAK,EAAE,EAAE,UAAU,EAAE;AAC1B,QAAA,IAAI,CAAC,WAAW,EAAE,EAAE,UAAU,EAAE,QAAQ,GACtC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EACxB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EACpB,OAAO,EACP,KAAK,CACN;IACH;AAEA,IAAA,iBAAiB,GAAG,CAAC,SAA+B,KAAe;AACjE,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAG;AAC/B,QAAA,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,GAAG;AAC/B,QAAA,MAAM,eAAe,GAAG,MAAM,EAAE,eAAe,IAAI,EAAE;AACrD,QAAA,MAAM,GAAG,GAAc;AACrB,YAAA,OAAO,EAAE,EAAE;AACX,YAAA,MAAM,EAAE,EAAE;YACV,UAAU,EAAE,SAAS,CAAC,UAAU;YAChC,QAAQ,EAAE,SAAS,CAAC,QAAQ;SAC7B;AACD,QAAA,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,GAAG;AAC/B,QAAA,MAAM,EAAE,eAAe,EAAE,cAAc,EAAE,iBAAiB,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,SAAS;AAEjG,QAAA,KAAK,MAAM,cAAc,IAAI,eAAe,IAAI,EAAE,EAAE;AAClD,YAAA,MAAM,EAAE,KAAK,EAAE,GAAG,cAAc;AAChC,YAAA,MAAM,KAAK,GAAG,iBAAiB,GAAG,KAAK,CAAC;AACxC,YAAA,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE,EAAE;AACzD,gBAAA,IAAI,cAAc,CAAC,IAAI,KAAK,QAAQ,EAAE;AACpC,oBAAA,IAAI,cAAc,CAAC,eAAe,KAAK,OAAO,IAAI,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE;wBACtE,OAAQ,CAAC,IAAI,CAAC;4BACZ,KAAK;AACL,4BAAA,QAAQ,EAAE,IAAI;AACd,4BAAA,IAAI,EAAG,KAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;AAC1D,yBAAA,CAAC;oBACJ;yBAAO;wBACL,OAAQ,CAAC,IAAI,CAAC;4BACZ,KAAK;AACL,4BAAA,QAAQ,EAAE,cAAc,CAAC,eAAe,IAAI,SAAS;AACrD,4BAAA,IAAI,EAAE,KAAK;AACZ,yBAAA,CAAC;oBACJ;gBACF;AAAO,qBAAA,IAAI,cAAc,CAAC,IAAI,KAAK,SAAS,EAAE;oBAC5C,OAAQ,CAAC,IAAI,CAAC;wBACZ,KAAK;AACL,wBAAA,QAAQ,EAAE,OAAO;AACjB,wBAAA,IAAI,EAAE,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,GAAG;AACzE,qBAAA,CAAC;gBACJ;AAAO,qBAAA,IAAI,cAAc,CAAC,IAAI,KAAK,WAAW,EAAE;AAC9C,oBAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,EAAE;AACjE,wBAAA,IAAI,KAAK,EAAE,IAAI,EAAE;4BACf,OAAQ,CAAC,IAAI,CAAC;gCACZ,KAAK;AACL,gCAAA,QAAQ,EAAE,kBAAkB;gCAC5B,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAE,CAAC,WAAW,EAAE;AACtD,6BAAA,CAAC;wBACJ;AACA,wBAAA,IAAI,KAAK,EAAE,EAAE,EAAE;4BACb,OAAQ,CAAC,IAAI,CAAC;gCACZ,KAAK;AACL,gCAAA,QAAQ,EAAE,WAAW;AACrB,gCAAA,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,CAAE,CAAC,WAAW,EAAE;AAC9E,6BAAA,CAAC;wBACJ;oBACF;gBACF;AAAO,qBAAA,IAAI,cAAc,CAAC,IAAI,KAAK,MAAM,IAAI,cAAc,CAAC,IAAI,KAAK,UAAU,EAAE;AAC/E,oBAAA,IAAI,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AAC/B,wBAAA,IAAI,cAAc,CAAC,IAAI,KAAK,MAAM,EAAE;AAClC,4BAAA,IAAI,cAAc,CAAC,eAAe,KAAK,kBAAkB,EAAE;gCACzD,OAAQ,CAAC,IAAI,CAAC;oCACZ,KAAK;AACL,oCAAA,QAAQ,EAAE,kBAAkB;oCAC5B,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC,KAAK,CAAE,CAAC,WAAW,EAAE;AAChD,iCAAA,CAAC;4BACJ;AACA,4BAAA,IAAI,cAAc,CAAC,eAAe,KAAK,eAAe,EAAE;gCACtD,OAAQ,CAAC,IAAI,CAAC;oCACZ,KAAK;AACL,oCAAA,QAAQ,EAAE,WAAW;AACrB,oCAAA,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAE,CAAC,WAAW,EAAE;AAC1E,iCAAA,CAAC;4BACJ;wBACF;6BAAO;AACL,4BAAA,IAAI,cAAc,CAAC,eAAe,KAAK,kBAAkB,EAAE;gCACzD,OAAQ,CAAC,IAAI,CAAC;oCACZ,KAAK;AACL,oCAAA,QAAQ,EAAE,kBAAkB;oCAC5B,IAAI,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE;AACpC,iCAAA,CAAC;4BACJ;AACA,4BAAA,IAAI,cAAc,CAAC,eAAe,KAAK,eAAe,EAAE;gCACtD,OAAQ,CAAC,IAAI,CAAC;oCACZ,KAAK;AACL,oCAAA,QAAQ,EAAE,eAAe;oCACzB,IAAI,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE;AACpC,iCAAA,CAAC;4BACJ;wBACF;oBACF;gBACF;qBAAO;AACL,oBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACxB,wBAAA,IAAI,KAAK,CAAC,MAAM,EAAE;4BAChB,OAAQ,CAAC,IAAI,CAAC;gCACZ,KAAK;AACL,gCAAA,QAAQ,EAAE,IAAI;AACd,gCAAA,IAAI,EAAE,KAAK;AACZ,6BAAA,CAAC;wBACJ;oBACF;AAAO,yBAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,EAAE;AACxE,wBAAA,IAAI,KAAK,EAAE,IAAI,EAAE;4BACf,OAAQ,CAAC,IAAI,CAAC;gCACZ,KAAK;AACL,gCAAA,QAAQ,EAAE,kBAAkB;gCAC5B,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAE,CAAC,WAAW,EAAE;AACtD,6BAAA,CAAC;wBACJ;AACA,wBAAA,IAAI,KAAK,EAAE,EAAE,EAAE;4BACb,OAAQ,CAAC,IAAI,CAAC;gCACZ,KAAK;AACL,gCAAA,QAAQ,EAAE,WAAW;AACrB,gCAAA,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,CAAE,CAAC,WAAW,EAAE;AAC9E,6BAAA,CAAC;wBACJ;oBACF;yBAAO;wBACL,OAAQ,CAAC,IAAI,CAAC;4BACZ,KAAK;AACL,4BAAA,QAAQ,EAAE,cAAc,CAAC,eAAe,IAAI,OAAO;AACnD,4BAAA,IAAI,EAAE,KAAK;AACZ,yBAAA,CAAC;oBACJ;gBACF;YACF;QACF;AAEA,QAAA,KAAK,MAAM,MAAM,IAAI,OAAO,IAAI,EAAE,EAAE;AAClC,YAAA,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM;AACxB,YAAA,MAAM,KAAK,GAAQ,eAAe,GAAG,KAAK,CAAC;AAC3C,YAAA,MAAM,QAAQ,GAAG,cAAc,GAAG,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO;AAC5E,YAAA,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE,EAAE;AACzD,gBAAA,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE;oBAC5B,OAAQ,CAAC,IAAI,CAAC;AACZ,wBAAA,KAAK,EAAE,KAAK;wBACZ,QAAQ,EAAE,QAAQ,IAAI,SAAS;AAC/B,wBAAA,IAAI,EAAE,KAAK;AACZ,qBAAA,CAAC;gBACJ;AAAO,qBAAA,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE;oBACpC,OAAQ,CAAC,IAAI,CAAC;AACZ,wBAAA,KAAK,EAAE,KAAK;AACZ,wBAAA,QAAQ,EAAE,OAAO;AACjB,wBAAA,IAAI,EAAE,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,GAAG;AACzE,qBAAA,CAAC;gBACJ;AAAO,qBAAA,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE;AAC/D,oBAAA,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,EAAE;wBAC1E,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,EAAE,EAAE,EAAE;4BAC5B,OAAQ,CAAC,IAAI,CAAC;AACZ,gCAAA,KAAK,EAAE,KAAK;AACZ,gCAAA,QAAQ,EAAE,SAAS;AACnB,gCAAA,IAAI,EAAE;oCACJ,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAE,CAAC,WAAW,EAAE;oCACrD,EAAE,EAAE,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAE,CAAC,WAAW,EAAE;AAChD,iCAAA;AACF,6BAAA,CAAC;wBACJ;AAAO,6BAAA,IAAI,KAAK,EAAE,IAAI,EAAE;4BACtB,OAAQ,CAAC,IAAI,CAAC;AACZ,gCAAA,KAAK,EAAE,KAAK;AACZ,gCAAA,QAAQ,EAAE,kBAAkB;gCAC5B,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAE,CAAC,WAAW,EAAE;AACtD,6BAAA,CAAC;wBACJ;AAAO,6BAAA,IAAI,KAAK,EAAE,EAAE,EAAE;4BACpB,OAAQ,CAAC,IAAI,CAAC;AACZ,gCAAA,KAAK,EAAE,KAAK;AACZ,gCAAA,QAAQ,EAAE,WAAW;AACrB,gCAAA,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,CAAE,CAAC,WAAW,EAAE;AAC9E,6BAAA,CAAC;wBACJ;oBACF;yBAAO;AACL,wBAAA,IAAI,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;4BAC/B,OAAQ,CAAC,IAAI,CAAC;AACZ,gCAAA,KAAK,EAAE,KAAK;AACZ,gCAAA,QAAQ,EAAE,SAAS;AACnB,gCAAA,IAAI,EAAE;oCACJ,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC,KAAK,CAAE,CAAC,WAAW,EAAE;oCAC/C,EAAE,EAAE,aAAa,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC,WAAW,EAAE;AAC5C,iCAAA;AACF,6BAAA,CAAC;wBACJ;oBACF;gBACF;qBAAO;AACL,oBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACxB,wBAAA,IAAI,KAAK,CAAC,MAAM,EAAE;4BAChB,OAAQ,CAAC,IAAI,CAAC;AACZ,gCAAA,KAAK,EAAE,KAAK;AACZ,gCAAA,QAAQ,EAAE,IAAI;AACd,gCAAA,IAAI,EAAE,KAAK;AACZ,6BAAA,CAAC;wBACJ;oBACF;yBAAO;wBACL,OAAQ,CAAC,IAAI,CAAC;AACZ,4BAAA,KAAK,EAAE,KAAK;4BACZ,QAAQ,EAAE,QAAQ,IAAI,OAAO;AAC7B,4BAAA,IAAI,EAAE,KAAK;AACZ,yBAAA,CAAC;oBACJ;gBACF;YACF;QACF;AAEA,QAAA,IAAI,OAAO,IAAI,cAAc,EAAE;YAC7B,MAAO,CAAC,IAAI,CAAC;AACX,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,SAAS,EAAE,cAAc;AAC1B,aAAA,CAAC;QACJ;AACA,QAAA,OAAO,GAAG;AACZ,IAAA,CAAC;wGA12CU,OAAO,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAP,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,OAAO,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,kCAAA,EAAA,EAAA,EAAA,SAAA,EAjDP;YACT,QAAQ;YACR,WAAW;YACX,YAAY;YACZ,oBAAoB;YACpB,kBAAkB;YAClB,kBAAkB;YAClB,aAAa;AACb,YAAA;AACE,gBAAA,OAAO,EAAE,gBAAgB;AACzB,gBAAA,QAAQ,EAAE,mBAAmB;AAC9B,aAAA;SACF,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EA2D+B,yBAAyB,6FAC/B,wBAAwB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,YAAA,EAAA,SAAA,EACrB,uBAAuB,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,SAAA,EACrB,4BAA4B,+DAC5B,yBAAyB,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,aAAA,EAAA,SAAA,EAC1B,wBAAwB,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,OAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAfpC,QAAQ,kGACE,eAAe,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EACjB,aAAa,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EACpB,iBAAiB,8FACZ,aAAa,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EACV,uBAAuB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EACzB,qBAAqB,4FACxB,YAAY,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,MAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EACjB,OAAO,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECjM1B,2t3BA4jBA,0lQDlbI,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,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,aAAa,6vBACb,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,sBAAA,EAAA,cAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,MAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAClB,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,uBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,uBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,oCAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,oCAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,eAAA,EAAA,OAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,wBAAwB,kOACxB,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,WAAA,EAAA,IAAA,EAAA,UAAA,EAAA,eAAA,EAAA,MAAA,EAAA,OAAA,EAAA,eAAA,EAAA,UAAA,EAAA,OAAA,EAAA,qBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACjB,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,MAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,SAAA,EAAA,OAAA,EAAA,eAAA,EAAA,UAAA,EAAA,UAAA,EAAA,OAAA,EAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,cAAc,uoCACd,QAAQ,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,MAAA,EAAA,OAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,YAAA,EAAA,YAAA,EAAA,UAAA,EAAA,SAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACR,cAAc,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,MAAA,EAAA,WAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACd,oBAAoB,gGACpB,oBAAoB,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACpB,uBAAuB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACvB,eAAe,kGACf,qBAAqB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,cAAA,EAAA,aAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,cAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,qBAAqB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAOrB,iBAAiB,EAAA,QAAA,EAAA,YAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,kBAAkB,EAAA,QAAA,EAAA,aAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,iBAAiB,uDACjB,oBAAoB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACpB,uBAAuB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,oBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACvB,qBAAqB,2DACrB,uBAAuB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAZvB,WAAW,EAAA,IAAA,EAAA,SAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EACX,UAAU,0CACV,sBAAsB,EAAA,IAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EACtB,+BAA+B,EAAA,IAAA,EAAA,2BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAE/B,uBAAuB,EAAA,IAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAQvB,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,UAAA,EAzDH;YACV,OAAO,CAAC,cAAc,EAAE;AACtB,gBAAA,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC;AAChF,gBAAA,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;AAChE,gBAAA,UAAU,CAAC,wBAAwB,EAAE,OAAO,CAAC,sCAAsC,CAAC,CAAC;aACtF,CAAC;AACH,SAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAsDU,OAAO,EAAA,UAAA,EAAA,CAAA;kBAjEnB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,UAAU,EAAA,eAAA,EAGH,uBAAuB,CAAC,MAAM,EAAA,UAAA,EACnC;wBACV,OAAO,CAAC,cAAc,EAAE;AACtB,4BAAA,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC;AAChF,4BAAA,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;AAChE,4BAAA,UAAU,CAAC,wBAAwB,EAAE,OAAO,CAAC,sCAAsC,CAAC,CAAC;yBACtF,CAAC;qBACH,EAAA,IAAA,EACK;AACJ,wBAAA,oBAAoB,EAAE,UAAU;AAChC,wBAAA,qBAAqB,EAAE,8BAA8B;qBACtD,EAAA,SAAA,EACU;wBACT,QAAQ;wBACR,WAAW;wBACX,YAAY;wBACZ,oBAAoB;wBACpB,kBAAkB;wBAClB,kBAAkB;wBAClB,aAAa;AACb,wBAAA;AACE,4BAAA,OAAO,EAAE,gBAAgB;AACzB,4BAAA,QAAQ,EAAE,mBAAmB;AAC9B,yBAAA;qBACF,EAAA,OAAA,EACQ;wBACP,YAAY;wBACZ,WAAW;wBACX,aAAa;wBACb,kBAAkB;wBAClB,aAAa;wBACb,cAAc;wBACd,aAAa;wBACb,wBAAwB;wBACxB,iBAAiB;wBACjB,cAAc;wBACd,cAAc;wBACd,QAAQ;wBACR,cAAc;wBACd,oBAAoB;wBACpB,oBAAoB;wBACpB,uBAAuB;wBACvB,eAAe;wBACf,qBAAqB;wBACrB,qBAAqB;wBACrB,WAAW;wBACX,UAAU;wBACV,sBAAsB;wBACtB,+BAA+B;wBAC/B,cAAc;wBACd,uBAAuB;wBACvB,iBAAiB;wBACjB,kBAAkB;wBAClB,iBAAiB;wBACjB,oBAAoB;wBACpB,uBAAuB;wBACvB,qBAAqB;wBACrB,uBAAuB;wBACvB,aAAa;AACd,qBAAA,EAAA,QAAA,EAAA,2t3BAAA,EAAA,MAAA,EAAA,CAAA,4+OAAA,EAAA,qjBAAA,CAAA,EAAA;6SAciB,QAAQ,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MACE,eAAe,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MACjB,aAAa,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MACpB,iBAAiB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MACZ,aAAa,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MACV,uBAAuB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MACzB,qBAAqB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MACxB,YAAY,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MACjB,OAAO,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,gBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAEQ,yBAAyB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAC/B,wBAAwB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MACrB,uBAAuB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MACrB,4BAA4B,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAC5B,yBAAyB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAC1B,wBAAwB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;MEvH3C,oBAAoB,GAAG,CAClC,aAAmC,EACnC,IAKC,KACY;IACb,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,IAAI;AACvD,IAAA,MAAM,GAAG,GAAc;AACrB,QAAA,OAAO,EAAE,EAAE;AACX,QAAA,MAAM,EAAE,IAAI,EAAE,MAAM,IAAI,EAAE;QAC1B,UAAU,EAAE,aAAa,CAAC,UAAU;QACpC,QAAQ,EAAE,aAAa,CAAC,QAAQ;KACjC;AACD,IAAA,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG;AACvB,IAAA,MAAM,EAAE,iBAAiB,EAAE,eAAe,EAAE,cAAc,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,aAAa;;AAErG,IAAA,KAAK,MAAM,cAAc,IAAI,eAAe,IAAI,EAAE,EAAE;QAClD,MAAM,KAAK,GAAG,iBAAiB,GAAG,cAAc,CAAC,KAAK,CAAC;AACvD,QAAA,MAAM,KAAK,GAAG,YAAY,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,cAAc,CAAC,KAAK;;AAE1E,QAAA,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE,EAAE;AACzD,YAAA,IAAI,cAAc,CAAC,IAAI,KAAK,QAAQ,EAAE;gBACpC,OAAQ,CAAC,IAAI,CAAC;oBACZ,KAAK;AACL,oBAAA,QAAQ,EAAE,cAAc,CAAC,eAAe,IAAI,SAAS;AACrD,oBAAA,IAAI,EAAE,KAAK;AACZ,iBAAA,CAAC;YACJ;AAAO,iBAAA,IAAI,cAAc,CAAC,IAAI,KAAK,SAAS,EAAE;gBAC5C,OAAQ,CAAC,IAAI,CAAC;oBACZ,KAAK;AACL,oBAAA,QAAQ,EAAE,OAAO;AACjB,oBAAA,IAAI,EAAE,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,GAAG;AACzE,iBAAA,CAAC;YACJ;AAAO,iBAAA,IAAI,cAAc,CAAC,IAAI,KAAK,MAAM,EAAE;AACzC,gBAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,EAAE;AACjE,oBAAA,IAAI,KAAK,EAAE,IAAI,EAAE;wBACf,OAAQ,CAAC,IAAI,CAAC;4BACZ,KAAK;AACL,4BAAA,QAAQ,EAAE,kBAAkB;4BAC5B,IAAI,EAAEG,eAAa,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAE,CAAC,WAAW,EAAE;AACtD,yBAAA,CAAC;oBACJ;AACA,oBAAA,IAAI,KAAK,EAAE,EAAE,EAAE;wBACb,OAAQ,CAAC,IAAI,CAAC;4BACZ,KAAK;AACL,4BAAA,QAAQ,EAAE,WAAW;AACrB,4BAAA,IAAI,EAAEA,eAAa,CAAC,KAAK,CAACA,eAAa,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,CAAE,CAAC,WAAW,EAAE;AAC9E,yBAAA,CAAC;oBACJ;gBACF;qBAAO;AACL,oBAAA,IAAIA,eAAa,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AAC/B,wBAAA,IAAI,cAAc,CAAC,eAAe,KAAK,kBAAkB,EAAE;4BACzD,OAAQ,CAAC,IAAI,CAAC;gCACZ,KAAK;AACL,gCAAA,QAAQ,EAAE,kBAAkB;gCAC5B,IAAI,EAAEA,eAAa,CAAC,KAAK,CAAC,KAAK,CAAE,CAAC,WAAW,EAAE;AAChD,6BAAA,CAAC;wBACJ;AACA,wBAAA,IAAI,cAAc,CAAC,eAAe,KAAK,eAAe,EAAE;4BACtD,OAAQ,CAAC,IAAI,CAAC;gCACZ,KAAK;AACL,gCAAA,QAAQ,EAAE,WAAW;AACrB,gCAAA,IAAI,EAAEA,eAAa,CAAC,KAAK,CAACA,eAAa,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAE,CAAC,WAAW,EAAE;AAC1E,6BAAA,CAAC;wBACJ;oBACF;gBACF;YACF;iBAAO;AACL,gBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACxB,oBAAA,IAAI,KAAK,CAAC,MAAM,EAAE;wBAChB,OAAQ,CAAC,IAAI,CAAC;4BACZ,KAAK;AACL,4BAAA,QAAQ,EAAE,IAAI;AACd,4BAAA,IAAI,EAAE,KAAK;AACZ,yBAAA,CAAC;oBACJ;gBACF;qBAAO;oBACL,OAAQ,CAAC,IAAI,CAAC;wBACZ,KAAK;AACL,wBAAA,QAAQ,EAAE,cAAc,CAAC,eAAe,IAAI,OAAO;AACnD,wBAAA,IAAI,EAAE,KAAK;AACZ,qBAAA,CAAC;gBACJ;YACF;QACF;IACF;;AAEA,IAAA,KAAK,MAAM,MAAM,IAAI,OAAO,IAAI,EAAE,EAAE;QAClC,MAAM,KAAK,GAAG,eAAe,GAAG,MAAM,CAAC,KAAK,CAAC;AAC7C,QAAA,MAAM,KAAK,GAAG,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK;AAC1D,QAAA,MAAM,QAAQ,GAAG,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO;;AAEnF,QAAA,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE,EAAE;AACzD,YAAA,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE;gBAC5B,OAAQ,CAAC,IAAI,CAAC;oBACZ,KAAK;oBACL,QAAQ,EAAE,QAAQ,IAAI,SAAS;AAC/B,oBAAA,IAAI,EAAE,KAAK;AACZ,iBAAA,CAAC;YACJ;AAAO,iBAAA,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE;gBACpC,OAAQ,CAAC,IAAI,CAAC;oBACZ,KAAK;AACL,oBAAA,QAAQ,EAAE,OAAO;AACjB,oBAAA,IAAI,EAAE,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,GAAG;AACzE,iBAAA,CAAC;YACJ;AAAO,iBAAA,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE;AAC/D,gBAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,EAAE;oBACjE,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,EAAE,EAAE,EAAE;wBAC5B,OAAQ,CAAC,IAAI,CAAC;4BACZ,KAAK;AACL,4BAAA,QAAQ,EAAE,SAAS;AACnB,4BAAA,IAAI,EAAE;gCACJ,IAAI,EAAEA,eAAa,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAE,CAAC,WAAW,EAAE;gCACrD,EAAE,EAAEA,eAAa,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAE,CAAC,WAAW,EAAE;AAChD,6BAAA;AACF,yBAAA,CAAC;oBACJ;AAAO,yBAAA,IAAI,KAAK,EAAE,IAAI,EAAE;wBACtB,OAAQ,CAAC,IAAI,CAAC;4BACZ,KAAK;AACL,4BAAA,QAAQ,EAAE,kBAAkB;4BAC5B,IAAI,EAAEA,eAAa,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAE,CAAC,WAAW,EAAE;AACtD,yBAAA,CAAC;oBACJ;AAAO,yBAAA,IAAI,KAAK,EAAE,EAAE,EAAE;wBACpB,OAAQ,CAAC,IAAI,CAAC;4BACZ,KAAK;AACL,4BAAA,QAAQ,EAAE,WAAW;AACrB,4BAAA,IAAI,EAAEA,eAAa,CAAC,KAAK,CAACA,eAAa,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,CAAE,CAAC,WAAW,EAAE;AAC9E,yBAAA,CAAC;oBACJ;gBACF;qBAAO;AACL,oBAAA,IAAIA,eAAa,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;wBAC/B,OAAQ,CAAC,IAAI,CAAC;4BACZ,KAAK;AACL,4BAAA,QAAQ,EAAE,SAAS;AACnB,4BAAA,IAAI,EAAE;gCACJ,IAAI,EAAEA,eAAa,CAAC,KAAK,CAAC,KAAK,CAAE,CAAC,WAAW,EAAE;gCAC/C,EAAE,EAAEA,eAAa,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC,WAAW,EAAE;AAC5C,6BAAA;AACF,yBAAA,CAAC;oBACJ;gBACF;YACF;iBAAO;AACL,gBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACxB,oBAAA,IAAI,KAAK,CAAC,MAAM,EAAE;wBAChB,OAAQ,CAAC,IAAI,CAAC;4BACZ,KAAK;AACL,4BAAA,QAAQ,EAAE,IAAI;AACd,4BAAA,IAAI,EAAE,KAAK;AACZ,yBAAA,CAAC;oBACJ;gBACF;qBAAO;oBACL,OAAQ,CAAC,IAAI,CAAC;wBACZ,KAAK;wBACL,QAAQ,EAAE,QAAQ,IAAI,OAAO;AAC7B,wBAAA,IAAI,EAAE,KAAK;AACZ,qBAAA,CAAC;gBACJ;YACF;QACF;IACF;;AAEA,IAAA,IAAI,OAAO,IAAI,cAAc,EAAE;AAC7B,QAAA,GAAG,CAAC,MAAO,CAAC,IAAI,CAAC;AACf,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,SAAS,EAAE,cAAc;AAC1B,SAAA,CAAC;IACJ;AACA,IAAA,OAAO,GAAG;AACZ;;AC5PA;;AAEG;;;;"}
1
+ {"version":3,"file":"sdcorejs-angular-components-table.mjs","sources":["../../../projects/sdcorejs-angular/components/table/src/directives/sd-table-cell-def.directive.ts","../../../projects/sdcorejs-angular/components/table/src/directives/sd-table-expand-def.directive.ts","../../../projects/sdcorejs-angular/components/table/src/directives/sd-table-filter-def.directive.ts","../../../projects/sdcorejs-angular/components/table/src/directives/sd-table-footer-def.directive.ts","../../../projects/sdcorejs-angular/components/table/src/directives/sd-table-group-def.directive.ts","../../../projects/sdcorejs-angular/components/table/src/directives/sd-table-title-def.directive.ts","../../../projects/sdcorejs-angular/components/table/src/components/column-title/column-title.component.ts","../../../projects/sdcorejs-angular/components/table/src/components/column-title/column-title.component.html","../../../projects/sdcorejs-angular/components/table/src/components/filter/column-filter/column-filter.component.ts","../../../projects/sdcorejs-angular/components/table/src/components/filter/column-filter/column-filter.component.html","../../../projects/sdcorejs-angular/components/table/src/pipes/filter-values.pipe.ts","../../../projects/sdcorejs-angular/components/table/src/services/tree/tree.util.ts","../../../projects/sdcorejs-angular/components/table/src/pipes/sd-tree.pipe.ts","../../../projects/sdcorejs-angular/components/table/src/components/filter/external-filter/external-filter.component.ts","../../../projects/sdcorejs-angular/components/table/src/components/filter/external-filter/external-filter.component.html","../../../projects/sdcorejs-angular/components/table/src/components/filter/mobile-filter/mobile-filter.component.ts","../../../projects/sdcorejs-angular/components/table/src/components/filter/mobile-filter/mobile-filter.component.html","../../../projects/sdcorejs-angular/components/table/src/components/selector-action/action-filter.pipe.ts","../../../projects/sdcorejs-angular/components/table/src/components/selector-action/selector-action.component.ts","../../../projects/sdcorejs-angular/components/table/src/components/selector-action/selector-action.component.html","../../../projects/sdcorejs-angular/components/table/src/configurations/table.configuration.ts","../../../projects/sdcorejs-angular/components/table/src/services/config.service.ts","../../../projects/sdcorejs-angular/components/table/src/components/config/config.component.ts","../../../projects/sdcorejs-angular/components/table/src/components/config/config.component.html","../../../projects/sdcorejs-angular/components/table/src/components/desktop-cell/view/view.component.ts","../../../projects/sdcorejs-angular/components/table/src/components/desktop-cell/view/view.component.html","../../../projects/sdcorejs-angular/components/table/src/components/desktop-cell/desktop-cell.component.ts","../../../projects/sdcorejs-angular/components/table/src/components/desktop-cell/desktop-cell.component.html","../../../projects/sdcorejs-angular/components/table/src/components/command/pipes/command.pipe.ts","../../../projects/sdcorejs-angular/components/table/src/components/command/pipes/filter.pipe.ts","../../../projects/sdcorejs-angular/components/table/src/components/command/desktop-command.component.ts","../../../projects/sdcorejs-angular/components/table/src/components/command/desktop-command.component.html","../../../projects/sdcorejs-angular/components/table/src/components/popup-export/popup-export.component.ts","../../../projects/sdcorejs-angular/components/table/src/components/popup-export/popup-export.component.html","../../../projects/sdcorejs-angular/components/table/src/directives/sd-table-column-filter-def.directive.ts","../../../projects/sdcorejs-angular/components/table/src/directives/sticky-shadow.directive.ts","../../../projects/sdcorejs-angular/components/table/src/directives/sd-column-resize.directive.ts","../../../projects/sdcorejs-angular/components/table/src/models/table-item.model.ts","../../../projects/sdcorejs-angular/components/table/src/pipes/sd-group.pipe.ts","../../../projects/sdcorejs-angular/components/table/src/pipes/selection-disabled.pipe.ts","../../../projects/sdcorejs-angular/components/table/src/pipes/selection-visible-select-all.pipe.ts","../../../projects/sdcorejs-angular/components/table/src/pipes/selection-visible.pipe.ts","../../../projects/sdcorejs-angular/components/table/src/services/table-export/table-export.service.ts","../../../projects/sdcorejs-angular/components/table/src/services/table-format/table-format.service.ts","../../../projects/sdcorejs-angular/components/table/src/services/column-width.util.ts","../../../projects/sdcorejs-angular/components/table/src/services/table-filter/table-filter.service.ts","../../../projects/sdcorejs-angular/components/table/src/table.component.ts","../../../projects/sdcorejs-angular/components/table/src/table.component.html","../../../projects/sdcorejs-angular/components/table/src/services/table-filter/table-filter.model.ts","../../../projects/sdcorejs-angular/components/table/sdcorejs-angular-components-table.ts"],"sourcesContent":["import { Directive, TemplateRef, inject, input } from '@angular/core';\nimport { SdTableColumn } from '../models/table-column.model';\n\ninterface Context<T = any> {\n item: T;\n column: SdTableColumn<T>;\n autoId: string;\n}\n\n@Directive({\n selector: '[sdTableCellDef]',\n})\nexport class SdTableCellDefDirective<T = any> {\n static ngTemplateContextGuard<T>(_dir: SdTableCellDefDirective<T>, _ctx: unknown): _ctx is Context<T> {\n return true;\n }\n\n sdTableCellDef = input.required<string>();\n templateRef: TemplateRef<Context<T>> = inject(TemplateRef);\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\nimport { SdTableItem } from '../models/table-item.model';\n\ninterface Context<T = any> {\n item: SdTableItem<T>;\n}\n\n@Directive({\n selector: '[sdTableExpandDef]',\n})\nexport class SdTableExpandDefDirective<T = any> {\n static ngTemplateContextGuard<T>(_dir: SdTableExpandDefDirective<T>, _ctx: unknown): _ctx is Context<T> {\n return true;\n }\n\n templateRef: TemplateRef<Context<T>> = inject(TemplateRef);\n}\n","import { Directive, TemplateRef, booleanAttribute, inject, input } from '@angular/core';\n\ninterface Context {\n externalFilter?: Record<string, unknown>;\n}\n\n@Directive({\n selector: '[sdTableFilterDef]',\n})\nexport class SdTableFilterDefDirective {\n static ngTemplateContextGuard(_dir: SdTableFilterDefDirective, _ctx: unknown): _ctx is Context {\n return true;\n }\n\n sdTableFilterDef = input.required<string>();\n defaultShowing = input(false, { transform: booleanAttribute });\n templateRef: TemplateRef<Context> | null = inject(TemplateRef, { optional: true });\n}\n","import { Directive, TemplateRef, inject, input } from '@angular/core';\nimport { SdTableColumn } from '../models/table-column.model';\nimport { SdTableItem } from '../models/table-item.model';\n\ninterface Context<T = any> {\n items: SdTableItem<T>[];\n column: SdTableColumn<T>;\n}\n\n@Directive({\n selector: '[sdTableFooterDef]',\n})\nexport class SdMaterialFooterDefDirective<T = any> {\n static ngTemplateContextGuard<T>(_dir: SdMaterialFooterDefDirective<T>, _ctx: unknown): _ctx is Context<T> {\n return true;\n }\n\n sdTableFooterDef = input.required<string>();\n templateRef: TemplateRef<Context<T>> = inject(TemplateRef);\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\nimport { SdTableItem } from '../models/table-item.model';\n\nexport interface SdTableGroupDefContext<T = any> {\n /** Children items thuộc group hiện tại (kèm wrapper SdTableItem). */\n items: SdTableItem<T>[];\n /** Children raw data (đã unwrap khỏi SdTableItem) — tiện dùng trong template. */\n data: T[];\n /** Hash key của group (Utilities.hash(values)). */\n key: string;\n /** Resolved giá trị các field group — vd `{ customerId: 1, customerName: 'A' }`. */\n values: Record<string, any>;\n /** true nếu group đang expand, false nếu collapse (chỉ ý nghĩa khi option.group.collapsible). */\n isExpanded: boolean;\n /** true nếu mọi children selectable đều selected. */\n isSelected: boolean;\n /** true nếu một phần children selected (partial). */\n indeterminate: boolean;\n /** Toggle expand/collapse (chỉ chạy nếu collapsible). */\n toggleExpand: () => void;\n /** Toggle select-all cho cả group (chỉ chạy nếu selector visible). */\n toggleSelect: () => void;\n}\n\n/**\n * Directive cung cấp custom template render group header row trong sd-table.\n * Thay thế cho htmlTemplate callback cũ — cho phép Angular template binding,\n * pipes, components con (sd-badge, sd-button, …) bên trong.\n *\n * Ví dụ:\n * ```html\n * <sd-table [option]=\"opt\">\n * <ng-template sdTableGroupDef let-values=\"values\" let-items=\"items\" let-indeterminate=\"indeterminate\">\n * <b>Khách hàng: {{ values.customerName }}</b>\n * <span>{{ items.length }} đơn hàng</span>\n * </ng-template>\n * </sd-table>\n * ```\n */\n@Directive({ selector: '[sdTableGroupDef]' })\nexport class SdTableGroupDefDirective<T = any> {\n static ngTemplateContextGuard<T>(\n _dir: SdTableGroupDefDirective<T>,\n _ctx: unknown,\n ): _ctx is SdTableGroupDefContext<T> {\n return true;\n }\n templateRef: TemplateRef<SdTableGroupDefContext<T>> = inject(TemplateRef);\n}\n","import { Directive, TemplateRef, inject, input } from '@angular/core';\nimport { SdTableColumn } from '../models/table-column.model';\n\ninterface Context<T = any> {\n column: SdTableColumn<T>;\n}\n\n@Directive({\n selector: '[sdTableTitleDef]',\n})\nexport class SdTableTitleDefDirective<T = any> {\n static ngTemplateContextGuard<T>(_dir: SdTableTitleDefDirective<T>, _ctx: unknown): _ctx is Context<T> {\n return true;\n }\n\n sdTableTitleDef = input.required<string>();\n templateRef: TemplateRef<Context<T>> = inject(TemplateRef);\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { SdTableTitleDefDirective } from '../../directives/sd-table-title-def.directive';\nimport { SdTableColumn } from '../../models/table-column.model';\nimport { NgTemplateOutlet } from '@angular/common';\n\n@Component({\n selector: 'column-title',\n templateUrl: './column-title.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [NgTemplateOutlet],\n})\nexport class ColumnTitleComponent {\n column = input.required<SdTableColumn>();\n titleDef = input<SdTableTitleDefDirective | undefined>(undefined);\n\n templateRef = computed(() => {\n const title = this.column()?.title;\n if (typeof title === 'object') {\n return title?.templateRef || this.titleDef()?.templateRef;\n }\n return this.titleDef()?.templateRef;\n });\n}\n","@let _column = column();\n@let _templateRef = templateRef();\n\n@if (_templateRef) {\n <ng-container *ngTemplateOutlet=\"_templateRef\"></ng-container>\n} @else {\n {{ _column.title }}\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { CommonModule } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n input,\n isSignal,\n model,\n output,\n Signal,\n} from '@angular/core';\nimport { SdBadge } from '@sdcorejs/angular/components/badge';\nimport { SdOperator } from '@sdcorejs/angular/components/operator';\nimport { SdDate, SdInput, SdInputNumber, SdSearch, SdSelect } from '@sdcorejs/angular/forms';\nimport { SdDateRange } from '@sdcorejs/angular/forms/date-range';\nimport { OPERATORS } from '@sdcorejs/utils/constants';\nimport { Operator } from '@sdcorejs/utils/models';\nimport { SdTableColumn } from '../../../models/table-column.model';\n\n@Component({\n selector: 'column-filter',\n templateUrl: './column-filter.component.html',\n styleUrls: ['./column-filter.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [CommonModule, SdOperator, SdInput, SdInputNumber, SdSelect, SdDate, SdDateRange, SdBadge],\n})\nexport class ColumnFilterComponent {\n // ==========================================\n // 1. SIGNAL INPUTS\n // ==========================================\n autoIdInput = input<string | null | undefined>(undefined, { alias: 'autoId' });\n column = input.required<SdTableColumn>();\n columnFilter = input<Record<string, any>>({});\n cacheValues = input<Record<string, any[]> | undefined>(undefined);\n // Parent vẫn truyền `value` vào — giữ input để không phá hợp đồng (template không dùng trực tiếp).\n value = input<any>();\n // 2-way bind từ parent: parent đọc/ghi operator hiện tại của column.\n operator = model<Operator | undefined>(undefined);\n // Khi true (mobile context): gán column.title vào [label] của các control con\n // để parent không phải render <label> riêng. Default false (desktop inline).\n isMobile = input(false, { transform: booleanAttribute });\n\n // ==========================================\n // 2. SIGNAL OUTPUTS\n // ==========================================\n filterChange = output<void>();\n filterCommit = output<void>();\n\n // ==========================================\n // 3. COMPUTED\n // ==========================================\n // autoId final = `${base}-inline-${column.field}`\n autoId = computed(() => {\n const base = this.autoIdInput();\n const field = this.column()?.field ?? '';\n return base ? `${base}-inline-${field}` : '';\n });\n\n // Cho phép parent custom filter qua templateRef (column.filter.filterDef).\n templateRef = computed(() => this.column()?.filter?.filterDef);\n\n // Label cho control con khi isMobile=true. column.title có thể là string hoặc { title, templateRef }.\n // Trả undefined khi không phải mobile → control không hiển thị label (giữ behavior desktop cũ).\n label = computed<string | undefined>(() => {\n if (!this.isMobile()) return undefined;\n const col = this.column();\n const title = col?.title;\n if (!title) return col?.field;\n return typeof title === 'string' ? title : title.title || col?.field;\n });\n\n // Danh sách operator hiển thị dựa trên column config\n operators = computed(() => {\n const col = this.column();\n if (!col?.filter?.disabled && col?.filter?.operator?.enable) {\n return OPERATORS.filter(e => col.filter?.operator?.list?.includes?.(e.value));\n }\n return [];\n });\n\n // Chỉ các Operator value cho phép — truyền vào <sd-operator [operators]>.\n operatorValues = computed(() => this.operators().map(o => o.value));\n\n // Margin wrapper operator: số + đang chọn operator → thêm mb-4 (canh baseline với sd-input-number).\n operatorWrapperClass = computed(() => (this.column()?.type === 'number' && this.operator() ? 'mb-4 mr-2' : 'mr-2'));\n\n // Items cho sd-select khi column type = values / lazy-values\n items = computed<any[] | Signal<any[]> | SdSearch>(() => {\n const col = this.column();\n const cache = this.cacheValues();\n if (col?.type === 'values') {\n const optItems = col.option?.items;\n if (Array.isArray(optItems)) return optItems;\n if (isSignal(optItems)) return optItems as Signal<any[]>;\n return cache?.[col.field] || [];\n }\n if (col?.type === 'lazy-values') {\n return col.option.items;\n }\n return [];\n });\n\n constructor() {\n // Khởi tạo default { from: null, to: null } cho split-date / split-number / daterange.\n // Chạy trước lần render đầu nên template thấy giá trị đã init — không cần markForCheck.\n effect(() => {\n const col = this.column();\n const filter = this.columnFilter();\n if (!col || !filter) return;\n if (col.type === 'date' || col.type === 'time' || col.type === 'datetime') {\n if (col.filter?.type !== 'date') {\n filter[col.field] = filter[col.field] || { from: null, to: null };\n }\n }\n if (col.type === 'number' && col.filter?.type === 'split-number') {\n filter[col.field] = filter[col.field] || { from: null, to: null };\n }\n });\n }\n\n // ==========================================\n // 4. HANDLERS\n // ==========================================\n onFilterChange = () => this.filterChange.emit();\n\n // Blur input: commit giá trị KHÔNG trigger reload.\n onFilterCommit = () => this.filterCommit.emit();\n}\n","@let _column = column();\n@let _columnFilter = columnFilter();\n@let _autoId = autoId();\n@let _templateRef = templateRef();\n@let _operators = operators();\n@let _items = items();\n@let _label = label();\n@let _context = { columnFilter: _columnFilter, autoId: _autoId };\n\n<div class=\"d-flex c-inline-column align-items-end\" style=\"width: 100%; max-width: 100%\">\n @if (\n _column.type === 'string' ||\n _column.type === 'number' ||\n _column.type === 'boolean' ||\n _column.type === 'values' ||\n _column.type === 'lazy-values' ||\n _column.type === 'date' ||\n _column.type === 'datetime' ||\n _column.type === 'time'\n ) {\n <!-- Operator filter -->\n @if (_operators.length) {\n <div class=\"d-flex align-items-center\" [ngClass]=\"operatorWrapperClass()\">\n <sd-operator [(model)]=\"operator\" [operators]=\"operatorValues()\" />\n </div>\n }\n\n <!-- Nếu filter nhận vào template -->\n @if (_templateRef) {\n <ng-container *ngTemplateOutlet=\"_templateRef; context: _context\"></ng-container>\n }\n <!-- Mặc định theo type và giá trị values defined của column -->\n @else {\n @if (_column.type === 'string') {\n <sd-input\n [autoId]=\"_autoId\"\n style=\"flex: 1 1 0%; min-width: 0\"\n size=\"sm\"\n type=\"text\"\n [label]=\"_label\"\n [(model)]=\"_columnFilter[_column.field]\"\n (keyupEnter)=\"onFilterChange()\"\n (sdBlur)=\"onFilterCommit()\"\n (cleared)=\"onFilterChange()\"\n [disabled]=\"_column.filter?.disabled\"\n hideInlineError>\n </sd-input>\n } @else if (_column.type === 'number') {\n @if (!_column.filter?.type) {\n <sd-input-number\n [autoId]=\"_autoId\"\n style=\"flex: 1 1 0%; min-width: 0\"\n size=\"sm\"\n [label]=\"_label\"\n [(model)]=\"_columnFilter[_column.field]\"\n (keyupEnter)=\"onFilterChange()\"\n (sdBlur)=\"onFilterCommit()\"\n (cleared)=\"onFilterChange()\"\n [disabled]=\"_column.filter?.disabled\"\n hideInlineError>\n </sd-input-number>\n } @else if (_column.filter?.type === 'split-number') {\n <ng-container\n *ngTemplateOutlet=\"splitNumberTpl; context: { field: _column.field, disabled: _column.filter?.disabled }\">\n </ng-container>\n }\n } @else if (_column.type === 'boolean') {\n <sd-select\n minWidthPanel=\"200px\"\n [autoId]=\"_autoId\"\n style=\"flex: 1 1 0%; min-width: 0\"\n [style.width]=\"'100%'\"\n size=\"sm\"\n [label]=\"_label\"\n [items]=\"[\n { value: '1', display: _column.option?.displayOnTrue || 'True' },\n { value: '0', display: _column.option?.displayOnFalse || 'False' },\n ]\"\n valueField=\"value\"\n displayField=\"display\"\n [(model)]=\"_columnFilter[_column.field]\"\n (sdChange)=\"onFilterChange()\"\n [disabled]=\"_column.filter?.disabled\"\n hideInlineError>\n <ng-template sdItemDef let-item=\"item\">\n @if (item.value === '1') {\n <sd-badge color=\"success\" [title]=\"_column.option?.displayOnTrue || 'True'\"> </sd-badge>\n } @else {\n <sd-badge color=\"error\" [title]=\"_column.option?.displayOnFalse || 'False'\"> </sd-badge>\n }\n </ng-template>\n </sd-select>\n } @else if (_column.type === 'values') {\n <sd-select\n minWidthPanel=\"200px\"\n [autoId]=\"_autoId\"\n style=\"flex: 1 1 0%; min-width: 0\"\n [style.width]=\"'100%'\"\n size=\"sm\"\n [label]=\"_label\"\n [items]=\"_items\"\n [valueField]=\"_column.option.valueField\"\n [displayField]=\"_column.option.displayField\"\n [(model)]=\"_columnFilter[_column.field]\"\n (sdChange)=\"onFilterChange()\"\n [disabled]=\"_column.filter?.disabled\"\n [multiple]=\"_column.option.selection === 'MULTIPLE'\"\n hideInlineError>\n </sd-select>\n } @else if (_column.type === 'lazy-values') {\n <sd-select\n minWidthPanel=\"200px\"\n [autoId]=\"_autoId\"\n style=\"flex: 1 1 0%; min-width: 0\"\n [style.width]=\"'100%'\"\n size=\"sm\"\n [label]=\"_label\"\n [items]=\"_items\"\n [valueField]=\"_column.option.valueField\"\n [displayField]=\"_column.option.displayField\"\n [(model)]=\"_columnFilter[_column.field]\"\n (sdChange)=\"onFilterChange()\"\n [disabled]=\"_column.filter?.disabled\"\n [multiple]=\"_column.option.selection === 'MULTIPLE'\"\n hideInlineError>\n </sd-select>\n } @else if (_column.type === 'date' || _column.type === 'datetime' || _column.type === 'time') {\n @if (!_column.filter?.type || _column.filter?.type === 'daterange') {\n <sd-date-range\n style=\"flex: 1 1 0%; min-width: 0\"\n size=\"sm\"\n [label]=\"_label\"\n [(model)]=\"_columnFilter[_column.field]\"\n (sdChange)=\"onFilterChange()\"\n [disabled]=\"_column.filter?.disabled\"\n hideInlineError>\n </sd-date-range>\n } @else if (_column.filter?.type === 'date') {\n <sd-date\n [autoId]=\"_autoId\"\n style=\"flex: 1 1 0%; min-width: 0\"\n type=\"date\"\n size=\"sm\"\n [label]=\"_label\"\n [(model)]=\"_columnFilter[_column.field]\"\n (sdChange)=\"onFilterChange()\"\n [disabled]=\"_column.filter?.disabled\"\n hideInlineError>\n </sd-date>\n } @else if (_column.filter?.type === 'split-date') {\n <ng-container\n *ngTemplateOutlet=\"splitDateTpl; context: { field: _column.field, disabled: _column.filter?.disabled }\">\n </ng-container>\n }\n }\n }\n } @else {\n <sd-input [autoId]=\"_autoId\" style=\"flex: 1 1 0%; min-width: 0\" type=\"text\" size=\"sm\" disabled></sd-input>\n }\n</div>\n\n<!-- ================================================ -->\n<!-- Split from/to templates (đưa xuống cuối file) -->\n<!-- ================================================ -->\n<ng-template #splitNumberTpl let-field=\"field\" let-disabled=\"disabled\">\n <div class=\"d-flex align-items-center\" style=\"flex: 1 1 0%; min-width: 0\">\n <sd-input-number\n [autoId]=\"_autoId + '-from'\"\n style=\"flex: 1 1 0%; min-width: 0\"\n size=\"sm\"\n [label]=\"_label\"\n [(model)]=\"_columnFilter[field].from\"\n (sdChange)=\"onFilterChange()\"\n (sdBlur)=\"onFilterCommit()\"\n (cleared)=\"onFilterChange()\"\n [disabled]=\"disabled\"\n hideInlineError>\n </sd-input-number>\n <div class=\"mx-4\">-</div>\n <sd-input-number\n [autoId]=\"_autoId + '-to'\"\n style=\"flex: 1 1 0%; min-width: 0\"\n size=\"sm\"\n [(model)]=\"_columnFilter[field].to\"\n (sdChange)=\"onFilterChange()\"\n (sdBlur)=\"onFilterCommit()\"\n (cleared)=\"onFilterChange()\"\n [disabled]=\"disabled\"\n hideInlineError>\n </sd-input-number>\n </div>\n</ng-template>\n\n<ng-template #splitDateTpl let-field=\"field\" let-disabled=\"disabled\">\n <div class=\"d-flex align-items-center\" style=\"flex: 1 1 0%; min-width: 0\">\n <sd-date\n [autoId]=\"_autoId + '-from'\"\n style=\"flex: 1 1 0%; min-width: 0\"\n type=\"date\"\n size=\"sm\"\n [label]=\"_label\"\n [(model)]=\"_columnFilter[field].from\"\n (sdChange)=\"onFilterChange()\"\n [disabled]=\"disabled\"\n hideInlineError>\n </sd-date>\n <div class=\"mx-4\">-</div>\n <sd-date\n [autoId]=\"_autoId + '-to'\"\n style=\"flex: 1 1 0%; min-width: 0\"\n type=\"date\"\n size=\"sm\"\n [(model)]=\"_columnFilter[field].to\"\n (sdChange)=\"onFilterChange()\"\n [disabled]=\"disabled\"\n hideInlineError>\n </sd-date>\n </div>\n</ng-template>\n","import { Pipe, PipeTransform } from '@angular/core';\n\n// Đối với filter loại values, items có thể là 1 mảng, có thể là 1 hàm, do đó cần xử lý nếu là hàm có thể xử lý gọi API\n@Pipe({\n name: 'filterValues',\n})\nexport class FilterValuesPipe implements PipeTransform {\n constructor() {}\n async transform(items: any[] | (() => Promise<any[]>) | undefined | null): Promise<any[]> {\n if (Array.isArray(items)) {\n return items;\n }\n if (typeof items === 'function') {\n const results = await items();\n if (Array.isArray(results)) {\n return results;\n }\n }\n return [];\n }\n}\n","import { SdTableOptionTree } from '../../models/table-option-tree.model';\nimport { SdTableItem } from '../../models/table-item.model';\n\nexport const getChildrenKey = (option?: SdTableOptionTree): string => option?.childrenKey ?? 'children';\n\nexport const getChildrenFromData = <T>(data: T, option?: SdTableOptionTree): T[] => {\n const key = getChildrenKey(option);\n const raw = (data as Record<string, unknown>)?.[key];\n return Array.isArray(raw) ? (raw as T[]) : [];\n};\n\nexport const resolveDefaultExpanded = (level: number, option?: SdTableOptionTree): boolean => {\n const def = option?.defaultExpanded ?? false;\n if (def === true) return true;\n if (def === false) return false;\n if (typeof def === 'number') return level < def;\n return false;\n};\n\nexport const resolveHasChildren = <T>(row: SdTableItem<T>, option?: SdTableOptionTree): boolean => {\n const embedded = getChildrenFromData(row.data, option);\n if (embedded.length > 0) return true;\n return !!option?.onExpandChildren;\n};\n\nexport const hasLazyChildren = <T>(row: SdTableItem<T>, option?: SdTableOptionTree): boolean => {\n if (!option?.onExpandChildren) return false;\n return getChildrenFromData(row.data, option).length === 0;\n};\n\nexport const flattenTree = <T>(\n roots: SdTableItem<T>[],\n option?: SdTableOptionTree,\n visited: Set<string> = new Set()\n): SdTableItem<T>[] => {\n if (!option) return roots;\n const maxDepth = option.maxDepth;\n const result: SdTableItem<T>[] = [];\n\n const walk = (rows: SdTableItem<T>[], level: number, parentPath: number[]) => {\n rows.forEach((row, siblingIdx) => {\n if (visited.has(row.meta.id)) return;\n visited.add(row.meta.id);\n row.meta.tree ??= { level, hasChildren: false, isExpanded: false };\n row.meta.tree.level = level;\n // why: hierarchical numbering (1, 1.2, 1.2.1, ...) — STT template join('.').\n const indexPath = [...parentPath, siblingIdx + 1];\n row.meta.tree.indexPath = indexPath;\n result.push(row);\n\n const canDescend = row.meta.tree.isExpanded && row.meta.tree.hasChildren;\n const depthOk = maxDepth === undefined || level < maxDepth;\n if (!canDescend || !depthOk) return;\n\n const children = row.meta.tree.childItems ?? [];\n walk(children, level + 1, indexPath);\n });\n };\n\n walk(roots, 0, []);\n return result;\n};\n\n/** Thu thập mọi SdTableItem đã format trong cây (kể cả node đang collapse). */\nexport const collectFormattedTreeRows = <T>(roots: SdTableItem<T>[]): SdTableItem<T>[] => {\n const result: SdTableItem<T>[] = [];\n const walk = (rows: SdTableItem<T>[]) => {\n for (const row of rows) {\n result.push(row);\n const children = row.meta.tree?.childItems;\n if (children?.length) walk(children);\n }\n };\n walk(roots);\n return result;\n};\n\n/** Flatten ALL nodes regardless of expand state — used for export */\nexport const flattenTreeAll = <T>(\n roots: SdTableItem<T>[],\n option?: SdTableOptionTree,\n visited: Set<string> = new Set()\n): SdTableItem<T>[] => {\n if (!option) return roots;\n const maxDepth = option.maxDepth;\n const result: SdTableItem<T>[] = [];\n\n const walk = (rows: SdTableItem<T>[], level: number) => {\n for (const row of rows) {\n if (visited.has(row.meta.id)) continue;\n visited.add(row.meta.id);\n result.push(row);\n const depthOk = maxDepth === undefined || level < maxDepth;\n if (!depthOk) continue;\n const children = row.meta.tree?.childItems ?? [];\n walk(children, level + 1);\n }\n };\n\n walk(roots, 0);\n return result;\n};\n\n/** Flatten raw data tree for export (ignores expand state) */\nexport const flattenDataTree = <T>(roots: T[], option?: SdTableOptionTree, visited: Set<unknown> = new Set()): T[] => {\n if (!option) return roots;\n const maxDepth = option.maxDepth;\n const result: T[] = [];\n\n const walk = (rows: T[], level: number) => {\n for (const row of rows) {\n if (visited.has(row as object)) continue;\n visited.add(row as object);\n result.push(row);\n const depthOk = maxDepth === undefined || level < maxDepth;\n if (!depthOk) continue;\n walk(getChildrenFromData(row, option), level + 1);\n }\n };\n\n walk(roots, 0);\n return result;\n};\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { SdTableOptionTree } from '../models/table-option-tree.model';\nimport { SdTableItem } from '../models/table-item.model';\nimport { flattenTree } from '../services/tree/tree.util';\n\n@Pipe({ name: 'sdTree' })\nexport class SdTreePipe implements PipeTransform {\n transform(items: SdTableItem[], treeOption?: SdTableOptionTree, _revision = 0): SdTableItem[] {\n if (!treeOption) return items;\n return flattenTree(items, treeOption);\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n effect,\n inject,\n input,\n signal,\n untracked,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormGroup } from '@angular/forms';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { SdButton } from '@sdcorejs/angular/components/button';\nimport { SdSection } from '@sdcorejs/angular/components/section';\nimport { SdCheckbox, SdDate, SdDateRange, SdDatetime, SdInput, SdInputNumber, SdSelect } from '@sdcorejs/angular/forms';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\nimport { BrowserUtilities } from '@sdcorejs/utils/fns';\nimport { FilterValuesPipe } from '../../../pipes';\nimport { SdTableExternalFilter, SdTableOptionFilter, TableFilterRegister } from '../../../services/table-filter/table-filter.model';\n\n@Component({\n selector: 'external-filter',\n templateUrl: './external-filter.component.html',\n styleUrls: ['./external-filter.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n CommonModule,\n MatMenuModule,\n MatCheckboxModule,\n SdSection,\n SdInput,\n SdInputNumber,\n SdSelect,\n SdDate,\n SdDatetime,\n SdDateRange,\n SdButton,\n FilterValuesPipe,\n SdCheckbox,\n TranslatePipe,\n ],\n})\n// eslint-disable-next-line @angular-eslint/component-class-suffix\nexport class ExternalFilterComponent {\n // ==========================================\n // 1. SIGNAL INPUTS\n // ==========================================\n autoIdInput = input<string | null | undefined>(undefined, { alias: 'autoId' });\n filter = input<SdTableOptionFilter | undefined>(undefined);\n externalFilters = input<SdTableExternalFilter[] | null | undefined>([]);\n filterRegister = input<TableFilterRegister | undefined>(undefined);\n\n // ==========================================\n // 2. INJECT\n // ==========================================\n readonly #ref = inject(ChangeDetectorRef);\n\n // ==========================================\n // 3. STATE (signals)\n // ==========================================\n externalFilter = signal<Record<string, any>>({});\n inlineExternal = signal<Record<string, boolean>>({});\n filtered = signal<boolean>(false);\n isMobileOrTablet = BrowserUtilities.isMobile();\n // FormGroup là instance, parent đọc qua viewChild — giữ readonly field.\n readonly form = new FormGroup({});\n\n // ==========================================\n // 4. COMPUTED\n // ==========================================\n // autoId base = `<input>-external-` — template ghép tiếp `<field>` cho mỗi control.\n autoId = computed(() => {\n const base = this.autoIdInput();\n return base ? `${base}-external-` : '';\n });\n\n // Layout column: 4 filter/row → 3 cột; mặc định 6 filter/row → 2 cột.\n col = computed<2 | 3>(() => (this.filter()?.externalFilterPerRow === 4 ? 3 : 2));\n\n // Normalize externalFilters về mảng (input có thể null/undefined).\n filterItems = computed(() => this.externalFilters() || []);\n\n constructor() {\n // Subscribe filterRegister observers — re-subscribe khi input đổi, cleanup khi đổi/destroy.\n // QUAN TRỌNG: phải wrap untracked(). Observer có startWith() → emit ĐỒNG BỘ ngay khi\n // subscribe, callback đọc this.externalFilter() (qua #filtered) sẽ bị effect track →\n // externalFilter.set({}) tạo ref mới → effect rerun → resubscribe → loop vô hạn → OOM.\n effect(onCleanup => {\n const register = this.filterRegister();\n if (!register) return;\n\n untracked(() => {\n const cfgSub = register.configuration.observer.subscribe(cfg => {\n this.inlineExternal.set(cfg.inlineExternal || {});\n });\n\n const valSub = register.value.observer.subscribe(val => {\n this.externalFilter.set(val.externalFilter || {});\n this.filtered.set(this.#filtered());\n });\n\n onCleanup(() => {\n cfgSub.unsubscribe();\n valSub.unsubscribe();\n });\n });\n });\n\n // Khi form values đổi → cập nhật filtered. takeUntilDestroyed() tự lấy DestroyRef từ injection context.\n this.form.valueChanges.pipe(takeUntilDestroyed()).subscribe(() => {\n this.filtered.set(this.#filtered());\n this.#ref.markForCheck();\n });\n }\n\n // ==========================================\n // 5. HANDLERS\n // ==========================================\n onKeyupEnter = () => {\n this.onSubmit();\n };\n\n onFilter = (externalFilter: SdTableExternalFilter) => {\n externalFilter?.onChange?.(this.externalFilter()?.[externalFilter.field]);\n // Nếu không phải manual filter thì submit luôn; manual → đợi user bấm nút Search.\n if (!this.filter()?.manualFilter) {\n this.onSubmit();\n }\n };\n\n onSubmit = () => {\n if (this.form.invalid) {\n this.form.markAllAsTouched();\n return;\n }\n this.filterRegister()?.value.set({\n externalFilter: this.externalFilter(),\n });\n };\n\n // Public API — table.component gọi để commit pending value vào filterRegister mà không trigger reload.\n updateFilter = () => {\n this.filterRegister()?.value.set({\n externalFilter: this.externalFilter(),\n notReload: true,\n });\n };\n\n clearFilter = (event?: Event) => {\n event?.stopPropagation();\n this.filterRegister()?.value.remove();\n this.filter()?.onClearFilter?.();\n };\n\n onCheckboxChange = (event: Event, externalFilter: SdTableExternalFilter) => {\n event?.stopPropagation();\n const next = { ...this.inlineExternal() };\n next[externalFilter.field] = !next[externalFilter.field];\n this.inlineExternal.set(next);\n this.filterRegister()?.configuration.set({\n inlineExternal: next,\n });\n };\n\n // ==========================================\n // 6. INTERNAL\n // ==========================================\n #filtered = (): boolean => {\n return Object.values({ ...this.externalFilter() }).some(val => {\n // Mảng có phần tử → coi như có filter\n if (Array.isArray(val)) return !!val.length;\n // Object (date) có from/to → có filter\n if (val && typeof val === 'object') {\n if ('from' in val && !!val.from) return true;\n if ('to' in val && !!val.to) return true;\n return false;\n }\n return val !== undefined && val !== null && val !== '';\n });\n };\n}\n","@let _filter = filter();\n@let _autoId = autoId();\n@let _items = filterItems();\n@let _externalFilter = externalFilter();\n@let _inlineExternal = inlineExternal();\n@let _filtered = filtered();\n@let _col = col();\n\n@if (!_filter?.disabled) {\n @if (!isMobileOrTablet && _items.length) {\n <sd-section\n [hideHeader]=\"_filter?.hideExternalFilterToolbar\"\n icon=\"filter_alt\"\n iconColor=\"secondary\"\n [title]=\"'core.component.table.filter' | translate\"\n collapsable>\n <div class=\"d-flex mr-4\" sdHeaderRight>\n <sd-button\n [autoId]=\"_autoId + 'clear'\"\n [disabled]=\"!_filtered\"\n type=\"link\"\n prefixIcon=\"cleaning_services\"\n [tooltip]=\"'core.component.table.clear-selection' | translate\"\n (click)=\"$event.stopPropagation(); clearFilter($event)\"></sd-button>\n <sd-button\n [autoId]=\"_autoId + 'setting'\"\n type=\"link\"\n prefixIcon=\"settings\"\n [tooltip]=\"'core.component.table.customize' | translate\"\n [matMenuTriggerFor]=\"menu\"\n (click)=\"$event.stopPropagation()\"></sd-button>\n <mat-menu #menu=\"matMenu\" class=\"sd-custom-panel-filter-configuration\" [attr.data-autoid]=\"_autoId + 'setting-menu'\">\n @for (externalFilter of _items; track externalFilter.field) {\n <button\n [attr.data-autoid]=\"_autoId + 'setting-' + externalFilter.field\"\n mat-menu-item\n (click)=\"onCheckboxChange($event, externalFilter)\"\n [disabled]=\"externalFilter.required\">\n <sd-checkbox\n [autoId]=\"_autoId + 'setting-' + externalFilter.field + '-checkbox'\"\n [label]=\"externalFilter.title\"\n [model]=\"_inlineExternal[externalFilter.field]\"\n [disabled]=\"externalFilter.required\" />\n </button>\n }\n </mat-menu>\n </div>\n <div class=\"row mx-0\" style=\"row-gap: 16px\">\n @for (item of _items; track item.field) {\n @if (_inlineExternal[item.field]) {\n <div class=\"col-md-3 col-sm-6 px-8\" [class.col-lg-2]=\"_col === 2\" [class.col-lg-3]=\"_col === 3\">\n @if (item.type === 'string') {\n <sd-input\n [autoId]=\"_autoId + item.field\"\n [label]=\"item.title\"\n type=\"text\"\n [(model)]=\"_externalFilter[item.field]\"\n (keyupEnter)=\"onKeyupEnter()\"\n appearance=\"outline\"\n [form]=\"form\"\n [required]=\"item.required\"\n hideInlineError>\n </sd-input>\n } @else if (item.type === 'number') {\n <sd-input-number\n [autoId]=\"_autoId + item.field\"\n [label]=\"item.title\"\n [(model)]=\"_externalFilter[item.field]\"\n (keyupEnter)=\"onKeyupEnter()\"\n appearance=\"outline\"\n [form]=\"form\"\n [required]=\"item.required\"\n hideInlineError>\n </sd-input-number>\n } @else if (item.type === 'boolean') {\n <sd-select\n [autoId]=\"_autoId + item.field\"\n [label]=\"item.title\"\n [items]=\"[\n { value: true, display: item.option?.displayOnTrue || 'True' },\n { value: false, display: item.option?.displayOnFalse || 'False' },\n ]\"\n valueField=\"value\"\n displayField=\"display\"\n [(model)]=\"_externalFilter[item.field]\"\n (sdChange)=\"onFilter(item)\"\n appearance=\"outline\"\n [form]=\"form\"\n [required]=\"item.required\"\n hideInlineError>\n </sd-select>\n } @else if (item.type === 'date') {\n <sd-date\n [autoId]=\"_autoId + item.field\"\n [label]=\"item.title\"\n [(model)]=\"_externalFilter[item.field]\"\n (sdChange)=\"onFilter(item)\"\n appearance=\"outline\"\n [form]=\"form\"\n [required]=\"item.required\"\n [min]=\"item.minDate\"\n [max]=\"item.maxDate\"\n hideInlineError>\n </sd-date>\n } @else if (item.type === 'datetime') {\n <sd-datetime\n [autoId]=\"_autoId + item.field\"\n [label]=\"item.title\"\n [(model)]=\"_externalFilter[item.field]\"\n (sdChange)=\"onFilter(item)\"\n appearance=\"outline\"\n [form]=\"form\"\n [required]=\"item.required\"\n [min]=\"item.minDate\"\n [max]=\"item.maxDate\"\n hideInlineError>\n </sd-datetime>\n } @else if (item.type === 'daterange') {\n <sd-date-range\n [autoId]=\"_autoId + item.field\"\n [label]=\"item.title\"\n [(model)]=\"_externalFilter[item.field]\"\n (sdChange)=\"onFilter(item)\"\n [form]=\"form\"\n [required]=\"item.required\"\n [min]=\"item.minDate\"\n [max]=\"item.maxDate\"\n appearance=\"outline\"\n hideInlineError>\n </sd-date-range>\n } @else if (item.type === 'values') {\n @if (item.option.selection === 'MULTIPLE') {\n <sd-select\n [autoId]=\"_autoId + item.field\"\n [label]=\"item.title\"\n [items]=\"item.option.items | filterValues | async\"\n [valueField]=\"item.option.valueField\"\n [displayField]=\"item.option.displayField\"\n [(model)]=\"_externalFilter[item.field]\"\n (sdChange)=\"onFilter(item)\"\n appearance=\"outline\"\n multiple\n [form]=\"form\"\n [required]=\"item.required\"\n hideInlineError>\n </sd-select>\n } @else if (item.option.selection === 'AUTOCOMPLETE') {\n <sd-select\n [autoId]=\"_autoId + item.field\"\n [label]=\"item.title\"\n [items]=\"item.option.items | filterValues | async\"\n [valueField]=\"item.option.valueField\"\n [displayField]=\"item.option.displayField\"\n [(model)]=\"_externalFilter[item.field]\"\n (sdChange)=\"onFilter(item)\"\n appearance=\"outline\"\n [form]=\"form\"\n [required]=\"item.required\"\n hideInlineError>\n </sd-select>\n } @else if (item.option.selection === 'MULTIPLEAUTOCOMPLETE') {\n <sd-select\n [autoId]=\"_autoId + item.field\"\n [label]=\"item.title\"\n [items]=\"item.option.items | filterValues | async\"\n [valueField]=\"item.option.valueField\"\n [displayField]=\"item.option.displayField\"\n [(model)]=\"_externalFilter[item.field]\"\n (sdChange)=\"onFilter(item)\"\n appearance=\"outline\"\n multiple\n [form]=\"form\"\n [required]=\"item.required\"\n hideInlineError>\n </sd-select>\n } @else {\n <sd-select\n [autoId]=\"_autoId + item.field\"\n [label]=\"item.title\"\n [items]=\"item.option.items | filterValues | async\"\n [valueField]=\"item.option.valueField\"\n [displayField]=\"item.option.displayField\"\n [(model)]=\"_externalFilter[item.field]\"\n (sdChange)=\"onFilter(item)\"\n appearance=\"outline\"\n [form]=\"form\"\n [required]=\"item.required\"\n hideInlineError>\n </sd-select>\n }\n } @else if (item.type === 'lazy-values') {\n @if (item.option.selection === 'MULTIPLE') {\n <sd-select\n [autoId]=\"_autoId + item.field\"\n [label]=\"item.title\"\n [items]=\"item.option.items\"\n [valueField]=\"item.option.valueField\"\n [displayField]=\"item.option.displayField\"\n [(model)]=\"_externalFilter[item.field]\"\n (sdChange)=\"onFilter(item)\"\n appearance=\"outline\"\n multiple\n [form]=\"form\"\n [required]=\"item.required\"\n hideInlineError>\n </sd-select>\n } @else {\n <sd-select\n [autoId]=\"_autoId + item.field\"\n [label]=\"item.title\"\n [items]=\"item.option.items\"\n [valueField]=\"item.option.valueField\"\n [displayField]=\"item.option.displayField\"\n [(model)]=\"_externalFilter[item.field]\"\n (sdChange)=\"onFilter(item)\"\n appearance=\"outline\"\n [form]=\"form\"\n [required]=\"item.required\"\n hideInlineError>\n </sd-select>\n }\n } @else if (item.type === 'custom' && item.filterDef) {\n <ng-container\n *ngTemplateOutlet=\"\n item.filterDef;\n context: { form: form, externalFilter: _externalFilter, autoId: _autoId + item.field }\n \">\n </ng-container>\n }\n </div>\n }\n }\n </div>\n @if (_filter?.manualFilter) {\n <div class=\"d-flex justify-content-end mt-16 px-8\">\n <sd-button\n [autoId]=\"_autoId + 'submit'\"\n [disabled]=\"form.invalid\"\n type=\"fill\"\n color=\"primary\"\n [title]=\"'core.component.table.search' | translate\"\n prefixIcon=\"filter_alt\"\n (click)=\"onSubmit()\">\n </sd-button>\n </div>\n }\n </sd-section>\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, input, signal, viewChild } from '@angular/core';\nimport { SdButton } from '@sdcorejs/angular/components/button';\nimport { SdSideDrawer } from '@sdcorejs/angular/components/side-drawer';\nimport { SdDate, SdDateRange, SdDatetime, SdInput, SdInputNumber, SdSelect } from '@sdcorejs/angular/forms';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\nimport { Operator } from '@sdcorejs/utils/models';\nimport { SdTableFilterDefDirective } from '../../../directives/sd-table-filter-def.directive';\nimport { SdTableColumn } from '../../../models/table-column.model';\nimport { FilterValuesPipe } from '../../../pipes';\nimport { SdTableExternalFilter, SdTableOptionFilter, TableFilterRegister } from '../../../services/table-filter/table-filter.model';\nimport { ColumnFilterComponent } from '../column-filter/column-filter.component';\n\n/**\n * Mobile-filter — side-drawer chiếm ~90% width thiết bị. Dùng cho table khi\n * render trên màn hình điện thoại (inline filter bị ẩn).\n *\n * Layout (mỗi filter 1 hàng, size='sm'):\n * 1. External filter (render inline — KHÔNG reuse external-filter component\n * vì component đó dùng grid 2/3 cột + có chọn ẩn/hiện không phù hợp mobile).\n * 2. filterDefs — custom templates do app khai báo qua `[sdTableFilterDef]`.\n * 3. Column filter — 1 column-filter / column.\n *\n * State: local working copy. Cancel = đóng (không ghi). Apply = flush vào\n * filterRegister + đóng.\n */\n@Component({\n selector: 'mobile-filter',\n templateUrl: './mobile-filter.component.html',\n styleUrls: ['./mobile-filter.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n CommonModule,\n SdSideDrawer,\n SdButton,\n ColumnFilterComponent,\n SdInput,\n SdInputNumber,\n SdSelect,\n SdDate,\n SdDatetime,\n SdDateRange,\n FilterValuesPipe,\n TranslatePipe,\n ],\n})\nexport class MobileFilterComponent {\n // ==========================================\n // 1. SIGNAL INPUTS\n // ==========================================\n autoIdInput = input<string | null | undefined>(undefined, { alias: 'autoId' });\n filter = input<SdTableOptionFilter | undefined>(undefined);\n externalFilters = input<SdTableExternalFilter[] | null | undefined>([]);\n columns = input<SdTableColumn[] | null | undefined>([]);\n filterDefs = input<readonly SdTableFilterDefDirective[] | null | undefined>([]);\n filterRegister = input<TableFilterRegister | undefined>(undefined);\n cacheValues = input<Record<string, any[]> | undefined>(undefined);\n\n // ==========================================\n // 2. VIEW QUERY\n // ==========================================\n drawer = viewChild.required(SdSideDrawer);\n\n // ==========================================\n // 3. STATE — local working copies; chỉ flush khi Apply.\n // ==========================================\n workingColumnFilter = signal<Record<string, any>>({});\n workingColumnOperator = signal<Record<string, Operator>>({});\n workingExternalFilter = signal<Record<string, any>>({});\n\n // ==========================================\n // 4. COMPUTED\n // ==========================================\n autoId = computed(() => {\n const base = this.autoIdInput();\n return base ? `${base}-mobile-filter-` : '';\n });\n\n externalFilterItems = computed(() => this.externalFilters() || []);\n columnItems = computed(() => this.columns() || []);\n filterDefItems = computed(() => this.filterDefs() || []);\n\n // ==========================================\n // 5. PUBLIC API\n // ==========================================\n open = () => {\n const reg = this.filterRegister();\n const val = reg?.value.get();\n const cloned = (o: any) => (o ? JSON.parse(JSON.stringify(o)) : {});\n this.workingColumnFilter.set(cloned(val?.columnFilter));\n this.workingColumnOperator.set(cloned(val?.columnOperator));\n this.workingExternalFilter.set(cloned(val?.externalFilter));\n this.drawer().open();\n };\n\n close = () => this.drawer().close();\n\n // ==========================================\n // 6. HANDLERS\n // ==========================================\n onApply = () => {\n this.filterRegister()?.value.set({\n columnFilter: this.workingColumnFilter(),\n columnOperator: this.workingColumnOperator(),\n externalFilter: this.workingExternalFilter(),\n });\n this.drawer().close();\n };\n\n onCancel = () => {\n // Local working state — không ghi gì khi cancel, chỉ đóng drawer.\n this.drawer().close();\n };\n}\n","@let _autoId = autoId();\n@let _externalFilters = externalFilterItems();\n@let _columns = columnItems();\n@let _filterDefs = filterDefItems();\n@let _workingColumnFilter = workingColumnFilter();\n@let _workingColumnOperator = workingColumnOperator();\n@let _workingExternalFilter = workingExternalFilter();\n@let _cacheValues = cacheValues();\n\n<sd-side-drawer\n #drawer\n [title]=\"'core.component.table.filter' | translate\"\n width=\"90vw\">\n <div class=\"mobile-filter-body\">\n <!-- ============================ -->\n <!-- 1. External filters (inline) -->\n <!-- ============================ -->\n @if (_externalFilters.length) {\n <section class=\"mobile-filter-section\">\n @for (item of _externalFilters; track item.field) {\n <div class=\"mobile-filter-row\">\n @if (item.type === 'string') {\n <sd-input\n [autoId]=\"_autoId + 'ext-' + item.field\"\n size=\"sm\"\n [label]=\"item.title\"\n type=\"text\"\n [(model)]=\"_workingExternalFilter[item.field]\"\n appearance=\"outline\"\n [required]=\"item.required\"\n hideInlineError>\n </sd-input>\n } @else if (item.type === 'number') {\n <sd-input-number\n [autoId]=\"_autoId + 'ext-' + item.field\"\n size=\"sm\"\n [label]=\"item.title\"\n [(model)]=\"_workingExternalFilter[item.field]\"\n appearance=\"outline\"\n [required]=\"item.required\"\n hideInlineError>\n </sd-input-number>\n } @else if (item.type === 'boolean') {\n <sd-select\n [autoId]=\"_autoId + 'ext-' + item.field\"\n size=\"sm\"\n [label]=\"item.title\"\n [items]=\"[\n { value: true, display: item.option?.displayOnTrue || 'True' },\n { value: false, display: item.option?.displayOnFalse || 'False' },\n ]\"\n valueField=\"value\"\n displayField=\"display\"\n [(model)]=\"_workingExternalFilter[item.field]\"\n appearance=\"outline\"\n [required]=\"item.required\"\n hideInlineError>\n </sd-select>\n } @else if (item.type === 'date') {\n <sd-date\n [autoId]=\"_autoId + 'ext-' + item.field\"\n size=\"sm\"\n [label]=\"item.title\"\n [(model)]=\"_workingExternalFilter[item.field]\"\n appearance=\"outline\"\n [required]=\"item.required\"\n [min]=\"item.minDate\"\n [max]=\"item.maxDate\"\n hideInlineError>\n </sd-date>\n } @else if (item.type === 'datetime') {\n <sd-datetime\n [autoId]=\"_autoId + 'ext-' + item.field\"\n size=\"sm\"\n [label]=\"item.title\"\n [(model)]=\"_workingExternalFilter[item.field]\"\n appearance=\"outline\"\n [required]=\"item.required\"\n [min]=\"item.minDate\"\n [max]=\"item.maxDate\"\n hideInlineError>\n </sd-datetime>\n } @else if (item.type === 'daterange') {\n <sd-date-range\n [autoId]=\"_autoId + 'ext-' + item.field\"\n size=\"sm\"\n [label]=\"item.title\"\n [(model)]=\"_workingExternalFilter[item.field]\"\n [required]=\"item.required\"\n [min]=\"item.minDate\"\n [max]=\"item.maxDate\"\n appearance=\"outline\"\n hideInlineError>\n </sd-date-range>\n } @else if (item.type === 'values') {\n <sd-select\n [autoId]=\"_autoId + 'ext-' + item.field\"\n size=\"sm\"\n [label]=\"item.title\"\n [items]=\"item.option.items | filterValues | async\"\n [valueField]=\"item.option.valueField\"\n [displayField]=\"item.option.displayField\"\n [(model)]=\"_workingExternalFilter[item.field]\"\n appearance=\"outline\"\n [multiple]=\"item.option.selection === 'MULTIPLE' || item.option.selection === 'MULTIPLEAUTOCOMPLETE'\"\n [required]=\"item.required\"\n hideInlineError>\n </sd-select>\n } @else if (item.type === 'lazy-values') {\n <sd-select\n [autoId]=\"_autoId + 'ext-' + item.field\"\n size=\"sm\"\n [label]=\"item.title\"\n [items]=\"item.option.items\"\n [valueField]=\"item.option.valueField\"\n [displayField]=\"item.option.displayField\"\n [(model)]=\"_workingExternalFilter[item.field]\"\n appearance=\"outline\"\n [multiple]=\"item.option.selection === 'MULTIPLE'\"\n [required]=\"item.required\"\n hideInlineError>\n </sd-select>\n } @else if (item.type === 'custom' && item.filterDef) {\n <ng-container\n *ngTemplateOutlet=\"\n item.filterDef;\n context: { externalFilter: _workingExternalFilter, autoId: _autoId + 'ext-' + item.field }\n \">\n </ng-container>\n }\n </div>\n }\n </section>\n }\n\n <!-- ============================ -->\n <!-- 2. Custom filterDef templates -->\n <!-- ============================ -->\n @if (_filterDefs.length) {\n <section class=\"mobile-filter-section\">\n @for (def of _filterDefs; track def.sdTableFilterDef()) {\n <div class=\"mobile-filter-row\" [attr.data-autoid]=\"_autoId + 'def-' + def.sdTableFilterDef()\">\n <ng-container\n *ngTemplateOutlet=\"def.templateRef!; context: { externalFilter: _workingExternalFilter }\">\n </ng-container>\n </div>\n }\n </section>\n }\n\n <!-- ============================ -->\n <!-- 3. Column filters -->\n <!-- ============================ -->\n @if (_columns.length) {\n <section class=\"mobile-filter-section\">\n @for (column of _columns; track column.field) {\n <div class=\"mobile-filter-row\" [attr.data-autoid]=\"_autoId + 'col-' + column.field\">\n <column-filter\n [autoId]=\"_autoId + 'col'\"\n [column]=\"column\"\n [columnFilter]=\"_workingColumnFilter\"\n [operator]=\"$any(_workingColumnOperator[column.field])\"\n (operatorChange)=\"_workingColumnOperator[column.field] = $event!\"\n [cacheValues]=\"_cacheValues\"\n isMobile>\n </column-filter>\n </div>\n }\n </section>\n }\n </div>\n\n <ng-container sdFooter>\n <div class=\"mobile-filter-footer\">\n <sd-button\n [autoId]=\"_autoId + 'cancel'\"\n class=\"mobile-filter-action\"\n (click)=\"onCancel()\"\n [title]=\"'core.confirm.no' | translate\"\n type=\"link\"\n color=\"secondary\">\n </sd-button>\n <sd-button\n [autoId]=\"_autoId + 'apply'\"\n class=\"mobile-filter-action\"\n (click)=\"onApply()\"\n [title]=\"'core.confirm.yes' | translate\"\n type=\"fill\"\n color=\"primary\">\n </sd-button>\n </div>\n </ng-container>\n</sd-side-drawer>\n","import { Pipe, PipeTransform } from '@angular/core';\n// import hash from 'object-hash';\nimport { Utilities } from '@sdcorejs/utils/fns';\nimport { SdTableAction, SdTableActionNormal } from '../../models/table-option-selector.model';\nimport { SdTableItem } from '../../models/table-item.model';\nimport { SdButton } from '@sdcorejs/angular/components/button';\nimport { SdUnwrapSignal } from '@sdcorejs/angular/utilities/models';\n@Pipe({\n name: 'actionFilter',\n})\nexport class ActionFilterPipe implements PipeTransform {\n #convert = (action: SdTableAction): Action => {\n if ('children' in action) {\n return {\n variant: 'children',\n title: action.title,\n icon: action.icon,\n fontSet: action.fontSet,\n tooltip: action.tooltip,\n color: action.color,\n type: action.type,\n children: action.children.map(e => ({\n variant: 'normal',\n title: e.title,\n icon: e.icon,\n color: action.color,\n type: action.type,\n fontSet: e.fontSet,\n tooltip: e.tooltip,\n click: e.click,\n })),\n };\n }\n return {\n variant: 'normal',\n title: action.title,\n icon: action.icon,\n color: action.color,\n type: action.type,\n fontSet: action.fontSet,\n tooltip: action.tooltip,\n click: action.click,\n };\n };\n transform = (selectedItems: SdTableItem[] | undefined, actions: SdTableAction[] | undefined): Action[] => {\n const results: SdTableAction[] = [];\n if (!actions?.length || !selectedItems?.length) {\n return [];\n }\n for (const action of actions || []) {\n if ('children' in action) {\n const children: SdTableActionNormal[] = [];\n for (const childAction of action.children) {\n const key = Utilities.hash(childAction);\n if (selectedItems.every(e => e?.meta?.selector?.actions?.includes(key))) {\n children.push(childAction);\n }\n }\n if (children.length > 0) {\n results.push({ ...action, children });\n }\n } else {\n const key = Utilities.hash(action);\n if (selectedItems.every(e => e?.meta?.selector?.actions?.includes(key))) {\n results.push(action);\n }\n }\n }\n return results.map(result => this.#convert(result));\n };\n}\n\nexport type Action<T = any> = ActionNormal<T> | ActionChildren<T>;\n\ninterface ActionNormal<T = any> {\n variant: 'normal';\n icon?: string;\n fontSet?: SdUnwrapSignal<SdButton['fontSet']>;\n tooltip?: SdUnwrapSignal<SdButton['tooltip']>;\n title?: SdUnwrapSignal<SdButton['title']>;\n color?: SdUnwrapSignal<SdButton['color']>;\n type?: SdUnwrapSignal<SdButton['type']>;\n click: (selectedItems?: T[]) => void;\n}\n\ninterface ActionChildren<T = any> {\n variant: 'children'\n icon?: string;\n fontSet?: SdUnwrapSignal<SdButton['fontSet']>;\n tooltip?: SdUnwrapSignal<SdButton['tooltip']>;\n title?: SdUnwrapSignal<SdButton['title']>;\n color?: SdUnwrapSignal<SdButton['color']>;\n type?: SdUnwrapSignal<SdButton['type']>;\n children: ActionNormal<T>[];\n}\n","import { ChangeDetectionStrategy, Component, computed, inject, input, output } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { SdButton } from '@sdcorejs/angular/components/button';\nimport { I18nService } from '@sdcorejs/angular/i18n';\nimport { SdQuickAction } from '@sdcorejs/angular/components/quick-action';\nimport { SdTableItem } from '../../models/table-item.model';\nimport { SdTableOption } from '../../models/table-option.model';\nimport { Action, ActionFilterPipe } from './action-filter.pipe';\n\n@Component({\n selector: 'selector-action',\n templateUrl: './selector-action.component.html',\n styleUrls: ['./selector-action.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatIconModule, MatMenuModule, SdButton, SdQuickAction, ActionFilterPipe],\n})\nexport class SelectorActionComponent {\n // ==========================================\n // 1. SIGNAL INPUTS / OUTPUTS\n // ==========================================\n tableOption = input<SdTableOption | undefined>(undefined);\n selectedTableItems = input<SdTableItem[] | undefined>(undefined);\n clear = output<void>();\n\n // ==========================================\n // 2. INJECT\n // ==========================================\n readonly #i18n = inject(I18nService);\n\n // ==========================================\n // 3. COMPUTED\n // ==========================================\n message = computed<string>(() => {\n const msg = this.tableOption()?.selector?.message;\n if (!msg) return this.#i18n.t('core.component.table.selector-action.default-msg');\n if (typeof msg === 'function') {\n return msg(this.selectedTableItems()?.map(e => e.data));\n }\n return msg;\n });\n\n opened = computed(() => !!this.selectedTableItems()?.length);\n\n // ==========================================\n // 4. HANDLERS\n // ==========================================\n onClear = () => this.clear.emit();\n\n onClickAction = (action: Action) => {\n if (action?.variant === 'normal' && action.click) {\n action.click(this.selectedTableItems()?.map(e => e.data));\n }\n };\n}\n","@let _actions = selectedTableItems() | actionFilter: tableOption()?.selector?.actions;\n@let _selected = selectedTableItems();\n\n<sd-quick-action [opened]=\"opened()\">\n <div class=\"d-flex align-items-center\" sdMessage>\n <div class=\"c-bg-length\">\n <span class=\"c-length\">{{ _selected?.length }}</span>\n </div>\n <div class=\"c-message\">\n {{ message() }}\n </div>\n </div>\n\n <div class=\"d-flex align-items-center mr-8\" sdAction>\n @for (action of _actions; track $index) {\n @if (action.variant === 'normal') {\n <sd-button\n class=\"ml-4\"\n [tooltip]=\"action.tooltip\"\n [prefixIcon]=\"action.icon\"\n [color]=\"action.color\"\n [type]=\"action.type || 'light'\"\n [fontSet]=\"action.fontSet\"\n [title]=\"action.title\"\n (click)=\"onClickAction(action)\"></sd-button>\n } @else if (action.variant === 'children') {\n <sd-button\n class=\"ml-4\"\n [tooltip]=\"action.tooltip\"\n [prefixIcon]=\"action.icon || 'more_vert'\"\n [color]=\"action.color || 'secondary'\"\n [type]=\"action.type || 'light'\"\n [fontSet]=\"action.fontSet || 'material-icons-outlined'\"\n [title]=\"action.title\"\n [matMenuTriggerFor]=\"menu\">\n </sd-button>\n <mat-menu #menu=\"matMenu\">\n <span>\n @for (child of action.children; track $index) {\n <button mat-menu-item (click)=\"onClickAction(child)\">\n @if (child.icon) {\n <mat-icon [fontSet]=\"child.fontSet || 'material-icons-outlined'\" class=\"c-icon\">{{ child.icon }}</mat-icon>\n }\n <span> {{ child.title }}</span>\n </button>\n }\n </span>\n </mat-menu>\n }\n }\n <!-- Nút close luôn hiện kể cả không có action — đảm bảo user có lối thoát clear selection -->\n <sd-button class=\"ml-4\" prefixIcon=\"close\" color=\"secondary\" type=\"outline\" (click)=\"onClear()\" width=\"35px\"></sd-button>\n </div>\n</sd-quick-action>\n","import { InjectionToken } from '@angular/core';\nimport { SdTableOptionPaginate } from '../models/table-option-paginate.model';\nimport { SdTableOptionFilter } from '../services/table-filter/table-filter.model';\nimport { Operator } from '@sdcorejs/utils/models';\nimport { SdTableColumn } from '../models';\n\nexport interface ISdTableConfiguration {\n paginate?: {\n /** Số dòng mỗi trang. */\n pageSize?: SdTableOptionPaginate['pageSize'];\n\n /** Danh sách các tuỳ chọn số dòng/trang mà người dùng có thể chọn. */\n pages?: SdTableOptionPaginate['pages'];\n\n showFirstLastButtons?: SdTableOptionPaginate['showFirstLastButtons'];\n };\n filter?: {\n /** Ẩn bộ lọc dưới cột, nếu không cấu hình thì giá trị mặc định là false */\n hideInlineFilter?: SdTableOptionFilter['hideInlineFilter'];\n\n /** Số lượng external filter mỗi dòng, mặc định là 6 */\n externalFilterPerRow?: SdTableOptionFilter['externalFilterPerRow'];\n\n /** Kích hoạt chế độ lọc thủ công, hiển thị nút áp dụng, mặc định là false */\n manualFilter?: SdTableOptionFilter['manualFilter'];\n\n /** Ẩn toolbar (xóa bộ lọc, thiết lập) của external filter, khi có ít external filter user không cần chức năng này, mặc định là false */\n hideExternalFilterToolbar?: SdTableOptionFilter['hideExternalFilterToolbar'];\n\n operator?: {\n list?: Partial<Record<SdTableColumn['type'], Operator[]>>;\n default?: Partial<Record<SdTableColumn['type'], Operator>>;\n };\n };\n images?: {\n filterRequired?: string; // Link ảnh cho table ở trạng thái cần nhập filter\n dataEmpty?: string; // Link ảnh cho table ở trạng thái không có dữ liệu\n filterEmpty?: string; // Link ảnh cho table ở trạng thái filter không có dữ liệu\n };\n}\n\nexport const DEFAULT_TABLE_CONFIG: ISdTableConfiguration = {\n paginate: {\n pageSize: 20,\n pages: [20, 50, 100, 200],\n },\n};\n\nexport const SD_TABLE_CONFIGURATION = new InjectionToken<ISdTableConfiguration>('sd-table.configuration');\n","import { Inject, Injectable, Optional } from '@angular/core';\nimport { SdStorage, SdStorageService } from '@sdcorejs/angular/services';\nimport { Subject } from 'rxjs';\nimport { ConfiguredColumn, ConfiguredTable, ConfiguredTableResult } from '../models/table-option-config.model';\nimport { SdTableOption } from '../models/table-option.model';\nimport { ISdTableConfiguration, SD_TABLE_CONFIGURATION } from '../configurations';\nimport { Utilities } from '@sdcorejs/utils/fns';\n\n@Injectable()\nexport class ConfigService {\n #COLUMNS = {\n SUBINFORMATION: 'sdSubInformationAction',\n COMMAND: 'sdCommand',\n SELECTION: 'sdSelection',\n GROUP: 'sdGroup',\n REORDER: 'sdReorder',\n INDEX: 'sdIndex',\n TREE_TOGGLE: 'sdTreeToggle',\n FILLER: 'sdFiller',\n };\n #prefix = 'TABLE_CONFIG';\n #storage?: SdStorage<ConfiguredTable>;\n #widthChange = new Subject<{ field: string; width: string }>();\n widthChange$ = this.#widthChange.asObservable();\n\n constructor(\n private storageService: SdStorageService,\n @Inject(SD_TABLE_CONFIGURATION) @Optional() public tableConfiguration: ISdTableConfiguration\n ) {}\n\n #loadConfiguredTable = (option: SdTableOption): SdStorage<ConfiguredTable> => {\n // Nếu không có key thì không lấy được setting\n if (!option?.key) {\n return this.storageService.create<ConfiguredTable>(Utilities.hash(option), {\n type: 'session', // Nếu không có key thì lưu theo session\n default: this.#default(option),\n });\n }\n // Key của setting là tổ hợp từ key truyền vào và prefix để tránh chung key với các tính năng khác cũng dùng key trong core table\n return this.storageService.create<ConfiguredTable>(\n { prefix: this.#prefix, key: option?.key },\n {\n default: this.#default(option),\n }\n );\n };\n\n loadConfiguredTable = (option: SdTableOption) => {\n // Nếu không có key thì trả về thông tin mặc định\n if (!option?.key) {\n return this.#default(option);\n }\n const storage = this.#loadConfiguredTable(option)!;\n return storage.get();\n };\n\n loadConfigurationResult = (option: SdTableOption, configuration: ConfiguredTable): ConfiguredTableResult => {\n const result: ConfiguredTableResult = {\n column: {},\n fixedColumn: {},\n firstColumns: [],\n secondColumns: [],\n firstHeaders: [],\n secondHeaders: [],\n displayedColumns: [],\n displayedFooters: [],\n multipleHeader: false,\n };\n const { selector, group } = option || {};\n const commands = option?.command?.commands || option?.commands || [];\n const isCommandRight = option?.command?.align === 'right' || false; // 👈 thêm dòng này\n const columns = option?.columns?.filter(e => !e.hidden) || [];\n if (selector?.visible) {\n result.firstHeaders.push(this.#COLUMNS.SELECTION);\n result.displayedColumns.push(this.#COLUMNS.SELECTION);\n }\n if (option.tree) {\n result.firstHeaders.push(this.#COLUMNS.TREE_TOGGLE);\n result.displayedColumns.push(this.#COLUMNS.TREE_TOGGLE);\n }\n // 👇 Chỉ push vào đầu nếu là left (mặc định)\n if (commands?.length && !isCommandRight) {\n result.firstHeaders.push(this.#COLUMNS.COMMAND);\n result.displayedColumns.push(this.#COLUMNS.COMMAND);\n }\n // why: group header row dùng matRowDef RIÊNG với column list ['sdGroupHeader'] qua predicate\n // when:isGroupHeader — KHÔNG inject vào displayedColumns/firstHeaders để tránh colspan trick\n // (TDs khác vẫn render gây overflow row). Data row dùng displayedColumns nguyên vẹn.\n // group option vẫn cần khai báo (qua option.group) để SdGroupPipe biết bucket items.\n // sdIndex đặt sau selector / tree / command-left / group, ngay trước data columns\n if (option.index?.enabled) {\n result.firstHeaders.push(this.#COLUMNS.INDEX);\n result.displayedColumns.push(this.#COLUMNS.INDEX);\n }\n configuration?.columns\n ?.filter(col => !col.invisible)\n .forEach(col => {\n // Kiểm tra column trong config có còn được khai báo trong option\n // Nếu không thì ẩn column đó đi\n const column = columns.find(e => e.field === col.origin.field);\n if (column) {\n const title =\n typeof column.title === 'string' ? col.title || col.origin.title : { ...column.title, title: col.title || col.origin.title };\n const cell = {\n ...column.cell,\n truncate: {\n ...column.cell?.truncate,\n enable: col?.truncate ?? col.origin.truncate,\n type: column?.cell?.truncate?.type ?? 'tooltip',\n },\n };\n\n result.column[col.origin.field] = {\n title: col.title || col.origin.title,\n width: col.width || col.origin.width,\n };\n\n if (col.fixed) {\n result.fixedColumn[col.origin.field] = {\n title: col.title || col.origin.title,\n width: col.width || col.origin.width,\n };\n }\n\n result.firstColumns.push({\n ...column,\n title: title,\n width: col.width || col.origin.width,\n cell: cell,\n });\n result.firstHeaders.push(col.origin.field);\n result.displayedColumns.push(col.origin.field);\n\n if (column.type === 'children') {\n column.children?.forEach(childColumn => {\n result.secondColumns.push(childColumn);\n result.secondHeaders.push(childColumn.field);\n result.displayedColumns.push(childColumn.field);\n });\n }\n }\n });\n // Nếu có thêm các column mới, chèn các column đó vào cuối\n columns\n ?.filter(column => !configuration?.columns?.some(e => e.origin.field === column.field))\n .forEach(column => {\n result.firstColumns.push({\n ...column,\n title: column.title,\n width: column.width,\n });\n result.firstHeaders.push(column.field);\n result.displayedColumns.push(column.field);\n if (column.type === 'children') {\n column.children?.forEach(childColumn => {\n result.secondColumns.push(childColumn);\n result.secondHeaders.push(childColumn.field);\n result.displayedColumns.push(childColumn.field);\n });\n }\n });\n if (option.expand) {\n result.firstHeaders.push(this.#COLUMNS.SUBINFORMATION);\n result.displayedColumns.push(this.#COLUMNS.SUBINFORMATION);\n }\n if (commands?.length && isCommandRight) {\n result.firstHeaders.push(this.#COLUMNS.COMMAND);\n result.displayedColumns.push(this.#COLUMNS.COMMAND);\n }\n // why: filler column ở cuối hấp thụ leftover space — opt-in qua option.filler.enabled.\n // Khi bật, ngăn các cột utility (selection, index, command) bị table-layout auto stretch trên màn rộng.\n if (option.filler?.enabled) {\n result.firstHeaders.push(this.#COLUMNS.FILLER);\n result.displayedColumns.push(this.#COLUMNS.FILLER);\n }\n result.multipleHeader = result.secondHeaders.length > 0;\n // Sub infomation không thể có footer; filler cũng không cần footer cell.\n result.displayedFooters = result.displayedColumns.filter(\n val => val !== this.#COLUMNS.SUBINFORMATION && val !== this.#COLUMNS.TREE_TOGGLE && val !== this.#COLUMNS.FILLER\n );\n if (option.filler?.enabled) {\n // Footer cũng cần filler cuối để giữ width đồng bộ với data row\n result.displayedFooters.push(this.#COLUMNS.FILLER);\n }\n if (option?.rowReorder?.enabled) {\n result.displayedColumns.unshift(this.#COLUMNS.REORDER);\n result.firstHeaders.unshift(this.#COLUMNS.REORDER);\n result.displayedFooters.unshift(this.#COLUMNS.REORDER);\n }\n return result;\n };\n\n init = (tableOption: SdTableOption) => {\n this.#storage = this.#loadConfiguredTable(tableOption);\n return this.#storage;\n };\n\n persistColumnWidth = (field: string, width: string) => {\n if (!this.#storage) return;\n const current = this.#storage.get();\n const columns = current?.columns ? [...current.columns] : [];\n const idx = columns.findIndex(c => c.origin.field === field);\n if (idx < 0) {\n // Cột chưa có trong storage (vd cột mới thêm vào option) — bỏ qua;\n // sẽ được pick up qua flow loadConfigurationResult bình thường.\n return;\n }\n columns[idx] = { ...columns[idx], width };\n this.#storage.setSilent({ ...current, columns });\n this.#widthChange.next({ field, width });\n };\n\n #default = (tableOption: SdTableOption): ConfiguredTable => {\n const columns: ConfiguredColumn[] =\n tableOption?.columns\n ?.filter(e => !e.hidden)\n .map(e => ({\n origin: {\n field: e.field,\n title: typeof e.title === 'string' ? e.title : e.title?.title,\n width: e.width,\n invisible: e.invisible,\n fixed: e.fixed,\n truncate: e?.cell?.truncate?.enable,\n },\n title: typeof e.title === 'string' ? e.title : e.title?.title,\n width: e.width,\n invisible: e.invisible,\n fixed: e.fixed,\n truncate: e?.cell?.truncate?.enable,\n })) || [];\n return {\n columns,\n };\n };\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { DragDropModule, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { CdkTableModule } from '@angular/cdk/table';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectorRef,\n Component,\n inject,\n input,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { fromEvent } from 'rxjs';\nimport { FormsModule } from '@angular/forms';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatTable, MatTableModule } from '@angular/material/table';\nimport { SdButton } from '@sdcorejs/angular/components/button';\nimport { SdModal } from '@sdcorejs/angular/components/modal';\nimport { SdInput, SdSwitch } from '@sdcorejs/angular/forms';\nimport { I18nService, TranslatePipe } from '@sdcorejs/angular/i18n';\nimport { SdStorage } from '@sdcorejs/angular/services';\nimport { SdConfirmService } from '@sdcorejs/angular/services/confirm';\nimport { SdTableColumn } from '../../models/table-column.model';\nimport { ConfiguredTable, ConfiguredTableResult } from '../../models/table-option-config.model';\nimport { SdTableOption } from '../../models/table-option.model';\nimport { ConfigService } from '../../services/config.service';\n\n@Component({\n selector: 'config',\n templateUrl: './config.component.html',\n styleUrls: ['./config.component.scss'],\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n MatTableModule,\n MatSlideToggleModule,\n CdkTableModule,\n DragDropModule,\n SdButton,\n SdInput,\n SdModal,\n SdSwitch,\n TranslatePipe,\n ],\n providers: [ConfigService],\n})\n// eslint-disable-next-line @angular-eslint/component-class-suffix\nexport class ConfigComponent {\n // ==========================================\n // 1. SIGNAL INPUTS / OUTPUTS\n // ==========================================\n tableOption = input<SdTableOption | undefined>(undefined);\n changes = output<ConfiguredTableResult>();\n\n // ==========================================\n // 2. SIGNAL QUERIES\n // ==========================================\n modal = viewChild<SdModal>(SdModal);\n table = viewChild.required<MatTable<SdTableColumn>>(MatTable);\n\n // ==========================================\n // 3. INJECT\n // ==========================================\n readonly #ref = inject(ChangeDetectorRef);\n readonly #confirmService = inject(SdConfirmService);\n readonly #configService = inject(ConfigService);\n readonly #i18n = inject(I18nService);\n\n // ==========================================\n // 4. STATE\n // ==========================================\n configuration = signal<ConfiguredTable | undefined>(undefined);\n // dragDisabled không nên là signal (mutated trong drag handlers, không trigger render).\n dragDisabled = true;\n #setting?: SdStorage<ConfiguredTable>;\n\n // ==========================================\n // 5. WINDOW MOUSEUP — tự destroy qua takeUntilDestroyed (thay @HostListener)\n // ==========================================\n constructor() {\n fromEvent(window, 'mouseup')\n .pipe(takeUntilDestroyed())\n .subscribe(() => {\n this.dragDisabled = true;\n });\n }\n\n // ==========================================\n // 6. PUBLIC API\n // ==========================================\n open = async () => {\n const opt = this.tableOption();\n if (!opt) return;\n this.#setting = this.#configService.init(opt)!;\n this.configuration.set(this.#setting?.get());\n this.modal()?.open();\n };\n\n close = () => {\n this.modal()?.close();\n };\n\n onSave = () => {\n const cfg = this.configuration();\n if (cfg) this.#setting?.set(cfg);\n this.modal()?.close();\n this.#ref.detectChanges();\n };\n\n onReset = async () => {\n this.#confirmService.confirm(this.#i18n.t('core.component.table.config.confirm-reset')).then(() => {\n this.#setting?.remove();\n this.modal()?.close();\n this.#ref.detectChanges();\n });\n };\n\n dropTable(event: any) {\n const cols = this.configuration()?.columns;\n if (!cols) return;\n moveItemInArray(cols, event.previousIndex, event.currentIndex);\n this.table().renderRows();\n }\n\n handleMouseDown() {\n this.dragDisabled = false;\n }\n\n handleMouseUp() {\n this.dragDisabled = true;\n }\n}\n","@let _configuration = configuration();\n\n<sd-modal width=\"sm\" [title]=\"'core.component.table.setup' | translate\" #modal>\n @if (_configuration) {\n <div class=\"c-container\">\n <div class=\"c-table\" style=\"max-height: 70vh\">\n <table\n mat-table\n [dataSource]=\"_configuration.columns!\"\n cdkDropList\n [cdkDropListData]=\"_configuration.columns\"\n (cdkDropListDropped)=\"dropTable($event)\">\n <ng-container matColumnDef=\"invisible\">\n <th mat-header-cell class=\"c-th text-center px-4\" *matHeaderCellDef style=\"width: 96px\">\n {{ 'core.component.form-builder.display' | translate }}\n </th>\n <td class=\"text-center px-4\" mat-cell *matCellDef=\"let item\">\n <div class=\"d-flex\" style=\"gap: 8px\">\n <div class=\"c-handle\" (mousedown)=\"handleMouseDown()\" (mouseup)=\"handleMouseUp()\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#5f6368\">\n <path d=\"M0 0h24v24H0V0z\" fill=\"none\" />\n <path\n d=\"M11 18c0 1.1-.9 2-2 2s-2-.9-2-2 .9-2 2-2 2 .9 2 2zm-2-8c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0-6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm6 4c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z\" />\n </svg>\n </div>\n <sd-switch [model]=\"!item.invisible\" (modelChange)=\"item.invisible = !item.invisible\" />\n </div>\n </td>\n </ng-container>\n <ng-container matColumnDef=\"title\">\n <th mat-header-cell class=\"c-th px-4\" *matHeaderCellDef>\n {{ 'core.component.table.column-header' | translate }}\n </th>\n <td class=\"px-4\" mat-cell *matCellDef=\"let item\">\n <sd-input class=\"pb-4\" [placeholder]=\"item?.origin?.title\" [(model)]=\"item.title\" hideInlineError></sd-input>\n </td>\n </ng-container>\n <ng-container matColumnDef=\"width\">\n <th mat-header-cell class=\"c-th px-4\" *matHeaderCellDef style=\"width: 80px\">\n {{ 'core.component.table.width' | translate }}\n </th>\n <td class=\"px-4\" mat-cell *matCellDef=\"let item\">\n <sd-input class=\"pb-4\" [placeholder]=\"item?.origin?.width\" [(model)]=\"item.width\" hideInlineError></sd-input>\n </td>\n </ng-container>\n <ng-container matColumnDef=\"fixed\">\n <th mat-header-cell class=\"c-th text-center px-4\" *matHeaderCellDef style=\"width: 80px\">\n {{ 'core.component.table.fixed' | translate }}\n </th>\n <td class=\"text-center px-4\" mat-cell *matCellDef=\"let item\">\n <sd-switch [(model)]=\"item.fixed\" />\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"truncate\">\n <th mat-header-cell class=\"c-th text-center px-4\" *matHeaderCellDef style=\"width: 100px\">\n {{ 'core.component.table.char-limit' | translate }}\n </th>\n <td class=\"text-center px-4\" mat-cell *matCellDef=\"let item\">\n <sd-switch [(model)]=\"item.truncate\" />\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"['invisible', 'title', 'width', 'fixed', 'truncate']; sticky: true\"></tr>\n <tr\n mat-row\n *matRowDef=\"let row; columns: ['invisible', 'title', 'width', 'fixed', 'truncate']\"\n cdkDrag\n [cdkDragData]=\"row\"\n cdkDragLockAxis=\"y\"\n [cdkDragDisabled]=\"dragDisabled\">\n </tr>\n </table>\n </div>\n </div>\n }\n <ng-container sdFooter>\n <sd-button class=\"mr-8\" (click)=\"close()\" [title]=\"'core.component.table.skip' | translate\" color=\"secondary\"> </sd-button>\n <sd-button class=\"mr-8\" (click)=\"onReset()\" [title]=\"'core.component.form-builder.default' | translate\" color=\"primary\"> </sd-button>\n <sd-button (click)=\"onSave()\" [title]=\"'core.component.table.apply' | translate\" type=\"fill\" color=\"primary\"> </sd-button>\n </ng-container>\n</sd-modal>\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Pipe,\n PipeTransform,\n computed,\n effect,\n inject,\n input,\n signal,\n viewChild,\n} from '@angular/core';\nimport { SdBadge } from '@sdcorejs/angular/components/badge';\nimport { SdSafeHtmlPipe } from '@sdcorejs/angular/pipes';\nimport { SdTooltipDirective } from '@sdcorejs/angular/directives';\nimport { SdTableColumn } from '../../../models/table-column.model';\nimport { SdTableItem } from '../../../models/table-item.model';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n@Pipe({\n name: 'asString',\n standalone: true,\n})\nexport class ToStringPipe implements PipeTransform {\n transform(value: any): string {\n return value !== null && value !== undefined ? String(value) : '';\n }\n}\n\n@Component({\n selector: 'view',\n templateUrl: './view.component.html',\n styleUrls: ['./view.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [CommonModule, SdBadge, SdSafeHtmlPipe, SdTooltipDirective, ToStringPipe, TranslatePipe],\n})\nexport class ViewComponent {\n // Inject\n #cdr = inject(ChangeDetectorRef);\n\n contentContainer = viewChild<ElementRef<HTMLElement>>('contentContainer');\n\n isCollapsed = signal<boolean>(true);\n isOverflowing = signal<boolean>(false);\n\n // Inputs\n autoId = input.required<string | undefined | null>();\n column = input.required<SdTableColumn>();\n item = input.required<SdTableItem>();\n\n truncateEnable = computed(() => {\n return this.column()?.cell?.truncate?.enable;\n });\n\n truncateWidth = computed(() => {\n return this.column()?.width;\n });\n\n constructor() {\n effect(() => {\n this.truncateWidth();\n const container = this.contentContainer();\n if (container) {\n this.#checkOverflow(container.nativeElement);\n }\n });\n }\n\n #checkOverflow = (element: HTMLElement) => {\n // Ném vào queue để đợi DOM render\n setTimeout(() => {\n const hasOverflow = element.scrollWidth > element.clientWidth || element.scrollHeight > element.clientHeight;\n if (this.isOverflowing() !== hasOverflow) {\n this.isOverflowing.set(hasOverflow);\n this.#cdr.markForCheck();\n }\n });\n };\n\n toggle = () => {\n this.isCollapsed.update(current => !current);\n };\n}\n","@let _column = column();\n@let _item = item();\n@let _autoId = autoId();\n\n@let view = _item.meta.display[_column.field];\n@let _truncateEnable = truncateEnable();\n@let _truncateWidth = truncateWidth();\n@let isExpandByMore = isOverflowing() && _column?.cell?.truncate?.type === 'more';\n@let isExpandByTooltip = isOverflowing() && _column?.cell?.truncate?.type === 'tooltip';\n\n@if (view) {\n @if (view.isHtml) {\n @if (view.click) {\n <div\n #contentContainer\n [attr.data-autoId]=\"autoId()\"\n (click)=\"view.click()\"\n class=\"text-break cursor-pointer\"\n [sdTooltip]=\"view.tooltip || (isExpandByTooltip ? htmlClickTooltip : '')\"\n [style]=\"view.cellStyle\"\n [style.max-width]=\"_truncateWidth\"\n [class.c-ellipsis-html]=\"_truncateEnable\"\n [innerHTML]=\"view.data | sdSafeHtml\"\n aria-hidden=\"true\"></div>\n\n <ng-template #htmlClickTooltip>\n <div\n class=\"c-tooltip-inner-content\"\n [style.max-width]=\"'calc(' + _truncateWidth + ' * 1.5)'\"\n style=\"max-height: 200px; overflow-y: auto; scrollbar-width: thin\">\n <div [innerHTML]=\"view.data | sdSafeHtml\"></div>\n </div>\n </ng-template>\n } @else {\n <!-- Nếu column có bật \"giới hạn ký tự\" -->\n @if (_truncateEnable) {\n <div\n #contentContainer\n [style.max-width]=\"_truncateWidth\"\n [class.c-ellipsis-html]=\"isCollapsed()\"\n [attr.data-autoId]=\"autoId()\"\n class=\"text-break\"\n [sdTooltip]=\"view.tooltip || (isExpandByTooltip ? htmlTooltip : '')\"\n containerClass=\"c-tooltip-html-d374bd93-f136-425c-bcc2-2d88cb163e44\"\n container=\"body\"\n placement=\"bottom\"\n [sdTooltipDelay]=\"100\"\n [style]=\"view.cellStyle\"\n [innerHTML]=\"view.data | sdSafeHtml\"></div>\n\n <ng-template #htmlTooltip>\n <div\n class=\"c-tooltip-inner-content\"\n [style.max-width]=\"'calc(' + _truncateWidth + ' * 1.5)'\"\n style=\"max-height: 200px; overflow-y: auto; scrollbar-width: thin\">\n <div [innerHTML]=\"view.data | sdSafeHtml\"></div>\n </div>\n </ng-template>\n\n @if (isExpandByMore) {\n <button (click)=\"toggle()\" class=\"c-collapse\">{{ isCollapsed() ? ('core.component.form-builder.show-more' | translate) : ('core.component.form-builder.show-less' | translate) }}</button>\n }\n } @else {\n <div\n [attr.data-autoId]=\"autoId()\"\n class=\"text-break\"\n [sdTooltip]=\"view.tooltip || ''\"\n [style]=\"view.cellStyle\"\n [innerHTML]=\"view.data | sdSafeHtml\"></div>\n }\n <!-- End -->\n }\n } @else {\n <!-- Nếu là giá trị lấy hiển thị lấy trực tiếp từ field -->\n @if (view.badge) {\n @if (view.data) {\n <sd-badge\n [attr.data-autoId]=\"autoId()\"\n [type]=\"view.badge.type\"\n [title]=\"view.data\"\n [color]=\"view.badge.color\"\n [icon]=\"view.badge.icon\"\n [sdTooltip]=\"view.tooltip || ''\"\n (click)=\"!!view.click && view.click()\">\n </sd-badge>\n }\n } @else {\n @if (view.click) {\n <div\n #contentContainer\n class=\"text-break\"\n [style]=\"view.cellStyle\"\n [style.max-width]=\"_truncateWidth\"\n [class.c-ellipsis]=\"_truncateEnable\"\n [sdTooltip]=\"view.tooltip || (isExpandByTooltip ? view.data : '') | asString\">\n <a [attr.data-autoId]=\"_autoId\" href=\"javascript:;\" (click)=\"view.click()\">\n {{ view.data }}\n </a>\n </div>\n } @else {\n <!-- Nếu column có bật \"giới hạn ký tự\" -->\n @if (_truncateEnable) {\n <div\n #contentContainer\n [attr.data-autoId]=\"_autoId\"\n class=\"text-break\"\n [style]=\"view.cellStyle\"\n [style.max-width]=\"_truncateWidth\"\n [class.c-ellipsis]=\"isCollapsed()\"\n [sdTooltip]=\"view.tooltip || (isExpandByTooltip ? view.data : '') | asString\">\n {{ view.data }}\n </div>\n\n <!-- Nếu option xem full thông tin là \"btn xem thêm\" -->\n @if (isExpandByMore) {\n <button (click)=\"toggle()\" class=\"c-collapse\">{{ isCollapsed() ? ('core.component.form-builder.show-more' | translate) : ('core.component.form-builder.show-less' | translate) }}</button>\n }\n } @else {\n <div [attr.data-autoId]=\"_autoId\" class=\"text-break\" [style]=\"view.cellStyle\" [sdTooltip]=\"view.tooltip || ''\">\n {{ view.data }}\n </div>\n }\n <!-- End -->\n }\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n input,\n signal,\n TemplateRef,\n viewChild,\n computed,\n effect,\n inject,\n ChangeDetectorRef,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SdTableCellDefDirective } from '../../directives/sd-table-cell-def.directive';\nimport { SdTableColumn } from '../../models/table-column.model';\nimport { SdTableItem } from '../../models/table-item.model';\nimport { SdTooltipDirective } from '@sdcorejs/angular/directives';\nimport { Utilities } from '@sdcorejs/utils/fns';\nimport { ViewComponent } from './view/view.component';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n\n@Component({\n selector: 'desktop-cell',\n templateUrl: './desktop-cell.component.html',\n styleUrls: ['./desktop-cell.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [CommonModule, SdTooltipDirective, ViewComponent, TranslatePipe],\n})\nexport class DesktopCellComponent {\n // Inject\n #cdr = inject(ChangeDetectorRef);\n\n // ViewChild\n contentContainer = viewChild<ElementRef<HTMLElement>>('contentContainer');\n\n // Inputs\n column = input.required<SdTableColumn>();\n item = input.required<SdTableItem>();\n cellDef = input.required<Record<string, SdTableCellDefDirective>>({});\n\n value = computed(() => {\n return Utilities.getNestedValue(this.item()?.data, this.column()?.field);\n });\n\n key = computed(() => {\n const data = this.item()?.data;\n return data?.id?.toString() || data?.code?.toString() || data?.value?.toString() || '';\n });\n\n autoId = computed(() => {\n const column = this.column();\n const key = this.key();\n return `${key}_${column.field}`;\n });\n\n truncateEnable = computed(() => {\n return this.column()?.cell?.truncate?.enable;\n });\n\n truncateWidth = computed(() => {\n return this.column()?.width;\n });\n\n // why: widen to TemplateRef<any> so ng-packagr doesn't try to surface the\n // directive's internal Context type through this public computed.\n templateRef = computed<TemplateRef<any> | undefined>(() => {\n const cellDef = this.cellDef();\n const column = this.column();\n return cellDef[column?.field]?.templateRef || column?.cell?.templateRef;\n });\n\n isCollapsed = signal<boolean>(true);\n isOverflowing = signal<boolean>(false);\n\n constructor() {\n effect(() => {\n this.truncateWidth();\n const container = this.contentContainer();\n if (container) {\n this.#checkOverflow(container.nativeElement);\n }\n });\n }\n\n toggle = () => {\n this.isCollapsed.update(current => !current);\n };\n\n #checkOverflow = (element: HTMLElement): void => {\n // Ném vào queue để đợi DOM render\n setTimeout(() => {\n const hasOverflow = element.scrollWidth > element.clientWidth || element.scrollHeight > element.clientHeight;\n if (this.isOverflowing() !== hasOverflow) {\n this.isOverflowing.set(hasOverflow);\n this.#cdr.markForCheck();\n }\n });\n };\n}\n","@let _column = column();\n@let _item = item();\n@let _autoId = autoId();\n\n@let _truncateEnable = truncateEnable();\n@let _truncateWidth = truncateWidth();\n@let isExpandByMore = isOverflowing() && _column?.cell?.truncate?.type === 'more';\n@let isExpandByTooltip = isOverflowing() && _column?.cell?.truncate?.type === 'tooltip';\n\n@let _templateRef = templateRef();\n@let context =\n {\n item: _item.data,\n column: _column,\n autoId: _autoId,\n };\n\n@if (_templateRef) {\n <!-- Nếu column có bật \"giới hạn ký tự\" -->\n @if (_truncateEnable) {\n <div\n #contentContainer\n [style.max-width]=\"_truncateWidth\"\n [class.c-ellipsis-html]=\"isCollapsed()\"\n [sdTooltip]=\"isExpandByTooltip ? htmlTooltip : ''\">\n <ng-container *ngTemplateOutlet=\"_templateRef; context: context\" />\n </div>\n\n <!-- Nếu option xem full thông tin là \"tooltip\" -->\n <ng-template #htmlTooltip>\n <div\n [style.max-width]=\"'calc(' + _truncateWidth + ' * 1.5)'\"\n style=\"max-height: 200px; overflow-y: auto; scrollbar-width: thin\">\n <ng-container *ngTemplateOutlet=\"_templateRef; context: context\" />\n </div>\n </ng-template>\n\n <!-- Nếu option xem full thông tin là \"btn xem thêm\" -->\n @if (isExpandByMore) {\n <button (click)=\"toggle()\" class=\"c-collapse\">\n {{ isCollapsed() ? ('core.component.form-builder.show-more' | translate) : ('core.component.form-builder.show-less' | translate) }}\n </button>\n }\n } @else {\n <ng-container *ngTemplateOutlet=\"_templateRef; context: context\" />\n }\n} @else {\n <view [column]=\"column()\" [item]=\"item()\" [autoId]=\"context.autoId\" />\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { SdTableCommand, SdTableCommandNormal } from '../../../models/table-command.model';\nimport { SdTableItem } from '../../../models/table-item.model';\n\n/**\n * Pipe gộp resolve metadata của 1 command theo row hiện tại — return 1 object\n * chứa `disabled`, `title`, `icon`, và `htmlTemplate` (khi command là child có\n * htmlTemplate). Một lần gọi cho cả 4 truy vấn, template dùng `@let` để alias.\n *\n * Trước đây tách thành 3 pipe `commandDisable` / `commandTitle` / `commandIcon`.\n *\n * @example\n * @let meta = item | command:cmd;\n * <button [disabled]=\"meta.disabled\" [matTooltip]=\"meta.title\">\n * <mat-icon>{{ meta.icon }}</mat-icon>\n * <div [innerHTML]=\"meta.htmlTemplate\"></div>\n * </button>\n */\n@Pipe({ name: 'command' })\nexport class CommandPipe implements PipeTransform {\n transform(item: SdTableItem, command: SdTableCommand): CommandMeta {\n return {\n disabled: this.#disabled(item, command),\n title: this.#title(item, command),\n icon: this.#icon(item, command),\n htmlTemplate: this.#htmlTemplate(item, command),\n };\n }\n\n #disabled = (item: SdTableItem, command: SdTableCommand): boolean => {\n const d = command?.disabled;\n if (d == null) return false;\n return typeof d === 'boolean' ? d : d(item.data);\n };\n\n #title = (item: SdTableItem, command: SdTableCommand): string => {\n if (!command?.title) return '';\n return typeof command.title === 'string' ? command.title : command.title(item.data);\n };\n\n #icon = (item: SdTableItem, command: SdTableCommand): string => {\n if (!command?.icon) return '';\n return typeof command.icon === 'string' ? command.icon : command.icon(item.data);\n };\n\n // Chỉ child command (SdTableCommandNormal) mới có htmlTemplate.\n // Parent (SdTableCommandChildren) không khai báo — trả về undefined.\n #htmlTemplate = (item: SdTableItem, command: SdTableCommand): string | undefined => {\n const tpl = (command as SdTableCommandNormal)?.htmlTemplate;\n return typeof tpl === 'function' ? tpl(item.data) : undefined;\n };\n}\n\nexport interface CommandMeta {\n disabled: boolean;\n title: string;\n icon: string;\n htmlTemplate: string | undefined;\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { StringUtilities } from '@sdcorejs/angular/utilities';\nimport { SdTableCommand, SdTableCommandChildren, SdTableCommandNormal } from '../../../models/table-command.model';\nimport { SdTableItem } from '../../../models/table-item.model';\n\n/**\n * Lọc danh sách commands theo `hidden` (sync / async) + pre-resolve `icon`, `title`, `key`\n * cho từng row. Output dùng trực tiếp trong template không cần thêm pipe phụ.\n *\n * Đã rename từ `commandFilter` → `filter` sau khi gom toàn bộ pipe command vào\n * `components/command/pipes/`.\n *\n * @example\n * @let filteredCommands = item | filter:commands | async;\n */\n@Pipe({ name: 'filter' })\nexport class CommandFilterPipe implements PipeTransform {\n async transform(item: SdTableItem, commands: SdTableCommand[]): Promise<Command[]> {\n const results: Command[] = [];\n if (!commands) return results;\n\n for (const command of commands) {\n if (!(await this.#visible(item, command))) continue;\n\n const icon = this.#icon(item, command);\n const title = this.#title(item, command);\n\n if ('children' in command) {\n const children: CommandNormal[] = [];\n for (const child of command.children) {\n if (!(await this.#visible(item, child))) continue;\n children.push({\n ...child,\n type: 'normal',\n icon: this.#icon(item, child),\n title: this.#title(item, child),\n key: this.#key(item, child),\n });\n }\n if (children.length > 0) {\n results.push({\n ...command,\n type: 'children',\n icon,\n title,\n key: this.#key(item, command),\n children,\n });\n }\n } else {\n results.push({\n ...command,\n type: 'normal',\n icon,\n title,\n key: this.#key(item, command),\n });\n }\n }\n return results;\n }\n\n #visible = async (item: SdTableItem, command: SdTableCommand): Promise<boolean> => {\n const { hidden } = command;\n if (hidden === undefined) return true;\n if (typeof hidden === 'boolean') return !hidden;\n const result = hidden(item.data);\n return !(result instanceof Promise ? await result : result);\n };\n\n #icon = (item: SdTableItem, command: SdTableCommand): string => {\n if (!command?.icon) return 'more_vert';\n return typeof command.icon === 'string' ? command.icon : command.icon(item.data);\n };\n\n #title = (item: SdTableItem, command: SdTableCommand): string => {\n if (!command?.title) return '';\n return typeof command.title === 'string' ? command.title : command.title(item.data);\n };\n\n // Key dùng để gán cho autoId — cần stable theo (icon, title).\n #key = (item: SdTableItem, command: SdTableCommand): string => {\n const icon = this.#icon(item, command);\n const title = this.#title(item, command);\n return `${icon || 'noicon'}-${StringUtilities.changeAliasLowerCase(title) || 'notitle'}`;\n };\n}\n\ntype Command<T = any> = CommandNormal<T> | CommandChildren<T>;\n\ninterface CommandNormal<T = any> extends SdTableCommandNormal<T> {\n type: 'normal';\n key: string;\n title: string;\n icon: string;\n}\n\ninterface CommandChildren<T = any> extends SdTableCommandChildren<T> {\n type: 'children';\n key: string;\n title: string;\n icon: string;\n children: CommandNormal<T>[];\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { SdTableCommand } from '../../models/table-command.model';\nimport { SdTableItem } from '../../models/table-item.model';\nimport { CommandPipe } from './pipes/command.pipe';\nimport { CommandFilterPipe } from './pipes/filter.pipe';\n\n@Component({\n selector: 'desktop-command',\n templateUrl: './desktop-command.component.html',\n styleUrls: ['./desktop-command.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n host: {\n '[attr.data-autoid]': 'autoId()',\n },\n imports: [CommonModule, MatTooltipModule, MatMenuModule, MatButtonModule, MatIconModule, CommandPipe, CommandFilterPipe],\n})\n// eslint-disable-next-line @angular-eslint/component-class-suffix\nexport class DesktopCommand {\n // ==========================================\n // 1. SIGNAL INPUTS\n // ==========================================\n autoIdInput = input<string | null | undefined>(undefined, { alias: 'autoId' });\n item = input.required<SdTableItem>();\n itemIndex = input.required<number>();\n commands = input<SdTableCommand[] | null | undefined>([]);\n\n // ==========================================\n // 2. COMPUTED\n // ==========================================\n // Key định danh row dùng để build autoId: ưu tiên id → code → value → fallback itemIndex.\n itemKey = computed(() => {\n const data = this.item()?.data as Record<string, unknown> | undefined;\n return data?.['id']?.toString() || data?.['code']?.toString() || data?.['value']?.toString() || this.itemIndex().toString();\n });\n\n // autoId của host: `<base>-command-<itemKey>` — đã unique theo row.\n // Template ghép tiếp `-<commandKey>` (và `-<childKey>` nếu child) cho mỗi button.\n autoId = computed(() => {\n const base = this.autoIdInput();\n return base ? `${base}-command-${this.itemKey()}` : '';\n });\n\n // Commands signal (mặc định mảng rỗng).\n _commands = computed(() => this.commands() || []);\n}\n","@let _autoId = autoId();\n@let _item = item();\n@let filteredCommands = _item | filter: _commands() | async;\n\n@if (filteredCommands?.length) {\n @for (command of filteredCommands; track command.key) {\n @let _meta = _item | command: command;\n @if (command.type === 'normal') {\n <button\n [attr.data-autoid]=\"_autoId + '-' + command.key\"\n (click)=\"command.click(_item.data)\"\n [matTooltip]=\"_meta.title\"\n aria-hidden=\"true\"\n [disabled]=\"_meta.disabled\"\n mat-icon-button>\n <mat-icon class=\"c-icon\" [color]=\"command.color || 'secondary'\" [fontSet]=\"command.fontSet!\">\n {{ _meta.icon }}\n </mat-icon>\n </button>\n } @else {\n <button\n [attr.data-autoid]=\"_autoId + '-' + command.key\"\n [matMenuTriggerFor]=\"menu\"\n aria-hidden=\"true\"\n mat-icon-button>\n @if (_meta.icon) {\n <mat-icon class=\"c-icon\" [fontSet]=\"command.fontSet!\">{{ _meta.icon }}</mat-icon>\n } @else {\n <mat-icon class=\"c-icon\">more_vert</mat-icon>\n }\n </button>\n <mat-menu #menu=\"matMenu\" [attr.data-autoid]=\"_autoId + '-' + command.key + '-menu'\">\n <span>\n @for (childCommand of command.children; track childCommand.key) {\n @let _childMeta = _item | command: childCommand;\n <button\n [attr.data-autoid]=\"_autoId + '-' + command.key + '-' + childCommand.key\"\n mat-menu-item\n (click)=\"childCommand.click(_item.data)\"\n [disabled]=\"_childMeta.disabled\">\n @if (_childMeta.htmlTemplate) {\n <div [innerHTML]=\"_childMeta.htmlTemplate\"></div>\n } @else {\n <div>\n <mat-icon [color]=\"childCommand.color || 'secondary'\" [fontSet]=\"command.fontSet!\">\n {{ _childMeta.icon }}\n </mat-icon>\n <span> {{ _childMeta.title }}</span>\n </div>\n }\n </button>\n }\n </span>\n </mat-menu>\n }\n }\n}\n","/* eslint-disable @angular-eslint/no-input-rename */\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output, ViewChild, inject } from '@angular/core';\nimport { I18nService } from '@sdcorejs/angular/i18n';\n\nimport { CommonModule } from '@angular/common';\nimport { FormGroup } from '@angular/forms';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatSelectionList } from '@angular/material/list';\nimport { MatTableModule } from '@angular/material/table';\nimport { SdButton } from '@sdcorejs/angular/components/button';\nimport { SdModal } from '@sdcorejs/angular/components/modal';\nimport { SdInput } from '@sdcorejs/angular/forms';\nimport { SdConfirmService, SdExcelColumn, SdExcelService, SdLoadingService, SdNotifyService } from '@sdcorejs/angular/services';\n// import hash from 'object-hash';\nimport { SdTableColumn, SdTableOption } from '../../models';\nimport { ConfiguredTableResult } from '../../models/table-option-config.model';\nimport { SdTableOptionExportDefault } from '../../models/table-option-export.model';\nimport { Utilities } from '@sdcorejs/utils/fns';\nimport { SdExcelSheet } from '@sdcorejs/angular/services/excel';\n\n@Component({\n selector: 'sd-popup-export',\n templateUrl: './popup-export.component.html',\n styleUrls: ['./popup-export.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [CommonModule, MatTableModule, MatIconModule, MatChipsModule, SdButton, SdInput, SdModal],\n})\n// eslint-disable-next-line @angular-eslint/component-class-suffix\nexport class SdPopupExport {\n tableOption!: SdTableOption;\n columns: SdExcelColumn[] = [];\n templateName?: string | null;\n enableCreating = false;\n @ViewChild('modal') modal?: SdModal;\n @ViewChild('listGroups') listGroups?: MatSelectionList;\n\n selected: Record<string, boolean> = {};\n files: any[] = [];\n\n @Output() export = new EventEmitter<{\n file: any | null;\n columns: SdExcelColumn[];\n isCSV?: boolean;\n }>();\n form = new FormGroup({});\n\n exportOption?: SdTableOptionExportDefault;\n @Input('tableOption') set _tableOption(option: SdTableOption) {\n this.tableOption = option;\n if (option.export?.type === 'default') {\n this.exportOption = option.export;\n }\n this.columns = this.#getExportableColumns();\n }\n @Input() configuration?: ConfiguredTableResult;\n private get key(): string | null {\n const prefix = '93889e78-f971-4a1d-8c73-fe2321af9233';\n if (!this.exportOption?.key) {\n return null;\n }\n return Utilities.hash({\n prefix,\n key: this.exportOption?.key,\n });\n }\n\n private get tableColumns() {\n const columns: SdExcelColumn[] = [];\n this.tableOption.columns\n .filter(e => !e.export?.disabled)\n .forEach(column => {\n if (column.type === 'children') {\n column.children\n ?.filter(e => !e.export?.disabled)\n .forEach(childColumn => {\n columns.push({\n title: typeof childColumn.title === 'string' ? childColumn.title : childColumn.title?.title,\n field: childColumn.field,\n width: childColumn.width,\n });\n });\n return;\n }\n columns.push({\n title: typeof column.title === 'string' ? column.title : column.title?.title,\n field: column.field,\n width: column.width,\n });\n });\n return columns.map(e => ({\n field: e.field,\n title: e.title,\n description: e.description,\n width: e.width,\n }));\n }\n private get additionalColumns() {\n return (this.exportOption?.columns?.filter(e => !e.export?.disabled) || []).map(e => ({\n field: e.field,\n title: e.title,\n description: e.description,\n width: e.width,\n }));\n }\n\n #getExportableColumns = (): SdExcelColumn[] => {\n return [...this.tableColumns, ...this.additionalColumns];\n };\n\n readonly #i18n = inject(I18nService);\n constructor(\n private ref: ChangeDetectorRef,\n private loadingService: SdLoadingService,\n private excelService: SdExcelService,\n private notifyService: SdNotifyService,\n private confirmService: SdConfirmService\n ) {}\n\n open = async () => {\n if (!this.key) {\n this.exportDefault();\n return;\n }\n this.loadFiles();\n this.selected = {};\n this.modal?.open();\n this.ref.detectChanges();\n };\n\n #getExportColumns = (): SdExcelColumn[] => {\n if (this.configuration) {\n const columns = [...this.tableColumns];\n const { firstColumns, secondColumns } = this.configuration;\n const displayColumns: SdTableColumn[] = [...firstColumns, ...secondColumns].reduce<SdTableColumn[]>((first, next) => {\n const column = this.tableOption.columns.find(e => e.field === next.field);\n if (!column) {\n return first;\n }\n if (column.type !== 'children') {\n return [...first, column];\n }\n return [...first, ...column.children];\n }, []);\n const results = displayColumns\n .map(e => ({\n ...e,\n data: columns.find(e1 => e1.field === e.field),\n }))\n .filter(e => !!e.data)\n .map(e => e.data!);\n return [...results, ...this.additionalColumns];\n } else {\n return this.columns;\n }\n };\n\n exportDefault = () => {\n this.export.emit({\n file: null,\n columns: this.#getExportColumns(),\n isCSV: false,\n });\n };\n\n exportCSV = () => {\n this.export.emit({\n file: null,\n columns: this.#getExportColumns(),\n isCSV: true,\n });\n };\n\n loadFiles = async (group: string | undefined = undefined) => {\n // TODO: Fix\n // this.files = await this.exportService.filesInFolder({\n // key: this.key!,\n // group,\n // });\n // this.ref.markForCheck();\n };\n\n #initTemplate = async (fileName?: string) => {\n const sheets: SdExcelSheet[] = [];\n if (Array.isArray(this.exportOption?.sheets)) {\n for (const sheet of this.exportOption.sheets) {\n if (sheet.name && sheet.items && sheet.headers) {\n if (Array.isArray(sheet.items)) {\n sheets.push({\n name: sheet.name,\n items: sheet.items,\n headers: sheet.headers,\n });\n } else {\n sheets.push({\n name: sheet.name,\n items: await sheet.items(),\n headers: sheet.headers,\n });\n }\n }\n }\n }\n return await this.excelService.generateTemplate({\n fileName: fileName || this.exportOption?.fileName,\n columns: this.columns,\n sheets,\n });\n };\n\n generateTemplate = async () => {\n this.loadingService.start();\n await this.#initTemplate().finally(this.loadingService.stop);\n };\n\n generateAndUploadTemplate = async (fileName?: string) => {\n const sheets: SdExcelSheet[] = [];\n if (Array.isArray(this.exportOption?.sheets)) {\n for (const sheet of this.exportOption?.sheets) {\n if (sheet.name && sheet.items && sheet.headers) {\n if (Array.isArray(sheet.items)) {\n sheets.push({\n name: sheet.name,\n items: sheet.items,\n headers: sheet.headers,\n });\n } else {\n sheets.push({\n name: sheet.name,\n items: await sheet.items(),\n headers: sheet.headers,\n });\n }\n }\n }\n }\n // TODO: Fix\n // return await this.exportService.generateUploadTemplate({\n // key: this.key!,\n // template: {\n // fileName: fileName || this.tableOption?.export?.fileName,\n // columns: this.columns.filter(e => this.selected[e.field]),\n // sheets,\n // },\n // });\n };\n\n onExport = (file: any) => {\n this.export.emit({\n file,\n columns: this.columns,\n });\n this.ref.detectChanges();\n };\n\n uploadTemplate = async () => {\n // TODO: Fix\n // const file = await this.exportService.uploadTemplate({\n // key: this.key!,\n // });\n // if (file) {\n // this.files = [...this.files, file];\n // this.ref.detectChanges();\n // }\n };\n\n removeFile = (file: any) => {\n this.confirmService.confirm('Remove template').then(() => {\n // TODO: Fix\n // this.exportService.removeFile({\n // key: this.key!,\n // fileName: file.fileName,\n // });\n const idx = this.files.indexOf(file);\n this.files.splice(idx, 1);\n this.files = [...this.files];\n this.ref.detectChanges();\n });\n };\n\n createTemplate = async () => {\n if (this.form.invalid) {\n this.form.markAllAsTouched();\n return;\n }\n if (!this.columns.some(e => this.selected[e.field])) {\n this.notifyService.warning(this.#i18n.t('core.component.table.popup-export.select-columns'));\n return;\n }\n this.loadingService.start();\n const fileName = this.templateName + '.xlsx';\n try {\n const result = await this.generateAndUploadTemplate(fileName);\n // TODO: Fix\n // if (result?.filePath) {\n // const file: SdExportFile = {\n // filePath: result.filePath,\n // fileName: result.fileName,\n // };\n // this.onExport(file);\n // this.templateName = null;\n // this.enableCreating = false;\n // this.files = [...this.files, file];\n // this.ref.detectChanges();\n // }\n } finally {\n this.loadingService.stop();\n }\n };\n\n templateNameValidator = (val: string): string => {\n const regex = /^[A-Za-z0-9 _]*[A-Za-z0-9][A-Za-z0-9 _]*$/;\n if (!val) {\n return 'Please enter your template name';\n }\n if (val.length > 50) {\n return 'Template name is too long';\n }\n if (!regex.test(val)) {\n return 'Template name only contains letters, numbers and spaces';\n }\n return '';\n };\n}\n","<sd-modal width=\"907px\" [title]=\"'Exported template'\" #modal>\n <div class=\"row\">\n <div *ngIf=\"!files?.length\" class=\"col-12\">\n <div class=\"c-empty\">\n <img class=\"sd-image-data-empty\" alt=\"empty-image\" />\n <div class=\"T14R\">{{ 'There are no exported templates' }}</div>\n </div>\n </div>\n <ng-container *ngIf=\"files?.length\">\n <div class=\"col-12\">\n <div class=\"c-table\" style=\"max-height: 50vh\">\n <table mat-table [dataSource]=\"files\">\n <ng-container matColumnDef=\"stt\">\n <th mat-header-cell class=\"c-th text-center px-5\" *matHeaderCellDef style=\"width: 50px\">#</th>\n <td class=\"text-center px-5\" mat-cell *matCellDef=\"let item; let idx = index\">\n {{ idx + 1 }}\n </td>\n </ng-container>\n <ng-container matColumnDef=\"fileName\">\n <th mat-header-cell class=\"c-th px-5\" *matHeaderCellDef>\n {{ 'File name' }}\n </th>\n <td class=\"px-5\" mat-cell *matCellDef=\"let item\">\n {{ item.fileName }}\n </td>\n </ng-container>\n <ng-container matColumnDef=\"action\">\n <th mat-header-cell class=\"c-th px-5\" *matHeaderCellDef style=\"width: 80px\"></th>\n <td class=\"px-5\" mat-cell *matCellDef=\"let item\">\n <div class=\"d-flex\">\n <button mat-icon-button aria-label=\"delete\" (click)=\"removeFile(item)\">\n <mat-icon>delete</mat-icon>\n </button>\n <button mat-icon-button aria-label=\"download\" (click)=\"onExport(item)\">\n <mat-icon>download</mat-icon>\n </button>\n </div>\n </td>\n </ng-container>\n <tr mat-header-row *matHeaderRowDef=\"['stt', 'fileName', 'action']; sticky: true\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: ['stt', 'fileName', 'action']\"></tr>\n </table>\n </div>\n </div>\n <div *ngIf=\"files.length < 5\" class=\"col-12 mt-10\">\n <sd-button class=\"mr-4\" [title]=\"'New template'\" (click)=\"enableCreating = true\" color=\"info\" [disabled]=\"enableCreating\">\n </sd-button>\n <sd-button *ngIf=\"exportOption?.enableUpload\" [title]=\"'Upload template'\" (click)=\"uploadTemplate()\" type=\"outline\">\n </sd-button>\n </div>\n </ng-container>\n <ng-container *ngIf=\"enableCreating || !files?.length\">\n <div class=\"col-12 mt-20\">\n <div class=\"T14R\">{{ 'Select columns for creating template' }}:</div>\n </div>\n <div class=\"col-12\">\n <mat-chip-listbox selectable=\"true\" multiple=\"true\">\n <ng-container *ngFor=\"let column of columns\">\n <mat-chip-option [selected]=\"selected[column.field]\" (click)=\"selected[column.field] = !selected[column.field]\">\n {{ column.title }}\n </mat-chip-option>\n </ng-container>\n </mat-chip-listbox>\n </div>\n <div class=\"col-12 row\">\n <div class=\"col-10\">\n <sd-input [form]=\"form\" [label]=\"'Template name'\" [(model)]=\"templateName\" [validator]=\"templateNameValidator\"></sd-input>\n </div>\n <div class=\"col-2 mt-8\">\n <sd-button width=\"100%\" [title]=\"'Save'\" color=\"info\" (click)=\"createTemplate()\"> </sd-button>\n </div>\n </div>\n </ng-container>\n </div>\n</sd-modal>\n","import { Directive, TemplateRef, inject, input } from '@angular/core';\nimport { SdTableColumn } from '../models/table-column.model';\n\ninterface Context<T = any> {\n column: SdTableColumn<T>;\n field: string;\n disabled?: boolean;\n}\n\n@Directive({\n selector: '[sdTableColumnFilterDef]',\n})\nexport class SdTableColumnFilterDefDirective<T = any> {\n static ngTemplateContextGuard<T>(_dir: SdTableColumnFilterDefDirective<T>, _ctx: unknown): _ctx is Context<T> {\n return true;\n }\n\n sdTableColumnFilterDef = input.required<string>();\n templateRef: TemplateRef<Context<T>> = inject(TemplateRef);\n}\n","// sticky-shadow.directive.ts\nimport { afterNextRender, Directive, DestroyRef, ElementRef, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { fromEvent } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\n\n/**\n * Directive thêm hiệu ứng đổ bóng (elevation-2) vào cột sticky cuối cùng bên trái\n * và cột sticky đầu tiên bên phải, tạo ngăn cách trực quan với phần được scroll.\n *\n * Chỉ dùng nội bộ trong sd-table, không chìa ra ngoài.\n *\n * Gắn vào scroll container của table:\n * @example\n * <div class=\"c-table\" stickyShadow>...</div>\n */\n@Directive({\n selector: '[stickyShadow]',\n standalone: true,\n})\nexport class StickyShadowDirective {\n readonly #el = inject(ElementRef<HTMLElement>);\n readonly #destroyRef = inject(DestroyRef);\n\n constructor() {\n afterNextRender(() => {\n const container = this.#el.nativeElement;\n\n // Dùng MutationObserver để detect khi CDK render rows mới vào table\n // (data load async, phân trang, ...) — lúc này td mới có đủ sticky classes\n const mutationObserver = new MutationObserver(() => {\n this.#updateShadow(container);\n });\n\n mutationObserver.observe(container, {\n childList: true, // Theo dõi thêm/bớt các node con\n subtree: true, // Bao gồm tất cả các cấp con cháu\n });\n\n // Cập nhật shadow mỗi khi user scroll ngang\n fromEvent(container, 'scroll')\n .pipe(debounceTime(10), takeUntilDestroyed(this.#destroyRef))\n .subscribe(() => this.#updateShadow(container));\n\n // Disconnect MutationObserver khi directive bị destroy\n this.#destroyRef.onDestroy(() => mutationObserver.disconnect());\n });\n }\n\n /**\n * Toggle class shadow lên tất cả th và td của một cột.\n * Dùng cdk-column-{field} để xác định cột vì Angular CDK\n * add class này đồng nhất lên cả th lẫn td.\n */\n #setShadow(container: HTMLElement, colClass: string, shadowClass: string, add: boolean) {\n container.querySelectorAll<HTMLElement>(`th.${colClass}, td.${colClass}`).forEach(el => {\n el.classList.toggle(shadowClass, add);\n // Cần position relative để ::after absolute hoạt động\n if (add) {\n el.style.position = 'sticky'; // Các cell sticky đã có sẵn, chỉ đảm bảo\n el.style.overflow = 'visible';\n }\n });\n }\n\n /**\n * Tính toán và cập nhật shadow dựa trên vị trí scroll hiện tại.\n *\n * Angular Material đánh dấu sticky left bằng class `mat-mdc-table-sticky-border-elem-left`\n * và sticky right bằng `mat-mdc-table-sticky-border-elem-right` — dùng các class này\n * để detect thay vì getComputedStyle vì reliable hơn.\n *\n * Chỉ apply shadow cho:\n * - Cột cuối cùng trong nhóm sticky-left (sát phần scroll)\n * - Cột đầu tiên trong nhóm sticky-right (sát phần scroll)\n */\n #updateShadow(container: HTMLElement) {\n const scrollLeft = container.scrollLeft;\n const scrollRight = container.scrollWidth - container.clientWidth - scrollLeft;\n\n // Query trên header row đầu tiên để xác định các cột sticky\n // td sẽ được xử lý thông qua #setShadow theo cdk-column class\n const headerRow = container.querySelector<HTMLElement>('tr.c-first-header');\n if (!headerRow) return;\n\n const allStickyLeft = Array.from(headerRow.querySelectorAll<HTMLElement>('th.mat-mdc-table-sticky-border-elem-left'));\n const allStickyRight = Array.from(headerRow.querySelectorAll<HTMLElement>('th.mat-mdc-table-sticky-border-elem-right'));\n\n // Reset shadow toàn bộ các cột sticky trước khi tính lại\n allStickyLeft.forEach(th => {\n const colClass = [...th.classList].find(c => c.startsWith('cdk-column-'));\n if (colClass) this.#setShadow(container, colClass, 'sticky-shadow-right', false);\n });\n allStickyRight.forEach(th => {\n const colClass = [...th.classList].find(c => c.startsWith('cdk-column-'));\n if (colClass) this.#setShadow(container, colClass, 'sticky-shadow-left', false);\n });\n\n // Chỉ cột cuối cùng sticky-left có shadow khi đang scroll sang phải\n const lastStickyLeft = allStickyLeft.at(-1);\n if (lastStickyLeft && scrollLeft > 0) {\n const colClass = [...lastStickyLeft.classList].find(c => c.startsWith('cdk-column-'));\n if (colClass) this.#setShadow(container, colClass, 'sticky-shadow-right', true);\n }\n\n // Chỉ cột đầu tiên sticky-right có shadow khi chưa scroll hết sang phải\n const firstStickyRight = allStickyRight.at(0);\n if (firstStickyRight && scrollRight > 0) {\n const colClass = [...firstStickyRight.classList].find(c => c.startsWith('cdk-column-'));\n if (colClass) this.#setShadow(container, colClass, 'sticky-shadow-left', true);\n }\n }\n}\n","import {\n Directive,\n ElementRef,\n NgZone,\n OnDestroy,\n Renderer2,\n effect,\n inject,\n input,\n output,\n} from '@angular/core';\n\n@Directive({\n selector: '[sdColumnResize]',\n standalone: true,\n})\nexport class SdColumnResizeDirective implements OnDestroy {\n // Bật/tắt resize cho cell này\n sdColumnResize = input.required<boolean>();\n // min/max width tùy chọn (chuỗi 'NNpx'); nếu không phải px sẽ bỏ qua\n minWidth = input<string | undefined>();\n maxWidth = input<string | undefined>();\n // Emit width cuối cùng dạng 'NNpx' khi mouseup\n resizeEnd = output<string>();\n\n #el = inject(ElementRef<HTMLElement>);\n #renderer = inject(Renderer2);\n #zone = inject(NgZone);\n\n #handle?: HTMLElement;\n #unlistenMousedown?: () => void;\n #unlistenMove?: () => void;\n #unlistenUp?: () => void;\n #unlistenBlur?: () => void;\n\n #startX = 0;\n #startWidth = 0;\n #currentWidth = 0;\n\n constructor() {\n effect(() => {\n const enabled = this.sdColumnResize();\n if (enabled) {\n this.#enable();\n } else {\n this.#disable();\n }\n });\n }\n\n ngOnDestroy() {\n this.#disable();\n }\n\n #enable() {\n if (this.#handle) return;\n const th = this.#el.nativeElement;\n this.#renderer.addClass(th, 'sd-col-resize-host');\n\n const handle = this.#renderer.createElement('span');\n this.#renderer.addClass(handle, 'sd-col-resize-handle');\n this.#renderer.appendChild(th, handle);\n this.#handle = handle;\n\n // mousedown listen ngoài Angular zone — drag không trigger CD\n this.#zone.runOutsideAngular(() => {\n this.#unlistenMousedown = this.#renderer.listen(handle, 'mousedown', (e: MouseEvent) =>\n this.#onMousedown(e)\n );\n });\n }\n\n #disable() {\n this.#cleanupDrag();\n this.#unlistenMousedown?.();\n this.#unlistenMousedown = undefined;\n if (this.#handle) {\n this.#renderer.removeChild(this.#el.nativeElement, this.#handle);\n this.#handle = undefined;\n }\n this.#renderer.removeClass(this.#el.nativeElement, 'sd-col-resize-host');\n }\n\n #onMousedown = (event: MouseEvent) => {\n event.preventDefault();\n // stopPropagation để không trigger mat-sort khi click vào handle\n event.stopPropagation();\n\n const th = this.#el.nativeElement;\n this.#startX = event.clientX;\n this.#startWidth = th.getBoundingClientRect().width;\n this.#currentWidth = this.#startWidth;\n\n this.#renderer.setStyle(document.body, 'cursor', 'col-resize');\n this.#renderer.addClass(th, 'sd-resizing');\n\n this.#zone.runOutsideAngular(() => {\n this.#unlistenMove = this.#renderer.listen('document', 'mousemove', (e: MouseEvent) =>\n this.#onMousemove(e)\n );\n this.#unlistenUp = this.#renderer.listen('document', 'mouseup', () => this.#onMouseup());\n // Nếu user kéo ra ngoài window: cleanup an toàn\n this.#unlistenBlur = this.#renderer.listen('window', 'blur', () => this.#onMouseup());\n });\n };\n\n #onMousemove = (event: MouseEvent) => {\n const delta = event.clientX - this.#startX;\n const minPx = this.#parsePx(this.minWidth()) ?? 40;\n const maxPx = this.#parsePx(this.maxWidth()) ?? Number.POSITIVE_INFINITY;\n const w = Math.min(maxPx, Math.max(minPx, this.#startWidth + delta));\n this.#currentWidth = w;\n\n const th = this.#el.nativeElement;\n const px = `${w}px`;\n this.#renderer.setStyle(th, 'width', px);\n this.#renderer.setStyle(th, 'min-width', px);\n this.#renderer.setStyle(th, 'max-width', px);\n };\n\n #onMouseup = () => {\n const finalPx = `${Math.round(this.#currentWidth)}px`;\n this.#cleanupDrag();\n // emit trong Angular zone để consumer chạy CD bình thường\n this.#zone.run(() => this.resizeEnd.emit(finalPx));\n };\n\n #cleanupDrag() {\n this.#unlistenMove?.();\n this.#unlistenMove = undefined;\n this.#unlistenUp?.();\n this.#unlistenUp = undefined;\n this.#unlistenBlur?.();\n this.#unlistenBlur = undefined;\n this.#renderer.removeStyle(document.body, 'cursor');\n if (this.#el?.nativeElement) {\n this.#renderer.removeClass(this.#el.nativeElement, 'sd-resizing');\n }\n }\n\n #parsePx(value?: string): number | null {\n if (!value) return null;\n const m = /^(\\d+(?:\\.\\d+)?)px$/i.exec(value.trim());\n return m ? parseFloat(m[1]) : null;\n }\n}\n","import { SdBadge } from '@sdcorejs/angular/components/badge';\nimport { Utilities } from '@sdcorejs/utils/fns';\nimport { SdUnwrapSignal } from '@sdcorejs/angular/utilities/models';\n// import hash from 'object-hash';\nexport interface SdTableMetaSelector {\n selectable?: boolean;\n isSelected?: boolean;\n actions?: string[];\n}\n\nexport interface SdTableMetaExpand {\n isExpanded?: boolean;\n isExpanding?: boolean;\n data?: any;\n}\n\nexport interface SdTableMetaTree<T = any> {\n level: number;\n hasChildren: boolean;\n isExpanded: boolean;\n isExpanding?: boolean;\n parentId?: string;\n /** Cached formatted child SdTableItem[] — populated on first expand/format */\n childItems?: SdTableItem<T>[];\n /**\n * Hierarchical index path từ root tới row hiện tại — sibling-index (1-based) per level.\n * Vd root thứ nhất = [1], child thứ 2 của root đó = [1, 2], grandchild thứ 1 = [1, 2, 1].\n * Template STT join('.') → \"1\", \"1.2\", \"1.2.1\". Populate trong `flattenTree`.\n */\n indexPath?: number[];\n}\n\nexport interface SdTableDisplay {\n tooltip?: string;\n badge?: {\n type: SdUnwrapSignal<SdBadge['type']>;\n color: SdUnwrapSignal<SdBadge['color']>;\n icon?: SdUnwrapSignal<SdBadge['icon']>;\n title?: SdUnwrapSignal<SdBadge['title']>;\n };\n cellStyle?: Record<string, string>;\n data: string | number | undefined | null;\n isHtml: boolean;\n click?: () => void;\n}\n\nexport interface SdTableMetaGroup<T = any> {\n /** Children items thuộc group này (chỉ set trên group header row). */\n items?: SdTableItem<T>[];\n /** true = row này là synthetic group header (sinh bởi SdGroupPipe). */\n isGroupHeader?: boolean;\n /** Hash key của group (= Utilities.hash(values)). */\n key?: string;\n /** Resolved group-field values (vd `{ customerId: 1, customerName: 'A' }`). */\n values?: Record<string, any>;\n /** Trạng thái expand. Chỉ ý nghĩa khi `option.group.collapsible = true`. */\n isExpanded?: boolean;\n}\n\nexport interface SdTableMeta<T> {\n id: string;\n display: Record<string, SdTableDisplay>;\n selector?: SdTableMetaSelector;\n expand?: SdTableMetaExpand;\n group?: SdTableMetaGroup<T>;\n tree?: SdTableMetaTree<T>;\n}\n\nexport interface SdTableItem<T = any> {\n meta: SdTableMeta<T>;\n data: T;\n}\n\nexport const MapToSdTableItem = <T = any>(item: T): SdTableItem<T> => ({\n data: item,\n meta: {\n id: Utilities.hash({ data: item }),\n display: {},\n expand: {\n isExpanding: false,\n isExpanded: false,\n },\n group: {},\n selector: { actions: [], isSelected: false, selectable: false },\n tree: { level: 0, hasChildren: false, isExpanded: false, isExpanding: false },\n },\n});\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { SdTableOption } from '../models/table-option.model';\nimport { MapToSdTableItem, SdTableItem } from '../models/table-item.model';\nimport { Utilities } from '@sdcorejs/utils/fns';\n\n@Pipe({ name: 'sdGroup' })\nexport class SdGroupPipe implements PipeTransform {\n /**\n * Nhóm items theo `option.group.fields`. Mỗi group sinh ra 1 synthetic SdTableItem\n * (group header) đặt trước children. Header có `meta.group.isGroupHeader = true` + `key`\n * + `values` + `items` + `isExpanded` để template + table consume.\n *\n * Khi `option.group.collapsible = true` + group đang collapse → children bị lọc khỏi output.\n *\n * `expandState` (optional, owned by component) — Map<key, expanded> giữ trạng thái\n * expand/collapse qua các lần transform. Pipe đọc state từ Map; nếu key chưa tồn tại,\n * dùng `!option.group.defaultCollapsed`. Pipe ghi state về Map cho lần read sau.\n *\n * @example\n * `_items | sdGroup: _tableOption : groupExpandState`\n */\n transform(\n items: SdTableItem[],\n gridOption: SdTableOption,\n expandState?: Map<string, boolean>,\n ): SdTableItem[] {\n if (gridOption?.tree) {\n if (typeof ngDevMode !== 'undefined' && ngDevMode && gridOption.group) {\n console.warn('[sd-table] option.tree and option.group cannot be used together. group is ignored.');\n }\n return items;\n }\n const group = gridOption?.group;\n if (!group?.fields?.length) return items;\n const fields = group.fields;\n const collapsible = !!group.collapsible;\n const defaultExpanded = !group.defaultCollapsed;\n\n // Bucket items theo combined field-value hash.\n // Field hỗ trợ dot-notation (vd 'customer.id') — resolve qua getNestedValue.\n const buckets = new Map<string, { values: Record<string, any>; items: SdTableItem[] }>();\n for (const item of items) {\n const values: Record<string, any> = {};\n for (const f of fields) values[f as string] = Utilities.getNestedValue(item.data, f as string);\n const key = Utilities.hash(values);\n let bucket = buckets.get(key);\n if (!bucket) {\n bucket = { values, items: [] };\n buckets.set(key, bucket);\n }\n bucket.items.push(item);\n }\n\n const result: SdTableItem[] = [];\n buckets.forEach((bucket, key) => {\n const isExpanded = expandState?.has(key) ? !!expandState.get(key) : defaultExpanded;\n if (collapsible && expandState) expandState.set(key, isExpanded);\n\n const header = MapToSdTableItem({} as any);\n header.meta.group = {\n isGroupHeader: true,\n key,\n values: bucket.values,\n items: bucket.items,\n isExpanded,\n };\n header.meta.selector!.selectable = false;\n result.push(header);\n\n if (!collapsible || isExpanded) {\n for (const child of bucket.items) result.push(child);\n }\n });\n return result;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n// import hash from 'object-hash';\nimport { SdTableOptionSelector } from '../models/table-option-selector.model';\nimport { SdTableItem } from '../models/table-item.model';\nimport { Utilities } from '@sdcorejs/utils/fns';\n@Pipe({\n name: 'selectionDisabled',\n})\nexport class SdSelectionDisabledPipe implements PipeTransform {\n transform = (selectedItems: SdTableItem[], rowData: SdTableItem, selection: SdTableOptionSelector): boolean => {\n const { disabled, actions } = selection;\n if (!actions?.length) {\n if (!disabled) {\n rowData.meta.selector!.selectable = true;\n return false;\n }\n rowData.meta.selector!.selectable = !disabled(rowData, selectedItems);\n return !rowData.meta.selector!.selectable;\n }\n // Kiểm tra có bị disabled theo function không\n // Dữ liệu chưa được check thì kiểm tra hàm disable nếu có\n if (disabled && !rowData.meta.selector!.isSelected) {\n // Nếu disabled và dữ liệu chưa được check\n if(disabled(rowData, selectedItems)) {\n return true;\n }\n }\n // Lọc các action theo selectedItems hiện tại\n const availableActions = actions.filter(action => {\n if ('children' in action) {\n for (const childAction of action.children) {\n const key = Utilities.hash(childAction);\n if (selectedItems.every(e => e.meta.selector?.actions?.includes(key))) {\n return true;\n }\n }\n return false;\n } else {\n const key = Utilities.hash(action);\n return selectedItems.every(e => e.meta.selector?.actions?.includes(key));\n }\n });\n // Kiểm tra rowData có action nào thỏa hay ko, nếu ko thì disabled\n for (const action of availableActions) {\n if ('children' in action) {\n for (const childAction of action.children) {\n if (rowData.meta.selector?.actions?.includes(Utilities.hash(childAction))) {\n return false;\n }\n }\n } else {\n if (rowData.meta.selector?.actions?.includes(Utilities.hash(action))) {\n return false;\n }\n }\n }\n return true;\n };\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { SdTableOptionSelector } from '../models/table-option-selector.model';\nimport { SdTableItem } from '../models/table-item.model';\n@Pipe({\n name: 'selectionVisibleSelectAll',\n})\nexport class SdSelectionVisibleSelectAllPipe implements PipeTransform {\n transform = async (items: SdTableItem[], selector: SdTableOptionSelector | undefined): Promise<boolean> => {\n // Nếu chỉ chọn 1 thì không có select all\n if (selector?.single) {\n return false;\n }\n if (!items.length) {\n return false;\n }\n if (!selector?.actions?.length) {\n return true;\n }\n if (selector.actions.some(e => ('children' in e && e.children.some(e1 => e1.isGrouped)) || e.isGrouped)) {\n return false;\n }\n await new Promise(resolve => setTimeout(resolve, 500));\n const first = items.find(t => t.meta.selector?.actions?.length);\n if (first) {\n for (const action of first.meta.selector?.actions!) {\n if (items.filter(t => t.meta.selector?.actions?.length).every(e => e.meta.selector?.actions?.includes(action))) {\n return true;\n }\n }\n }\n return false;\n };\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n// import hash from 'object-hash';\nimport { SdTableOptionSelector } from '../models/table-option-selector.model';\nimport { SdTableItem } from '../models/table-item.model';\nimport { Utilities } from '@sdcorejs/utils/fns';\n\n@Pipe({\n name: 'selectionVisible',\n})\nexport class SdSelectionVisiblePipe implements PipeTransform {\n transform = (rowData: SdTableItem, selection: SdTableOptionSelector | undefined): boolean => {\n const groupedActions: string[] = [];\n rowData.meta.selector!.actions = rowData.meta.selector!.actions || [];\n if (!selection?.actions?.length) {\n rowData.meta.selector!.selectable = true;\n return rowData.meta.selector!.selectable;\n }\n for (const action of selection?.actions) {\n if ('children' in action) {\n let flag = false;\n let hasGroup = false;\n for (const child of action.children) {\n const { hidden, isGrouped } = child;\n const key = Utilities.hash(child);\n if (isGrouped) {\n hasGroup = true;\n }\n if (typeof hidden === 'function') {\n if (!hidden(rowData.data)) {\n flag = true;\n rowData.meta.selector!.actions.push(key);\n if (isGrouped) {\n groupedActions.push(key);\n }\n }\n } else if (!hidden) {\n flag = true;\n rowData.meta.selector!.actions.push(key);\n if (isGrouped) {\n groupedActions.push(key);\n }\n }\n }\n if (flag) {\n rowData.meta.selector!.actions.push(Utilities.hash(action));\n if (hasGroup) {\n groupedActions.push(Utilities.hash(action));\n }\n }\n } else {\n const { hidden, isGrouped } = action;\n const key = Utilities.hash(action);\n if (typeof hidden === 'function') {\n if (!hidden(rowData.data)) {\n rowData.meta.selector!.actions.push(key);\n if (isGrouped) {\n groupedActions.push(key);\n }\n }\n } else if (!hidden) {\n rowData.meta.selector!.actions.push(key);\n if (isGrouped) {\n groupedActions.push(key);\n }\n }\n }\n }\n rowData.meta.selector!.selectable = !!rowData.meta.selector!.actions?.length;\n if (!rowData.meta.selector!.selectable || !groupedActions.length || rowData?.meta.group?.items?.length) {\n return rowData.meta.selector!.selectable;\n }\n // Đối với trường hợp grouped, tuy selectable là true nhưng vẫn ẩn đi checkbox\n // nếu các action đều thuộc groupedActions và rowData ko phải là dòng group\n return rowData.meta.selector!.actions.some(action => !groupedActions.includes(action));\n };\n}\n","import { Injectable, inject, signal } from '@angular/core';\nimport { SdExcelColumn, SdExcelService } from '@sdcorejs/angular/services';\nimport { SdExcelSheet } from '@sdcorejs/angular/services/excel';\nimport { Utilities } from '@sdcorejs/utils/fns';\nimport { DateUtilities } from '@sdcorejs/angular/utilities/extensions';\nimport { SdTableColumn } from '../../models/table-column.model';\nimport { ConfiguredTableResult } from '../../models/table-option-config.model';\nimport { SdTableOptionExportColumn } from '../../models/table-option-export.model';\nimport { SdTableOption } from '../../models/table-option.model';\nimport { SdTableFilterRequest } from '../table-filter/table-filter.model';\n\nexport interface SdTableExportContext<T = any> {\n option: SdTableOption<T>;\n configuration?: ConfiguredTableResult;\n total: number;\n cacheObjValues: Record<string, Record<string, string>>;\n\n // Hàm callback để Service gọi ngược lại Component xin dữ liệu từng trang\n fetchChunk: (\n pageNumber: number,\n pageSize: number\n ) => Promise<\n | T[]\n | {\n items: any[];\n total: number;\n }\n >;\n\n // Dành cho custom export\n getFilterInfo: () => SdTableFilterRequest;\n}\n\n@Injectable()\nexport class TableExportService {\n #excelService = inject(SdExcelService);\n\n // ==========================================\n // SIGNAL STATE (Component sẽ bind trực tiếp vào đây)\n // ==========================================\n exporting = signal(false);\n exportTitle = signal('Export');\n\n // ==========================================\n // PUBLIC METHODS\n // ==========================================\n\n exportExcel = (context: SdTableExportContext, columns?: SdExcelColumn[]) => {\n return this.#processExport(context, { columns, isCSV: false });\n };\n\n exportCSV = (context: SdTableExportContext, columns?: SdExcelColumn[]) => {\n return this.#processExport(context, { columns, isCSV: true });\n };\n\n exportCustom = (context: SdTableExportContext) => {\n const { option, getFilterInfo } = context;\n if (option?.export?.type === 'custom') {\n this.exporting.set(true);\n option.export\n .onExport(getFilterInfo())\n .catch(err => {\n console.error(err);\n throw err;\n })\n .finally(() => {\n this.exporting.set(false);\n });\n }\n };\n\n // ==========================================\n // PRIVATE LOGIC\n // ==========================================\n\n async #processExport(context: SdTableExportContext, args: { columns?: SdExcelColumn[]; isCSV?: boolean }) {\n const { option, total, fetchChunk, cacheObjValues } = context;\n\n // `type` là optional trên SdTableOptionExportDefault — undefined cũng coi như 'default'.\n // Chỉ chặn nhánh 'custom' (đã có exportCustom xử lý riêng).\n if (option.export?.type === 'custom') return;\n\n const { isCSV } = args;\n try {\n const columns = this.#getExportColumns(context, args.columns);\n const pageSize = option.export?.maxItemsPerRequest || 1000;\n const batch = option.export?.batch || 1;\n\n let pageNumber = 0;\n let exportItems: any[] = [];\n let currentTotal = total; // Biến cục bộ để track total trả về từ fetchChunk\n\n this.exporting.set(true);\n const items: any[] = [];\n let promises: Promise<any[] | { items: any[]; total: number }>[] = [];\n\n const handleData = async () => {\n const results = await Promise.all(promises);\n promises = [];\n exportItems = [];\n\n for (const result of results) {\n if (result && 'items' in result) {\n exportItems = [...exportItems, ...result.items];\n currentTotal = result.total;\n } else if (Array.isArray(result)) {\n exportItems = [...exportItems, ...result];\n }\n }\n\n if (option.export?.type !== 'custom' && option.export?.mapping) {\n const mappedResults = option.export.mapping(exportItems);\n exportItems = mappedResults instanceof Promise ? await mappedResults : mappedResults;\n }\n\n const totalPage = Math.max(1, currentTotal / pageSize);\n const percent = Math.round(((pageNumber - 1) * 100.0) / totalPage);\n // Đảm bảo percent không vượt quá 100\n this.exportTitle.set(`Exporting...${Math.min(percent, 100)}%`);\n\n const allColumns = this.#allColumns(option);\n const allExportedColumns = this.#allExportedColumns(option);\n\n for (const item of exportItems) {\n const obj: any = {};\n\n const handle = async (exportColumn: SdExcelColumn) => {\n obj[exportColumn.field] = Utilities.getNestedValue(item, exportColumn.field);\n\n const column = allColumns.find(e => e.field === exportColumn.field);\n const exportedColumn = allExportedColumns.find(e => e.field === exportColumn.field);\n\n if (exportedColumn?.transform) {\n obj[exportedColumn.field] = exportedColumn.transform(Utilities.getNestedValue(item, exportedColumn.field), item);\n return;\n }\n if (!column) return;\n\n if (column.type === 'children') {\n column?.children?.forEach(childColumn =>\n handle({\n field: childColumn.field,\n title: typeof childColumn.title === 'string' ? childColumn.title : childColumn.title?.title,\n width: childColumn.width,\n })\n );\n return;\n }\n if (!columns.some(e => e.field === column.field)) return;\n\n const itemValue = Utilities.getNestedValue(item, column.field as string);\n const fieldStr = column.field as string;\n\n if (column.transform) {\n const transform = column.transform(itemValue, item, { isExport: true });\n obj[fieldStr] = transform instanceof Promise ? await transform : transform;\n obj[fieldStr] = obj[fieldStr] ?? '';\n } else if (itemValue === undefined || itemValue === null || itemValue === '') {\n obj[fieldStr] = '';\n } else if (column.type === 'string' || column.type === 'number') {\n obj[fieldStr] = itemValue;\n } else if (column.type === 'boolean') {\n if (itemValue) {\n obj[fieldStr] = column.option?.displayOnTrue || 'True';\n } else if (obj[fieldStr] !== undefined && obj[fieldStr] !== null) {\n obj[fieldStr] = column.option?.displayOnFalse || 'False';\n }\n } else if (column.type === 'date') {\n obj[fieldStr] = DateUtilities.toFormat(itemValue, 'yyyy/MM/dd');\n } else if (column.type === 'datetime') {\n obj[fieldStr] = DateUtilities.toFormat(itemValue, 'yyyy/MM/dd HH:mm:ss');\n } else if (column.type === 'time') {\n obj[fieldStr] = DateUtilities.toFormat(itemValue, 'HH:mm:ss');\n } else if (column.type === 'values' || column.type === 'lazy-values') {\n const vals = (Array.isArray(itemValue) ? itemValue : [itemValue]).filter(e => !!e?.toString());\n obj[fieldStr] = vals.map(val => cacheObjValues[fieldStr]?.[val]?.[column.option.displayField as any] || val)?.join(', ');\n } else {\n obj[fieldStr] = itemValue;\n }\n };\n\n for (const exportColumn of columns) {\n await handle(exportColumn);\n }\n items.push(obj);\n }\n };\n\n // Vòng lặp lấy dữ liệu\n while (pageNumber * pageSize < currentTotal) {\n promises.push(fetchChunk(pageNumber, pageSize));\n pageNumber++;\n if (promises.length < batch) continue;\n await handleData();\n }\n\n if (promises.length > 0) {\n await handleData();\n }\n\n // Xuất file\n if (isCSV) {\n await this.#excelService.exportCSV({\n columns,\n items,\n fileName: option.export?.fileName,\n });\n return;\n }\n\n const sheets: SdExcelSheet[] = [];\n if (Array.isArray(option.export?.sheets)) {\n for (const sheet of option.export.sheets) {\n if (sheet.name && sheet.items && sheet.headers) {\n sheets.push({\n name: sheet.name,\n items: Array.isArray(sheet.items) ? sheet.items : await sheet.items(),\n headers: sheet.headers,\n });\n }\n }\n }\n\n await this.#excelService.export({\n columns,\n items,\n fileName: option.export?.fileName,\n sheets,\n });\n } finally {\n this.exporting.set(false);\n this.exportTitle.set('Export');\n }\n }\n\n #getExportColumns(context: SdTableExportContext, explicitColumns?: SdExcelColumn[]): SdExcelColumn[] {\n const { option, configuration } = context;\n let tableColumns: SdExcelColumn[] = [];\n\n option.columns\n .filter(e => !e.export?.disabled)\n .forEach(column => {\n if (column.type === 'children') {\n column.children\n ?.filter(e => !e.export?.disabled)\n .forEach(childColumn => {\n tableColumns.push({\n field: childColumn.field as string,\n title: typeof childColumn.title === 'string' ? childColumn.title : childColumn.title?.title,\n description: childColumn.export?.description,\n width: childColumn.width,\n });\n });\n return;\n }\n tableColumns.push({\n field: column.field as string,\n title: typeof column.title === 'string' ? column.title : column.title?.title,\n description: column.export?.description,\n width: column.width,\n });\n });\n\n if (configuration) {\n const displayColumns = [...configuration.firstColumns, ...configuration.secondColumns].reduce<SdTableColumn[]>((first, next) => {\n const column = option.columns.find(e => e.field === next.field);\n if (!column) return first;\n if (column.type !== 'children') return [...first, column];\n return [...first, ...column.children];\n }, []);\n\n tableColumns = displayColumns\n .map(e => ({ ...e, data: tableColumns.find(e1 => e1.field === e.field) }))\n .filter(e => !!e.data)\n .map(e => e.data!);\n }\n\n const columnFields = explicitColumns?.map(e => e.field) || [];\n\n if (option.export?.type !== 'custom') {\n return [...tableColumns, ...(option.export?.columns?.filter(e => !e.export?.disabled) || [])].filter(\n column => !columnFields?.length || columnFields.includes(column.field)\n );\n } else {\n return tableColumns.filter(column => !columnFields?.length || columnFields.includes(column.field));\n }\n }\n\n #allColumns(option: SdTableOption): SdTableColumn[] {\n const columns: SdTableColumn[] = [];\n option.columns\n ?.filter(e => !e.export?.disabled)\n .forEach(column => {\n if (column.type === 'children') {\n column.children?.filter(e => !e.export?.disabled).forEach(childColumn => columns.push(childColumn));\n return;\n }\n columns.push(column);\n });\n return columns;\n }\n\n #allExportedColumns(option: SdTableOption): SdTableOptionExportColumn[] {\n if (option.export?.type !== 'default') return [];\n return option.export?.columns?.filter(e => !e.export?.disabled) || [];\n }\n}\n","import { Injectable, inject, isSignal } from '@angular/core';\nimport { SdFormatNumberPipe } from '@sdcorejs/angular/pipes';\nimport { EMPTY_STR } from '@sdcorejs/utils/constants';\nimport { Utilities } from '@sdcorejs/utils/fns';\nimport { ArrayUtilities, DateUtilities, NumberUtilities } from '@sdcorejs/angular/utilities/extensions';\n\nimport { SdTableColumn, SdTableColumnNormal } from '../../models/table-column.model';\nimport { MapToSdTableItem, SdTableDisplay, SdTableItem } from '../../models/table-item.model';\nimport { ConfiguredTableResult } from '../../models/table-option-config.model';\n\n@Injectable()\nexport class TableFormatService {\n // Inject các pipe/service dùng để format dữ liệu\n #formatNumberPipe = inject(SdFormatNumberPipe);\n\n // ==========================================\n // PUBLIC METHODS\n // ==========================================\n\n /**\n * Tải và cache các giá trị từ điển cho cột 'values'\n */\n async loadValues(\n columns: SdTableColumn[],\n cacheValues: Record<string, any[]>,\n cacheObjValues: Record<string, Record<string, string>>\n ): Promise<void> {\n const promises: Promise<{\n key: string;\n valueField: string;\n displayField: string;\n data: any[];\n }>[] = [];\n\n for (const column of columns) {\n if (column.type === 'values' && !cacheValues[column.field]) {\n // TRƯỜNG HỢP 1: Nếu items là một Signal\n if (isSignal(column.option.items)) {\n // Đọc giá trị hiện tại của Signal\n const data = column.option.items();\n\n cacheValues[column.field] = (Array.isArray(data) ? data : []).map(e => ({\n ...e,\n [column.option.valueField]: Utilities.getNestedValue(e, column.option.valueField),\n [column.option.displayField]: Utilities.getNestedValue(e, column.option.displayField),\n }));\n\n cacheObjValues[column.field] = ArrayUtilities.toObject(column.option.valueField, cacheValues[column.field]);\n }\n // TRƯỜNG HỢP 2: Nếu items là hàm trả về Promise (API Call)\n else if (typeof column.option.items === 'function') {\n promises.push(\n column.option.items().then(data => ({\n key: column.field,\n valueField: column.option.valueField,\n displayField: column.option.displayField,\n data: Array.isArray(data) ? data : [],\n }))\n // ... catch error giữ nguyên\n );\n }\n\n // TRƯỜNG HỢP 3: Mảng tĩnh (K[]) bình thường\n else {\n cacheValues[column.field] = column.option.items.map(e => ({\n ...e,\n [column.option.valueField]: Utilities.getNestedValue(e, column.option.valueField),\n [column.option.displayField]: Utilities.getNestedValue(e, column.option.displayField),\n }));\n\n cacheObjValues[column.field] = ArrayUtilities.toObject(column.option.valueField, cacheValues[column.field]);\n }\n }\n }\n\n if (promises.length) {\n const results = await Promise.all(promises);\n for (const result of results) {\n cacheValues[result.key] = result.data.map(e => ({\n ...e,\n [result.valueField]: Utilities.getNestedValue(e, result.valueField),\n [result.displayField]: Utilities.getNestedValue(e, result.displayField),\n }));\n cacheObjValues[result.key] = ArrayUtilities.toObject(result.valueField, cacheValues[result.key]);\n }\n }\n }\n\n /**\n * Chuyển đổi dữ liệu thô thành SdTableItem kèm các thiết lập hiển thị (Display Meta)\n */\n async format<T = any>(\n rawItems: T[],\n columns: SdTableColumn[],\n cacheValues: Record<string, any[]>,\n cacheObjValues: Record<string, Record<string, string>>\n ): Promise<SdTableItem<T>[]> {\n const items = rawItems.map(MapToSdTableItem);\n const execute = async (column: SdTableColumnNormal) => {\n const { field, click, tooltip, htmlTemplate, transform } = column;\n const fieldStr = field;\n\n // Xử lý nạp từ điển động (lazy-values)\n if (!transform && !htmlTemplate && column.type === 'lazy-values' && typeof column.option.views === 'function') {\n const {\n option: { views, valueField, displayField },\n } = column;\n\n cacheObjValues[fieldStr] = cacheObjValues[fieldStr] || {};\n\n const values = ArrayUtilities.distinct(\n items\n .map(item => Utilities.getNestedValue(item.data, fieldStr))\n .filter(val => val?.toString())\n .reduce<string[]>((current, next) => [...current, ...(Array.isArray(next) ? next : [next])], [])\n .filter(val => !Object.keys(cacheObjValues[fieldStr]).includes(val))\n );\n\n if (values.length) {\n const lazyItems: any[] = (\n await views(values).catch((err: any) => {\n console.error(err);\n return [];\n })\n )\n .filter((item: any) => values.includes(Utilities.getNestedValue(item, valueField)))\n .map((e: any) => ({\n [valueField]: Utilities.getNestedValue(e, valueField),\n [displayField]: Utilities.getNestedValue(e, displayField),\n }));\n Object.assign(cacheObjValues[fieldStr], ArrayUtilities.toObject(valueField, lazyItems) || {});\n }\n }\n\n // Format dữ liệu cho từng hàng\n for (const item of items) {\n const rowData = item.data;\n const value = Utilities.getNestedValue(rowData, fieldStr);\n item.meta.display[fieldStr] = {\n badge: undefined,\n cellStyle: column.align === 'right' ? { 'text-align': 'right!important' } : undefined,\n data: value,\n isHtml: false,\n tooltip: typeof tooltip === 'function' ? tooltip(value, rowData) : undefined,\n click: typeof click === 'function' ? () => click(value, rowData) : undefined,\n };\n\n const display = item.meta.display[fieldStr];\n\n if (typeof htmlTemplate === 'function') {\n display.isHtml = true;\n display.data = htmlTemplate(value, rowData);\n } else if (typeof transform === 'function') {\n const newValue = transform(value, rowData);\n display.data = newValue instanceof Promise ? await newValue : newValue;\n } else {\n // Xử lý các type cơ bản\n if (column.type === 'date' || column.type === 'datetime' || column.type === 'time') {\n display.data = this.#formatDateDisplay(value, column.type);\n display.isHtml = column.type === 'datetime';\n }\n if (column.type === 'values' || column.type === 'lazy-values') {\n display.data = this.#processValuesDisplay(value, column, fieldStr, cacheObjValues);\n }\n if (column.type === 'number' && NumberUtilities.isNumber(value)) {\n display.data = this.#formatNumberPipe.transform(value);\n }\n if (column.type === 'boolean') {\n const { option } = column;\n if (value != null && value !== '') {\n display.data = value === true ? option?.displayOnTrue || 'True' : option?.displayOnFalse || 'False';\n } else {\n display.data = '';\n }\n }\n\n // Xử lý Badge\n const badgeResult = this.#createBadge(column, value, rowData, cacheValues);\n if (badgeResult) {\n display.badge = badgeResult.badge;\n if (badgeResult.title) {\n display.data = badgeResult.title;\n }\n }\n\n if (display.data === null || display.data === undefined || display.data === '') {\n display.data = EMPTY_STR;\n display.badge = undefined;\n }\n }\n }\n };\n\n // Duyệt qua tất cả các cột\n for (const column of columns.filter(e => !e.hidden)) {\n if (column.type === 'children') {\n for (const childColumn of column.children?.filter(e => !e.hidden) || []) {\n await execute(childColumn);\n }\n } else {\n await execute(column);\n }\n }\n return items;\n }\n\n // ==========================================\n // PRIVATE HELPERS\n // ==========================================\n\n #formatDateDisplay(value: any, type: 'date' | 'datetime' | 'time'): string {\n const date = DateUtilities.toFormat(value, 'dd/MM/yyyy');\n const time = DateUtilities.toFormat(value, 'HH:mm:ss');\n if (type === 'datetime') {\n return time && date ? `<div class=\"T14R\">${date}<span class=\"T14R text-black400 ml-4\">${time}</span></div>` : '';\n }\n if (type === 'date') return date || '';\n if (type === 'time') return time || '';\n return '';\n }\n\n #processValuesDisplay(\n value: any,\n column: SdTableColumnNormal & { type: 'values' | 'lazy-values' },\n field: string,\n cacheObjValues: Record<string, Record<string, string>>\n ): string {\n const vals = (Array.isArray(value) ? value : [value]).filter(e => e?.toString());\n return vals.map(val => cacheObjValues[field]?.[val]?.[column.option.displayField as any] || val).join(', ');\n }\n\n #createBadge(\n column: SdTableColumnNormal,\n value: any,\n rowData: any,\n cacheValues: Record<string, any[]>\n ): { badge: SdTableDisplay['badge']; title?: string | number | null } | undefined {\n if (column.useBadge) {\n const badge = column.type === 'values' ? column.useBadge(value, rowData, cacheValues[column.field]) : column.useBadge(value, rowData);\n\n if (badge) {\n return {\n badge: {\n type: badge.type ?? 'round',\n color: badge.color,\n icon: badge.icon,\n },\n title: badge.title,\n };\n }\n }\n if (column.type === 'boolean') {\n return {\n badge: {\n type: 'round',\n color: value ? 'success' : 'error',\n },\n };\n }\n return undefined;\n }\n}\n","/**\n * Build Record<field, width> từ map column hiện tại trong ConfiguredTableResult.\n * Loại bỏ field có width undefined để consumer luôn nhận chuỗi 'NNpx'.\n */\nexport const buildColumnWidthMap = (\n column: Record<string, { width?: string }> | undefined | null\n): Record<string, string> => {\n const result: Record<string, string> = {};\n if (!column) return result;\n for (const key of Object.keys(column)) {\n const w = column[key]?.width;\n if (w) result[key] = w;\n }\n return result;\n};\n","import { Injectable } from '@angular/core';\n// import hash from 'object-hash';\nimport { SdStorageService } from '@sdcorejs/angular/services';\nimport { Utilities } from '@sdcorejs/utils/fns';\nimport { Operator } from '@sdcorejs/utils/models';\nimport { map, startWith } from 'rxjs/operators';\nimport { SdTableFilterDefDirective } from '../../directives/sd-table-filter-def.directive';\nimport { SdTableColumn } from '../../models/table-column.model';\nimport {\n SdTableExternalFilter,\n SdTableOptionFilter,\n TableFilterConfiguration,\n TableFilterRegister,\n TableFilterValue,\n} from './table-filter.model';\n\n@Injectable()\nexport class SdTableFilterService {\n #filterConfiguration = 'GRID-FILTER-CONFIGURATION';\n #filterValue = 'GRID-FILTER-VALUE';\n #cache: Record<string, TableFilterRegister> = {};\n constructor(private storageService: SdStorageService) {}\n register = (\n filter: SdTableOptionFilter | undefined,\n args: {\n id: string;\n columns: SdTableColumn[] | undefined;\n externalFilters: SdTableExternalFilter[] | undefined;\n filterDefs: SdTableFilterDefDirective[] | undefined;\n columnOperator?: Record<string, Operator>;\n }\n ) => {\n let cacheSession = false;\n\n const { id, columns, externalFilters } = args;\n const tempKey = Utilities.hash({\n id,\n columns: columns?.map(e => e.field).filter(field => !!field) || [],\n externalFilters: externalFilters?.map(e => e.field).filter(field => !!field) || [],\n });\n const key = filter?.key || tempKey;\n if (!filter?.key) {\n cacheSession = true; // Nếu không có key thì chỉ lưu theo session\n }\n if (!this.#cache[key]) {\n // Setting của filter configuration\n const filterConfiguration = this.storageService.create<TableFilterConfiguration>(\n {\n prefix: this.#filterConfiguration,\n key,\n },\n {\n default: this.#defaultConfiguration(args),\n type: cacheSession ? 'session' : undefined,\n }\n );\n // Lấy giá trị configuration merge với giá trị defaultShowing của args nếu như args có thay đổi\n filterConfiguration.set(this.#initConfiguration(args, filterConfiguration.get()));\n // Setting của filter value\n const filterValue = this.storageService.create<TableFilterValue>(\n {\n prefix: this.#filterValue,\n key: !filter?.cacheable ? tempKey : key,\n },\n {\n default: this.#defaultValue(args),\n type: cacheSession || !filter?.cacheable ? 'session' : undefined,\n }\n );\n // Lấy giá trị value merge với giá trị default của args nếu như args có thay đổi\n filterValue.set(this.#initValue(args, filterValue.get()));\n this.#cache[key] = {\n configuration: {\n get: (): TableFilterConfiguration => {\n return filterConfiguration.get();\n },\n set: (configuration: Partial<TableFilterConfiguration>): TableFilterConfiguration => {\n const { inlineExternal } = configuration;\n filterConfiguration.set({\n inlineExternal: inlineExternal!,\n });\n return {\n inlineExternal: inlineExternal!,\n };\n },\n remove: () => {\n filterConfiguration.set(this.#defaultConfiguration(args));\n },\n observer: filterConfiguration.observer.pipe(\n startWith(filterConfiguration.get()),\n // Sử dụng mặc định nếu bị reset\n map(configuration => configuration || this.#defaultConfiguration(args))\n ),\n },\n value: {\n get: (): TableFilterValue => {\n return filterValue.get();\n },\n set: (value: Partial<TableFilterValue>): TableFilterValue => {\n const keys = Object.keys(value || {});\n const current = filterValue.get();\n const { columnOperator, columnFilter, externalFilter } = current;\n const updatedFilter = {\n // Filter column\n columnOperator: keys.includes('columnOperator') ? value?.columnOperator || {} : columnOperator,\n columnFilter: keys.includes('columnFilter') ? value?.columnFilter || {} : columnFilter,\n // Filter external\n externalFilter: keys.includes('externalFilter') ? value?.externalFilter || {} : externalFilter,\n // Force\n notReload: !!value?.notReload,\n };\n filterValue.set({\n ...updatedFilter,\n // Kiểm tra có đang lọc hay không\n filtered: this.#filtered(value),\n });\n return updatedFilter;\n },\n remove: () => {\n filterValue.set(this.#defaultValue(args));\n },\n observer: filterValue.observer.pipe(\n startWith(filterValue.get()),\n // Sử dụng mặc định nếu bị reset\n map(value => value || this.#defaultValue(args))\n ),\n },\n };\n }\n return this.#cache[key];\n };\n\n #filtered = (filterReq: Partial<TableFilterValue>): boolean => {\n const { columnFilter, externalFilter } = filterReq;\n if (\n Object.values({ ...columnFilter, ...externalFilter }).some(val => {\n // Nếu là mảng và mảng có phần tử thì xem như là có filter\n if (Array.isArray(val)) {\n return !!val.length;\n }\n // Nếu là object (date) và có from/to thì xem như là có filter\n if (val && typeof val === 'object') {\n if ('from' in val && !!val.from) {\n return true;\n }\n if ('to' in val && !!val.to) {\n return true;\n }\n return false;\n }\n return val !== undefined && val !== null && val !== '';\n })\n ) {\n return true;\n }\n return false;\n };\n\n #defaultConfiguration = (args: {\n columns: SdTableColumn[] | undefined;\n externalFilters: SdTableExternalFilter[] | undefined;\n }): TableFilterConfiguration => {\n const { externalFilters } = args;\n const inlineExternal: Record<string, boolean> = {};\n // Filter external\n for (const item of externalFilters || []) {\n inlineExternal[item.field] = !!item?.defaultShowing;\n }\n return {\n // Filter external\n inlineExternal,\n };\n };\n\n #defaultValue = (args: {\n columns: SdTableColumn[] | undefined;\n externalFilters: SdTableExternalFilter[] | undefined;\n columnOperator?: Record<string, Operator>;\n }): TableFilterValue => {\n const columnFilter: Record<string, any> = {};\n const externalFilter: Record<string, any> = {};\n const columnOperator: Record<string, Operator> = args.columnOperator || {};\n const { columns, externalFilters } = args;\n // Filter column\n for (const item of columns || []) {\n columnFilter[item.field] = item?.filter?.default;\n if (item?.filter?.operator?.enable && item?.filter?.operator?.default) {\n columnOperator[item.field] = item.filter.operator.default;\n }\n }\n // Filter external\n for (const item of externalFilters || []) {\n if (item.type === 'daterange') {\n externalFilter[item.field] = {\n from: item.default?.from,\n to: item.default?.to,\n };\n } else {\n externalFilter[item.field] = item?.default;\n }\n // externalFilter[item.field] = item?.default;\n }\n return {\n // Filter column\n columnFilter,\n // Filter external\n externalFilter,\n // columnOperator\n columnOperator,\n };\n };\n\n #initConfiguration = (\n args: {\n columns: SdTableColumn[] | undefined;\n externalFilters: SdTableExternalFilter[] | undefined;\n filterDefs: SdTableFilterDefDirective[] | undefined;\n },\n configuration: TableFilterConfiguration\n ): TableFilterConfiguration => {\n const { externalFilters } = args;\n const inlineExternal: Record<string, boolean> = {};\n // Filter external\n for (const item of externalFilters || []) {\n inlineExternal[item.field] = configuration?.inlineExternal?.[item.field] ?? item?.defaultShowing;\n }\n return {\n // Filter external\n inlineExternal,\n };\n };\n\n #initValue = (\n args: {\n columns: SdTableColumn[] | undefined;\n externalFilters: SdTableExternalFilter[] | undefined;\n filterDefs: SdTableFilterDefDirective[] | undefined;\n columnOperator?: Record<string, Operator>;\n },\n value: TableFilterValue\n ): TableFilterValue => {\n const columnFilter: Record<string, any> = {};\n const externalFilter: Record<string, any> = {};\n const columnOperator: Record<string, Operator> = args.columnOperator || {};\n const { columns, externalFilters } = args;\n // Filter column\n for (const item of columns || []) {\n columnFilter[item.field] = value?.columnFilter?.[item.field] ?? item?.filter?.default;\n if (item?.filter?.operator?.enable && item?.filter?.operator?.default) {\n columnOperator[item.field] = item.filter.operator.default;\n }\n }\n // Filter external\n for (const item of externalFilters || []) {\n if (item.type === 'daterange') {\n externalFilter[item.field] = {\n from: value?.externalFilter?.[item.field]?.from ?? item.default?.from,\n to: value?.externalFilter?.[item.field]?.to ?? item.default?.to,\n };\n } else {\n externalFilter[item.field] = value?.externalFilter?.[item.field] ?? item?.default;\n }\n }\n return {\n // Filter column\n columnFilter,\n // Filter external\n externalFilter,\n // columnOperator\n columnOperator,\n };\n };\n}\n","import { animate, state, style, transition, trigger } from '@angular/animations';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Injectable,\n OnDestroy,\n OnInit,\n TemplateRef,\n computed,\n contentChild,\n contentChildren,\n effect,\n inject,\n input,\n signal,\n untracked,\n viewChild,\n} from '@angular/core';\nimport { MatPaginator, MatPaginatorIntl, MatPaginatorModule } from '@angular/material/paginator';\nimport { MatSort, MatSortModule } from '@angular/material/sort';\nimport { MatTable, MatTableModule } from '@angular/material/table';\nimport { SdExcelColumn, SdNotifyService } from '@sdcorejs/angular/services';\nimport { Subject, Subscription, firstValueFrom, isObservable } from 'rxjs';\nimport { debounceTime, map, startWith, switchMap } from 'rxjs/operators';\nimport * as uuid from 'uuid';\nimport { SdTableCellDefDirective } from './directives/sd-table-cell-def.directive';\nimport { SdTableExpandDefDirective } from './directives/sd-table-expand-def.directive';\nimport { SdTableGroupDefDirective, SdTableGroupDefContext } from './directives/sd-table-group-def.directive';\nimport { SdTableFilterDefDirective } from './directives/sd-table-filter-def.directive';\nimport { SdMaterialFooterDefDirective } from './directives/sd-table-footer-def.directive';\nimport { SdTableTitleDefDirective } from './directives/sd-table-title-def.directive';\nimport { SdTableColumn, SdTableColumnLazyValues, SdTableColumnValues } from './models/table-column.model';\nimport { SdTableOption } from './models/table-option.model';\nimport { SdTableFilterRequest, TableFilterRegister } from './services/table-filter/table-filter.model';\n\nimport { CdkColumnDef } from '@angular/cdk/table';\nimport { CdkDrag, CdkDragDrop, CdkDropList, DragDropModule, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { CommonModule, DatePipe, DecimalPipe } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatRadioModule } from '@angular/material/radio';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { SdBaseSecureComponent } from '@sdcorejs/angular/components/base';\nimport { SdButton } from '@sdcorejs/angular/components/button';\nimport { SdQuickAction } from '@sdcorejs/angular/components/quick-action';\nimport { SdDesktopDirective, SdHoverCopyDirective, SdMobileDirective, SdScrollDirective } from '@sdcorejs/angular/directives';\nimport { SdSafeHtmlPipe } from '@sdcorejs/angular/pipes';\n\n// ĐÃ THÊM: Import Utilities để dùng hàm getNestedValue\nimport { Operator, PagingReq } from '@sdcorejs/utils/models';\nimport { Utilities } from '@sdcorejs/utils/fns';\nimport { ArrayUtilities, DateUtilities, NumberUtilities } from '@sdcorejs/angular/utilities/extensions';\n\nimport { ColumnFilterComponent, ColumnTitleComponent, ExternalFilterComponent, MobileFilterComponent } from './components';\nimport { ConfigComponent } from './components/config/config.component';\nimport { DesktopCellComponent } from './components/desktop-cell/desktop-cell.component';\nimport { DesktopCommand } from './components/command/desktop-command.component';\nimport { SdPopupExport } from './components/popup-export/popup-export.component';\nimport { SelectorActionComponent } from './components/selector-action/selector-action.component';\nimport { DEFAULT_TABLE_CONFIG, ISdTableConfiguration, SD_TABLE_CONFIGURATION } from './configurations';\nimport { SdColumnResizeDirective, StickyShadowDirective } from './directives';\nimport { SdTableItem } from './models/table-item.model';\nimport { ConfiguredTableResult } from './models/table-option-config.model';\nimport { SdGroupPipe } from './pipes/sd-group.pipe';\nimport { SdTreePipe } from './pipes/sd-tree.pipe';\nimport { SdSelectionDisabledPipe } from './pipes/selection-disabled.pipe';\nimport { SdSelectionVisibleSelectAllPipe } from './pipes/selection-visible-select-all.pipe';\nimport { SdSelectionVisiblePipe } from './pipes/selection-visible.pipe';\nimport { SdTableExportContext, TableExportService, TableFormatService } from './services';\nimport { ConfigService } from './services/config.service';\nimport { buildColumnWidthMap } from './services/column-width.util';\nimport { SdTableFilterService } from './services/table-filter/table-filter.service';\nimport {\n collectFormattedTreeRows,\n flattenDataTree,\n flattenTree,\n getChildrenFromData,\n getChildrenKey,\n hasLazyChildren,\n resolveDefaultExpanded,\n resolveHasChildren,\n} from './services/tree/tree.util';\nimport { I18nService, TranslatePipe } from '@sdcorejs/angular/i18n';\n\n@Injectable()\nexport class MatPaginatorIntlCro extends MatPaginatorIntl {\n // i18n labels resolved at construction. Reads VI/EN from I18nService.\n readonly #i18n = inject(I18nService);\n override firstPageLabel = this.#i18n.t('core.component.table.paginator.first-page');\n override lastPageLabel = this.#i18n.t('core.component.table.paginator.last-page');\n override itemsPerPageLabel = this.#i18n.t('core.component.table.paginator.items-per-page');\n override nextPageLabel = this.#i18n.t('core.component.table.paginator.next-page');\n override previousPageLabel = this.#i18n.t('core.component.table.paginator.previous-page');\n\n override getRangeLabel = (page: number, pageSize: number, length: number) => {\n if (length === 0 || pageSize === 0) {\n return '';\n }\n const from = page * pageSize + 1;\n const to = from + (length - page * pageSize > pageSize ? pageSize : length - page * pageSize) - 1;\n return `${from}-${to}/${NumberUtilities.toISO(length)}`;\n };\n}\n\n@Component({\n selector: 'sd-table',\n templateUrl: './table.component.html',\n styleUrls: ['./table.component.scss', 'table-sticky-shadow.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: [\n trigger('detailExpand', [\n state('collapsed', style({ height: '0', minHeight: '0', visibility: 'hidden' })),\n state('expanded', style({ height: '*', visibility: 'visible' })),\n transition('expanded <=> collapsed', animate('225ms cubic-bezier(0.4, 0.0, 0.2, 1)')),\n ]),\n ],\n host: {\n '[attr.data-autoid]': 'autoId()',\n '[attr.data-loading]': 'loading() ? \"true\" : \"false\"',\n },\n providers: [\n DatePipe,\n DecimalPipe,\n CdkColumnDef,\n SdTableFilterService,\n TableFormatService,\n TableExportService,\n ConfigService,\n {\n provide: MatPaginatorIntl,\n useClass: MatPaginatorIntlCro,\n },\n ],\n imports: [\n CommonModule,\n FormsModule,\n MatMenuModule,\n MatPaginatorModule,\n MatIconModule,\n MatTableModule,\n MatSortModule,\n MatProgressSpinnerModule,\n MatCheckboxModule,\n MatRadioModule,\n DragDropModule,\n SdButton,\n DesktopCommand,\n DesktopCellComponent,\n ColumnTitleComponent,\n ExternalFilterComponent,\n ConfigComponent,\n ColumnFilterComponent,\n MobileFilterComponent,\n SdGroupPipe,\n SdTreePipe,\n SdSelectionVisiblePipe,\n SdSelectionVisibleSelectAllPipe,\n SdSafeHtmlPipe,\n SdSelectionDisabledPipe,\n SdScrollDirective,\n SdDesktopDirective,\n SdMobileDirective,\n SdHoverCopyDirective,\n SelectorActionComponent,\n StickyShadowDirective,\n SdColumnResizeDirective,\n TranslatePipe,\n ],\n})\nexport class SdTable<T = unknown> extends SdBaseSecureComponent implements OnInit, AfterViewInit, OnDestroy {\n // ... (Giữ nguyên toàn bộ phần khai báo biến, constructor, lifecycle hooks và các hàm filter, load, export, v.v...)\n // ==========================================\n // 1. SIGNAL INPUTS\n // ==========================================\n autoIdInput = input<string | undefined | null>(undefined, { alias: 'autoId' });\n autoId = computed(() => (this.autoIdInput() ? `components-table-${this.autoIdInput()}` : undefined));\n option = input.required<SdTableOption<T>>();\n\n // ==========================================\n // 2. SIGNAL QUERIES\n // ==========================================\n table = viewChild(MatTable);\n configComponent = viewChild(ConfigComponent);\n sdPopupExport = viewChild(SdPopupExport);\n scroll = viewChild(SdScrollDirective);\n quickAction = viewChild(SdQuickAction);\n externalFilter = viewChild(ExternalFilterComponent);\n mobileFilter = viewChild(MobileFilterComponent);\n paginator = viewChild(MatPaginator);\n sort = viewChild(MatSort);\n\n sdSubInformation = contentChild(SdTableExpandDefDirective);\n sdGroupDef = contentChild(SdTableGroupDefDirective);\n sdCellDefs = contentChildren(SdTableCellDefDirective);\n sdFooterDefs = contentChildren(SdMaterialFooterDefDirective);\n sdFilterDefs = contentChildren(SdTableFilterDefDirective);\n sdTitleDefs = contentChildren(SdTableTitleDefDirective);\n\n // ==========================================\n // 3. COMPUTED FROM QUERIES\n // ==========================================\n cellDef = computed(() => {\n const map: Record<string, SdTableCellDefDirective> = {};\n for (const def of this.sdCellDefs()) {\n const field = def.sdTableCellDef();\n if (field) map[field] = def;\n }\n return map;\n });\n\n footerDef = computed(() => {\n const map: Record<string, SdMaterialFooterDefDirective> = {};\n for (const def of this.sdFooterDefs()) {\n const field = def.sdTableFooterDef();\n if (field) map[field] = def;\n }\n return map;\n });\n\n hasFooter = computed(() => Object.keys(this.footerDef()).length > 0);\n\n titleDef = computed(() => {\n const map: Record<string, SdTableTitleDefDirective> = {};\n for (const def of this.sdTitleDefs()) {\n const field = def.sdTableTitleDef();\n if (field) map[field] = def;\n }\n return map;\n });\n\n // ==========================================\n // 4. SIGNAL STATE\n // ==========================================\n tableOption = signal<SdTableOption<T> | undefined>(undefined);\n configuration = signal<ConfiguredTableResult | undefined>(undefined);\n\n items = signal<SdTableItem<T>[]>([]);\n selectedTableItems = signal<SdTableItem<T>[]>([]);\n total = signal<number | undefined>(undefined);\n\n loading = signal(false);\n isSelectAll = signal(false);\n\n isFiltered = signal(false);\n requireFiltered = signal(false);\n\n #tableId = uuid.v4();\n filterRegister!: TableFilterRegister;\n key = uuid.v4();\n\n columnOperator: Record<string, Operator> = {};\n columnFilter?: Record<string, any> = {};\n\n #localItems: SdTableItem<T>[] = [];\n #subscription = new Subscription();\n #reload = new Subject<{ force: boolean }>();\n #loadCompleted = false;\n\n cacheValues: Record<string, any[]> = {};\n #cacheObjValues: Record<string, Record<string, string>> = {};\n #itemIndexMap = new WeakMap<SdTableItem<T>, number>();\n #treeExpandState = new Map<string, boolean>();\n treeRevision = signal(0);\n\n // 1. Private Services\n #ref = inject(ChangeDetectorRef);\n #configService = inject(ConfigService);\n #gridFilterService = inject(SdTableFilterService);\n #notifyService = inject(SdNotifyService);\n readonly #i18n = inject(I18nService);\n #tableFormatService = inject(TableFormatService);\n #tableExportService = inject(TableExportService);\n\n // Expose state signals từ TableExportService cho template binding.\n exporting = this.#tableExportService.exporting;\n exportTitle = this.#tableExportService.exportTitle;\n\n // 2. Public & Optional Token\n tableConfiguration = inject<ISdTableConfiguration>(SD_TABLE_CONFIGURATION, { optional: true });\n\n constructor() {\n super();\n\n effect(() => {\n const option = this.option();\n if (option) {\n untracked(() => {\n const initOpt = this.#initConfiguration({ ...option });\n this.tableOption.set(initOpt);\n this.#loadCompleted = false;\n\n const storage = this.#configService.init(initOpt);\n this.#subscription.add(\n storage.observer.pipe(startWith(storage.subject.getValue())).subscribe(() => {\n const configurationResult = this.#configService.loadConfigurationResult(initOpt, storage.get());\n const displayColumns = configurationResult.displayedColumns || [];\n this.#ref.detectChanges();\n this.#tableFormatService\n .loadValues(\n initOpt.columns.filter(column => displayColumns.includes(column.field)),\n this.cacheValues,\n this.#cacheObjValues\n )\n .then(() => {\n this.configuration.set(configurationResult);\n this.#loadFilterRegister();\n if (this.filterRegister) {\n this.#reload.next({ force: true });\n }\n })\n .finally(() => {\n this.#ref.detectChanges();\n });\n })\n );\n });\n }\n });\n\n effect(() => {\n const paginator = this.paginator();\n if (paginator) {\n untracked(() => {\n this.#subscription.add(paginator.page.subscribe(() => this.#reload.next({ force: false })));\n });\n }\n });\n\n effect(() => {\n const sort = this.sort();\n if (sort) {\n untracked(() => {\n this.#subscription.add(sort.sortChange.subscribe(() => this.#reload.next({ force: false })));\n });\n }\n });\n\n effect(() => {\n const items = this.items();\n this.#itemIndexMap = new WeakMap();\n items.forEach((item, idx) => this.#itemIndexMap.set(item, idx));\n });\n\n this.#subscription.add(\n this.#configService.widthChange$.subscribe(({ field, width }) => {\n // Update configuration signal local — KHÔNG gọi loadValues/reload\n const conf = this.configuration();\n if (!conf) return;\n const firstColumns = conf.firstColumns.map(c =>\n c.field === field ? { ...c, width } : c\n );\n const column = { ...conf.column };\n if (column[field]) {\n column[field] = { ...column[field], width };\n }\n const fixedColumn = { ...conf.fixedColumn };\n if (fixedColumn[field]) {\n fixedColumn[field] = { ...fixedColumn[field], width };\n }\n this.configuration.set({ ...conf, firstColumns, column, fixedColumn });\n })\n );\n }\n\n ngOnInit() {}\n\n ngAfterViewInit() {\n this.#subscription.add(\n this.#reload\n .pipe(\n debounceTime(200),\n switchMap(async data => {\n const filterInfo = this.getFilterRequest();\n const result = await this.#load(filterInfo, !this.#loadCompleted || data.force);\n this.#loadCompleted = true;\n return result;\n })\n )\n .subscribe(this.#render)\n );\n }\n\n ngOnDestroy() {\n this.#subscription.unsubscribe();\n }\n\n // --- GIỮ NGUYÊN TẤT CẢ CÁC HÀM FILTER VÀ EXPORT CŨ CỦA BẠN ---\n #filterExportInfo = (pageNumber: number, pageSize: number): SdTableFilterRequest => {\n const { columnOperator, columnFilter, externalFilter } = this.filterRegister.value.get();\n return {\n columnOperator: columnOperator || {},\n rawColumnFilter: columnFilter || {},\n rawExternalFilter: externalFilter || {},\n orderBy: this.sort()?.active || '',\n orderDirection: this.sort()?.direction === 'asc' ? 'ASC' : this.sort()?.direction === 'desc' ? 'DESC' : undefined,\n pageNumber,\n pageSize,\n isExported: true,\n };\n };\n\n #initConfiguration = (option: SdTableOption): SdTableOption => {\n option.paginate = {\n hidden: option?.paginate?.hidden,\n pageSize: option?.paginate?.pageSize ?? this.tableConfiguration?.paginate?.pageSize ?? DEFAULT_TABLE_CONFIG.paginate?.pageSize,\n pages: option?.paginate?.pages ?? this.tableConfiguration?.paginate?.pages ?? DEFAULT_TABLE_CONFIG.paginate?.pages,\n showFirstLastButtons: option?.paginate?.showFirstLastButtons ?? this.tableConfiguration?.paginate?.showFirstLastButtons ?? false,\n hidePageSize: option?.paginate?.hidePageSize ?? false,\n };\n option.filter = option.filter || {};\n option.filter.hideInlineFilter = option?.filter?.hideInlineFilter ?? this.tableConfiguration?.filter?.hideInlineFilter;\n option.filter.externalFilterPerRow = option?.filter?.externalFilterPerRow ?? this.tableConfiguration?.filter?.externalFilterPerRow;\n option.filter.manualFilter = option?.filter?.manualFilter ?? this.tableConfiguration?.filter?.manualFilter;\n option.filter.hideExternalFilterToolbar =\n option?.filter?.hideExternalFilterToolbar ?? this.tableConfiguration?.filter?.hideExternalFilterToolbar;\n for (const column of option.columns || []) {\n if (column.filter?.operator?.enable) {\n if (!column.filter?.operator?.list?.length) {\n column.filter.operator.list = this.tableConfiguration?.filter?.operator?.list?.[column.type] || [];\n }\n\n this.columnOperator[column?.field] = this.tableConfiguration?.filter?.operator?.default?.[column.type]!;\n if (column.filter.operator.default && column.filter.operator.list?.some(el => el === column.filter?.operator?.default)) {\n this.columnOperator[column.field] = column.filter.operator.default;\n }\n }\n }\n return option;\n };\n\n #loadFilterRegister = () => {\n const opt = this.tableOption();\n if (opt && !this.filterRegister) {\n this.filterRegister = this.#gridFilterService.register(opt?.filter, {\n id: this.#tableId,\n columns: opt?.columns,\n externalFilters: opt?.filter?.externalFilters,\n filterDefs: [...this.sdFilterDefs()],\n columnOperator: this.columnOperator,\n });\n\n this.#subscription.add(\n this.filterRegister.value.observer\n .pipe(\n debounceTime(500),\n map(filterValue => {\n const { columnOperator, columnFilter, notReload } = filterValue;\n this.columnOperator = columnOperator || {};\n // Sync IN PLACE — không gán object clone mới. column-filter chia sẻ\n // reference this.columnFilter qua [columnFilter] input; nếu gán clone\n // mới, cf giữ ref cũ (do OnPush + reload async lag) → ghi clear vào\n // object orphan → giá trị cũ persist. Giữ ref ổn định để cf + table\n // luôn trỏ cùng 1 object.\n this.#syncColumnFilterInPlace(columnFilter || {});\n if (!notReload) {\n if (this.paginator()) {\n this.paginator()!.pageIndex = 0;\n }\n this.#reload.next({ force: false });\n }\n })\n )\n .subscribe()\n );\n }\n };\n\n // Đồng bộ this.columnFilter với `next` mà GIỮ NGUYÊN reference object.\n // column-filter chia sẻ ref này qua [columnFilter] — reassign clone mới sẽ\n // orphan ref cũ (cf vẫn ghi vào đó do CD lag) khiến clear/giá trị stale.\n #syncColumnFilterInPlace = (next: Record<string, any>) => {\n const cur = this.columnFilter ?? (this.columnFilter = {});\n if (cur === next) return;\n for (const key of Object.keys(cur)) {\n if (!(key in next)) delete cur[key];\n }\n Object.assign(cur, next);\n };\n\n #filterLocal = (localItems: SdTableItem<T>[], filterInfo: SdTableFilterRequest) => {\n const opt = this.tableOption()!;\n const { columns } = opt;\n const { rawColumnFilter, orderBy, orderDirection, pageSize, pageNumber } = filterInfo;\n const items = localItems.filter(tableItem => {\n const item = tableItem.data;\n for (const column of columns) {\n const { field, type } = column;\n const filterValue: string = (rawColumnFilter[field] || '').toString().trim().toLowerCase();\n\n // SỬA: Dùng getNestedValue để hỗ trợ nested field trong filterLocal\n const rawColVal = Utilities.getNestedValue(item, field);\n const columnValue: string = (rawColVal || '').toString().trim().toLowerCase();\n\n if (filterValue) {\n if (!columnValue && type !== 'datetime' && type !== 'date' && type !== 'time') {\n return false;\n }\n if (type === 'string') {\n if (columnValue.indexOf(filterValue) === -1) {\n return false;\n }\n } else if (type === 'values' || type === 'lazy-values') {\n const columnType = column as SdTableColumnValues<T> | SdTableColumnLazyValues<T>;\n const isMultiple = columnType.option.selection === 'MULTIPLE';\n if (isMultiple && Array.isArray(rawColVal)) {\n const columnValues: string[] =\n rawColVal.map((i: any) =>\n (Utilities.getNestedValue(i, columnType.option.valueField) ?? '').toString().trim().toLowerCase()\n ) ?? [];\n const filterValues: string[] = rawColumnFilter[field]?.map((v: any) => (v ?? '').toString().trim().toLowerCase());\n if (filterValues?.length && filterValues.every(fv => !columnValues.includes(fv))) {\n return false;\n }\n } else {\n if (columnValue !== filterValue) {\n return false;\n }\n }\n } else if (type === 'number') {\n const fValue = +filterValue.replace('>=', '').replace('<=', '').replace('>', '').replace('<', '');\n const cValue = +columnValue;\n if (fValue || fValue === 0) {\n if (!cValue && cValue !== 0) {\n return false;\n }\n if (filterValue.indexOf('>=') > -1 && cValue < fValue) {\n return false;\n } else if (filterValue.indexOf('<=') > -1 && cValue > fValue) {\n return false;\n } else if (filterValue.indexOf('<') > -1 && cValue >= fValue) {\n return false;\n } else if (filterValue.indexOf('>') > -1 && cValue <= fValue) {\n return false;\n } else if (cValue !== fValue) {\n return false;\n }\n }\n } else if (type === 'boolean') {\n if ((filterValue === '1' || filterValue === 'true') && columnValue !== '1' && columnValue !== 'true') {\n return false;\n } else if ((filterValue === '0' || filterValue === 'false') && columnValue !== '0' && columnValue !== 'false') {\n return false;\n }\n } else if (type === 'datetime' || type === 'date' || type === 'time') {\n const from = rawColumnFilter[field]?.from ?? rawColumnFilter[field];\n const to = rawColumnFilter[field]?.to ?? rawColumnFilter[field];\n const fromDate = DateUtilities.begin(from);\n const toDate = DateUtilities.end(to);\n if (fromDate || toDate) {\n if (!columnValue) {\n return false;\n }\n\n const columnTime = new Date(columnValue).getTime();\n const fromDateTime = fromDate?.getTime() || null;\n const toDateTime = toDate?.getTime() || null;\n\n if (fromDateTime && fromDateTime > columnTime) {\n return false;\n }\n if (toDateTime && columnTime > toDateTime) {\n return false;\n }\n }\n }\n }\n }\n return true;\n });\n // Sort\n if (orderBy && orderDirection) {\n const column = columns.find(e => e.field === orderBy);\n if (column) {\n const { type, field } = column;\n items.sort((tableItemCurrent, tableItemNext) => {\n const data = tableItemCurrent.data;\n const next = tableItemNext.data;\n // SỬA: Dùng getNestedValue cho sorting\n const dataVal = Utilities.getNestedValue(data, field);\n const nextVal = Utilities.getNestedValue(next, field);\n\n if (type === 'number') {\n return (dataVal || 0) - (nextVal || 0);\n }\n if (type === 'date' || type === 'datetime' || type === 'time') {\n const d1 = new Date(dataVal || '').getTime();\n const d2 = new Date(nextVal || '').getTime();\n return d1 - d2;\n }\n const s1 = (dataVal || '').toString();\n const s2 = (nextVal || '').toString();\n if (s1 > s2) {\n return 1;\n }\n if (s1 < s2) {\n return -1;\n }\n return 0;\n });\n if (orderDirection === 'DESC') {\n items.reverse();\n }\n }\n }\n return {\n items: items.filter((item, index) => {\n return index >= pageNumber * pageSize && index < (pageNumber + 1) * pageSize;\n }),\n total: items.length,\n };\n };\n\n getFilterRequest = (): SdTableFilterRequest => {\n const { columnOperator, columnFilter, externalFilter } = this.filterRegister.value.get();\n return {\n columnOperator: columnOperator || {},\n rawColumnFilter: columnFilter || {},\n rawExternalFilter: externalFilter || {},\n orderBy: this.sort()?.active || '',\n orderDirection: this.sort()?.direction === 'asc' ? 'ASC' : this.sort()?.direction === 'desc' ? 'DESC' : undefined,\n pageNumber: this.paginator()?.pageIndex || 0,\n pageSize: this.paginator()?.pageSize || this.tableOption()?.paginate?.pageSize || 50,\n visibledColumns: ArrayUtilities.union('field', this.configuration()?.firstColumns || [], this.configuration()?.secondColumns || []),\n };\n };\n\n #isFiltered = (filterReq: SdTableFilterRequest) => {\n const { pageNumber, rawColumnFilter, rawExternalFilter } = filterReq;\n if (pageNumber !== 0) {\n return true;\n }\n if (\n Object.values({ ...rawColumnFilter }).some(val => {\n if (Array.isArray(val)) {\n return !!val.length;\n }\n if (val && typeof val === 'object') {\n if ('from' in val && !!val.from) {\n return true;\n }\n if ('to' in val && !!val.to) {\n return true;\n }\n return false;\n }\n return val !== undefined && val !== null && val !== '';\n })\n ) {\n return true;\n }\n if (\n Object.values({ ...rawExternalFilter }).some(val => {\n if (Array.isArray(val)) {\n return !!val.length;\n }\n if (val && typeof val === 'object') {\n if ('from' in val && !!val.from) {\n return true;\n }\n if ('to' in val && !!val.to) {\n return true;\n }\n return false;\n }\n return val !== undefined && val !== null && val !== '';\n })\n ) {\n return true;\n }\n return false;\n };\n\n #checkFilter = (filterReq: SdTableFilterRequest) => {\n this.isFiltered.set(this.#isFiltered(filterReq));\n this.requireFiltered.set(!!this.tableOption()?.filter?.externalFilters?.some(e => e.required));\n };\n\n #load = async (\n filterReq: SdTableFilterRequest,\n force = true\n ): Promise<{\n items: SdTableItem<T>[];\n total: number;\n }> => {\n this.loading.set(true);\n this.#ref.detectChanges();\n this.#checkFilter(filterReq);\n\n const opt = this.tableOption()!;\n if (opt.type === 'server') {\n const { items, onFilter } = opt;\n try {\n onFilter?.(filterReq, {\n externalFilterValid: !this.externalFilter()?.form?.invalid,\n });\n } catch (err) {\n console.error(err);\n }\n if (this.externalFilter()?.form?.invalid) {\n this.loading.set(false);\n this.#ref.detectChanges();\n return {\n items: [],\n total: 0,\n };\n }\n const pagingReq = this.#convertPagingReq(filterReq);\n const data = await items(filterReq, pagingReq).catch(err => {\n console.error(err);\n return {\n items: [] as T[],\n total: 0,\n };\n });\n return {\n items: await this.#tableFormatService.format(data?.items, opt.columns, this.cacheValues, this.#cacheObjValues).finally(() => {\n this.loading.set(false);\n this.#ref.detectChanges();\n }),\n total: data?.total || 0,\n };\n }\n if (force) {\n const { items } = opt;\n const results = items();\n let data: T[] = [];\n if (results instanceof Promise) {\n data = await results.catch(err => {\n this.#notifyService.warning(this.#i18n.t('core.component.table.error-occurred'));\n console.error(err);\n return [];\n });\n } else {\n data = results;\n }\n if (!Array.isArray(data)) {\n this.#notifyService.warning(this.#i18n.t('core.component.table.not-an-array'));\n data = [];\n }\n this.#localItems = await this.#tableFormatService.format(data, opt.columns, this.cacheValues, this.#cacheObjValues);\n }\n this.loading.set(false);\n this.#ref.detectChanges();\n return this.#filterLocal(this.#localItems, filterReq);\n };\n\n #render = async (\n args: { items: SdTableItem<T>[]; total: number },\n scrollTop = true,\n additionArgs?: { fromSource?: 'PAGING' | 'RELOAD' }\n ) => {\n if (scrollTop) {\n this.scroll()?.scrollTop();\n }\n\n const treeOpt = this.tableOption()?.tree;\n if (treeOpt) {\n this.#saveTreeExpandState(this.items());\n }\n\n this.items.set(args?.items || []);\n this.total.set(args?.total || 0);\n\n if (treeOpt) {\n this.#initTreeMeta(this.items(), treeOpt);\n await this.#expandDefaultBranches(this.items(), treeOpt);\n this.treeRevision.update(n => n + 1);\n }\n\n // Restore selection từ preservedSelectedMap (chỉ khi preserveSelection bật).\n // Phải chạy TRƯỚC applyDefaultSelected để user-selection ưu tiên hơn default.\n this.#restorePreservedSelection();\n\n // Áp dụng defaultSelected: pre-select các item thỏa predicate\n this.#applyDefaultSelected();\n\n await this.tableOption()?.reload?.onReload?.(this.items(), additionArgs);\n this.#syncSelectAllState();\n this.#updateSelectedItems();\n\n setTimeout(() => {\n this.table()?.updateStickyColumnStyles();\n }, 0);\n };\n\n reload = async (force = true, scrollTop = true) => {\n this.externalFilter()?.updateFilter?.();\n // Commit pending column filter value (input/input-number gõ dở chưa enter/blur)\n // vào filterRegister trước khi đọc filter request — tránh storage stale.\n this.filterRegister?.value.set({\n columnOperator: this.columnOperator || {},\n columnFilter: this.columnFilter,\n notReload: true,\n });\n const data = await this.#load(this.getFilterRequest(), force);\n this.#render(data, scrollTop, { fromSource: 'RELOAD' });\n };\n\n #exportedItems = async (pageNumber = 0, pageSize = 100) => {\n const opt = this.tableOption()!;\n if (opt.export?.type === 'default' && opt.export?.items) {\n let result = opt.export?.items(this.#filterExportInfo(pageNumber, pageSize));\n if (Array.isArray(result)) {\n return result;\n }\n if (isObservable(result)) {\n result = firstValueFrom(result) as any;\n }\n if (isObservable(result)) {\n result = firstValueFrom(result) as any;\n }\n return await result;\n } else {\n const filterReq = this.#filterExportInfo(pageNumber, pageSize);\n if (opt.type === 'server') {\n const pagingReq = this.#convertPagingReq(filterReq);\n const result = opt.items(filterReq, pagingReq);\n return await result;\n } else {\n let exportedItems: any[] = [];\n if (typeof opt.items === 'function') {\n const results = opt.items();\n if (results instanceof Promise) {\n exportedItems = await results;\n } else {\n exportedItems = results;\n }\n } else {\n exportedItems = opt.items;\n }\n if (opt.tree) {\n exportedItems = flattenDataTree(exportedItems, opt.tree);\n }\n return this.#filterLocal(exportedItems, filterReq);\n }\n }\n };\n\n // Helper tạo Context truyền cho Service\n #createExportContext = (): SdTableExportContext => {\n return {\n option: this.tableOption()!,\n configuration: this.configuration(),\n total: this.total() || 0,\n cacheObjValues: this.#cacheObjValues,\n getFilterInfo: () => this.getFilterRequest(),\n fetchChunk: (pageNumber: number, pageSize: number) => this.#exportedItems(pageNumber, pageSize),\n };\n };\n\n exportExcel = (columns?: SdExcelColumn[]) => {\n this.#tableExportService.exportExcel(this.#createExportContext(), columns);\n };\n\n exportCSV = (columns?: SdExcelColumn[]) => {\n this.#tableExportService.exportCSV(this.#createExportContext(), columns);\n };\n\n exportCustom = () => {\n this.#tableExportService.exportCustom(this.#createExportContext());\n };\n\n #saveTreeExpandState = (rows: SdTableItem<T>[]) => {\n for (const row of rows) {\n if (row.meta.tree?.isExpanded) {\n this.#treeExpandState.set(row.meta.id, true);\n }\n for (const child of row.meta.tree?.childItems ?? []) {\n this.#saveTreeExpandState([child]);\n }\n }\n };\n\n #initTreeMeta = (rows: SdTableItem<T>[], option: NonNullable<SdTableOption<T>['tree']>, level = 0, parentId?: string) => {\n for (const row of rows) {\n const saved = this.#treeExpandState.get(row.meta.id);\n row.meta.tree = {\n ...row.meta.tree,\n level,\n parentId,\n hasChildren: resolveHasChildren(row, option),\n isExpanded: saved ?? resolveDefaultExpanded(level, option),\n isExpanding: false,\n };\n }\n };\n\n #ensureChildItemsFormatted = async (row: SdTableItem<T>) => {\n if (row.meta.tree?.childItems?.length) return;\n const opt = this.tableOption()!;\n const treeOpt = opt.tree!;\n const raw = getChildrenFromData(row.data, treeOpt);\n if (!raw.length) return;\n const formatted = await this.#tableFormatService.format(raw, opt.columns, this.cacheValues, this.#cacheObjValues);\n row.meta.tree!.childItems = formatted;\n const childLevel = (row.meta.tree!.level ?? 0) + 1;\n for (const child of formatted) {\n const saved = this.#treeExpandState.get(child.meta.id);\n child.meta.tree = {\n level: childLevel,\n parentId: row.meta.id,\n hasChildren: resolveHasChildren(child, treeOpt),\n isExpanded: saved ?? resolveDefaultExpanded(childLevel, treeOpt),\n isExpanding: false,\n };\n }\n };\n\n #expandDefaultBranches = async (rows: SdTableItem<T>[], option: NonNullable<SdTableOption<T>['tree']>) => {\n const maxDepth = option.maxDepth;\n for (const row of rows) {\n if (!row.meta.tree?.isExpanded || !row.meta.tree.hasChildren) continue;\n const level = row.meta.tree.level ?? 0;\n const depthOk = maxDepth === undefined || level < maxDepth;\n if (!depthOk) continue;\n await this.#ensureChildItemsFormatted(row);\n const children = row.meta.tree.childItems ?? [];\n if (children.length) {\n await this.#expandDefaultBranches(children, option);\n }\n }\n };\n\n onTreeToggle = async (row: SdTableItem<T>) => {\n const treeOpt = this.tableOption()?.tree;\n if (!treeOpt || !row.meta.tree?.hasChildren || row.meta.tree.isExpanding) return;\n\n if (row.meta.tree.isExpanded) {\n row.meta.tree.isExpanded = false;\n this.#treeExpandState.delete(row.meta.id);\n this.treeRevision.update(n => n + 1);\n this.#ref.markForCheck();\n return;\n }\n\n try {\n if (hasLazyChildren(row, treeOpt)) {\n row.meta.tree.isExpanding = true;\n this.#ref.markForCheck();\n const key = getChildrenKey(treeOpt);\n const result = await Promise.resolve(treeOpt.onExpandChildren!(row.data));\n (row.data as Record<string, unknown>)[key] = Array.isArray(result) ? result : [];\n row.meta.tree.hasChildren = resolveHasChildren(row, treeOpt);\n }\n await this.#ensureChildItemsFormatted(row);\n if (!row.meta.tree.childItems?.length && getChildrenFromData(row.data, treeOpt).length === 0) {\n row.meta.tree.hasChildren = false;\n return;\n }\n row.meta.tree.isExpanded = true;\n this.#treeExpandState.set(row.meta.id, true);\n const maxDepth = treeOpt.maxDepth;\n const level = row.meta.tree.level ?? 0;\n if (maxDepth === undefined || level + 1 < maxDepth) {\n await this.#expandDefaultBranches(row.meta.tree.childItems ?? [], treeOpt);\n }\n } catch (err) {\n console.error(err);\n this.#notifyService.warning(this.#i18n.t('core.component.table.error-occurred'));\n } finally {\n if (row.meta.tree) {\n row.meta.tree.isExpanding = false;\n }\n this.treeRevision.update(n => n + 1);\n this.#ref.markForCheck();\n }\n };\n\n onFilterChange = () => {\n this.externalFilter()?.updateFilter?.();\n this.filterRegister.value.set({\n columnOperator: this.columnOperator || {},\n columnFilter: this.columnFilter,\n });\n };\n\n // Blur input filter: chỉ commit giá trị vào filterRegister, KHÔNG trigger reload.\n // Reload chỉ chạy khi user enter hoặc bấm nút tải lại.\n onFilterCommit = () => {\n this.filterRegister?.value.set({\n columnOperator: this.columnOperator || {},\n columnFilter: this.columnFilter,\n notReload: true,\n });\n };\n\n onExpand = async (rowData: SdTableItem<T>) => {\n const opt = this.tableOption()!;\n if (opt.expand?.always || rowData.meta.expand?.isExpanding) {\n return;\n }\n if (rowData.meta.expand?.isExpanded) {\n rowData.meta.expand.isExpanded = false;\n return;\n }\n const data = opt.expand?.onExpand?.(rowData.data);\n if (!opt.expand?.multiple) {\n this.items().forEach(item => (item.meta.expand!.isExpanding = item.meta.expand!.isExpanded = false));\n }\n if (data instanceof Promise) {\n rowData.meta.expand!.isExpanding = true;\n data\n .then(res => {\n rowData.meta.expand!.data = res;\n rowData.meta.expand!.isExpanded = true;\n })\n .finally(() => (rowData.meta.expand!.isExpanding = false));\n } else {\n rowData.meta.expand!.data = data;\n rowData.meta.expand!.isExpanded = true;\n }\n };\n\n onSelect = (rowData: SdTableItem<T>) => {\n const opt = this.tableOption()!;\n const selectedData = () => this.#getSelectedRowData();\n if (rowData.meta.group?.items?.length) {\n rowData.meta.group.items.forEach(e => (e.meta.selector!.isSelected = rowData.meta.selector!.isSelected));\n opt.selector?.onSelect?.(rowData.data, selectedData());\n this.#syncSelectAllState();\n this.#updateSelectedItems();\n } else {\n if (opt.selector?.single) {\n this.#getSelectionRows()\n .filter(e => e !== rowData)\n .forEach(e => (e.meta.selector!.isSelected = false));\n // single + preserve: chỉ giữ MỘT item trong map (item vừa chọn nếu isSelected,\n // hoặc empty nếu vừa bỏ chọn). Off-page items có thể đã ở trong map → xoá hết\n // trước khi #updateSelectedItems sync entry mới.\n if (this.#preserveEnabled()) {\n this.#preservedSelectedMap.clear();\n }\n opt.selector?.onSelect?.(rowData.data, selectedData());\n this.isSelectAll.set(false);\n this.#updateSelectedItems();\n return;\n }\n opt.selector?.onSelect?.(rowData.data, selectedData());\n this.#syncSelectAllState();\n this.#updateSelectedItems();\n }\n };\n\n onSelectAll = () => {\n const opt = this.tableOption();\n const isSelected = this.isSelectAll();\n this.#getSelectionRows().forEach(e => {\n if (e.meta.selector!.selectable && (!opt?.selector?.actions?.length || e.meta.selector!.actions?.length)) {\n e.meta.selector!.isSelected = isSelected;\n }\n });\n opt?.selector?.onSelectAll?.(this.#getSelectedRowData());\n this.#updateSelectedItems();\n };\n\n onClearSelection = (items?: SdTableItem<T>[]) => {\n items = items || this.items();\n this.isSelectAll.set(false);\n items?.forEach(e => (e.meta.selector!.isSelected = false));\n // User explicit X — clear toàn bộ preserved map (bao gồm cả off-page items).\n if (this.#preserveEnabled()) {\n this.#preservedSelectedMap.clear();\n }\n this.#updateSelectedItems();\n };\n\n #getSelectionRows = (): SdTableItem<T>[] => {\n const roots = this.items();\n const treeOpt = this.tableOption()?.tree;\n if (!treeOpt) return roots;\n return flattenTree(roots, treeOpt);\n };\n\n #getSelectedRowData = (): T[] =>\n this.#getSelectionRows()\n .filter(e => e.meta.selector!.isSelected)\n .map(e => e.data);\n\n #applyDefaultSelected = () => {\n const defaultSelected = this.tableOption()?.selector?.defaultSelected;\n if (!defaultSelected) return;\n const treeOpt = this.tableOption()?.tree;\n const rows = treeOpt ? collectFormattedTreeRows(this.items()) : this.items();\n rows.forEach(item => {\n item.meta.selector!.isSelected = defaultSelected(item.data);\n });\n };\n\n #syncSelectAllState = () => {\n const visible = this.#getSelectionRows();\n this.isSelectAll.set(visible.length > 0 && visible.every(e => e.meta.selector?.isSelected));\n };\n\n // ==========================================\n // GROUP HELPERS — sync selection + expand state cho group header rows\n // ==========================================\n\n /** Children selectable của 1 group header (lọc bỏ children không selectable). */\n #groupSelectableChildren = (header: SdTableItem<T>): SdTableItem<T>[] => {\n const children = header.meta.group?.items || [];\n return children.filter(c => c.meta.selector?.selectable !== false);\n };\n\n /** true nếu MỌI selectable child trong group đều selected. Group rỗng (không child) → false. */\n isGroupAllSelected = (header: SdTableItem<T>): boolean => {\n const sel = this.#groupSelectableChildren(header);\n return sel.length > 0 && sel.every(c => c.meta.selector!.isSelected);\n };\n\n /** true nếu CÓ MỘT VÀI selectable child selected nhưng KHÔNG phải tất cả. */\n isGroupIndeterminate = (header: SdTableItem<T>): boolean => {\n const sel = this.#groupSelectableChildren(header);\n if (sel.length === 0) return false;\n const some = sel.some(c => c.meta.selector!.isSelected);\n const all = sel.every(c => c.meta.selector!.isSelected);\n return some && !all;\n };\n\n /** Toggle select-all cho 1 group: set isSelected cho mọi selectable child, sync state. */\n onSelectGroup = (header: SdTableItem<T>, checked: boolean) => {\n const sel = this.#groupSelectableChildren(header);\n sel.forEach(c => (c.meta.selector!.isSelected = checked));\n const opt = this.tableOption();\n opt?.selector?.onSelectAll?.(this.#getSelectedRowData());\n this.#syncSelectAllState();\n this.#updateSelectedItems();\n };\n\n // Map<groupKey, isExpanded> — table own state, pass vào SdGroupPipe arg 3.\n // why: pipe stateless, persist toggle qua các lần re-eval bằng Map external. Mutate Map\n // KHÔNG tự re-trigger pipe (default pure: true) — gọi items.update để invalidate input.\n groupExpandState = new Map<string, boolean>();\n\n /** Toggle expand/collapse cho 1 group (chỉ ý nghĩa khi option.group.collapsible). */\n toggleGroupExpand = (header: SdTableItem<T>) => {\n if (!header.meta.group?.key) return;\n const key = header.meta.group.key;\n const defaultExpanded = !this.tableOption()?.group?.defaultCollapsed;\n const current = this.groupExpandState.has(key)\n ? !!this.groupExpandState.get(key)\n : defaultExpanded;\n this.groupExpandState.set(key, !current);\n header.meta.group.isExpanded = !current;\n // why: trigger pipe re-eval — Map mutation không thay đổi reference items() nên cần update.\n this.items.update(arr => [...arr]);\n };\n\n /**\n * Predicate cho matRowDef.when — phân biệt group header row vs data row.\n * Group header row dùng matRowDef riêng với column list ['sdGroupHeader'] (1 cell duy nhất).\n * Data row dùng displayedColumns nguyên vẹn.\n */\n isGroupHeaderRow = (_idx: number, row: SdTableItem<T>): boolean =>\n row?.meta?.group?.isGroupHeader === true;\n isDataRow = (_idx: number, row: SdTableItem<T>): boolean =>\n row?.meta?.group?.isGroupHeader !== true;\n\n /**\n * Colspan cho cell sdGroupHeader trên group row = displayedColumns.length.\n * Span TOÀN BỘ width data row vì group row chỉ có 1 cell.\n */\n sdGroupColspan = computed(() => (this.configuration()?.displayedColumns?.length || 1));\n\n /** Build context object truyền vào SdTableGroupDefDirective template. */\n groupContext = (header: SdTableItem<T>): SdTableGroupDefContext<T> => {\n const g = header.meta.group;\n const items = g?.items || [];\n return {\n items,\n data: items.map(i => i.data),\n key: g?.key || '',\n values: g?.values || {},\n isExpanded: g?.isExpanded ?? true,\n isSelected: this.isGroupAllSelected(header),\n indeterminate: this.isGroupIndeterminate(header),\n toggleExpand: () => this.toggleGroupExpand(header),\n toggleSelect: () => this.onSelectGroup(header, !this.isGroupAllSelected(header)),\n };\n };\n\n rowStyle = (row: SdTableItem<T>, index?: number): Record<string, string> | null => {\n const fn = this.tableOption()?.style?.rowCss;\n if (!fn) return null;\n const tree = row.meta?.tree;\n const ctx =\n this.tableOption()?.tree && tree\n ? { level: tree.level, hasChildren: tree.hasChildren, isExpanded: tree.isExpanded }\n : undefined;\n return fn(row.data, index, ctx);\n };\n\n // why: khi preserveSelection bật, giữ map nội bộ id → SdTableItem để selection\n // không mất qua filter / paginate / sort / reload (kể cả server re-fetch tạo refs mới).\n // Map chỉ bị clear khi user gọi onClearSelection (nút X) hoặc bỏ chọn từng item.\n #preservedSelectedMap = new Map<string, SdTableItem<T>>();\n\n #preserveEnabled = () => this.tableOption()?.selector?.preserveSelection === true;\n\n // Restore isSelected cho item visible nào id đã có trong preserved map.\n // Đồng thời update reference trong map sang SdTableItem mới (cần thiết khi server\n // re-fetch tạo refs mới, ta muốn map giữ ref hiện hành để các tham chiếu downstream OK).\n #restorePreservedSelection = () => {\n if (!this.#preserveEnabled()) return;\n const rows = this.#getSelectionRows();\n rows.forEach(item => {\n if (this.#preservedSelectedMap.has(item.meta.id)) {\n item.meta.selector!.isSelected = true;\n this.#preservedSelectedMap.set(item.meta.id, item);\n }\n });\n };\n\n #updateSelectedItems = () => {\n const rows = this.#getSelectionRows();\n if (this.#preserveEnabled()) {\n // Sync map theo state visible: add nếu selected, remove nếu deselected.\n // Off-page items giữ nguyên trong map (không bị visit ở đây).\n rows.forEach(item => {\n const id = item.meta.id;\n if (item.meta.selector!.isSelected) {\n this.#preservedSelectedMap.set(id, item);\n } else {\n this.#preservedSelectedMap.delete(id);\n }\n });\n this.selectedTableItems.set(Array.from(this.#preservedSelectedMap.values()));\n } else {\n this.selectedTableItems.set(rows.filter(item => item.meta.selector!.isSelected));\n }\n this.#ref.detectChanges();\n };\n\n clearFilter = () => {\n this.filterRegister.value.remove();\n };\n\n setFilter = (args: { columnFilter?: Record<string, any>; externalFilter?: Record<string, any> }) => {\n const { columnFilter, externalFilter } = args || {};\n if (columnFilter) {\n // Giữ reference ổn định cho column-filter (xem #syncColumnFilterInPlace).\n this.#syncColumnFilterInPlace(columnFilter);\n }\n this.filterRegister.value.set({\n columnFilter,\n externalFilter,\n });\n };\n\n get dataItems(): T[] {\n return this.items().map(item => item.data);\n }\n\n get selectedItems(): T[] {\n return this.selectedTableItems().map(item => item.data);\n }\n\n detectChanges = () => this.#ref.detectChanges();\n\n onColumnResize = (field: string, width: string) => {\n // persistColumnWidth ghi storage (silent) và emit widthChange$,\n // subscriber trong constructor đã update configuration() signal đồng bộ.\n this.#configService.persistColumnWidth(field, width);\n\n const onResize = this.tableOption()?.config?.onResize;\n if (!onResize) return;\n onResize(field, width, buildColumnWidthMap(this.configuration()?.column));\n };\n\n onOperatorChange = (column: SdTableColumn, operator: Operator | undefined) => {\n if (operator == null) return;\n this.tableOption()?.filter?.operatorChange?.(column, operator);\n };\n\n trackBy = (index: number, item: SdTableItem) => {\n return item.meta.id;\n };\n\n // Offset STT theo paging — computed memoize, không tính lại trừ khi paginator đổi.\n // Template chỉ cần đọc pageOffset() rồi cộng `i + 1` (rẻ hơn gọi function).\n pageOffset = computed(() => {\n const p = this.paginator();\n return (p?.pageIndex ?? 0) * (p?.pageSize ?? 0);\n });\n\n isReorderDisabled(item: SdTableItem<T>): boolean {\n if ((item.meta.tree?.level ?? 0) > 0) return true;\n const opt = this.tableOption()?.rowReorder;\n if (!opt?.disabled || item.meta?.group?.items?.length) return false;\n const idx = this.#itemIndexMap.get(item) ?? -1;\n return opt.disabled(item.data, idx);\n }\n\n #sameGroup(a: SdTableItem<T>, b: SdTableItem<T>, allItems: SdTableItem<T>[]): boolean {\n const groupOf = (item: SdTableItem<T>): number => {\n let lastGroupIdx = -1;\n for (let i = 0; i < allItems.length; i++) {\n if (allItems[i].meta?.group?.items?.length) lastGroupIdx = i;\n if (allItems[i] === item) return lastGroupIdx;\n }\n return -1;\n };\n return groupOf(a) === groupOf(b);\n }\n\n reorderSortPredicate = (index: number, drag: CdkDrag<SdTableItem<T>>, drop: CdkDropList<SdTableItem<T>[]>): boolean => {\n const opt = this.tableOption()?.rowReorder;\n if (!opt?.enabled) return false;\n const allItems = drop.data;\n const targetItem = allItems?.[index];\n if (!targetItem) return false;\n if ((targetItem.meta.tree?.level ?? 0) > 0) return false;\n if ((drag.data.meta.tree?.level ?? 0) > 0) return false;\n if (targetItem.meta?.group?.items?.length) return false;\n if (this.tableOption()?.group) {\n return this.#sameGroup(drag.data, targetItem, allItems);\n }\n return true;\n };\n\n onReorderDrop(event: CdkDragDrop<SdTableItem<T>[]>): void {\n const { previousIndex, currentIndex } = event;\n if (previousIndex === currentIndex) return;\n const groupedItems = event.container.data;\n const toItemsIndex = (domIdx: number): number => {\n let count = 0;\n for (let i = 0; i < domIdx; i++) {\n if (!groupedItems[i]?.meta?.group?.items?.length && (groupedItems[i]?.meta?.tree?.level ?? 0) === 0) count++;\n }\n return count;\n };\n const fromIdx = toItemsIndex(previousIndex);\n const toIdx = toItemsIndex(currentIndex);\n const current = [...this.items()];\n const localPositions = current.map(item => this.#localItems.indexOf(item));\n moveItemInArray(current, fromIdx, toIdx);\n this.items.set(current);\n if (this.tableOption()?.type === 'local' && localPositions.every(p => p >= 0)) {\n const newLocal = [...this.#localItems];\n current.forEach((item, i) => {\n newLocal[localPositions[i]] = item;\n });\n this.#localItems = newLocal;\n }\n this.table()?.renderRows();\n this.tableOption()?.rowReorder?.onChange?.(\n current.map(i => i.data),\n event.item.data.data,\n fromIdx,\n toIdx\n );\n }\n\n #convertPagingReq = (filterReq: SdTableFilterRequest): PagingReq => {\n const opt = this.tableOption()!;\n const { columns, filter } = opt;\n const externalFilters = filter?.externalFilters || [];\n const req: PagingReq = {\n filters: [],\n orders: [],\n pageNumber: filterReq.pageNumber,\n pageSize: filterReq.pageSize,\n };\n const { filters, orders } = req;\n const { rawColumnFilter, columnOperator, rawExternalFilter, orderBy, orderDirection } = filterReq;\n\n for (const externalFilter of externalFilters || []) {\n const { field } = externalFilter;\n const value = rawExternalFilter?.[field];\n if (value !== undefined && value !== null && value !== '') {\n if (externalFilter.type === 'string') {\n if (externalFilter.defaultOperator === 'EQUAL' && value?.includes(',')) {\n filters!.push({\n field,\n operator: 'IN',\n data: (value as string).split(',').map(val => val.trim()),\n });\n } else {\n filters!.push({\n field,\n operator: externalFilter.defaultOperator || 'CONTAIN',\n data: value,\n });\n }\n } else if (externalFilter.type === 'boolean') {\n filters!.push({\n field,\n operator: 'EQUAL',\n data: value === true || value === 1 || value === 'true' || value === '1',\n });\n } else if (externalFilter.type === 'daterange') {\n if (typeof value === 'object' && 'from' in value && 'to' in value) {\n if (value?.from) {\n filters!.push({\n field,\n operator: 'GREATER_OR_EQUAL',\n data: DateUtilities.begin(value?.from)!.toISOString(),\n });\n }\n if (value?.to) {\n filters!.push({\n field,\n operator: 'LESS_THAN',\n data: DateUtilities.begin(DateUtilities.addDays(value?.to, 1))!.toISOString(),\n });\n }\n }\n } else if (externalFilter.type === 'date' || externalFilter.type === 'datetime') {\n if (DateUtilities.isDate(value)) {\n if (externalFilter.type === 'date') {\n if (externalFilter.defaultOperator === 'GREATER_OR_EQUAL') {\n filters!.push({\n field,\n operator: 'GREATER_OR_EQUAL',\n data: DateUtilities.begin(value)!.toISOString(),\n });\n }\n if (externalFilter.defaultOperator === 'LESS_OR_EQUAL') {\n filters!.push({\n field,\n operator: 'LESS_THAN',\n data: DateUtilities.begin(DateUtilities.addDays(value, 1))!.toISOString(),\n });\n }\n } else {\n if (externalFilter.defaultOperator === 'GREATER_OR_EQUAL') {\n filters!.push({\n field,\n operator: 'GREATER_OR_EQUAL',\n data: new Date(value).toISOString(),\n });\n }\n if (externalFilter.defaultOperator === 'LESS_OR_EQUAL') {\n filters!.push({\n field,\n operator: 'LESS_OR_EQUAL',\n data: new Date(value).toISOString(),\n });\n }\n }\n }\n } else {\n if (Array.isArray(value)) {\n if (value.length) {\n filters!.push({\n field,\n operator: 'IN',\n data: value,\n });\n }\n } else if (typeof value === 'object' && 'from' in value && 'to' in value) {\n if (value?.from) {\n filters!.push({\n field,\n operator: 'GREATER_OR_EQUAL',\n data: DateUtilities.begin(value?.from)!.toISOString(),\n });\n }\n if (value?.to) {\n filters!.push({\n field,\n operator: 'LESS_THAN',\n data: DateUtilities.begin(DateUtilities.addDays(value?.to, 1))!.toISOString(),\n });\n }\n } else {\n filters!.push({\n field,\n operator: externalFilter.defaultOperator || 'EQUAL',\n data: value,\n });\n }\n }\n }\n }\n\n for (const column of columns || []) {\n const { field } = column;\n const value: any = rawColumnFilter?.[field];\n const operator = columnOperator?.[field] || column.filter?.operator?.default;\n if (value !== undefined && value !== null && value !== '') {\n if (column.type === 'string') {\n filters!.push({\n field: field,\n operator: operator || 'CONTAIN',\n data: value,\n });\n } else if (column.type === 'boolean') {\n filters!.push({\n field: field,\n operator: 'EQUAL',\n data: value === true || value === 1 || value === 'true' || value === '1',\n });\n } else if (column.type === 'date' || column.type === 'datetime') {\n if (value && typeof value === 'object' && 'from' in value && 'to' in value) {\n if (value?.from && value?.to) {\n filters!.push({\n field: field,\n operator: 'BETWEEN',\n data: {\n from: DateUtilities.begin(value?.from)!.toISOString(),\n to: DateUtilities.end(value?.to)!.toISOString(),\n },\n });\n } else if (value?.from) {\n filters!.push({\n field: field,\n operator: 'GREATER_OR_EQUAL',\n data: DateUtilities.begin(value?.from)!.toISOString(),\n });\n } else if (value?.to) {\n filters!.push({\n field: field,\n operator: 'LESS_THAN',\n data: DateUtilities.begin(DateUtilities.addDays(value?.to, 1))!.toISOString(),\n });\n }\n } else {\n if (DateUtilities.isDate(value)) {\n filters!.push({\n field: field,\n operator: 'BETWEEN',\n data: {\n from: DateUtilities.begin(value)!.toISOString(),\n to: DateUtilities.end(value)!.toISOString(),\n },\n });\n }\n }\n } else {\n if (Array.isArray(value)) {\n if (value.length) {\n filters!.push({\n field: field,\n operator: 'IN',\n data: value,\n });\n }\n } else {\n filters!.push({\n field: field,\n operator: operator || 'EQUAL',\n data: value,\n });\n }\n }\n }\n }\n\n if (orderBy && orderDirection) {\n orders!.push({\n field: orderBy,\n direction: orderDirection,\n });\n }\n return req;\n };\n}\n","@let _configuration = configuration();\n@let _tableOption = tableOption()!;\n@let _loading = loading();\n@let _items = items();\n@let _total = total();\n@let _isFiltered = isFiltered();\n@let _requireFiltered = requireFiltered();\n@let _export = _tableOption?.export;\n@let _exporting = exporting();\n@let _titleDef = titleDef();\n\n@if (_configuration) {\n @if (!_tableOption.filter?.disabled && !!_tableOption.filter?.externalFilters?.length && filterRegister) {\n <external-filter\n class=\"mb-16\"\n [autoId]=\"autoId()\"\n [filterRegister]=\"filterRegister\"\n [filter]=\"_tableOption.filter!\"\n [externalFilters]=\"_tableOption.filter?.externalFilters!\">\n </external-filter>\n }\n @let groupedItems = _items | sdTree: _tableOption.tree : treeRevision() | sdGroup: _tableOption : groupExpandState;\n <ng-content select=\"[sdTableTop]\"></ng-content>\n <div class=\"c-container\">\n @if (_loading) {\n <div class=\"c-loading\">\n <mat-spinner></mat-spinner>\n </div>\n }\n <div\n class=\"c-table\"\n sdScroll\n stickyShadow\n [style.max-height]=\"_tableOption.style?.maxHeight\"\n [style.min-height]=\"_tableOption.style?.minHeight\">\n <table\n mat-table\n [dataSource]=\"groupedItems\"\n [trackBy]=\"trackBy\"\n matSort\n [matSortDisabled]=\"!_tableOption.sort?.enable\"\n multiTemplateDataRows\n cdkDropList\n [cdkDropListData]=\"groupedItems\"\n [cdkDropListDisabled]=\"!_tableOption.rowReorder?.enabled\"\n [cdkDropListSortPredicate]=\"reorderSortPredicate\"\n (cdkDropListDropped)=\"onReorderDrop($event)\">\n @if (_tableOption.rowReorder?.enabled) {\n <ng-container matColumnDef=\"sdReorder\">\n <th mat-header-cell *matHeaderCellDef class=\"sd-reorder-header\" [attr.rowspan]=\"_configuration.multipleHeader ? 2 : 1\"></th>\n <td mat-cell *matCellDef=\"let row\" class=\"sd-reorder-cell\">\n @if (!row.meta?.group?.items?.length) {\n <mat-icon cdkDragHandle [class.sd-reorder-disabled]=\"isReorderDisabled(row)\">\n {{ _tableOption.rowReorder?.icon || 'drag_indicator' }}\n </mat-icon>\n }\n </td>\n <td mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n }\n\n @if (_tableOption.tree) {\n <ng-container matColumnDef=\"sdTreeToggle\">\n <th\n mat-header-cell\n *matHeaderCellDef\n class=\"sd-tree-toggle-cell p-0\"\n [attr.rowspan]=\"_configuration.multipleHeader ? 2 : 1\"></th>\n <td mat-cell *matCellDef=\"let row\" class=\"sd-tree-toggle-cell p-0\">\n @if (row.meta?.tree) {\n <div\n class=\"sd-tree-toggle-inner\"\n [style.padding-left.px]=\"(row.meta.tree.level ?? 0) * (_tableOption.tree?.indentSize ?? 20)\">\n @if (row.meta.tree.hasChildren) {\n @if (row.meta.tree.isExpanding) {\n <div class=\"lds-ring sd-tree-spinner\">\n <div></div>\n <div></div>\n <div></div>\n <div></div>\n </div>\n } @else {\n <sd-button\n type=\"link\"\n [prefixIcon]=\"row.meta.tree.isExpanded ? 'expand_less' : 'expand_more'\"\n (click)=\"onTreeToggle(row); $event.stopPropagation()\"\n width=\"35px\">\n </sd-button>\n }\n }\n </div>\n }\n </td>\n <td mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n }\n\n <ng-container matColumnDef=\"sdSubInformation\" sticky>\n <td class=\"p-0\" mat-cell *matCellDef=\"let item\" [attr.colspan]=\"_configuration.displayedColumns.length\">\n @if (sdSubInformation()?.templateRef) {\n @if (_tableOption.expand?.always) {\n <ng-container *ngTemplateOutlet=\"sdSubInformation()?.templateRef!; context: { item: item }\"> </ng-container>\n } @else {\n <div [@detailExpand]=\"item.isExpanded ? 'expanded' : 'collapsed'\">\n @if (item.isExpanded) {\n <ng-container *ngTemplateOutlet=\"sdSubInformation()?.templateRef!; context: { item: item }\"> </ng-container>\n }\n </div>\n }\n }\n </td>\n <td mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n\n <ng-container matColumnDef=\"sdSubInformationAction\" stickyEnd>\n <th class=\"p-0\" mat-header-cell *matHeaderCellDef style=\"width: 1px\" [attr.rowspan]=\"_configuration.multipleHeader ? 2 : 1\"></th>\n <td mat-cell *matCellDef=\"let element\">\n @if (!element.isExpanding && !_tableOption.expand?.always) {\n <sd-button\n type=\"link\"\n [prefixIcon]=\"element.isExpanded ? 'expand_less' : 'expand_more'\"\n (click)=\"onExpand(element)\"\n width=\"35px\">\n </sd-button>\n }\n @if (element.isExpanding) {\n <div class=\"lds-ring\">\n <div></div>\n <div></div>\n <div></div>\n <div></div>\n </div>\n }\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"sdSelection\" sticky>\n <th class=\"sd-selection-cell p-0\" mat-header-cell *matHeaderCellDef [attr.rowspan]=\"_configuration.multipleHeader ? 2 : 1\">\n @let visibleSelectAll = _items | selectionVisibleSelectAll: _tableOption.selector | async;\n @if (visibleSelectAll) {\n <mat-checkbox\n class=\"c-selection px-8\"\n color=\"primary\"\n [ngModel]=\"isSelectAll()\"\n (ngModelChange)=\"isSelectAll.set($event)\"\n (change)=\"onSelectAll()\">\n </mat-checkbox>\n }\n </th>\n\n <td class=\"sd-selection-cell p-0\" mat-cell *matCellDef=\"let item\">\n @let visible = item | selectionVisible: _tableOption.selector;\n @if (visible) {\n @if (_tableOption.selector?.single) {\n <mat-radio-button\n class=\"c-selection px-8\"\n color=\"primary\"\n [checked]=\"item.meta.selector.isSelected\"\n (change)=\"item.meta.selector.isSelected = true; onSelect(item)\"\n [disabled]=\"selectedTableItems() | selectionDisabled: item : _tableOption.selector!\">\n </mat-radio-button>\n } @else {\n <mat-checkbox\n class=\"c-selection px-8\"\n color=\"primary\"\n [(ngModel)]=\"item.meta.selector.isSelected\"\n (change)=\"onSelect(item)\"\n [disabled]=\"selectedTableItems() | selectionDisabled: item : _tableOption.selector!\">\n </mat-checkbox>\n }\n }\n </td>\n <td mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n @if (_tableOption.index?.enabled) {\n @let _pageOffset = pageOffset();\n @let _indexWidth = _tableOption.index?.width || '50px';\n <ng-container matColumnDef=\"sdIndex\" sticky>\n <th\n class=\"text-center p-0\"\n mat-header-cell\n *matHeaderCellDef\n [style.width]=\"_indexWidth\"\n [style.min-width]=\"_indexWidth\"\n [style.max-width]=\"_indexWidth\"\n [attr.rowspan]=\"_configuration.multipleHeader ? 2 : 1\">\n {{ _tableOption.index?.title || '#' }}\n </th>\n <td class=\"text-center px-4\" mat-cell *matCellDef=\"let item; let i = dataIndex\" [style.min-width]=\"_indexWidth\" [style.max-width]=\"_indexWidth\">\n @if (!item?.meta?.group?.isGroupHeader) {\n @if (_tableOption.tree && item?.meta?.tree?.indexPath?.length) {\n <!-- why: tree → STT phân cấp 1, 1.2, 1.2.1 (indexPath join '.'). Tô đậm root (level 0). -->\n <span [class.sd-stt-root]=\"(item.meta.tree.level ?? 0) === 0\">\n {{ item.meta.tree.indexPath.join('.') }}\n </span>\n } @else {\n {{ _pageOffset + i + 1 }}\n }\n }\n </td>\n <td mat-footer-cell *matFooterCellDef [style.min-width]=\"_indexWidth\" [style.max-width]=\"_indexWidth\"></td>\n </ng-container>\n }\n <ng-container\n matColumnDef=\"sdCommand\"\n [sticky]=\"_tableOption.command?.align !== 'right'\"\n [stickyEnd]=\"_tableOption.command?.align === 'right'\">\n <th class=\"p-0\" mat-header-cell *matHeaderCellDef style=\"width: 50px\" [attr.rowspan]=\"_configuration.multipleHeader ? 2 : 1\"></th>\n <td class=\"px-8\" mat-cell *matCellDef=\"let item\">\n <desktop-command\n [autoId]=\"autoId()\"\n [commands]=\"_tableOption.command?.commands || _tableOption.commands || []\"\n [item]=\"item\"\n [itemIndex]=\"groupedItems.indexOf(item)\"></desktop-command>\n </td>\n <td mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n <!-- why: group header row dùng matRowDef RIÊNG với column list ['sdGroupHeader']\n qua predicate when:isGroupHeaderRow. Cell colspan = displayedColumns.length để\n span TOÀN BỘ width data row. Tránh colspan trick overflow row khi các TD khác render. -->\n <ng-container matColumnDef=\"sdGroupHeader\">\n <td\n class=\"p-0 sd-group-header-cell\"\n mat-cell\n *matCellDef=\"let item\"\n [attr.colspan]=\"sdGroupColspan()\">\n <div class=\"sd-group-row d-flex align-items-center py-8\">\n <!-- why: slot 42px khớp width với sd-selection-cell data row → checkbox group căn TRỤC dọc đúng với checkbox data. -->\n @if (_tableOption.selector?.visible && !_tableOption.selector?.single) {\n <div class=\"sd-group-selection-slot d-flex align-items-center justify-content-center\">\n <mat-checkbox\n class=\"c-selection\"\n color=\"primary\"\n [checked]=\"isGroupAllSelected(item)\"\n [indeterminate]=\"isGroupIndeterminate(item)\"\n (change)=\"onSelectGroup(item, $event.checked)\">\n </mat-checkbox>\n </div>\n } @else {\n <div class=\"sd-group-selection-slot\"></div>\n }\n @if (_tableOption.group?.collapsible) {\n <sd-button\n type=\"link\"\n [prefixIcon]=\"item.meta.group.isExpanded ? 'expand_more' : 'chevron_right'\"\n width=\"32px\"\n (click)=\"toggleGroupExpand(item)\">\n </sd-button>\n }\n @if (sdGroupDef()?.templateRef; as tpl) {\n <ng-container *ngTemplateOutlet=\"tpl; context: groupContext(item)\"></ng-container>\n } @else {\n <span class=\"T14R\">{{ item.meta.group.values | json }}</span>\n }\n </div>\n </td>\n </ng-container>\n <!-- why: filler column ở cuối hấp thụ leftover space khi tổng width các cột data < container — giữ cho selection/STT/command không bị dãn. -->\n <ng-container matColumnDef=\"sdFiller\">\n <th class=\"sd-filler-cell p-0\" mat-header-cell *matHeaderCellDef [attr.rowspan]=\"_configuration.multipleHeader ? 2 : 1\"></th>\n <td class=\"sd-filler-cell p-0\" mat-cell *matCellDef=\"let item\"></td>\n <td class=\"sd-filler-cell p-0\" mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n @for (column of _configuration.firstColumns; track column.field) {\n <ng-container [matColumnDef]=\"column.field\" [sticky]=\"_configuration.fixedColumn[column.field]\">\n <th\n mat-header-cell\n *matHeaderCellDef\n class=\"px-8 py-8 c-th\"\n [sdColumnResize]=\"!!_tableOption.config?.resizable && column.type !== 'children'\"\n [minWidth]=\"column.minWidth\"\n [maxWidth]=\"column.maxWidth\"\n (resizeEnd)=\"onColumnResize(column.field, $event)\"\n [style.width]=\"column.width\"\n [style.min-width]=\"column.minWidth || column.width\"\n [style.max-width]=\"column.maxWidth\"\n [attr.rowspan]=\"_configuration.multipleHeader && column.type !== 'children' ? 2 : 1\"\n [attr.colspan]=\"column.type === 'children' ? column.children.length : 1\">\n <div>\n @if (column.type === 'children') {\n <div\n aria-hidden=\"true\"\n class=\"c-header-title\"\n [class.justify-content-end]=\"column.align === 'right'\"\n [class.text-right]=\"column.align === 'right'\">\n <column-title [column]=\"column\" [titleDef]=\"_titleDef[column.field]\"></column-title>\n </div>\n } @else {\n <div\n aria-hidden=\"true\"\n mat-sort-header\n class=\"c-header-title\"\n [class.justify-content-end]=\"column.align === 'right'\"\n [class.text-right]=\"column.align === 'right'\"\n [disabled]=\"!column.sortable\">\n <column-title [column]=\"column\" [titleDef]=\"_titleDef[column.field]\"></column-title>\n </div>\n @let hideInlineFilter =\n _tableOption.filter?.disabled ||\n _tableOption.filter?.hideInlineFilter === true ||\n (_tableOption.filter?.hideInlineFilter === 'auto' && !_isFiltered && _total! <= 10);\n @if (!hideInlineFilter) {\n <ng-container *sdDesktop>\n <column-filter\n [autoId]=\"autoId()\"\n [value]=\"columnFilter?.[column.field!]!\"\n [operator]=\"columnOperator[column.field]\"\n (operatorChange)=\"columnOperator[column.field] = $event!; onOperatorChange(column, $event)\"\n [columnFilter]=\"columnFilter!\"\n [cacheValues]=\"cacheValues\"\n [column]=\"column\"\n (filterChange)=\"onFilterChange()\"\n (filterCommit)=\"onFilterCommit()\">\n </column-filter>\n </ng-container>\n }\n }\n </div>\n </th>\n <td\n class=\"c-td px-0\"\n [class.d-none]=\"column.type === 'children'\"\n mat-cell\n *matCellDef=\"let item\"\n [sdHoverCopy]=\"(item.data && item.data[column.field]) || ''\"\n [sdHoverCopyDisabled]=\"!column.cell?.copiable\">\n @if (column.type !== 'children' && !item?.meta?.group?.isGroupHeader) {\n <desktop-cell class=\"d-block px-8\" [column]=\"column\" [item]=\"item\" [cellDef]=\"cellDef()\"> </desktop-cell>\n }\n </td>\n <td mat-footer-cell *matFooterCellDef>\n <ng-container *ngIf=\"footerDef()[column.field]\">\n <ng-container *ngTemplateOutlet=\"footerDef()[column.field].templateRef; context: { items: _items, column: column }\">\n </ng-container>\n </ng-container>\n </td>\n </ng-container>\n }\n @for (column of _configuration.secondColumns; track column.field) {\n <ng-container [matColumnDef]=\"column.field\">\n <th\n mat-header-cell\n *matHeaderCellDef\n class=\"c-th px-8\"\n [style.width]=\"column.width\"\n [style.min-width]=\"column.minWidth || column.width\"\n [style.max-width]=\"column.maxWidth\">\n <div>\n <div\n aria-hidden=\"true\"\n mat-sort-header\n class=\"c-header-title\"\n [class.justify-content-end]=\"column.align === 'right'\"\n [class.text-right]=\"column.align === 'right'\"\n [disabled]=\"!column.sortable\">\n <column-title [column]=\"column\" [titleDef]=\"_titleDef[column.field]\"></column-title>\n </div>\n @if (!_tableOption.filter?.disabled && !_tableOption.filter?.hideInlineFilter && columnOperator) {\n <ng-container *sdDesktop>\n <column-filter\n [autoId]=\"autoId()\"\n [value]=\"columnFilter?.[column.field!]!\"\n [operator]=\"columnOperator[column.field]\"\n [columnFilter]=\"columnFilter!\"\n [cacheValues]=\"cacheValues\"\n [column]=\"column\"\n (operatorChange)=\"columnOperator[column.field] = $event!; onOperatorChange(column, $event)\"\n (filterChange)=\"onFilterChange()\"\n (filterCommit)=\"onFilterCommit()\">\n </column-filter>\n </ng-container>\n }\n </div>\n </th>\n <td\n class=\"c-td px-0\"\n mat-cell\n *matCellDef=\"let item\"\n [sdHoverCopy]=\"item[column.field]\"\n [sdHoverCopyDisabled]=\"!column.cell?.copiable\">\n @if (column.type !== 'children') {\n <desktop-cell class=\"d-block px-8\" [column]=\"column\" [item]=\"item\" [cellDef]=\"cellDef()\"> </desktop-cell>\n }\n </td>\n <td mat-footer-cell *matFooterCellDef>\n <ng-container *ngIf=\"footerDef()[column.field]\">\n <ng-container *ngTemplateOutlet=\"footerDef()[column.field].templateRef; context: { items: _items, column: column }\">\n </ng-container>\n </ng-container>\n </td>\n </ng-container>\n }\n <tr class=\"c-first-header\" mat-header-row *matHeaderRowDef=\"_configuration.firstHeaders; sticky: true\"></tr>\n @if (!!_configuration.secondHeaders.length) {\n <tr class=\"c-second-header\" mat-header-row *matHeaderRowDef=\"_configuration.secondHeaders; sticky: true\"></tr>\n }\n <!-- Group header row — chỉ 1 cell sdGroupHeader colspan toàn width. -->\n <tr\n mat-row\n *matRowDef=\"let row; columns: ['sdGroupHeader']; when: isGroupHeaderRow\"\n class=\"c-group-row-tr\"></tr>\n\n <!-- Data row — dùng displayedColumns đầy đủ; when isDataRow để loại trừ group header. -->\n <tr\n mat-row\n cdkDrag\n [cdkDragData]=\"row\"\n [cdkDragDisabled]=\"\n !_tableOption.rowReorder?.enabled ||\n !!row.meta?.group?.items?.length ||\n (row.meta?.tree?.level ?? 0) > 0 ||\n isReorderDisabled(row)\n \"\n *matRowDef=\"let row; columns: _configuration.displayedColumns; when: isDataRow\"\n matRipple\n class=\"c-row\"\n [class.sd-tree-row]=\"!!_tableOption.tree\"\n [ngClass]=\"_tableOption.tree ? 'sd-tree-level-' + (row.meta?.tree?.level ?? 0) : null\"\n [ngStyle]=\"rowStyle(row)\"\n [class.selected]=\"row.meta.selector.isSelected\"></tr>\n\n <!-- Sub-information row — also gated bởi isDataRow để KHÔNG render empty expand row dưới group header. -->\n <tr mat-row *matRowDef=\"let row; columns: ['sdSubInformation']; when: isDataRow\" class=\"c-detail-row\"></tr>\n @if (hasFooter() && !!_configuration.displayedFooters.length) {\n <tr mat-footer-row *matFooterRowDef=\"_configuration.displayedFooters; sticky: true\"></tr>\n }\n </table>\n @if (!_loading && !_total) {\n <div class=\"c-no-data-row\">\n @if (_isFiltered) {\n @if (tableConfiguration?.images?.filterEmpty) {\n <img class=\"c-image\" [src]=\"tableConfiguration!.images!.filterEmpty\" alt=\"filter-empty\" />\n } @else {\n <img class=\"c-image sd-image-filter-empty\" alt=\"filter-empty\" />\n }\n <div class=\"T16M\">{{ 'core.component.table.no-results' | translate }}</div>\n <div class=\"T16R text-secondary\">{{ 'core.component.table.no-results-hint' | translate }}</div>\n } @else {\n @if (_requireFiltered) {\n @if (tableConfiguration?.images?.filterRequired) {\n <img class=\"c-image\" [src]=\"tableConfiguration!.images!.filterRequired\" alt=\"filter-required\" />\n } @else {\n <img class=\"c-image sd-image-filter-required\" alt=\"filter-required\" />\n }\n <div class=\"T16R text-secondary\">{{ 'core.component.table.choose-filter-hint' | translate }}</div>\n } @else {\n @if (tableConfiguration?.images?.dataEmpty) {\n <img class=\"c-image\" [src]=\"tableConfiguration!.images!.dataEmpty\" alt=\"data-empty\" />\n } @else {\n <img class=\"c-image sd-image-data-empty\" alt=\"data-empty\" />\n }\n <div class=\"T16R text-secondary\">{{ 'core.component.table.no-data' | translate }}</div>\n }\n }\n </div>\n }\n </div>\n <div class=\"c-paginator\">\n <div class=\"c-action\">\n <ng-container *sdDesktop>\n @if (_tableOption.reload?.visible) {\n <sd-button\n class=\"mr-8\"\n [title]=\"'core.component.table.reload' | translate\"\n prefixIcon=\"refresh\"\n (click)=\"reload()\"\n [disabled]=\"!_items.length\"\n type=\"link\">\n </sd-button>\n }\n </ng-container>\n @if (_export && _items.length) {\n @if (_export.type === 'custom') {\n <sd-button class=\"mr-8\" [title]=\"exportTitle()\" prefixIcon=\"get_app\" (click)=\"exportCustom()\" type=\"link\"> </sd-button>\n } @else {\n @if (_export.visible) {\n @if (_exporting) {\n <sd-button class=\"mr-8\" [loading]=\"_exporting\" [title]=\"exportTitle()\" prefixIcon=\"get_app\" type=\"link\"> </sd-button>\n } @else {\n @if (_export.visible === 'ALL' || !_export.visible) {\n <sd-button class=\"mr-8\" [title]=\"exportTitle()\" prefixIcon=\"get_app\" [matMenuTriggerFor]=\"menu\" type=\"link\"> </sd-button>\n <mat-menu #menu=\"matMenu\">\n <button mat-menu-item (click)=\"exportExcel()\" type=\"button\">\n <mat-icon fontSet=\"material-icons-outlined\">file_download</mat-icon>\n <span> {{ 'core.component.table.export-excel' | translate }}</span>\n </button>\n <button mat-menu-item (click)=\"exportCSV()\" type=\"button\">\n <mat-icon fontSet=\"material-icons-outlined\">file_download</mat-icon>\n <span> {{ 'core.component.table.export-csv' | translate }}</span>\n </button>\n </mat-menu>\n } @else if (_export.visible === 'EXCEL') {\n <sd-button class=\"mr-8\" [title]=\"exportTitle()\" prefixIcon=\"get_app\" (click)=\"exportExcel()\" type=\"link\"> </sd-button>\n } @else if (_export.visible === 'CSV') {\n <sd-button class=\"mr-8\" [title]=\"exportTitle()\" prefixIcon=\"get_app\" (click)=\"exportCSV()\" type=\"link\"> </sd-button>\n }\n }\n }\n }\n }\n\n <ng-container *sdDesktop>\n @if (configComponent()) {\n <sd-button\n class=\"mr-8\"\n [title]=\"'core.component.table.setup-short' | translate\"\n prefixIcon=\"settings\"\n (click)=\"configComponent()!.open()\"\n type=\"link\">\n </sd-button>\n }\n </ng-container>\n <!-- Mobile: nút Filter mở mobile-filter drawer (inline filter ẩn trên mobile) -->\n <ng-container *sdMobile>\n @if (!_tableOption.filter?.disabled && mobileFilter()) {\n <sd-button\n [autoId]=\"autoId() + 'mobile-filter-open'\"\n class=\"mr-8\"\n prefixIcon=\"filter_alt\"\n (click)=\"mobileFilter()!.open()\"\n type=\"link\">\n </sd-button>\n }\n </ng-container>\n </div>\n @let hidePaginator = !_tableOption.paginate?.pageSize || _total === undefined || _total <= _tableOption.paginate?.pageSize!;\n <!-- Desktop paginator: full config (pageSize dropdown, first/last buttons) -->\n <ng-container *sdDesktop>\n <mat-paginator\n [class.d-none]=\"_tableOption.paginate?.hidden || hidePaginator\"\n [length]=\"_total\"\n [pageSize]=\"_tableOption.paginate?.pageSize\"\n [pageSizeOptions]=\"_tableOption.paginate?.pages!\"\n [showFirstLastButtons]=\"_tableOption.paginate?.showFirstLastButtons\"\n [hidePageSize]=\"_tableOption.paginate?.hidePageSize\"></mat-paginator>\n </ng-container>\n <!-- Mobile paginator: ẩn pageSize dropdown + first/last buttons để tiết kiệm không gian -->\n <ng-container *sdMobile>\n <mat-paginator\n [class.d-none]=\"_tableOption.paginate?.hidden || hidePaginator\"\n [length]=\"_total\"\n [pageSize]=\"_tableOption.paginate?.pageSize\"\n [showFirstLastButtons]=\"false\"\n hidePageSize></mat-paginator>\n </ng-container>\n <!-- \"Đang hiển thị...\" chỉ desktop -->\n <ng-container *sdDesktop>\n @if (!_tableOption.paginate?.hidden && hidePaginator && _total !== undefined && _total > 0) {\n <div class=\"T14R pr-16\">\n {{ 'core.component.table.showing' | translate }} <span class=\"T14M ml-2\">1-{{ _total }}/{{ _total }}</span>\n </div>\n }\n </ng-container>\n </div>\n </div>\n <selector-action [tableOption]=\"_tableOption\" [selectedTableItems]=\"selectedTableItems()\" (clear)=\"onClearSelection(groupedItems)\" />\n @if (_tableOption.config?.visible) {\n <config [tableOption]=\"_tableOption\" />\n }\n <!-- Mobile filter drawer — chỉ instantiate khi cần render trên mobile -->\n @if (!_tableOption.filter?.disabled && filterRegister) {\n <mobile-filter\n [autoId]=\"autoId()\"\n [filter]=\"_tableOption.filter!\"\n [externalFilters]=\"_tableOption.filter?.externalFilters!\"\n [columns]=\"_configuration.firstColumns\"\n [filterDefs]=\"sdFilterDefs()\"\n [filterRegister]=\"filterRegister\"\n [cacheValues]=\"cacheValues\">\n </mobile-filter>\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { TemplateRef } from '@angular/core';\nimport { SdSearch } from '@sdcorejs/angular/forms';\nimport { DateUtilities } from '@sdcorejs/angular/utilities';\nimport { NestedKeyOf, Operator, Order, PagingReq } from '@sdcorejs/utils/models';\nimport { Observable } from 'rxjs';\nimport { SdTableColumn } from '../../models/table-column.model';\n\nexport interface SdTableQuickFilter {\n code: string;\n columnFilter: Record<string, any>;\n externalFilter: Record<string, any>;\n}\n\nexport interface TableFilterConfiguration {\n // selectedQuickFilter: string;\n // quickFilters: SdGridMaterialQuickFilter[];\n // columnFilter?: Record<string, any>; // Giá trị filter column\n inlineExternal: Record<string, boolean>; // Ẩn hiện filter external\n // externalFilter?: Record<string, any>; // Giá trị filter external\n}\n\nexport interface TableFilterValue {\n columnOperator?: Record<string, Operator>;\n\n columnFilter?: Record<string, any>; // Giá trị filter column\n\n externalFilter?: Record<string, any>; // Giá trị filter external\n\n notReload?: boolean; // Để nhận biết là chỉ set giá trị, không trigger change\n\n filtered?: boolean; // Để nhận biết là có đang lọc hay không\n}\n\nexport interface SdTableFilterRequest<T = any> {\n columnOperator: Record<NestedKeyOf<T>, Operator>;\n rawColumnFilter: Record<NestedKeyOf<T>, any>;\n rawExternalFilter: Record<string, any>;\n pageNumber: number;\n pageSize: number;\n orderBy?: string;\n orderDirection?: Order['direction'];\n isExported?: boolean;\n visibledColumns?: SdTableColumn[];\n}\n\nexport interface SdTableOptionFilter<T = any> {\n /** Key định danh nếu muốn lưu cache */\n key?: string;\n\n /** Có bật cache giá trị filter hay không */\n cacheable?: boolean;\n\n /** Vô hiệu toàn bộ filter */\n disabled?: boolean;\n\n /** Ẩn tất cả inline filter (chỉ còn external), nếu chọn auto thì sẽ ẩn khi total row <= 10, phù hợp cho các màn detail có ít dữ liệu */\n hideInlineFilter?: boolean | 'auto';\n\n /** Hàm xử lý khi đổi Operator của filter column */\n operatorChange?: (column?: SdTableColumn, operator?: Operator) => void;\n\n /** Danh sách external filter */\n externalFilters?: SdTableExternalFilter[];\n\n /** Số lượng cột external filter trên mỗi hàng (mặc định: 6) */\n externalFilterPerRow?: 4 | 6;\n\n /** Chế độ thủ công: phải nhấn nút áp dụng mới gửi filter */\n manualFilter?: boolean;\n\n /** Có thể thu gọn bộ lọc hay không */\n collapsable?: boolean;\n\n /** Ẩn toolbar (xóa bộ lọc, thiết lập) của external filter, khi có ít external filter user không cần chức năng này */\n hideExternalFilterToolbar?: boolean;\n\n /** Hàm xử lý khi trigger clear filter từ external filter */\n onClearFilter?: () => void;\n}\n\nexport const SdConvertToPagingReq = (\n filterRequest: SdTableFilterRequest,\n args: {\n columns?: SdTableColumn[];\n externalFilters?: SdTableExternalFilter[];\n fieldMapping?: Record<string, string>;\n orders?: Order[];\n }\n): PagingReq => {\n const { externalFilters, columns, fieldMapping } = args;\n const req: PagingReq = {\n filters: [],\n orders: args?.orders || [],\n pageNumber: filterRequest.pageNumber,\n pageSize: filterRequest.pageSize,\n };\n const { filters } = req;\n const { rawExternalFilter, rawColumnFilter, columnOperator, orderBy, orderDirection } = filterRequest;\n // Xử lý external filter\n for (const externalFilter of externalFilters || []) {\n const value = rawExternalFilter?.[externalFilter.field];\n const field = fieldMapping?.[externalFilter.field] || externalFilter.field;\n // Nếu có giá trị thì mới xử lý filter\n if (value !== undefined && value !== null && value !== '') {\n if (externalFilter.type === 'string') {\n filters!.push({\n field,\n operator: externalFilter.defaultOperator || 'CONTAIN',\n data: value,\n });\n } else if (externalFilter.type === 'boolean') {\n filters!.push({\n field,\n operator: 'EQUAL',\n data: value === true || value === 1 || value === 'true' || value === '1',\n });\n } else if (externalFilter.type === 'date') {\n if (typeof value === 'object' && 'from' in value && 'to' in value) {\n if (value?.from) {\n filters!.push({\n field,\n operator: 'GREATER_OR_EQUAL',\n data: DateUtilities.begin(value?.from)!.toISOString(),\n });\n }\n if (value?.to) {\n filters!.push({\n field,\n operator: 'LESS_THAN',\n data: DateUtilities.begin(DateUtilities.addDays(value?.to, 1))!.toISOString(),\n });\n }\n } else {\n if (DateUtilities.isDate(value)) {\n if (externalFilter.defaultOperator === 'GREATER_OR_EQUAL') {\n filters!.push({\n field,\n operator: 'GREATER_OR_EQUAL',\n data: DateUtilities.begin(value)!.toISOString(),\n });\n }\n if (externalFilter.defaultOperator === 'LESS_OR_EQUAL') {\n filters!.push({\n field,\n operator: 'LESS_THAN',\n data: DateUtilities.begin(DateUtilities.addDays(value, 1))!.toISOString(),\n });\n }\n }\n }\n } else {\n if (Array.isArray(value)) {\n if (value.length) {\n filters!.push({\n field,\n operator: 'IN',\n data: value,\n });\n }\n } else {\n filters!.push({\n field,\n operator: externalFilter.defaultOperator || 'EQUAL',\n data: value,\n });\n }\n }\n }\n }\n // Xử lý column filter\n for (const column of columns || []) {\n const value = rawColumnFilter?.[column.field];\n const field = fieldMapping?.[column.field] || column.field;\n const operator = columnOperator?.[column.field] || column.filter?.operator?.default;\n // Nếu có giá trị thì mới xử lý filter\n if (value !== undefined && value !== null && value !== '') {\n if (column.type === 'string') {\n filters!.push({\n field,\n operator: operator || 'CONTAIN',\n data: value,\n });\n } else if (column.type === 'boolean') {\n filters!.push({\n field,\n operator: 'EQUAL',\n data: value === true || value === 1 || value === 'true' || value === '1',\n });\n } else if (column.type === 'date' || column.type === 'datetime') {\n if (typeof value === 'object' && 'from' in value && 'to' in value) {\n if (value?.from && value?.to) {\n filters!.push({\n field,\n operator: 'BETWEEN',\n data: {\n from: DateUtilities.begin(value?.from)!.toISOString(),\n to: DateUtilities.end(value?.to)!.toISOString(),\n },\n });\n } else if (value?.from) {\n filters!.push({\n field,\n operator: 'GREATER_OR_EQUAL',\n data: DateUtilities.begin(value?.from)!.toISOString(),\n });\n } else if (value?.to) {\n filters!.push({\n field,\n operator: 'LESS_THAN',\n data: DateUtilities.begin(DateUtilities.addDays(value?.to, 1))!.toISOString(),\n });\n }\n } else {\n if (DateUtilities.isDate(value)) {\n filters!.push({\n field,\n operator: 'BETWEEN',\n data: {\n from: DateUtilities.begin(value)!.toISOString(),\n to: DateUtilities.end(value)!.toISOString(),\n },\n });\n }\n }\n } else {\n if (Array.isArray(value)) {\n if (value.length) {\n filters!.push({\n field,\n operator: 'IN',\n data: value,\n });\n }\n } else {\n filters!.push({\n field,\n operator: operator || 'EQUAL',\n data: value,\n });\n }\n }\n }\n }\n // Xử lý orders\n if (orderBy && orderDirection) {\n req.orders!.push({\n field: orderBy,\n direction: orderDirection,\n });\n }\n return req;\n};\n\nexport declare type SdTableExternalFilter<TData = any> =\n | TextFilter<TData>\n | DateFilter<TData>\n | DateTimeFilter<TData>\n | DateRangeFilter<TData>\n | NumberFilter<TData>\n | ValuesFilter<TData>\n | LazyValuesFilter<TData>\n | BooleanFilter<TData>\n | CustomFilter<TData>;\n\ninterface BaseFilter<TData = any> {\n field: string;\n title: string;\n defaultShowing?: boolean;\n required?: boolean; // Bật lên nếu bắt buộc phải có giá trị- mới thực hiện gọi API filter\n hidden?: boolean; // Ẩn filter\n defaultOperator?: Operator; // Đôi lúc cột string nhưng lại muốn tìm kiếm chính xác\n data?: TData; // Các tham số muốn truyền thêm để đánh dấu/nhận biết ..., ví dụ mappingField\n onChange?: (value: any) => void;\n}\n\ninterface TextFilter<TData = any> extends BaseFilter<TData> {\n type: 'string';\n default?: string;\n}\n\ninterface DateFilter<TData = any> extends BaseFilter<TData> {\n type: 'date';\n default?: Date | string;\n minDate?: string | number | Date;\n maxDate?: string | number | Date;\n}\n\ninterface DateTimeFilter<TData = any> extends BaseFilter<TData> {\n type: 'datetime';\n default?: Date | string;\n minDate?: string | number | Date;\n maxDate?: string | number | Date;\n}\n\ninterface DateRangeFilter<TData = any> extends BaseFilter<TData> {\n type: 'daterange';\n enableTime?: boolean;\n minDate?: string | number | Date;\n maxDate?: string | number | Date;\n default?: {\n from?: Date | string;\n to?: Date | string;\n };\n}\n\ninterface NumberFilter<TData = any> extends BaseFilter<TData> {\n type: 'number';\n default?: number;\n}\n\ninterface ValuesFilter<TData = any> extends BaseFilter<TData> {\n type: 'values';\n option: {\n valueField: string;\n displayField: string;\n items: any[] | (() => Promise<any[]>);\n selection?: 'AUTOCOMPLETE' | 'MULTIPLE' | 'MULTIPLEAUTOCOMPLETE';\n };\n default?: string | string[];\n}\n\ninterface LazyValuesFilter<TData = any> extends BaseFilter<TData> {\n type: 'lazy-values';\n option: {\n valueField: string;\n displayField: string;\n items: SdSearch; // Filter\n selection?: 'MULTIPLE';\n };\n default?: string | string[];\n}\n\ninterface BooleanFilter<TData = any> extends BaseFilter<TData> {\n type: 'boolean';\n option?: {\n displayOnTrue?: string;\n displayOnFalse?: string;\n };\n default?: boolean;\n}\n\ninterface CustomFilter<TData = any> extends BaseFilter<TData> {\n type: 'custom';\n // filterDef?: TemplateRef<SdTableFilterDefDirective>;\n filterDef?: TemplateRef<any>;\n default?: any;\n}\n\nexport interface TableFilterRegister {\n configuration: {\n get: () => TableFilterConfiguration;\n set: (configuration: Partial<TableFilterConfiguration>) => TableFilterConfiguration;\n remove: () => void;\n observer: Observable<TableFilterConfiguration>;\n };\n value: {\n get: () => TableFilterValue;\n set: (value: Partial<TableFilterValue>) => TableFilterValue;\n remove: () => void;\n observer: Observable<TableFilterValue>;\n };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["SdDateRange","i1","i2","i5","i3","i4","DateUtilities"],"mappings":"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"}