structra-ui 0.1.12 → 0.1.15

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 (293) hide show
  1. package/package.json +28 -8
  2. package/app/_utils/date-pt-br.utils.d.ts +0 -24
  3. package/app/_utils/decimal-br.utils.d.ts +0 -52
  4. package/app/_utils/estados-br.data.d.ts +0 -10
  5. package/app/_utils/integer-br.utils.d.ts +0 -17
  6. package/app/_utils/integer-value.utils.d.ts +0 -5
  7. package/app/_utils/scroll/body-scroll-lock.util.d.ts +0 -44
  8. package/app/app-shell/_models/breadcrumb-item.model.d.ts +0 -13
  9. package/app/app-shell/app-shell-sidebar-template.directive.d.ts +0 -19
  10. package/app/app-shell/app-shell.component.d.ts +0 -41
  11. package/app/app-shell/breadcrumb/breadcrumb.component.d.ts +0 -10
  12. package/app/app-shell/index.d.ts +0 -19
  13. package/app/app-shell/sidebar/app-sidebar-toolbar.directive.d.ts +0 -14
  14. package/app/app-shell/sidebar/shell-sidebar-toggle.component.d.ts +0 -19
  15. package/app/app-shell/sidebar/sidebar.component.d.ts +0 -36
  16. package/app/app-shell/sidebar-reveal.constants.d.ts +0 -8
  17. package/app/app-shell/topbar/topbar.component.d.ts +0 -8
  18. package/app/app-shell/user-menu/user-menu.component.d.ts +0 -25
  19. package/app/buttons/base-button/base-button.component.d.ts +0 -43
  20. package/app/buttons/index.d.ts +0 -1
  21. package/app/data-display/_models/card-item-view.model.d.ts +0 -8
  22. package/app/data-display/_models/data-display.models.d.ts +0 -11
  23. package/app/data-display/_models/data-grid-column.model.d.ts +0 -13
  24. package/app/data-display/_models/index.d.ts +0 -2
  25. package/app/data-display/adaptive-data-view/adaptive-data-view.component.d.ts +0 -53
  26. package/app/data-display/card-list/card-list.component.d.ts +0 -70
  27. package/app/data-display/dashboard-section/dashboard-section.component.d.ts +0 -12
  28. package/app/data-display/data-card/data-card.component.d.ts +0 -16
  29. package/app/data-display/data-grid/data-grid-actions-cell-renderer.component.d.ts +0 -21
  30. package/app/data-display/data-grid/data-grid.component.d.ts +0 -76
  31. package/app/data-display/data-list/data-list.component.d.ts +0 -18
  32. package/app/data-display/data-toolbar/data-toolbar.component.d.ts +0 -6
  33. package/app/data-display/details-field/details-field.component.d.ts +0 -10
  34. package/app/data-display/details-view/details-view.component.d.ts +0 -26
  35. package/app/data-display/empty-state/empty-state-overlay.util.d.ts +0 -5
  36. package/app/data-display/empty-state/empty-state.component.d.ts +0 -13
  37. package/app/data-display/index.d.ts +0 -20
  38. package/app/data-display/list-item/list-item.component.d.ts +0 -22
  39. package/app/data-display/stat-card/stat-card.component.d.ts +0 -23
  40. package/app/data-display/status-badge/status-badge.component.d.ts +0 -17
  41. package/app/data-display/table-empty-state/table-empty-state.component.d.ts +0 -14
  42. package/app/data-display/table-toolbar/table-toolbar.component.d.ts +0 -11
  43. package/app/dialogs/_models/lib-dialog-size.model.d.ts +0 -6
  44. package/app/dialogs/_utils/app-lib-light-block-scroll-strategy.d.ts +0 -12
  45. package/app/dialogs/_utils/lib-dialog-panel-classes.d.ts +0 -3
  46. package/app/dialogs/app-dialog/app-dialog.component.d.ts +0 -71
  47. package/app/dialogs/app-dialog/dialog-footer.directive.d.ts +0 -6
  48. package/app/dialogs/confirm-dialog/confirm-dialog-data.model.d.ts +0 -13
  49. package/app/dialogs/confirm-dialog/confirm-dialog.component.d.ts +0 -20
  50. package/app/dialogs/confirm-dialog/confirm-dialog.service.d.ts +0 -17
  51. package/app/dialogs/index.d.ts +0 -14
  52. package/app/dialogs/loading-dialog/loading-dialog-data.model.d.ts +0 -7
  53. package/app/dialogs/loading-dialog/loading-dialog.component.d.ts +0 -9
  54. package/app/dialogs/loading-dialog/loading-dialog.service.d.ts +0 -15
  55. package/app/dialogs/toast/toast-host.component.d.ts +0 -13
  56. package/app/dialogs/toast/toast.models.d.ts +0 -26
  57. package/app/dialogs/toast/toast.service.d.ts +0 -17
  58. package/app/fields/checkbox-fields/_base/boolean-field.directive.d.ts +0 -42
  59. package/app/fields/checkbox-fields/checkbox-field/checkbox-field.component.d.ts +0 -8
  60. package/app/fields/checkbox-fields/index.d.ts +0 -3
  61. package/app/fields/checkbox-fields/switch-field/switch-field.component.d.ts +0 -8
  62. package/app/fields/dropdown-fields/_base/dropdown-base/dropdown-base.component.d.ts +0 -62
  63. package/app/fields/dropdown-fields/_base/dropdown-multi-option-field.base.d.ts +0 -40
  64. package/app/fields/dropdown-fields/_base/dropdown-option-field.base.d.ts +0 -47
  65. package/app/fields/dropdown-fields/_base/dropdown-trigger-blur.util.d.ts +0 -18
  66. package/app/fields/dropdown-fields/_models/dropdown-list-bindings.model.d.ts +0 -13
  67. package/app/fields/dropdown-fields/_models/dropdown-search-page-requested.model.d.ts +0 -7
  68. package/app/fields/dropdown-fields/_models/index.d.ts +0 -4
  69. package/app/fields/dropdown-fields/_models/select-option.model.d.ts +0 -5
  70. package/app/fields/dropdown-fields/_models/select-pagination.model.d.ts +0 -6
  71. package/app/fields/dropdown-fields/dropdown-search-field/dropdown-search-field.component.d.ts +0 -84
  72. package/app/fields/dropdown-fields/index.d.ts +0 -7
  73. package/app/fields/dropdown-fields/multiselect-field/multiselect-field.component.d.ts +0 -49
  74. package/app/fields/dropdown-fields/select-field/select-field.component.d.ts +0 -54
  75. package/app/fields/input-fields/_base/base-field.component.d.ts +0 -60
  76. package/app/fields/input-fields/_base/base-field.directive.d.ts +0 -102
  77. package/app/fields/input-fields/_base/masked-text-field.base.d.ts +0 -34
  78. package/app/fields/input-fields/_base/ng-control-field.directive.d.ts +0 -43
  79. package/app/fields/input-fields/_models/field-common-inputs.model.d.ts +0 -49
  80. package/app/fields/input-fields/_models/index.d.ts +0 -1
  81. package/app/fields/input-fields/_utils/mask-complete.validators.d.ts +0 -18
  82. package/app/fields/input-fields/_utils/mask-format.utils.d.ts +0 -13
  83. package/app/fields/input-fields/cep-field/cep-field.component.d.ts +0 -12
  84. package/app/fields/input-fields/cpf-cnpj-field/cpf-cnpj-field.component.d.ts +0 -20
  85. package/app/fields/input-fields/date-field/date-field.component.d.ts +0 -30
  86. package/app/fields/input-fields/decimal-field/decimal-field.component.d.ts +0 -17
  87. package/app/fields/input-fields/index.d.ts +0 -22
  88. package/app/fields/input-fields/input-mask-field/input-mask-field.component.d.ts +0 -16
  89. package/app/fields/input-fields/integer-field/integer-field.component.d.ts +0 -17
  90. package/app/fields/input-fields/password-field/password-field.component.d.ts +0 -30
  91. package/app/fields/input-fields/phone-field/phone-field.component.d.ts +0 -22
  92. package/app/fields/input-fields/text-field/text-field.component.d.ts +0 -16
  93. package/app/fields/input-fields/textarea-field/textarea-field.component.d.ts +0 -31
  94. package/app/form-layout/_models/form-layout.model.d.ts +0 -41
  95. package/app/form-layout/_models/form-tabs.model.d.ts +0 -1
  96. package/app/form-layout/_models/index.d.ts +0 -3
  97. package/app/form-layout/_models/validation-summary.model.d.ts +0 -8
  98. package/app/form-layout/form-actions/form-actions.component.d.ts +0 -21
  99. package/app/form-layout/form-col/form-col.component.d.ts +0 -25
  100. package/app/form-layout/form-group/form-group.component.d.ts +0 -125
  101. package/app/form-layout/form-group/form-path.utils.d.ts +0 -16
  102. package/app/form-layout/form-group/form-root-invalid-ui-refresh.util.d.ts +0 -8
  103. package/app/form-layout/form-row/form-row.component.d.ts +0 -14
  104. package/app/form-layout/form-section/form-section.component.d.ts +0 -13
  105. package/app/form-layout/form-tab/form-tab.component.d.ts +0 -32
  106. package/app/form-layout/form-tabs/form-tabs.component.d.ts +0 -44
  107. package/app/form-layout/index.d.ts +0 -14
  108. package/app/form-layout/layout-stack/layout-stack.component.d.ts +0 -25
  109. package/app/form-layout/validation-summary/validation-summary.component.d.ts +0 -105
  110. package/app/loading/skeleton-loading/index.d.ts +0 -6
  111. package/app/loading/skeleton-loading/skeleton-block/skeleton-block.component.d.ts +0 -15
  112. package/app/loading/skeleton-loading/skeleton-card/skeleton-card.component.d.ts +0 -10
  113. package/app/loading/skeleton-loading/skeleton-field-shell/skeleton-field-shell.component.d.ts +0 -21
  114. package/app/loading/skeleton-loading/skeleton-list/skeleton-list.component.d.ts +0 -17
  115. package/app/loading/skeleton-loading/skeleton-table/skeleton-table.component.d.ts +0 -16
  116. package/app/loading/skeleton-loading/skeleton-text/skeleton-text.component.d.ts +0 -17
  117. package/app/menus/_models/drawer-side.model.d.ts +0 -6
  118. package/app/menus/_models/drawer-size.model.d.ts +0 -6
  119. package/app/menus/_models/menu-dropdown-placement.model.d.ts +0 -10
  120. package/app/menus/_models/menu-item.model.d.ts +0 -47
  121. package/app/menus/_utils/menu-connected-positions.util.d.ts +0 -4
  122. package/app/menus/_utils/menu-rows.util.d.ts +0 -22
  123. package/app/menus/_utils/submenu-connected-positions.util.d.ts +0 -5
  124. package/app/menus/action-menu/action-menu.component.d.ts +0 -24
  125. package/app/menus/context-menu/context-menu.component.d.ts +0 -32
  126. package/app/menus/drawer/drawer.component.d.ts +0 -38
  127. package/app/menus/dropdown-menu/dropdown-menu.component.d.ts +0 -33
  128. package/app/menus/index.d.ts +0 -11
  129. package/app/menus/menu-divider/menu-divider.component.d.ts +0 -8
  130. package/app/menus/menu-group/menu-group.component.d.ts +0 -13
  131. package/app/menus/menu-list/menu-list.component.d.ts +0 -77
  132. package/app/overlay/_models/overlay-placement.model.d.ts +0 -9
  133. package/app/overlay/_utils/anchored-overlay-positions.util.d.ts +0 -9
  134. package/app/overlay/anchored-overlay/anchored-overlay.component.d.ts +0 -51
  135. package/app/overlay/index.d.ts +0 -20
  136. package/app/overlay/popover/popover-body-template.directive.d.ts +0 -7
  137. package/app/overlay/popover/popover-footer-template.directive.d.ts +0 -7
  138. package/app/overlay/popover/popover-trigger.directive.d.ts +0 -6
  139. package/app/overlay/popover/popover.component.d.ts +0 -38
  140. package/app/overlay/tooltip/tooltip-panel-template.directive.d.ts +0 -10
  141. package/app/overlay/tooltip/tooltip.component.d.ts +0 -40
  142. package/app/theme/app-theme.service.d.ts +0 -25
  143. package/app/theme/index.d.ts +0 -1
  144. package/esm2022/app/_utils/date-pt-br.utils.mjs +0 -82
  145. package/esm2022/app/_utils/decimal-br.utils.mjs +0 -154
  146. package/esm2022/app/_utils/estados-br.data.mjs +0 -37
  147. package/esm2022/app/_utils/integer-br.utils.mjs +0 -48
  148. package/esm2022/app/_utils/integer-value.utils.mjs +0 -19
  149. package/esm2022/app/_utils/scroll/body-scroll-lock.util.mjs +0 -97
  150. package/esm2022/app/app-shell/_models/breadcrumb-item.model.mjs +0 -2
  151. package/esm2022/app/app-shell/app-shell-sidebar-template.directive.mjs +0 -29
  152. package/esm2022/app/app-shell/app-shell.component.mjs +0 -105
  153. package/esm2022/app/app-shell/breadcrumb/breadcrumb.component.mjs +0 -18
  154. package/esm2022/app/app-shell/index.mjs +0 -19
  155. package/esm2022/app/app-shell/sidebar/app-sidebar-toolbar.directive.mjs +0 -23
  156. package/esm2022/app/app-shell/sidebar/shell-sidebar-toggle.component.mjs +0 -36
  157. package/esm2022/app/app-shell/sidebar/sidebar.component.mjs +0 -84
  158. package/esm2022/app/app-shell/sidebar-reveal.constants.mjs +0 -9
  159. package/esm2022/app/app-shell/topbar/topbar.component.mjs +0 -14
  160. package/esm2022/app/app-shell/user-menu/user-menu.component.mjs +0 -52
  161. package/esm2022/app/buttons/base-button/base-button.component.mjs +0 -97
  162. package/esm2022/app/buttons/index.mjs +0 -2
  163. package/esm2022/app/data-display/_models/card-item-view.model.mjs +0 -2
  164. package/esm2022/app/data-display/_models/data-display.models.mjs +0 -2
  165. package/esm2022/app/data-display/_models/data-grid-column.model.mjs +0 -2
  166. package/esm2022/app/data-display/_models/index.mjs +0 -2
  167. package/esm2022/app/data-display/adaptive-data-view/adaptive-data-view.component.mjs +0 -124
  168. package/esm2022/app/data-display/card-list/card-list.component.mjs +0 -208
  169. package/esm2022/app/data-display/dashboard-section/dashboard-section.component.mjs +0 -25
  170. package/esm2022/app/data-display/data-card/data-card.component.mjs +0 -40
  171. package/esm2022/app/data-display/data-grid/data-grid-actions-cell-renderer.component.mjs +0 -41
  172. package/esm2022/app/data-display/data-grid/data-grid.component.mjs +0 -253
  173. package/esm2022/app/data-display/data-list/data-list.component.mjs +0 -40
  174. package/esm2022/app/data-display/data-toolbar/data-toolbar.component.mjs +0 -12
  175. package/esm2022/app/data-display/details-field/details-field.component.mjs +0 -21
  176. package/esm2022/app/data-display/details-view/details-view.component.mjs +0 -44
  177. package/esm2022/app/data-display/empty-state/empty-state-overlay.util.mjs +0 -19
  178. package/esm2022/app/data-display/empty-state/empty-state.component.mjs +0 -30
  179. package/esm2022/app/data-display/index.mjs +0 -19
  180. package/esm2022/app/data-display/list-item/list-item.component.mjs +0 -59
  181. package/esm2022/app/data-display/stat-card/stat-card.component.mjs +0 -59
  182. package/esm2022/app/data-display/status-badge/status-badge.component.mjs +0 -41
  183. package/esm2022/app/data-display/table-empty-state/table-empty-state.component.mjs +0 -31
  184. package/esm2022/app/data-display/table-toolbar/table-toolbar.component.mjs +0 -22
  185. package/esm2022/app/dialogs/_models/lib-dialog-size.model.mjs +0 -8
  186. package/esm2022/app/dialogs/_utils/app-lib-light-block-scroll-strategy.mjs +0 -22
  187. package/esm2022/app/dialogs/_utils/lib-dialog-panel-classes.mjs +0 -6
  188. package/esm2022/app/dialogs/app-dialog/app-dialog.component.mjs +0 -200
  189. package/esm2022/app/dialogs/app-dialog/dialog-footer.directive.mjs +0 -15
  190. package/esm2022/app/dialogs/confirm-dialog/confirm-dialog-data.model.mjs +0 -2
  191. package/esm2022/app/dialogs/confirm-dialog/confirm-dialog.component.mjs +0 -36
  192. package/esm2022/app/dialogs/confirm-dialog/confirm-dialog.service.mjs +0 -47
  193. package/esm2022/app/dialogs/index.mjs +0 -12
  194. package/esm2022/app/dialogs/loading-dialog/loading-dialog-data.model.mjs +0 -2
  195. package/esm2022/app/dialogs/loading-dialog/loading-dialog.component.mjs +0 -19
  196. package/esm2022/app/dialogs/loading-dialog/loading-dialog.service.mjs +0 -38
  197. package/esm2022/app/dialogs/toast/toast-host.component.mjs +0 -65
  198. package/esm2022/app/dialogs/toast/toast.models.mjs +0 -2
  199. package/esm2022/app/dialogs/toast/toast.service.mjs +0 -76
  200. package/esm2022/app/fields/checkbox-fields/_base/boolean-field.directive.mjs +0 -158
  201. package/esm2022/app/fields/checkbox-fields/checkbox-field/checkbox-field.component.mjs +0 -36
  202. package/esm2022/app/fields/checkbox-fields/index.mjs +0 -4
  203. package/esm2022/app/fields/checkbox-fields/switch-field/switch-field.component.mjs +0 -35
  204. package/esm2022/app/fields/dropdown-fields/_base/dropdown-base/dropdown-base.component.mjs +0 -117
  205. package/esm2022/app/fields/dropdown-fields/_base/dropdown-multi-option-field.base.mjs +0 -152
  206. package/esm2022/app/fields/dropdown-fields/_base/dropdown-option-field.base.mjs +0 -149
  207. package/esm2022/app/fields/dropdown-fields/_base/dropdown-trigger-blur.util.mjs +0 -32
  208. package/esm2022/app/fields/dropdown-fields/_models/dropdown-list-bindings.model.mjs +0 -2
  209. package/esm2022/app/fields/dropdown-fields/_models/dropdown-search-page-requested.model.mjs +0 -2
  210. package/esm2022/app/fields/dropdown-fields/_models/index.mjs +0 -2
  211. package/esm2022/app/fields/dropdown-fields/_models/select-option.model.mjs +0 -2
  212. package/esm2022/app/fields/dropdown-fields/_models/select-pagination.model.mjs +0 -2
  213. package/esm2022/app/fields/dropdown-fields/dropdown-search-field/dropdown-search-field.component.mjs +0 -520
  214. package/esm2022/app/fields/dropdown-fields/index.mjs +0 -7
  215. package/esm2022/app/fields/dropdown-fields/multiselect-field/multiselect-field.component.mjs +0 -379
  216. package/esm2022/app/fields/dropdown-fields/select-field/select-field.component.mjs +0 -359
  217. package/esm2022/app/fields/input-fields/_base/base-field.component.mjs +0 -151
  218. package/esm2022/app/fields/input-fields/_base/base-field.directive.mjs +0 -224
  219. package/esm2022/app/fields/input-fields/_base/masked-text-field.base.mjs +0 -135
  220. package/esm2022/app/fields/input-fields/_base/ng-control-field.directive.mjs +0 -127
  221. package/esm2022/app/fields/input-fields/_models/field-common-inputs.model.mjs +0 -2
  222. package/esm2022/app/fields/input-fields/_models/index.mjs +0 -2
  223. package/esm2022/app/fields/input-fields/_utils/mask-complete.validators.mjs +0 -61
  224. package/esm2022/app/fields/input-fields/_utils/mask-format.utils.mjs +0 -40
  225. package/esm2022/app/fields/input-fields/cep-field/cep-field.component.mjs +0 -48
  226. package/esm2022/app/fields/input-fields/cpf-cnpj-field/cpf-cnpj-field.component.mjs +0 -61
  227. package/esm2022/app/fields/input-fields/date-field/date-field.component.mjs +0 -147
  228. package/esm2022/app/fields/input-fields/decimal-field/decimal-field.component.mjs +0 -166
  229. package/esm2022/app/fields/input-fields/index.mjs +0 -22
  230. package/esm2022/app/fields/input-fields/input-mask-field/input-mask-field.component.mjs +0 -52
  231. package/esm2022/app/fields/input-fields/integer-field/integer-field.component.mjs +0 -143
  232. package/esm2022/app/fields/input-fields/password-field/password-field.component.mjs +0 -130
  233. package/esm2022/app/fields/input-fields/phone-field/phone-field.component.mjs +0 -66
  234. package/esm2022/app/fields/input-fields/text-field/text-field.component.mjs +0 -90
  235. package/esm2022/app/fields/input-fields/textarea-field/textarea-field.component.mjs +0 -125
  236. package/esm2022/app/form-layout/_models/form-layout.model.mjs +0 -48
  237. package/esm2022/app/form-layout/_models/form-tabs.model.mjs +0 -2
  238. package/esm2022/app/form-layout/_models/index.mjs +0 -2
  239. package/esm2022/app/form-layout/_models/validation-summary.model.mjs +0 -2
  240. package/esm2022/app/form-layout/form-actions/form-actions.component.mjs +0 -55
  241. package/esm2022/app/form-layout/form-col/form-col.component.mjs +0 -76
  242. package/esm2022/app/form-layout/form-group/form-group.component.mjs +0 -358
  243. package/esm2022/app/form-layout/form-group/form-path.utils.mjs +0 -65
  244. package/esm2022/app/form-layout/form-group/form-root-invalid-ui-refresh.util.mjs +0 -54
  245. package/esm2022/app/form-layout/form-row/form-row.component.mjs +0 -49
  246. package/esm2022/app/form-layout/form-section/form-section.component.mjs +0 -43
  247. package/esm2022/app/form-layout/form-tab/form-tab.component.mjs +0 -67
  248. package/esm2022/app/form-layout/form-tabs/form-tabs.component.mjs +0 -126
  249. package/esm2022/app/form-layout/index.mjs +0 -14
  250. package/esm2022/app/form-layout/layout-stack/layout-stack.component.mjs +0 -56
  251. package/esm2022/app/form-layout/validation-summary/validation-summary.component.mjs +0 -343
  252. package/esm2022/app/loading/skeleton-loading/index.mjs +0 -7
  253. package/esm2022/app/loading/skeleton-loading/skeleton-block/skeleton-block.component.mjs +0 -43
  254. package/esm2022/app/loading/skeleton-loading/skeleton-card/skeleton-card.component.mjs +0 -23
  255. package/esm2022/app/loading/skeleton-loading/skeleton-field-shell/skeleton-field-shell.component.mjs +0 -34
  256. package/esm2022/app/loading/skeleton-loading/skeleton-list/skeleton-list.component.mjs +0 -38
  257. package/esm2022/app/loading/skeleton-loading/skeleton-table/skeleton-table.component.mjs +0 -37
  258. package/esm2022/app/loading/skeleton-loading/skeleton-text/skeleton-text.component.mjs +0 -45
  259. package/esm2022/app/menus/_models/drawer-side.model.mjs +0 -8
  260. package/esm2022/app/menus/_models/drawer-size.model.mjs +0 -8
  261. package/esm2022/app/menus/_models/menu-dropdown-placement.model.mjs +0 -12
  262. package/esm2022/app/menus/_models/menu-item.model.mjs +0 -6
  263. package/esm2022/app/menus/_utils/menu-connected-positions.util.mjs +0 -41
  264. package/esm2022/app/menus/_utils/menu-rows.util.mjs +0 -39
  265. package/esm2022/app/menus/_utils/submenu-connected-positions.util.mjs +0 -23
  266. package/esm2022/app/menus/action-menu/action-menu.component.mjs +0 -48
  267. package/esm2022/app/menus/context-menu/context-menu.component.mjs +0 -112
  268. package/esm2022/app/menus/drawer/drawer.component.mjs +0 -142
  269. package/esm2022/app/menus/dropdown-menu/dropdown-menu.component.mjs +0 -99
  270. package/esm2022/app/menus/index.mjs +0 -11
  271. package/esm2022/app/menus/menu-divider/menu-divider.component.mjs +0 -14
  272. package/esm2022/app/menus/menu-group/menu-group.component.mjs +0 -32
  273. package/esm2022/app/menus/menu-list/menu-list.component.mjs +0 -399
  274. package/esm2022/app/overlay/_models/overlay-placement.model.mjs +0 -11
  275. package/esm2022/app/overlay/_utils/anchored-overlay-positions.util.mjs +0 -84
  276. package/esm2022/app/overlay/anchored-overlay/anchored-overlay.component.mjs +0 -121
  277. package/esm2022/app/overlay/index.mjs +0 -21
  278. package/esm2022/app/overlay/popover/popover-body-template.directive.mjs +0 -17
  279. package/esm2022/app/overlay/popover/popover-footer-template.directive.mjs +0 -17
  280. package/esm2022/app/overlay/popover/popover-trigger.directive.mjs +0 -15
  281. package/esm2022/app/overlay/popover/popover.component.mjs +0 -93
  282. package/esm2022/app/overlay/tooltip/tooltip-panel-template.directive.mjs +0 -20
  283. package/esm2022/app/overlay/tooltip/tooltip.component.mjs +0 -118
  284. package/esm2022/app/theme/app-theme.service.mjs +0 -49
  285. package/esm2022/app/theme/index.mjs +0 -2
  286. package/esm2022/structra-public-api.mjs +0 -18
  287. package/esm2022/structra-ui.mjs +0 -5
  288. package/esm2022/structra-version.mjs +0 -3
  289. package/fesm2022/structra-ui.mjs +0 -8971
  290. package/fesm2022/structra-ui.mjs.map +0 -1
  291. package/index.d.ts +0 -5
  292. package/structra-public-api.d.ts +0 -17
  293. package/structra-version.d.ts +0 -2
@@ -1,166 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, Input, forwardRef, numberAttribute, } from '@angular/core';
2
- import { NG_VALUE_ACCESSOR } from '@angular/forms';
3
- import { BaseFieldComponent } from '../_base/base-field.component';
4
- import { NgControlFieldDirective } from '../_base/ng-control-field.directive';
5
- import { buildDecimalBrDisplay, buildDecimalBrParseString, caretIndexFromSemantic, extractDecimalBrParts, formatDecimalBr, parseDecimalBr, semanticCaretAt, } from '../../../_utils/decimal-br.utils';
6
- import * as i0 from "@angular/core";
7
- export class DecimalFieldComponent extends NgControlFieldDirective {
8
- constructor() {
9
- super(...arguments);
10
- /** Valor máximo permitido (inclusive), com até 2 casas decimais. */
11
- this.max = 999999;
12
- this.inputText = '';
13
- this.filledUi = false;
14
- }
15
- refreshFilledUi() {
16
- this.filledUi = this.inputText.trim().length > 0;
17
- }
18
- afterWriteValue(value) {
19
- if (value == null) {
20
- this.inputText = '';
21
- this.refreshFilledUi();
22
- if (this.ngControl?.control) {
23
- this.syncControlUi();
24
- }
25
- return;
26
- }
27
- const v = Math.min(value, this.max);
28
- this.inputText = formatDecimalBr(v);
29
- if (v !== value) {
30
- queueMicrotask(() => this.emitModelValue(v));
31
- }
32
- this.refreshFilledUi();
33
- if (this.ngControl?.control) {
34
- this.syncControlUi();
35
- }
36
- }
37
- onBeforeInput(event) {
38
- const e = event;
39
- if (this.disabled || this.readonly || e.isComposing) {
40
- return;
41
- }
42
- if (e.inputType === 'insertText' || e.inputType === 'insertCompositionText') {
43
- const data = e.data ?? '';
44
- if (data.length !== 1) {
45
- return;
46
- }
47
- const input = e.target;
48
- const { hasComma } = extractDecimalBrParts(input.value);
49
- if (data === ',') {
50
- if (hasComma) {
51
- e.preventDefault();
52
- }
53
- return;
54
- }
55
- if (/^\d$/.test(data)) {
56
- return;
57
- }
58
- e.preventDefault();
59
- }
60
- }
61
- onNativeInput(event) {
62
- if (this.disabled || this.readonly) {
63
- return;
64
- }
65
- const input = event.target;
66
- const caret = input.selectionStart ?? input.value.length;
67
- const semantic = semanticCaretAt(input.value, caret);
68
- const parts = extractDecimalBrParts(input.value);
69
- const display = buildDecimalBrDisplay(parts);
70
- const parseStr = buildDecimalBrParseString(parts);
71
- let parsed = parseDecimalBr(parseStr);
72
- if (parsed != null && parsed > this.max) {
73
- parsed = this.max;
74
- const capped = formatDecimalBr(parsed);
75
- input.value = capped;
76
- input.setSelectionRange(capped.length, capped.length);
77
- this.inputText = capped;
78
- this.emitModelValue(parsed);
79
- this.refreshFilledUi();
80
- if (this.ngControl?.control) {
81
- this.syncControlUi();
82
- }
83
- else {
84
- this.cdr.markForCheck();
85
- }
86
- return;
87
- }
88
- if (input.value !== display) {
89
- input.value = display;
90
- const next = caretIndexFromSemantic(display, semantic);
91
- input.setSelectionRange(next, next);
92
- }
93
- this.inputText = display;
94
- this.emitModelValue(parsed);
95
- this.refreshFilledUi();
96
- if (this.ngControl?.control) {
97
- this.syncControlUi();
98
- }
99
- else {
100
- this.cdr.markForCheck();
101
- }
102
- }
103
- onBlur() {
104
- if (this.disabled) {
105
- this.notifyTouched();
106
- return;
107
- }
108
- const parts = extractDecimalBrParts(this.inputText);
109
- const parseStr = buildDecimalBrParseString(parts);
110
- let parsed = parseDecimalBr(parseStr);
111
- if (parsed != null && parsed > this.max) {
112
- parsed = this.max;
113
- }
114
- const ctrl = this.ngControl?.control;
115
- const current = ctrl?.value ?? null;
116
- if (parsed !== current) {
117
- this.emitModelValue(parsed);
118
- }
119
- this.inputText = parsed != null ? formatDecimalBr(parsed) : '';
120
- this.refreshFilledUi();
121
- this.notifyTouched();
122
- if (this.ngControl?.control) {
123
- this.syncControlUi();
124
- }
125
- else {
126
- this.cdr.markForCheck();
127
- }
128
- }
129
- onClear() {
130
- if (this.disabled || this.readonly) {
131
- return;
132
- }
133
- this.inputText = '';
134
- this.emitModelValue(null);
135
- this.notifyTouched();
136
- this.refreshFilledUi();
137
- if (this.ngControl?.control) {
138
- this.syncControlUi();
139
- }
140
- else {
141
- this.cdr.markForCheck();
142
- }
143
- }
144
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DecimalFieldComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
145
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "17.3.12", type: DecimalFieldComponent, isStandalone: true, selector: "app-decimal-field", inputs: { max: ["max", "max", numberAttribute] }, providers: [
146
- {
147
- provide: NG_VALUE_ACCESSOR,
148
- useExisting: forwardRef(() => DecimalFieldComponent),
149
- multi: true,
150
- },
151
- ], usesInheritance: true, ngImport: i0, template: "<app-base-field [label]=\"floatLabelCaption\" [filled]=\"filledUi\" [disabled]=\"disabled\" [readonly]=\"readonly\"\n [loading]=\"loading\"\n [errorMessage]=\"uiErrorMessage\" [required]=\"uiRequiredEffective\" [showRequiredMark]=\"showRequiredMark\"\n [invalid]=\"uiInvalid\" [inputId]=\"controlId\"\n [errorId]=\"errorElementId\" [showPrefixIcon]=\"showPrefixIcon\" [prefixIcon]=\"prefixIcon\" [clearable]=\"clearable\"\n [clearAriaLabel]=\"clearAriaLabel\"\n [mostrarMenuContexto]=\"mostrarMenuContexto\" [contextMenuItems]=\"contextMenuItems\" [contextMenuId]=\"contextMenuId\"\n (clear)=\"onClear()\" (contextMenuSelect)=\"contextMenuSelect.emit($event)\">\n <ng-content select=\"[appFieldPrefix]\" />\n <input class=\"decimal-field__input\" type=\"text\" inputmode=\"decimal\" [attr.autocomplete]=\"autocompleteAttr\"\n [id]=\"controlId\"\n [attr.name]=\"name || null\" [attr.placeholder]=\"''\" [disabled]=\"disabled\" [readonly]=\"readonly\" [required]=\"uiRequiredEffective\"\n [attr.aria-invalid]=\"uiInvalid\" [attr.aria-describedby]=\"uiAriaDescribedBy\" [value]=\"inputText\"\n (beforeinput)=\"onBeforeInput($event)\" (input)=\"onNativeInput($event)\" (blur)=\"onBlur()\" />\n</app-base-field>\n", styles: [":host{display:block;width:100%;box-sizing:border-box}.decimal-field__input{display:block;width:100%;max-width:none;box-sizing:border-box;margin:0;padding:1.35rem .75rem .45rem;font-size:1rem;line-height:1.35;font-family:inherit;color:var(--ui-field-float-input-text);border:none;border-radius:0;background:transparent;box-shadow:none;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.decimal-field__input::placeholder{color:transparent}.decimal-field__input:focus,.decimal-field__input:focus-visible{outline:none}.decimal-field__input--invalid:not(:disabled)::placeholder{color:transparent}.decimal-field__input:disabled{opacity:var(--ui-field-input-disabled-opacity);cursor:not-allowed}\n"], dependencies: [{ kind: "component", type: BaseFieldComponent, selector: "app-base-field", inputs: ["label", "errorMessage", "required", "showRequiredMark", "invalid", "filled", "disabled", "readonly", "inputId", "errorId", "showPrefixIcon", "prefixIcon", "clearable", "clearAriaLabel", "showSuffixSlot", "valueAlignEnd", "loading", "skeletonVariant", "mostrarMenuContexto", "contextMenuItems", "contextMenuId"], outputs: ["clear", "contextMenuSelect"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
152
- }
153
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DecimalFieldComponent, decorators: [{
154
- type: Component,
155
- args: [{ selector: 'app-decimal-field', standalone: true, imports: [BaseFieldComponent], changeDetection: ChangeDetectionStrategy.OnPush, providers: [
156
- {
157
- provide: NG_VALUE_ACCESSOR,
158
- useExisting: forwardRef(() => DecimalFieldComponent),
159
- multi: true,
160
- },
161
- ], template: "<app-base-field [label]=\"floatLabelCaption\" [filled]=\"filledUi\" [disabled]=\"disabled\" [readonly]=\"readonly\"\n [loading]=\"loading\"\n [errorMessage]=\"uiErrorMessage\" [required]=\"uiRequiredEffective\" [showRequiredMark]=\"showRequiredMark\"\n [invalid]=\"uiInvalid\" [inputId]=\"controlId\"\n [errorId]=\"errorElementId\" [showPrefixIcon]=\"showPrefixIcon\" [prefixIcon]=\"prefixIcon\" [clearable]=\"clearable\"\n [clearAriaLabel]=\"clearAriaLabel\"\n [mostrarMenuContexto]=\"mostrarMenuContexto\" [contextMenuItems]=\"contextMenuItems\" [contextMenuId]=\"contextMenuId\"\n (clear)=\"onClear()\" (contextMenuSelect)=\"contextMenuSelect.emit($event)\">\n <ng-content select=\"[appFieldPrefix]\" />\n <input class=\"decimal-field__input\" type=\"text\" inputmode=\"decimal\" [attr.autocomplete]=\"autocompleteAttr\"\n [id]=\"controlId\"\n [attr.name]=\"name || null\" [attr.placeholder]=\"''\" [disabled]=\"disabled\" [readonly]=\"readonly\" [required]=\"uiRequiredEffective\"\n [attr.aria-invalid]=\"uiInvalid\" [attr.aria-describedby]=\"uiAriaDescribedBy\" [value]=\"inputText\"\n (beforeinput)=\"onBeforeInput($event)\" (input)=\"onNativeInput($event)\" (blur)=\"onBlur()\" />\n</app-base-field>\n", styles: [":host{display:block;width:100%;box-sizing:border-box}.decimal-field__input{display:block;width:100%;max-width:none;box-sizing:border-box;margin:0;padding:1.35rem .75rem .45rem;font-size:1rem;line-height:1.35;font-family:inherit;color:var(--ui-field-float-input-text);border:none;border-radius:0;background:transparent;box-shadow:none;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.decimal-field__input::placeholder{color:transparent}.decimal-field__input:focus,.decimal-field__input:focus-visible{outline:none}.decimal-field__input--invalid:not(:disabled)::placeholder{color:transparent}.decimal-field__input:disabled{opacity:var(--ui-field-input-disabled-opacity);cursor:not-allowed}\n"] }]
162
- }], propDecorators: { max: [{
163
- type: Input,
164
- args: [{ transform: numberAttribute }]
165
- }] } });
166
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjaW1hbC1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2ZpZWxkcy9pbnB1dC1maWVsZHMvZGVjaW1hbC1maWVsZC9kZWNpbWFsLWZpZWxkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZmllbGRzL2lucHV0LWZpZWxkcy9kZWNpbWFsLWZpZWxkL2RlY2ltYWwtZmllbGQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsS0FBSyxFQUNMLFVBQVUsRUFDVixlQUFlLEdBQ2hCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ25FLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzlFLE9BQU8sRUFDTCxxQkFBcUIsRUFDckIseUJBQXlCLEVBQ3pCLHNCQUFzQixFQUN0QixxQkFBcUIsRUFDckIsZUFBZSxFQUNmLGNBQWMsRUFDZCxlQUFlLEdBQ2hCLE1BQU0sa0NBQWtDLENBQUM7O0FBaUIxQyxNQUFNLE9BQU8scUJBQXNCLFNBQVEsdUJBQXNDO0lBZmpGOztRQWdCRSxvRUFBb0U7UUFDN0IsUUFBRyxHQUFHLE1BQU0sQ0FBQztRQUVwRCxjQUFTLEdBQUcsRUFBRSxDQUFDO1FBRWYsYUFBUSxHQUFHLEtBQUssQ0FBQztLQXVJbEI7SUFySVMsZUFBZTtRQUNyQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRWtCLGVBQWUsQ0FBQyxLQUFvQjtRQUNyRCxJQUFJLEtB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IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIENvbXBvbmVudCxcclxuICBJbnB1dCxcclxuICBmb3J3YXJkUmVmLFxyXG4gIG51bWJlckF0dHJpYnV0ZSxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEJhc2VGaWVsZENvbXBvbmVudCB9IGZyb20gJy4uL19iYXNlL2Jhc2UtZmllbGQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTmdDb250cm9sRmllbGREaXJlY3RpdmUgfSBmcm9tICcuLi9fYmFzZS9uZy1jb250cm9sLWZpZWxkLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7XHJcbiAgYnVpbGREZWNpbWFsQnJEaXNwbGF5LFxyXG4gIGJ1aWxkRGVjaW1hbEJyUGFyc2VTdHJpbmcsXHJcbiAgY2FyZXRJbmRleEZyb21TZW1hbnRpYyxcclxuICBleHRyYWN0RGVjaW1hbEJyUGFydHMsXHJcbiAgZm9ybWF0RGVjaW1hbEJyLFxyXG4gIHBhcnNlRGVjaW1hbEJyLFxyXG4gIHNlbWFudGljQ2FyZXRBdCxcclxufSBmcm9tICcuLi8uLi8uLi9fdXRpbHMvZGVjaW1hbC1ici51dGlscyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1kZWNpbWFsLWZpZWxkJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtCYXNlRmllbGRDb21wb25lbnRdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9kZWNpbWFsLWZpZWxkLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vZGVjaW1hbC1maWVsZC5jb21wb25lbnQuc2NzcycsXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEZWNpbWFsRmllbGRDb21wb25lbnQpLFxyXG4gICAgICBtdWx0aTogdHJ1ZSxcclxuICAgIH0sXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIERlY2ltYWxGaWVsZENvbXBvbmVudCBleHRlbmRzIE5nQ29udHJvbEZpZWxkRGlyZWN0aXZlPG51bWJlciB8IG51bGw+IHtcclxuICAvKiogVmFsb3IgbcOheGltbyBwZXJtaXRpZG8gKGluY2x1c2l2ZSksIGNvbSBhdMOpIDIgY2FzYXMgZGVjaW1haXMuICovXHJcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSkgbWF4ID0gOTk5OTk5O1xyXG5cclxuICBpbnB1dFRleHQgPSAnJztcclxuXHJcbiAgZmlsbGVkVWkgPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSByZWZyZXNoRmlsbGVkVWkoKTogdm9pZCB7XHJcbiAgICB0aGlzLmZpbGxlZFVpID0gdGhpcy5pbnB1dFRleHQudHJpbSgpLmxlbmd0aCA+IDA7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYWZ0ZXJXcml0ZVZhbHVlKHZhbHVlOiBudW1iZXIgfCBudWxsKTogdm9pZCB7XHJcbiAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLmlucHV0VGV4dCA9ICcnO1xyXG4gICAgICB0aGlzLnJlZnJlc2hGaWxsZWRVaSgpO1xyXG4gICAgICBpZiAodGhpcy5uZ0NvbnRyb2w/LmNvbnRyb2wpIHtcclxuICAgICAgICB0aGlzLnN5bmNDb250cm9sVWkoKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCB2ID0gTWF0aC5taW4odmFsdWUsIHRoaXMubWF4KTtcclxuICAgIHRoaXMuaW5wdXRUZXh0ID0gZm9ybWF0RGVjaW1hbEJyKHYpO1xyXG4gICAgaWYgKHYgIT09IHZhbHVlKSB7XHJcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHRoaXMuZW1pdE1vZGVsVmFsdWUodikpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yZWZyZXNoRmlsbGVkVWkoKTtcclxuICAgIGlmICh0aGlzLm5nQ29udHJvbD8uY29udHJvbCkge1xyXG4gICAgICB0aGlzLnN5bmNDb250cm9sVWkoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQmVmb3JlSW5wdXQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XHJcbiAgICBjb25zdCBlID0gZXZlbnQgYXMgSW5wdXRFdmVudDtcclxuICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHkgfHwgZS5pc0NvbXBvc2luZykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoZS5pbnB1dFR5cGUgPT09ICdpbnNlcnRUZXh0JyB8fCBlLmlucHV0VHlwZSA9PT0gJ2luc2VydENvbXBvc2l0aW9uVGV4dCcpIHtcclxuICAgICAgY29uc3QgZGF0YSA9IGUuZGF0YSA/PyAnJztcclxuICAgICAgaWYgKGRhdGEubGVuZ3RoICE9PSAxKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGlucHV0ID0gZS50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcclxuICAgICAgY29uc3QgeyBoYXNDb21tYSB9ID0gZXh0cmFjdERlY2ltYWxCclBhcnRzKGlucHV0LnZhbHVlKTtcclxuICAgICAgaWYgKGRhdGEgPT09ICcsJykge1xyXG4gICAgICAgIGlmIChoYXNDb21tYSkge1xyXG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKC9eXFxkJC8udGVzdChkYXRhKSkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbk5hdGl2ZUlucHV0KGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xyXG4gICAgY29uc3QgY2FyZXQgPSBpbnB1dC5zZWxlY3Rpb25TdGFydCA/PyBpbnB1dC52YWx1ZS5sZW5ndGg7XHJcbiAgICBjb25zdCBzZW1hbnRpYyA9IHNlbWFudGljQ2FyZXRBdChpbnB1dC52YWx1ZSwgY2FyZXQpO1xyXG5cclxuICAgIGNvbnN0IHBhcnRzID0gZXh0cmFjdERlY2ltYWxCclBhcnRzKGlucHV0LnZhbHVlKTtcclxuICAgIGNvbnN0IGRpc3BsYXkgPSBidWlsZERlY2ltYWxCckRpc3BsYXkocGFydHMpO1xyXG4gICAgY29uc3QgcGFyc2VTdHIgPSBidWlsZERlY2ltYWxCclBhcnNlU3RyaW5nKHBhcnRzKTtcclxuICAgIGxldCBwYXJzZWQgPSBwYXJzZURlY2ltYWxCcihwYXJzZVN0cik7XHJcbiAgICBpZiAocGFyc2VkICE9IG51bGwgJiYgcGFyc2VkID4gdGhpcy5tYXgpIHtcclxuICAgICAgcGFyc2VkID0gdGhpcy5tYXg7XHJcbiAgICAgIGNvbnN0IGNhcHBlZCA9IGZvcm1hdERlY2ltYWxCcihwYXJzZWQpO1xyXG4gICAgICBpbnB1dC52YWx1ZSA9IGNhcHBlZDtcclxuICAgICAgaW5wdXQuc2V0U2VsZWN0aW9uUmFuZ2UoY2FwcGVkLmxlbmd0aCwgY2FwcGVkLmxlbmd0aCk7XHJcbiAgICAgIHRoaXMuaW5wdXRUZXh0ID0gY2FwcGVkO1xyXG4gICAgICB0aGlzLmVtaXRNb2RlbFZhbHVlKHBhcnNlZCk7XHJcbiAgICAgIHRoaXMucmVmcmVzaEZpbGxlZFVpKCk7XHJcbiAgICAgIGlmICh0aGlzLm5nQ29udHJvbD8uY29udHJvbCkge1xyXG4gICAgICAgIHRoaXMuc3luY0NvbnRyb2xVaSgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaW5wdXQudmFsdWUgIT09IGRpc3BsYXkpIHtcclxuICAgICAgaW5wdXQudmFsdWUgPSBkaXNwbGF5O1xyXG4gICAgICBjb25zdCBuZXh0ID0gY2FyZXRJbmRleEZyb21TZW1hbnRpYyhkaXNwbGF5LCBzZW1hbnRpYyk7XHJcbiAgICAgIGlucHV0LnNldFNlbGVjdGlvblJhbmdlKG5leHQsIG5leHQpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaW5wdXRUZXh0ID0gZGlzcGxheTtcclxuICAgIHRoaXMuZW1pdE1vZGVsVmFsdWUocGFyc2VkKTtcclxuICAgIHRoaXMucmVmcmVzaEZpbGxlZFVpKCk7XHJcbiAgICBpZiAodGhpcy5uZ0NvbnRyb2w/LmNvbnRyb2wpIHtcclxuICAgICAgdGhpcy5zeW5jQ29udHJvbFVpKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQmx1cigpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XHJcbiAgICAgIHRoaXMubm90aWZ5VG91Y2hlZCgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBwYXJ0cyA9IGV4dHJhY3REZWNpbWFsQnJQYXJ0cyh0aGlzLmlucHV0VGV4dCk7XHJcbiAgICBjb25zdCBwYXJzZVN0ciA9IGJ1aWxkRGVjaW1hbEJyUGFyc2VTdHJpbmcocGFydHMpO1xyXG4gICAgbGV0IHBhcnNlZCA9IHBhcnNlRGVjaW1hbEJyKHBhcnNlU3RyKTtcclxuICAgIGlmIChwYXJzZWQgIT0gbnVsbCAmJiBwYXJzZWQgPiB0aGlzLm1heCkge1xyXG4gICAgICBwYXJzZWQgPSB0aGlzLm1heDtcclxuICAgIH1cclxuICAgIGNvbnN0IGN0cmwgPSB0aGlzLm5nQ29udHJvbD8uY29udHJvbDtcclxuICAgIGNvbnN0IGN1cnJlbnQgPSBjdHJsPy52YWx1ZSA/PyBudWxsO1xyXG4gICAgaWYgKHBhcnNlZCAhPT0gY3VycmVudCkge1xyXG4gICAgICB0aGlzLmVtaXRNb2RlbFZhbHVlKHBhcnNlZCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmlucHV0VGV4dCA9IHBhcnNlZCAhPSBudWxsID8gZm9ybWF0RGVjaW1hbEJyKHBhcnNlZCkgOiAnJztcclxuICAgIHRoaXMucmVmcmVzaEZpbGxlZFVpKCk7XHJcbiAgICB0aGlzLm5vdGlmeVRvdWNoZWQoKTtcclxuICAgIGlmICh0aGlzLm5nQ29udHJvbD8uY29udHJvbCkge1xyXG4gICAgICB0aGlzLnN5bmNDb250cm9sVWkoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25DbGVhcigpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pbnB1dFRleHQgPSAnJztcclxuICAgIHRoaXMuZW1pdE1vZGVsVmFsdWUobnVsbCk7XHJcbiAgICB0aGlzLm5vdGlmeVRvdWNoZWQoKTtcclxuICAgIHRoaXMucmVmcmVzaEZpbGxlZFVpKCk7XHJcbiAgICBpZiAodGhpcy5uZ0NvbnRyb2w/LmNvbnRyb2wpIHtcclxuICAgICAgdGhpcy5zeW5jQ29udHJvbFVpKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGFwcC1iYXNlLWZpZWxkIFtsYWJlbF09XCJmbG9hdExhYmVsQ2FwdGlvblwiIFtmaWxsZWRdPVwiZmlsbGVkVWlcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICBbbG9hZGluZ109XCJsb2FkaW5nXCJcbiAgW2Vycm9yTWVzc2FnZV09XCJ1aUVycm9yTWVzc2FnZVwiIFtyZXF1aXJlZF09XCJ1aVJlcXVpcmVkRWZmZWN0aXZlXCIgW3Nob3dSZXF1aXJlZE1hcmtdPVwic2hvd1JlcXVpcmVkTWFya1wiXG4gIFtpbnZhbGlkXT1cInVpSW52YWxpZFwiIFtpbnB1dElkXT1cImNvbnRyb2xJZFwiXG4gIFtlcnJvcklkXT1cImVycm9yRWxlbWVudElkXCIgW3Nob3dQcmVmaXhJY29uXT1cInNob3dQcmVmaXhJY29uXCIgW3ByZWZpeEljb25dPVwicHJlZml4SWNvblwiIFtjbGVhcmFibGVdPVwiY2xlYXJhYmxlXCJcbiAgW2NsZWFyQXJpYUxhYmVsXT1cImNsZWFyQXJpYUxhYmVsXCJcbiAgW21vc3RyYXJNZW51Q29udGV4dG9dPVwibW9zdHJhck1lbnVDb250ZXh0b1wiIFtjb250ZXh0TWVudUl0ZW1zXT1cImNvbnRleHRNZW51SXRlbXNcIiBbY29udGV4dE1lbnVJZF09XCJjb250ZXh0TWVudUlkXCJcbiAgKGNsZWFyKT1cIm9uQ2xlYXIoKVwiIChjb250ZXh0TWVudVNlbGVjdCk9XCJjb250ZXh0TWVudVNlbGVjdC5lbWl0KCRldmVudClcIj5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2FwcEZpZWxkUHJlZml4XVwiIC8+XG4gIDxpbnB1dCBjbGFzcz1cImRlY2ltYWwtZmllbGRfX2lucHV0XCIgdHlwZT1cInRleHRcIiBpbnB1dG1vZGU9XCJkZWNpbWFsXCIgW2F0dHIuYXV0b2NvbXBsZXRlXT1cImF1dG9jb21wbGV0ZUF0dHJcIlxuICAgIFtpZF09XCJjb250cm9sSWRcIlxuICAgIFthdHRyLm5hbWVdPVwibmFtZSB8fCBudWxsXCIgW2F0dHIucGxhY2Vob2xkZXJdPVwiJydcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBbcmVhZG9ubHldPVwicmVhZG9ubHlcIiBbcmVxdWlyZWRdPVwidWlSZXF1aXJlZEVmZmVjdGl2ZVwiXG4gICAgW2F0dHIuYXJpYS1pbnZhbGlkXT1cInVpSW52YWxpZFwiIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwidWlBcmlhRGVzY3JpYmVkQnlcIiBbdmFsdWVdPVwiaW5wdXRUZXh0XCJcbiAgICAoYmVmb3JlaW5wdXQpPVwib25CZWZvcmVJbnB1dCgkZXZlbnQpXCIgKGlucHV0KT1cIm9uTmF0aXZlSW5wdXQoJGV2ZW50KVwiIChibHVyKT1cIm9uQmx1cigpXCIgLz5cbjwvYXBwLWJhc2UtZmllbGQ+XG4iXX0=
@@ -1,22 +0,0 @@
1
- export { BaseFieldDirective } from './_base/base-field.directive';
2
- export { BaseFieldComponent } from './_base/base-field.component';
3
- export { NgControlFieldDirective } from './_base/ng-control-field.directive';
4
- export { TextFieldComponent } from './text-field/text-field.component';
5
- export { PasswordFieldComponent } from './password-field/password-field.component';
6
- export { TextareaFieldComponent } from './textarea-field/textarea-field.component';
7
- export { IntegerFieldComponent } from './integer-field/integer-field.component';
8
- export { DecimalFieldComponent } from './decimal-field/decimal-field.component';
9
- export { DateFieldComponent } from './date-field/date-field.component';
10
- export { InputMaskFieldComponent } from './input-mask-field/input-mask-field.component';
11
- export { CepFieldComponent } from './cep-field/cep-field.component';
12
- export { PhoneFieldComponent } from './phone-field/phone-field.component';
13
- export { CpfCnpjFieldComponent } from './cpf-cnpj-field/cpf-cnpj-field.component';
14
- export { MaskedTextFieldBase } from './_base/masked-text-field.base';
15
- export { stripToDigits, maskDigitCount, formatMaskDigits, } from './_utils/mask-format.utils';
16
- export { cepMaskCompleteValidator, cpfCnpjMaskCompleteValidator, fixedDigitsMaskCompleteValidator, phoneBrMaskCompleteValidator, } from './_utils/mask-complete.validators';
17
- export { BR_ESTADOS_NOME_SIGLA, mapEstadosToOptions, } from '../../_utils/estados-br.data';
18
- export { sanitizeIntegerDigits, parseIntegerString, } from '../../_utils/integer-value.utils';
19
- export { formatIntegerThousandsBr, semanticIntegerDigitCountLeft, caretIndexFromIntegerDigitCount, } from '../../_utils/integer-br.utils';
20
- export { sanitizeDecimalBrInput, parseDecimalBr, formatDecimalBr, extractDecimalBrParts, buildDecimalBrDisplay, buildDecimalBrParseString, semanticCaretAt, caretIndexFromSemantic, } from '../../_utils/decimal-br.utils';
21
- export { formatDateTimePtBr, formatUiFieldDateValue, parseUiFieldDateValue, normalizeFormDateValue, applyPickedCalendarDate, } from '../../_utils/date-pt-br.utils';
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2ZpZWxkcy9pbnB1dC1maWVsZHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFN0UsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDdkUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDbkYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDbkYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDaEYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDaEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDdkUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDeEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDcEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDMUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFFbEYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFckUsT0FBTyxFQUNMLGFBQWEsRUFDYixjQUFjLEVBQ2QsZ0JBQWdCLEdBQ2pCLE1BQU0sNEJBQTRCLENBQUM7QUFFcEMsT0FBTyxFQUNMLHdCQUF3QixFQUN4Qiw0QkFBNEIsRUFDNUIsZ0NBQWdDLEVBQ2hDLDRCQUE0QixHQUM3QixNQUFNLG1DQUFtQyxDQUFDO0FBSTNDLE9BQU8sRUFDTCxxQkFBcUIsRUFDckIsbUJBQW1CLEdBQ3BCLE1BQU0sOEJBQThCLENBQUM7QUFFdEMsT0FBTyxFQUNMLHFCQUFxQixFQUNyQixrQkFBa0IsR0FDbkIsTUFBTSxrQ0FBa0MsQ0FBQztBQUUxQyxPQUFPLEVBQ0wsd0JBQXdCLEVBQ3hCLDZCQUE2QixFQUM3QiwrQkFBK0IsR0FDaEMsTUFBTSwrQkFBK0IsQ0FBQztBQUV2QyxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLGNBQWMsRUFDZCxlQUFlLEVBQ2YscUJBQXFCLEVBQ3JCLHFCQUFxQixFQUNyQix5QkFBeUIsRUFDekIsZUFBZSxFQUNmLHNCQUFzQixHQUN2QixNQUFNLCtCQUErQixDQUFDO0FBRXZDLE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsc0JBQXNCLEVBQ3RCLHFCQUFxQixFQUNyQixzQkFBc0IsRUFDdEIsdUJBQXVCLEdBQ3hCLE1BQU0sK0JBQStCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBCYXNlRmllbGREaXJlY3RpdmUgfSBmcm9tICcuL19iYXNlL2Jhc2UtZmllbGQuZGlyZWN0aXZlJztcclxuZXhwb3J0IHsgQmFzZUZpZWxkQ29tcG9uZW50IH0gZnJvbSAnLi9fYmFzZS9iYXNlLWZpZWxkLmNvbXBvbmVudCc7XHJcbmV4cG9ydCB7IE5nQ29udHJvbEZpZWxkRGlyZWN0aXZlIH0gZnJvbSAnLi9fYmFzZS9uZy1jb250cm9sLWZpZWxkLmRpcmVjdGl2ZSc7XHJcblxyXG5leHBvcnQgeyBUZXh0RmllbGRDb21wb25lbnQgfSBmcm9tICcuL3RleHQtZmllbGQvdGV4dC1maWVsZC5jb21wb25lbnQnO1xyXG5leHBvcnQgeyBQYXNzd29yZEZpZWxkQ29tcG9uZW50IH0gZnJvbSAnLi9wYXNzd29yZC1maWVsZC9wYXNzd29yZC1maWVsZC5jb21wb25lbnQnO1xyXG5leHBvcnQgeyBUZXh0YXJlYUZpZWxkQ29tcG9uZW50IH0gZnJvbSAnLi90ZXh0YXJlYS1maWVsZC90ZXh0YXJlYS1maWVsZC5jb21wb25lbnQnO1xyXG5leHBvcnQgeyBJbnRlZ2VyRmllbGRDb21wb25lbnQgfSBmcm9tICcuL2ludGVnZXItZmllbGQvaW50ZWdlci1maWVsZC5jb21wb25lbnQnO1xyXG5leHBvcnQgeyBEZWNpbWFsRmllbGRDb21wb25lbnQgfSBmcm9tICcuL2RlY2ltYWwtZmllbGQvZGVjaW1hbC1maWVsZC5jb21wb25lbnQnO1xyXG5leHBvcnQgeyBEYXRlRmllbGRDb21wb25lbnQgfSBmcm9tICcuL2RhdGUtZmllbGQvZGF0ZS1maWVsZC5jb21wb25lbnQnO1xyXG5leHBvcnQgeyBJbnB1dE1hc2tGaWVsZENvbXBvbmVudCB9IGZyb20gJy4vaW5wdXQtbWFzay1maWVsZC9pbnB1dC1tYXNrLWZpZWxkLmNvbXBvbmVudCc7XHJcbmV4cG9ydCB7IENlcEZpZWxkQ29tcG9uZW50IH0gZnJvbSAnLi9jZXAtZmllbGQvY2VwLWZpZWxkLmNvbXBvbmVudCc7XHJcbmV4cG9ydCB7IFBob25lRmllbGRDb21wb25lbnQgfSBmcm9tICcuL3Bob25lLWZpZWxkL3Bob25lLWZpZWxkLmNvbXBvbmVudCc7XHJcbmV4cG9ydCB7IENwZkNucGpGaWVsZENvbXBvbmVudCB9IGZyb20gJy4vY3BmLWNucGotZmllbGQvY3BmLWNucGotZmllbGQuY29tcG9uZW50JztcclxuXHJcbmV4cG9ydCB7IE1hc2tlZFRleHRGaWVsZEJhc2UgfSBmcm9tICcuL19iYXNlL21hc2tlZC10ZXh0LWZpZWxkLmJhc2UnO1xyXG5cclxuZXhwb3J0IHtcclxuICBzdHJpcFRvRGlnaXRzLFxyXG4gIG1hc2tEaWdpdENvdW50LFxyXG4gIGZvcm1hdE1hc2tEaWdpdHMsXHJcbn0gZnJvbSAnLi9fdXRpbHMvbWFzay1mb3JtYXQudXRpbHMnO1xyXG5cclxuZXhwb3J0IHtcclxuICBjZXBNYXNrQ29tcGxldGVWYWxpZGF0b3IsXHJcbiAgY3BmQ25wak1hc2tDb21wbGV0ZVZhbGlkYXRvcixcclxuICBmaXhlZERpZ2l0c01hc2tDb21wbGV0ZVZhbGlkYXRvcixcclxuICBwaG9uZUJyTWFza0NvbXBsZXRlVmFsaWRhdG9yLFxyXG59IGZyb20gJy4vX3V0aWxzL21hc2stY29tcGxldGUudmFsaWRhdG9ycyc7XHJcblxyXG5leHBvcnQgdHlwZSB7IEZpZWxkQ29tbW9uSW5wdXRzIH0gZnJvbSAnLi9fbW9kZWxzJztcclxuXHJcbmV4cG9ydCB7XHJcbiAgQlJfRVNUQURPU19OT01FX1NJR0xBLFxyXG4gIG1hcEVzdGFkb3NUb09wdGlvbnMsXHJcbn0gZnJvbSAnLi4vLi4vX3V0aWxzL2VzdGFkb3MtYnIuZGF0YSc7XHJcblxyXG5leHBvcnQge1xyXG4gIHNhbml0aXplSW50ZWdlckRpZ2l0cyxcclxuICBwYXJzZUludGVnZXJTdHJpbmcsXHJcbn0gZnJvbSAnLi4vLi4vX3V0aWxzL2ludGVnZXItdmFsdWUudXRpbHMnO1xyXG5cclxuZXhwb3J0IHtcclxuICBmb3JtYXRJbnRlZ2VyVGhvdXNhbmRzQnIsXHJcbiAgc2VtYW50aWNJbnRlZ2VyRGlnaXRDb3VudExlZnQsXHJcbiAgY2FyZXRJbmRleEZyb21JbnRlZ2VyRGlnaXRDb3VudCxcclxufSBmcm9tICcuLi8uLi9fdXRpbHMvaW50ZWdlci1ici51dGlscyc7XHJcblxyXG5leHBvcnQge1xyXG4gIHNhbml0aXplRGVjaW1hbEJySW5wdXQsXHJcbiAgcGFyc2VEZWNpbWFsQnIsXHJcbiAgZm9ybWF0RGVjaW1hbEJyLFxyXG4gIGV4dHJhY3REZWNpbWFsQnJQYXJ0cyxcclxuICBidWlsZERlY2ltYWxCckRpc3BsYXksXHJcbiAgYnVpbGREZWNpbWFsQnJQYXJzZVN0cmluZyxcclxuICBzZW1hbnRpY0NhcmV0QXQsXHJcbiAgY2FyZXRJbmRleEZyb21TZW1hbnRpYyxcclxufSBmcm9tICcuLi8uLi9fdXRpbHMvZGVjaW1hbC1ici51dGlscyc7XHJcblxyXG5leHBvcnQge1xyXG4gIGZvcm1hdERhdGVUaW1lUHRCcixcclxuICBmb3JtYXRVaUZpZWxkRGF0ZVZhbHVlLFxyXG4gIHBhcnNlVWlGaWVsZERhdGVWYWx1ZSxcclxuICBub3JtYWxpemVGb3JtRGF0ZVZhbHVlLFxyXG4gIGFwcGx5UGlja2VkQ2FsZW5kYXJEYXRlLFxyXG59IGZyb20gJy4uLy4uL191dGlscy9kYXRlLXB0LWJyLnV0aWxzJztcclxuIl19
@@ -1,52 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, HostBinding, Input, forwardRef, } from '@angular/core';
2
- import { NG_VALUE_ACCESSOR } from '@angular/forms';
3
- import { BaseFieldComponent } from '../_base/base-field.component';
4
- import { MaskedTextFieldBase } from '../_base/masked-text-field.base';
5
- import * as i0 from "@angular/core";
6
- /**
7
- * Campo de texto com máscara configurável (`#` = dígito).
8
- * Valor do formulário: apenas dígitos, sem máscara.
9
- */
10
- export class InputMaskFieldComponent extends MaskedTextFieldBase {
11
- constructor() {
12
- super(...arguments);
13
- /** Ex.: `#####-###`, `(##) #####-####`. */
14
- this.maskPattern = '#####-###';
15
- }
16
- get hostInvalidClass() {
17
- return this.uiInvalid;
18
- }
19
- onNativeInput(event) {
20
- this.onMaskedInput(event);
21
- }
22
- onBlur() {
23
- this.onMaskedBlur();
24
- }
25
- onClear() {
26
- this.onMaskedClear();
27
- }
28
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: InputMaskFieldComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
29
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: InputMaskFieldComponent, isStandalone: true, selector: "app-input-mask-field", inputs: { maskPattern: "maskPattern" }, host: { properties: { "class.input-mask-field--invalid": "this.hostInvalidClass" } }, providers: [
30
- {
31
- provide: NG_VALUE_ACCESSOR,
32
- useExisting: forwardRef(() => InputMaskFieldComponent),
33
- multi: true,
34
- },
35
- ], usesInheritance: true, ngImport: i0, template: "<app-base-field [label]=\"floatLabelCaption\" [filled]=\"filledUi\" [disabled]=\"disabled\" [readonly]=\"readonly\"\n [loading]=\"loading\"\n [errorMessage]=\"uiErrorMessage\" [required]=\"uiRequiredEffective\" [showRequiredMark]=\"showRequiredMark\"\n [invalid]=\"uiInvalid\" [inputId]=\"controlId\" [errorId]=\"errorElementId\" [showPrefixIcon]=\"showPrefixIcon\"\n [prefixIcon]=\"prefixIcon\" [clearable]=\"clearable\" [clearAriaLabel]=\"clearAriaLabel\"\n [mostrarMenuContexto]=\"mostrarMenuContexto\" [contextMenuItems]=\"contextMenuItems\" [contextMenuId]=\"contextMenuId\"\n (clear)=\"onClear()\" (contextMenuSelect)=\"contextMenuSelect.emit($event)\">\n <ng-content select=\"[appFieldPrefix]\" />\n <input class=\"input-mask-field__input\" type=\"text\" [id]=\"controlId\" [attr.name]=\"name || null\"\n [attr.placeholder]=\"''\" [attr.autocomplete]=\"autocompleteAttr\" [disabled]=\"disabled\"\n [readonly]=\"readonly\" [required]=\"uiRequiredEffective\" [attr.aria-invalid]=\"uiInvalid\"\n [attr.aria-describedby]=\"uiAriaDescribedBy\" [value]=\"inputText\" (input)=\"onNativeInput($event)\"\n (blur)=\"onBlur()\" />\n</app-base-field>\n", styles: [":host{display:block;width:100%;box-sizing:border-box}.input-mask-field__input{display:block;width:100%;max-width:none;box-sizing:border-box;margin:0;padding:1.35rem .75rem .45rem;font-size:1rem;line-height:1.35;font-family:inherit;color:var(--ui-field-float-input-text);border:none;border-radius:0;background:transparent;box-shadow:none;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.input-mask-field__input::placeholder{color:transparent}.input-mask-field__input:focus,.input-mask-field__input:focus-visible{outline:none}.input-mask-field__input--invalid:not(:disabled)::placeholder{color:transparent}.input-mask-field__input:disabled{opacity:var(--ui-field-input-disabled-opacity);cursor:not-allowed}\n"], dependencies: [{ kind: "component", type: BaseFieldComponent, selector: "app-base-field", inputs: ["label", "errorMessage", "required", "showRequiredMark", "invalid", "filled", "disabled", "readonly", "inputId", "errorId", "showPrefixIcon", "prefixIcon", "clearable", "clearAriaLabel", "showSuffixSlot", "valueAlignEnd", "loading", "skeletonVariant", "mostrarMenuContexto", "contextMenuItems", "contextMenuId"], outputs: ["clear", "contextMenuSelect"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
36
- }
37
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: InputMaskFieldComponent, decorators: [{
38
- type: Component,
39
- args: [{ selector: 'app-input-mask-field', standalone: true, imports: [BaseFieldComponent], changeDetection: ChangeDetectionStrategy.OnPush, providers: [
40
- {
41
- provide: NG_VALUE_ACCESSOR,
42
- useExisting: forwardRef(() => InputMaskFieldComponent),
43
- multi: true,
44
- },
45
- ], template: "<app-base-field [label]=\"floatLabelCaption\" [filled]=\"filledUi\" [disabled]=\"disabled\" [readonly]=\"readonly\"\n [loading]=\"loading\"\n [errorMessage]=\"uiErrorMessage\" [required]=\"uiRequiredEffective\" [showRequiredMark]=\"showRequiredMark\"\n [invalid]=\"uiInvalid\" [inputId]=\"controlId\" [errorId]=\"errorElementId\" [showPrefixIcon]=\"showPrefixIcon\"\n [prefixIcon]=\"prefixIcon\" [clearable]=\"clearable\" [clearAriaLabel]=\"clearAriaLabel\"\n [mostrarMenuContexto]=\"mostrarMenuContexto\" [contextMenuItems]=\"contextMenuItems\" [contextMenuId]=\"contextMenuId\"\n (clear)=\"onClear()\" (contextMenuSelect)=\"contextMenuSelect.emit($event)\">\n <ng-content select=\"[appFieldPrefix]\" />\n <input class=\"input-mask-field__input\" type=\"text\" [id]=\"controlId\" [attr.name]=\"name || null\"\n [attr.placeholder]=\"''\" [attr.autocomplete]=\"autocompleteAttr\" [disabled]=\"disabled\"\n [readonly]=\"readonly\" [required]=\"uiRequiredEffective\" [attr.aria-invalid]=\"uiInvalid\"\n [attr.aria-describedby]=\"uiAriaDescribedBy\" [value]=\"inputText\" (input)=\"onNativeInput($event)\"\n (blur)=\"onBlur()\" />\n</app-base-field>\n", styles: [":host{display:block;width:100%;box-sizing:border-box}.input-mask-field__input{display:block;width:100%;max-width:none;box-sizing:border-box;margin:0;padding:1.35rem .75rem .45rem;font-size:1rem;line-height:1.35;font-family:inherit;color:var(--ui-field-float-input-text);border:none;border-radius:0;background:transparent;box-shadow:none;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.input-mask-field__input::placeholder{color:transparent}.input-mask-field__input:focus,.input-mask-field__input:focus-visible{outline:none}.input-mask-field__input--invalid:not(:disabled)::placeholder{color:transparent}.input-mask-field__input:disabled{opacity:var(--ui-field-input-disabled-opacity);cursor:not-allowed}\n"] }]
46
- }], propDecorators: { hostInvalidClass: [{
47
- type: HostBinding,
48
- args: ['class.input-mask-field--invalid']
49
- }], maskPattern: [{
50
- type: Input
51
- }] } });
52
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtbWFzay1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2ZpZWxkcy9pbnB1dC1maWVsZHMvaW5wdXQtbWFzay1maWVsZC9pbnB1dC1tYXNrLWZpZWxkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZmllbGRzL2lucHV0LWZpZWxkcy9pbnB1dC1tYXNrLWZpZWxkL2lucHV0LW1hc2stZmllbGQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsV0FBVyxFQUNYLEtBQUssRUFDTCxVQUFVLEdBQ1gsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDbkUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0saUNBQWlDLENBQUM7O0FBRXRFOzs7R0FHRztBQWdCSCxNQUFNLE9BQU8sdUJBQXdCLFNBQVEsbUJBQW1CO0lBZmhFOztRQXFCRSwyQ0FBMkM7UUFDekIsZ0JBQVcsR0FBRyxXQUFXLENBQUM7S0FhN0M7SUFuQkMsSUFDSSxnQkFBZ0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFLRCxhQUFhLENBQUMsS0FBWTtRQUN4QixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRCxNQUFNO1FBQ0osSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7K0dBbkJVLHVCQUF1QjttR0FBdkIsdUJBQXVCLGlNQVJ2QjtZQUNUO2dCQUNFLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsdUJBQXVCLENBQUM7Z0JBQ3RELEtBQUssRUFBRSxJQUFJO2FBQ1o7U0FDRixpREM1QkgsaXBDQWNBLGt4QkRJWSxrQkFBa0I7OzRGQVlqQix1QkFBdUI7a0JBZm5DLFNBQVM7K0JBQ0Usc0JBQXNCLGNBQ3BCLElBQUksV0FDUCxDQUFDLGtCQUFrQixDQUFDLG1CQUdaLHVCQUF1QixDQUFDLE1BQU0sYUFDcEM7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsd0JBQXdCLENBQUM7NEJBQ3RELEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGOzhCQUlHLGdCQUFnQjtzQkFEbkIsV0FBVzt1QkFBQyxpQ0FBaUM7Z0JBTTVCLFdBQVc7c0JBQTVCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIENvbXBvbmVudCxcclxuICBIb3N0QmluZGluZyxcclxuICBJbnB1dCxcclxuICBmb3J3YXJkUmVmLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQmFzZUZpZWxkQ29tcG9uZW50IH0gZnJvbSAnLi4vX2Jhc2UvYmFzZS1maWVsZC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBNYXNrZWRUZXh0RmllbGRCYXNlIH0gZnJvbSAnLi4vX2Jhc2UvbWFza2VkLXRleHQtZmllbGQuYmFzZSc7XHJcblxyXG4vKipcclxuICogQ2FtcG8gZGUgdGV4dG8gY29tIG3DoXNjYXJhIGNvbmZpZ3Vyw6F2ZWwgKGAjYCA9IGTDrWdpdG8pLlxyXG4gKiBWYWxvciBkbyBmb3JtdWzDoXJpbzogYXBlbmFzIGTDrWdpdG9zLCBzZW0gbcOhc2NhcmEuXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1pbnB1dC1tYXNrLWZpZWxkJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtCYXNlRmllbGRDb21wb25lbnRdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9pbnB1dC1tYXNrLWZpZWxkLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vaW5wdXQtbWFzay1maWVsZC5jb21wb25lbnQuc2NzcycsXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBJbnB1dE1hc2tGaWVsZENvbXBvbmVudCksXHJcbiAgICAgIG11bHRpOiB0cnVlLFxyXG4gICAgfSxcclxuICBdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgSW5wdXRNYXNrRmllbGRDb21wb25lbnQgZXh0ZW5kcyBNYXNrZWRUZXh0RmllbGRCYXNlIHtcclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlucHV0LW1hc2stZmllbGQtLWludmFsaWQnKVxyXG4gIGdldCBob3N0SW52YWxpZENsYXNzKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMudWlJbnZhbGlkO1xyXG4gIH1cclxuXHJcbiAgLyoqIEV4LjogYCMjIyMjLSMjI2AsIGAoIyMpICMjIyMjLSMjIyNgLiAqL1xyXG4gIEBJbnB1dCgpIG92ZXJyaWRlIG1hc2tQYXR0ZXJuID0gJyMjIyMjLSMjIyc7XHJcblxyXG4gIG9uTmF0aXZlSW5wdXQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLm9uTWFza2VkSW5wdXQoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgb25CbHVyKCk6IHZvaWQge1xyXG4gICAgdGhpcy5vbk1hc2tlZEJsdXIoKTtcclxuICB9XHJcblxyXG4gIG9uQ2xlYXIoKTogdm9pZCB7XHJcbiAgICB0aGlzLm9uTWFza2VkQ2xlYXIoKTtcclxuICB9XHJcbn1cclxuIiwiPGFwcC1iYXNlLWZpZWxkIFtsYWJlbF09XCJmbG9hdExhYmVsQ2FwdGlvblwiIFtmaWxsZWRdPVwiZmlsbGVkVWlcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICBbbG9hZGluZ109XCJsb2FkaW5nXCJcbiAgW2Vycm9yTWVzc2FnZV09XCJ1aUVycm9yTWVzc2FnZVwiIFtyZXF1aXJlZF09XCJ1aVJlcXVpcmVkRWZmZWN0aXZlXCIgW3Nob3dSZXF1aXJlZE1hcmtdPVwic2hvd1JlcXVpcmVkTWFya1wiXG4gIFtpbnZhbGlkXT1cInVpSW52YWxpZFwiIFtpbnB1dElkXT1cImNvbnRyb2xJZFwiIFtlcnJvcklkXT1cImVycm9yRWxlbWVudElkXCIgW3Nob3dQcmVmaXhJY29uXT1cInNob3dQcmVmaXhJY29uXCJcbiAgW3ByZWZpeEljb25dPVwicHJlZml4SWNvblwiIFtjbGVhcmFibGVdPVwiY2xlYXJhYmxlXCIgW2NsZWFyQXJpYUxhYmVsXT1cImNsZWFyQXJpYUxhYmVsXCJcbiAgW21vc3RyYXJNZW51Q29udGV4dG9dPVwibW9zdHJhck1lbnVDb250ZXh0b1wiIFtjb250ZXh0TWVudUl0ZW1zXT1cImNvbnRleHRNZW51SXRlbXNcIiBbY29udGV4dE1lbnVJZF09XCJjb250ZXh0TWVudUlkXCJcbiAgKGNsZWFyKT1cIm9uQ2xlYXIoKVwiIChjb250ZXh0TWVudVNlbGVjdCk9XCJjb250ZXh0TWVudVNlbGVjdC5lbWl0KCRldmVudClcIj5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2FwcEZpZWxkUHJlZml4XVwiIC8+XG4gIDxpbnB1dCBjbGFzcz1cImlucHV0LW1hc2stZmllbGRfX2lucHV0XCIgdHlwZT1cInRleHRcIiBbaWRdPVwiY29udHJvbElkXCIgW2F0dHIubmFtZV09XCJuYW1lIHx8IG51bGxcIlxuICAgIFthdHRyLnBsYWNlaG9sZGVyXT1cIicnXCIgW2F0dHIuYXV0b2NvbXBsZXRlXT1cImF1dG9jb21wbGV0ZUF0dHJcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiIFtyZXF1aXJlZF09XCJ1aVJlcXVpcmVkRWZmZWN0aXZlXCIgW2F0dHIuYXJpYS1pbnZhbGlkXT1cInVpSW52YWxpZFwiXG4gICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJ1aUFyaWFEZXNjcmliZWRCeVwiIFt2YWx1ZV09XCJpbnB1dFRleHRcIiAoaW5wdXQpPVwib25OYXRpdmVJbnB1dCgkZXZlbnQpXCJcbiAgICAoYmx1cik9XCJvbkJsdXIoKVwiIC8+XG48L2FwcC1iYXNlLWZpZWxkPlxuIl19
@@ -1,143 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, Input, forwardRef, numberAttribute, } from '@angular/core';
2
- import { NG_VALUE_ACCESSOR } from '@angular/forms';
3
- import { BaseFieldComponent } from '../_base/base-field.component';
4
- import { NgControlFieldDirective } from '../_base/ng-control-field.directive';
5
- import { parseIntegerString, sanitizeIntegerDigits } from '../../../_utils/integer-value.utils';
6
- import { caretIndexFromIntegerDigitCount, formatIntegerThousandsBr, semanticIntegerDigitCountLeft, } from '../../../_utils/integer-br.utils';
7
- import * as i0 from "@angular/core";
8
- export class IntegerFieldComponent extends NgControlFieldDirective {
9
- constructor() {
10
- super(...arguments);
11
- /** Valor máximo permitido (inclusive). */
12
- this.max = 999999;
13
- this.inputText = '';
14
- this.filledUi = false;
15
- }
16
- refreshFilledUi() {
17
- this.filledUi = this.inputText.length > 0;
18
- }
19
- afterWriteValue(value) {
20
- if (value == null) {
21
- this.inputText = '';
22
- this.refreshFilledUi();
23
- if (this.ngControl?.control) {
24
- this.syncControlUi();
25
- }
26
- return;
27
- }
28
- const v = Math.min(Math.trunc(value), this.max);
29
- this.inputText = formatIntegerThousandsBr(String(v));
30
- if (v !== value) {
31
- queueMicrotask(() => this.emitModelValue(v));
32
- }
33
- this.refreshFilledUi();
34
- if (this.ngControl?.control) {
35
- this.syncControlUi();
36
- }
37
- }
38
- onBeforeInput(event) {
39
- const e = event;
40
- if (this.disabled || this.readonly || e.isComposing) {
41
- return;
42
- }
43
- if (e.inputType === 'insertText' || e.inputType === 'insertCompositionText') {
44
- const chunk = e.data ?? '';
45
- if (chunk.length === 1 && !/^\d$/.test(chunk)) {
46
- e.preventDefault();
47
- }
48
- }
49
- }
50
- onNativeInput(event) {
51
- if (this.disabled || this.readonly) {
52
- return;
53
- }
54
- const input = event.target;
55
- const raw = input.value;
56
- const caret = input.selectionStart ?? raw.length;
57
- const digitsLeftOfCaret = semanticIntegerDigitCountLeft(raw, caret);
58
- let digits = sanitizeIntegerDigits(raw);
59
- let parsed = parseIntegerString(digits);
60
- let clampedByMax = false;
61
- if (parsed != null && parsed > this.max) {
62
- parsed = this.max;
63
- digits = String(this.max);
64
- clampedByMax = true;
65
- }
66
- const display = formatIntegerThousandsBr(digits);
67
- if (input.value !== display) {
68
- input.value = display;
69
- const next = clampedByMax
70
- ? display.length
71
- : caretIndexFromIntegerDigitCount(display, Math.min(digitsLeftOfCaret, digits.length));
72
- input.setSelectionRange(next, next);
73
- }
74
- this.inputText = display;
75
- this.emitModelValue(parsed);
76
- this.refreshFilledUi();
77
- if (this.ngControl?.control) {
78
- this.syncControlUi();
79
- }
80
- else {
81
- this.cdr.markForCheck();
82
- }
83
- }
84
- onBlur() {
85
- const digits = sanitizeIntegerDigits(this.inputText);
86
- let parsed = parseIntegerString(digits);
87
- if (parsed != null && parsed > this.max) {
88
- parsed = this.max;
89
- }
90
- const display = parsed == null ? '' : formatIntegerThousandsBr(String(parsed));
91
- const ctrl = this.ngControl?.control;
92
- const current = ctrl?.value ?? null;
93
- if (parsed !== current) {
94
- this.emitModelValue(parsed);
95
- }
96
- this.inputText = display;
97
- this.refreshFilledUi();
98
- this.notifyTouched();
99
- if (this.ngControl?.control) {
100
- this.syncControlUi();
101
- }
102
- else {
103
- this.cdr.markForCheck();
104
- }
105
- }
106
- onClear() {
107
- if (this.disabled || this.readonly) {
108
- return;
109
- }
110
- this.inputText = '';
111
- this.emitModelValue(null);
112
- this.notifyTouched();
113
- this.refreshFilledUi();
114
- if (this.ngControl?.control) {
115
- this.syncControlUi();
116
- }
117
- else {
118
- this.cdr.markForCheck();
119
- }
120
- }
121
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: IntegerFieldComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
122
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "17.3.12", type: IntegerFieldComponent, isStandalone: true, selector: "app-integer-field", inputs: { max: ["max", "max", numberAttribute] }, providers: [
123
- {
124
- provide: NG_VALUE_ACCESSOR,
125
- useExisting: forwardRef(() => IntegerFieldComponent),
126
- multi: true,
127
- },
128
- ], usesInheritance: true, ngImport: i0, template: "<app-base-field [label]=\"floatLabelCaption\" [filled]=\"filledUi\" [disabled]=\"disabled\" [readonly]=\"readonly\"\n [loading]=\"loading\"\n [errorMessage]=\"uiErrorMessage\" [required]=\"uiRequiredEffective\" [showRequiredMark]=\"showRequiredMark\"\n [invalid]=\"uiInvalid\" [inputId]=\"controlId\"\n [errorId]=\"errorElementId\" [showPrefixIcon]=\"showPrefixIcon\" [prefixIcon]=\"prefixIcon\" [clearable]=\"clearable\"\n [clearAriaLabel]=\"clearAriaLabel\"\n [mostrarMenuContexto]=\"mostrarMenuContexto\" [contextMenuItems]=\"contextMenuItems\" [contextMenuId]=\"contextMenuId\"\n (clear)=\"onClear()\" (contextMenuSelect)=\"contextMenuSelect.emit($event)\">\n <ng-content select=\"[appFieldPrefix]\" />\n <input class=\"integer-field__input\" type=\"text\" inputmode=\"numeric\" [id]=\"controlId\"\n [attr.name]=\"name || null\" [attr.placeholder]=\"''\" [disabled]=\"disabled\" [readonly]=\"readonly\" [required]=\"uiRequiredEffective\"\n [attr.aria-invalid]=\"uiInvalid\" [attr.aria-describedby]=\"uiAriaDescribedBy\" [value]=\"inputText\"\n (beforeinput)=\"onBeforeInput($event)\" (input)=\"onNativeInput($event)\" (blur)=\"onBlur()\" />\n</app-base-field>\n", styles: [":host{display:block;width:100%;box-sizing:border-box}.integer-field__input{display:block;width:100%;max-width:none;box-sizing:border-box;margin:0;padding:1.35rem .75rem .45rem;font-size:1rem;line-height:1.35;font-family:inherit;color:var(--ui-field-float-input-text);border:none;border-radius:0;background:transparent;box-shadow:none;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.integer-field__input::placeholder{color:transparent}.integer-field__input:focus,.integer-field__input:focus-visible{outline:none}.integer-field__input--invalid:not(:disabled)::placeholder{color:transparent}.integer-field__input:disabled{opacity:var(--ui-field-input-disabled-opacity);cursor:not-allowed}\n"], dependencies: [{ kind: "component", type: BaseFieldComponent, selector: "app-base-field", inputs: ["label", "errorMessage", "required", "showRequiredMark", "invalid", "filled", "disabled", "readonly", "inputId", "errorId", "showPrefixIcon", "prefixIcon", "clearable", "clearAriaLabel", "showSuffixSlot", "valueAlignEnd", "loading", "skeletonVariant", "mostrarMenuContexto", "contextMenuItems", "contextMenuId"], outputs: ["clear", "contextMenuSelect"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
129
- }
130
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: IntegerFieldComponent, decorators: [{
131
- type: Component,
132
- args: [{ selector: 'app-integer-field', standalone: true, imports: [BaseFieldComponent], changeDetection: ChangeDetectionStrategy.OnPush, providers: [
133
- {
134
- provide: NG_VALUE_ACCESSOR,
135
- useExisting: forwardRef(() => IntegerFieldComponent),
136
- multi: true,
137
- },
138
- ], template: "<app-base-field [label]=\"floatLabelCaption\" [filled]=\"filledUi\" [disabled]=\"disabled\" [readonly]=\"readonly\"\n [loading]=\"loading\"\n [errorMessage]=\"uiErrorMessage\" [required]=\"uiRequiredEffective\" [showRequiredMark]=\"showRequiredMark\"\n [invalid]=\"uiInvalid\" [inputId]=\"controlId\"\n [errorId]=\"errorElementId\" [showPrefixIcon]=\"showPrefixIcon\" [prefixIcon]=\"prefixIcon\" [clearable]=\"clearable\"\n [clearAriaLabel]=\"clearAriaLabel\"\n [mostrarMenuContexto]=\"mostrarMenuContexto\" [contextMenuItems]=\"contextMenuItems\" [contextMenuId]=\"contextMenuId\"\n (clear)=\"onClear()\" (contextMenuSelect)=\"contextMenuSelect.emit($event)\">\n <ng-content select=\"[appFieldPrefix]\" />\n <input class=\"integer-field__input\" type=\"text\" inputmode=\"numeric\" [id]=\"controlId\"\n [attr.name]=\"name || null\" [attr.placeholder]=\"''\" [disabled]=\"disabled\" [readonly]=\"readonly\" [required]=\"uiRequiredEffective\"\n [attr.aria-invalid]=\"uiInvalid\" [attr.aria-describedby]=\"uiAriaDescribedBy\" [value]=\"inputText\"\n (beforeinput)=\"onBeforeInput($event)\" (input)=\"onNativeInput($event)\" (blur)=\"onBlur()\" />\n</app-base-field>\n", styles: [":host{display:block;width:100%;box-sizing:border-box}.integer-field__input{display:block;width:100%;max-width:none;box-sizing:border-box;margin:0;padding:1.35rem .75rem .45rem;font-size:1rem;line-height:1.35;font-family:inherit;color:var(--ui-field-float-input-text);border:none;border-radius:0;background:transparent;box-shadow:none;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.integer-field__input::placeholder{color:transparent}.integer-field__input:focus,.integer-field__input:focus-visible{outline:none}.integer-field__input--invalid:not(:disabled)::placeholder{color:transparent}.integer-field__input:disabled{opacity:var(--ui-field-input-disabled-opacity);cursor:not-allowed}\n"] }]
139
- }], propDecorators: { max: [{
140
- type: Input,
141
- args: [{ transform: numberAttribute }]
142
- }] } });
143
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZWdlci1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2ZpZWxkcy9pbnB1dC1maWVsZHMvaW50ZWdlci1maWVsZC9pbnRlZ2VyLWZpZWxkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZmllbGRzL2lucHV0LWZpZWxkcy9pbnRlZ2VyLWZpZWxkL2ludGVnZXItZmllbGQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsS0FBSyxFQUNMLFVBQVUsRUFDVixlQUFlLEdBQ2hCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ25FLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ2hHLE9BQU8sRUFDTCwrQkFBK0IsRUFDL0Isd0JBQXdCLEVBQ3hCLDZCQUE2QixHQUM5QixNQUFNLGtDQUFrQyxDQUFDOztBQWlCMUMsTUFBTSxPQUFPLHFCQUFzQixTQUFRLHVCQUFzQztJQWZqRjs7UUFnQkUsMENBQTBDO1FBQ0gsUUFBRyxHQUFHLE1BQU0sQ0FBQztRQUVwRCxjQUFTLEdBQUcsRUFBRSxDQUFDO1FBRWYsYUFBUSxHQUFHLEtBQUssQ0FBQztLQW9IbEI7SUFsSFMsZUFBZTtRQUNyQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRWtCLGVBQWUsQ0FBQyxLQUFvQjtRQUNyRCxJQUFJLEtBQUss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LGlEQzlCSCxpcUNBY0EsZ3dCRE1ZLGtCQUFrQjs7NEZBWWpCLHFCQUFxQjtrQkFmakMsU0FBUzsrQkFDRSxtQkFBbUIsY0FDakIsSUFBSSxXQUNQLENBQUMsa0JBQWtCLENBQUMsbUJBR1osdUJBQXVCLENBQUMsTUFBTSxhQUNwQzt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxzQkFBc0IsQ0FBQzs0QkFDcEQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7OEJBSXNDLEdBQUc7c0JBQXpDLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBDb21wb25lbnQsXHJcbiAgSW5wdXQsXHJcbiAgZm9yd2FyZFJlZixcclxuICBudW1iZXJBdHRyaWJ1dGUsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBCYXNlRmllbGRDb21wb25lbnQgfSBmcm9tICcuLi9fYmFzZS9iYXNlLWZpZWxkLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE5nQ29udHJvbEZpZWxkRGlyZWN0aXZlIH0gZnJvbSAnLi4vX2Jhc2UvbmctY29udHJvbC1maWVsZC5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBwYXJzZUludGVnZXJTdHJpbmcsIHNhbml0aXplSW50ZWdlckRpZ2l0cyB9IGZyb20gJy4uLy4uLy4uL191dGlscy9pbnRlZ2VyLXZhbHVlLnV0aWxzJztcclxuaW1wb3J0IHtcclxuICBjYXJldEluZGV4RnJvbUludGVnZXJEaWdpdENvdW50LFxyXG4gIGZvcm1hdEludGVnZXJUaG91c2FuZHNCcixcclxuICBzZW1hbnRpY0ludGVnZXJEaWdpdENvdW50TGVmdCxcclxufSBmcm9tICcuLi8uLi8uLi9fdXRpbHMvaW50ZWdlci1ici51dGlscyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1pbnRlZ2VyLWZpZWxkJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtCYXNlRmllbGRDb21wb25lbnRdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9pbnRlZ2VyLWZpZWxkLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vaW50ZWdlci1maWVsZC5jb21wb25lbnQuc2NzcycsXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBJbnRlZ2VyRmllbGRDb21wb25lbnQpLFxyXG4gICAgICBtdWx0aTogdHJ1ZSxcclxuICAgIH0sXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEludGVnZXJGaWVsZENvbXBvbmVudCBleHRlbmRzIE5nQ29udHJvbEZpZWxkRGlyZWN0aXZlPG51bWJlciB8IG51bGw+IHtcclxuICAvKiogVmFsb3IgbcOheGltbyBwZXJtaXRpZG8gKGluY2x1c2l2ZSkuICovXHJcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSkgbWF4ID0gOTk5OTk5O1xyXG5cclxuICBpbnB1dFRleHQgPSAnJztcclxuXHJcbiAgZmlsbGVkVWkgPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSByZWZyZXNoRmlsbGVkVWkoKTogdm9pZCB7XHJcbiAgICB0aGlzLmZpbGxlZFVpID0gdGhpcy5pbnB1dFRleHQubGVuZ3RoID4gMDtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBvdmVycmlkZSBhZnRlcldyaXRlVmFsdWUodmFsdWU6IG51bWJlciB8IG51bGwpOiB2b2lkIHtcclxuICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuaW5wdXRUZXh0ID0gJyc7XHJcbiAgICAgIHRoaXMucmVmcmVzaEZpbGxlZFVpKCk7XHJcbiAgICAgIGlmICh0aGlzLm5nQ29udHJvbD8uY29udHJvbCkge1xyXG4gICAgICAgIHRoaXMuc3luY0NvbnRyb2xVaSgpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHYgPSBNYXRoLm1pbihNYXRoLnRydW5jKHZhbHVlKSwgdGhpcy5tYXgpO1xyXG4gICAgdGhpcy5pbnB1dFRleHQgPSBmb3JtYXRJbnRlZ2VyVGhvdXNhbmRzQnIoU3RyaW5nKHYpKTtcclxuICAgIGlmICh2ICE9PSB2YWx1ZSkge1xyXG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB0aGlzLmVtaXRNb2RlbFZhbHVlKHYpKTtcclxuICAgIH1cclxuICAgIHRoaXMucmVmcmVzaEZpbGxlZFVpKCk7XHJcbiAgICBpZiAodGhpcy5uZ0NvbnRyb2w/LmNvbnRyb2wpIHtcclxuICAgICAgdGhpcy5zeW5jQ29udHJvbFVpKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkJlZm9yZUlucHV0KGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG4gICAgY29uc3QgZSA9IGV2ZW50IGFzIElucHV0RXZlbnQ7XHJcbiAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLnJlYWRvbmx5IHx8IGUuaXNDb21wb3NpbmcpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKGUuaW5wdXRUeXBlID09PSAnaW5zZXJ0VGV4dCcgfHwgZS5pbnB1dFR5cGUgPT09ICdpbnNlcnRDb21wb3NpdGlvblRleHQnKSB7XHJcbiAgICAgIGNvbnN0IGNodW5rID0gZS5kYXRhID8/ICcnO1xyXG4gICAgICBpZiAoY2h1bmsubGVuZ3RoID09PSAxICYmICEvXlxcZCQvLnRlc3QoY2h1bmspKSB7XHJcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbk5hdGl2ZUlucHV0KGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xyXG4gICAgY29uc3QgcmF3ID0gaW5wdXQudmFsdWU7XHJcbiAgICBjb25zdCBjYXJldCA9IGlucHV0LnNlbGVjdGlvblN0YXJ0ID8/IHJhdy5sZW5ndGg7XHJcbiAgICBjb25zdCBkaWdpdHNMZWZ0T2ZDYXJldCA9IHNlbWFudGljSW50ZWdlckRpZ2l0Q291bnRMZWZ0KHJhdywgY2FyZXQpO1xyXG5cclxuICAgIGxldCBkaWdpdHMgPSBzYW5pdGl6ZUludGVnZXJEaWdpdHMocmF3KTtcclxuICAgIGxldCBwYXJzZWQgPSBwYXJzZUludGVnZXJTdHJpbmcoZGlnaXRzKTtcclxuICAgIGxldCBjbGFtcGVkQnlNYXggPSBmYWxzZTtcclxuICAgIGlmIChwYXJzZWQgIT0gbnVsbCAmJiBwYXJzZWQgPiB0aGlzLm1heCkge1xyXG4gICAgICBwYXJzZWQgPSB0aGlzLm1heDtcclxuICAgICAgZGlnaXRzID0gU3RyaW5nKHRoaXMubWF4KTtcclxuICAgICAgY2xhbXBlZEJ5TWF4ID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBkaXNwbGF5ID0gZm9ybWF0SW50ZWdlclRob3VzYW5kc0JyKGRpZ2l0cyk7XHJcblxyXG4gICAgaWYgKGlucHV0LnZhbHVlICE9PSBkaXNwbGF5KSB7XHJcbiAgICAgIGlucHV0LnZhbHVlID0gZGlzcGxheTtcclxuICAgICAgY29uc3QgbmV4dCA9IGNsYW1wZWRCeU1heFxyXG4gICAgICAgID8gZGlzcGxheS5sZW5ndGhcclxuICAgICAgICA6IGNhcmV0SW5kZXhGcm9tSW50ZWdlckRpZ2l0Q291bnQoXHJcbiAgICAgICAgICBkaXNwbGF5LFxyXG4gICAgICAgICAgTWF0aC5taW4oZGlnaXRzTGVmdE9mQ2FyZXQsIGRpZ2l0cy5sZW5ndGgpLFxyXG4gICAgICAgICk7XHJcbiAgICAgIGlucHV0LnNldFNlbGVjdGlvblJhbmdlKG5leHQsIG5leHQpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaW5wdXRUZXh0ID0gZGlzcGxheTtcclxuICAgIHRoaXMuZW1pdE1vZGVsVmFsdWUocGFyc2VkKTtcclxuICAgIHRoaXMucmVmcmVzaEZpbGxlZFVpKCk7XHJcbiAgICBpZiAodGhpcy5uZ0NvbnRyb2w/LmNvbnRyb2wpIHtcclxuICAgICAgdGhpcy5zeW5jQ29udHJvbFVpKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQmx1cigpOiB2b2lkIHtcclxuICAgIGNvbnN0IGRpZ2l0cyA9IHNhbml0aXplSW50ZWdlckRpZ2l0cyh0aGlzLmlucHV0VGV4dCk7XHJcbiAgICBsZXQgcGFyc2VkID0gcGFyc2VJbnRlZ2VyU3RyaW5nKGRpZ2l0cyk7XHJcbiAgICBpZiAocGFyc2VkICE9IG51bGwgJiYgcGFyc2VkID4gdGhpcy5tYXgpIHtcclxuICAgICAgcGFyc2VkID0gdGhpcy5tYXg7XHJcbiAgICB9XHJcbiAgICBjb25zdCBkaXNwbGF5ID0gcGFyc2VkID09IG51bGwgPyAnJyA6IGZvcm1hdEludGVnZXJUaG91c2FuZHNCcihTdHJpbmcocGFyc2VkKSk7XHJcbiAgICBjb25zdCBjdHJsID0gdGhpcy5uZ0NvbnRyb2w/LmNvbnRyb2w7XHJcbiAgICBjb25zdCBjdXJyZW50ID0gY3RybD8udmFsdWUgPz8gbnVsbDtcclxuICAgIGlmIChwYXJzZWQgIT09IGN1cnJlbnQpIHtcclxuICAgICAgdGhpcy5lbWl0TW9kZWxWYWx1ZShwYXJzZWQpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pbnB1dFRleHQgPSBkaXNwbGF5O1xyXG4gICAgdGhpcy5yZWZyZXNoRmlsbGVkVWkoKTtcclxuICAgIHRoaXMubm90aWZ5VG91Y2hlZCgpO1xyXG4gICAgaWYgKHRoaXMubmdDb250cm9sPy5jb250cm9sKSB7XHJcbiAgICAgIHRoaXMuc3luY0NvbnRyb2xVaSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkNsZWFyKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmlucHV0VGV4dCA9ICcnO1xyXG4gICAgdGhpcy5lbWl0TW9kZWxWYWx1ZShudWxsKTtcclxuICAgIHRoaXMubm90aWZ5VG91Y2hlZCgpO1xyXG4gICAgdGhpcy5yZWZyZXNoRmlsbGVkVWkoKTtcclxuICAgIGlmICh0aGlzLm5nQ29udHJvbD8uY29udHJvbCkge1xyXG4gICAgICB0aGlzLnN5bmNDb250cm9sVWkoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8YXBwLWJhc2UtZmllbGQgW2xhYmVsXT1cImZsb2F0TGFiZWxDYXB0aW9uXCIgW2ZpbGxlZF09XCJmaWxsZWRVaVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gIFtsb2FkaW5nXT1cImxvYWRpbmdcIlxuICBbZXJyb3JNZXNzYWdlXT1cInVpRXJyb3JNZXNzYWdlXCIgW3JlcXVpcmVkXT1cInVpUmVxdWlyZWRFZmZlY3RpdmVcIiBbc2hvd1JlcXVpcmVkTWFya109XCJzaG93UmVxdWlyZWRNYXJrXCJcbiAgW2ludmFsaWRdPVwidWlJbnZhbGlkXCIgW2lucHV0SWRdPVwiY29udHJvbElkXCJcbiAgW2Vycm9ySWRdPVwiZXJyb3JFbGVtZW50SWRcIiBbc2hvd1ByZWZpeEljb25dPVwic2hvd1ByZWZpeEljb25cIiBbcHJlZml4SWNvbl09XCJwcmVmaXhJY29uXCIgW2NsZWFyYWJsZV09XCJjbGVhcmFibGVcIlxuICBbY2xlYXJBcmlhTGFiZWxdPVwiY2xlYXJBcmlhTGFiZWxcIlxuICBbbW9zdHJhck1lbnVDb250ZXh0b109XCJtb3N0cmFyTWVudUNvbnRleHRvXCIgW2NvbnRleHRNZW51SXRlbXNdPVwiY29udGV4dE1lbnVJdGVtc1wiIFtjb250ZXh0TWVudUlkXT1cImNvbnRleHRNZW51SWRcIlxuICAoY2xlYXIpPVwib25DbGVhcigpXCIgKGNvbnRleHRNZW51U2VsZWN0KT1cImNvbnRleHRNZW51U2VsZWN0LmVtaXQoJGV2ZW50KVwiPlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJbYXBwRmllbGRQcmVmaXhdXCIgLz5cbiAgPGlucHV0IGNsYXNzPVwiaW50ZWdlci1maWVsZF9faW5wdXRcIiB0eXBlPVwidGV4dFwiIGlucHV0bW9kZT1cIm51bWVyaWNcIiBbaWRdPVwiY29udHJvbElkXCJcbiAgICBbYXR0ci5uYW1lXT1cIm5hbWUgfHwgbnVsbFwiIFthdHRyLnBsYWNlaG9sZGVyXT1cIicnXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCIgW3JlcXVpcmVkXT1cInVpUmVxdWlyZWRFZmZlY3RpdmVcIlxuICAgIFthdHRyLmFyaWEtaW52YWxpZF09XCJ1aUludmFsaWRcIiBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cInVpQXJpYURlc2NyaWJlZEJ5XCIgW3ZhbHVlXT1cImlucHV0VGV4dFwiXG4gICAgKGJlZm9yZWlucHV0KT1cIm9uQmVmb3JlSW5wdXQoJGV2ZW50KVwiIChpbnB1dCk9XCJvbk5hdGl2ZUlucHV0KCRldmVudClcIiAoYmx1cik9XCJvbkJsdXIoKVwiIC8+XG48L2FwcC1iYXNlLWZpZWxkPlxuIl19