structra-ui 0.1.15 → 0.1.16

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 (149) hide show
  1. package/esm2022/app/_utils/date-pt-br.utils.mjs +82 -0
  2. package/esm2022/app/_utils/decimal-br.utils.mjs +154 -0
  3. package/esm2022/app/_utils/estados-br.data.mjs +37 -0
  4. package/esm2022/app/_utils/integer-br.utils.mjs +48 -0
  5. package/esm2022/app/_utils/integer-value.utils.mjs +19 -0
  6. package/esm2022/app/_utils/scroll/body-scroll-lock.util.mjs +97 -0
  7. package/esm2022/app/app-shell/_models/breadcrumb-item.model.mjs +2 -0
  8. package/esm2022/app/app-shell/app-shell-sidebar-template.directive.mjs +29 -0
  9. package/esm2022/app/app-shell/app-shell.component.mjs +105 -0
  10. package/esm2022/app/app-shell/breadcrumb/breadcrumb.component.mjs +18 -0
  11. package/esm2022/app/app-shell/index.mjs +19 -0
  12. package/esm2022/app/app-shell/sidebar/app-sidebar-toolbar.directive.mjs +23 -0
  13. package/esm2022/app/app-shell/sidebar/shell-sidebar-toggle.component.mjs +36 -0
  14. package/esm2022/app/app-shell/sidebar/sidebar.component.mjs +84 -0
  15. package/esm2022/app/app-shell/sidebar-reveal.constants.mjs +9 -0
  16. package/esm2022/app/app-shell/topbar/topbar.component.mjs +14 -0
  17. package/esm2022/app/app-shell/user-menu/user-menu.component.mjs +52 -0
  18. package/esm2022/app/buttons/base-button/base-button.component.mjs +97 -0
  19. package/esm2022/app/buttons/index.mjs +2 -0
  20. package/esm2022/app/data-display/_models/card-item-view.model.mjs +2 -0
  21. package/esm2022/app/data-display/_models/data-display.models.mjs +2 -0
  22. package/esm2022/app/data-display/_models/data-grid-column.model.mjs +2 -0
  23. package/esm2022/app/data-display/_models/index.mjs +2 -0
  24. package/esm2022/app/data-display/adaptive-data-view/adaptive-data-view.component.mjs +124 -0
  25. package/esm2022/app/data-display/card-list/card-list.component.mjs +208 -0
  26. package/esm2022/app/data-display/dashboard-section/dashboard-section.component.mjs +25 -0
  27. package/esm2022/app/data-display/data-card/data-card.component.mjs +40 -0
  28. package/esm2022/app/data-display/data-grid/data-grid-actions-cell-renderer.component.mjs +41 -0
  29. package/esm2022/app/data-display/data-grid/data-grid.component.mjs +253 -0
  30. package/esm2022/app/data-display/data-list/data-list.component.mjs +40 -0
  31. package/esm2022/app/data-display/data-toolbar/data-toolbar.component.mjs +12 -0
  32. package/esm2022/app/data-display/details-field/details-field.component.mjs +21 -0
  33. package/esm2022/app/data-display/details-view/details-view.component.mjs +44 -0
  34. package/esm2022/app/data-display/empty-state/empty-state-overlay.util.mjs +19 -0
  35. package/esm2022/app/data-display/empty-state/empty-state.component.mjs +30 -0
  36. package/esm2022/app/data-display/index.mjs +19 -0
  37. package/esm2022/app/data-display/list-item/list-item.component.mjs +59 -0
  38. package/esm2022/app/data-display/stat-card/stat-card.component.mjs +59 -0
  39. package/esm2022/app/data-display/status-badge/status-badge.component.mjs +41 -0
  40. package/esm2022/app/data-display/table-empty-state/table-empty-state.component.mjs +31 -0
  41. package/esm2022/app/data-display/table-toolbar/table-toolbar.component.mjs +22 -0
  42. package/esm2022/app/dialogs/_models/lib-dialog-size.model.mjs +8 -0
  43. package/esm2022/app/dialogs/_utils/app-lib-light-block-scroll-strategy.mjs +22 -0
  44. package/esm2022/app/dialogs/_utils/lib-dialog-panel-classes.mjs +6 -0
  45. package/esm2022/app/dialogs/app-dialog/app-dialog.component.mjs +200 -0
  46. package/esm2022/app/dialogs/app-dialog/dialog-footer.directive.mjs +15 -0
  47. package/esm2022/app/dialogs/confirm-dialog/confirm-dialog-data.model.mjs +2 -0
  48. package/esm2022/app/dialogs/confirm-dialog/confirm-dialog.component.mjs +36 -0
  49. package/esm2022/app/dialogs/confirm-dialog/confirm-dialog.service.mjs +47 -0
  50. package/esm2022/app/dialogs/index.mjs +12 -0
  51. package/esm2022/app/dialogs/loading-dialog/loading-dialog-data.model.mjs +2 -0
  52. package/esm2022/app/dialogs/loading-dialog/loading-dialog.component.mjs +19 -0
  53. package/esm2022/app/dialogs/loading-dialog/loading-dialog.service.mjs +38 -0
  54. package/esm2022/app/dialogs/toast/toast-host.component.mjs +65 -0
  55. package/esm2022/app/dialogs/toast/toast.models.mjs +2 -0
  56. package/esm2022/app/dialogs/toast/toast.service.mjs +76 -0
  57. package/esm2022/app/fields/checkbox-fields/_base/boolean-field.directive.mjs +158 -0
  58. package/esm2022/app/fields/checkbox-fields/checkbox-field/checkbox-field.component.mjs +36 -0
  59. package/esm2022/app/fields/checkbox-fields/index.mjs +4 -0
  60. package/esm2022/app/fields/checkbox-fields/switch-field/switch-field.component.mjs +35 -0
  61. package/esm2022/app/fields/dropdown-fields/_base/dropdown-base/dropdown-base.component.mjs +117 -0
  62. package/esm2022/app/fields/dropdown-fields/_base/dropdown-multi-option-field.base.mjs +152 -0
  63. package/esm2022/app/fields/dropdown-fields/_base/dropdown-option-field.base.mjs +149 -0
  64. package/esm2022/app/fields/dropdown-fields/_base/dropdown-trigger-blur.util.mjs +32 -0
  65. package/esm2022/app/fields/dropdown-fields/_models/dropdown-list-bindings.model.mjs +2 -0
  66. package/esm2022/app/fields/dropdown-fields/_models/dropdown-search-page-requested.model.mjs +2 -0
  67. package/esm2022/app/fields/dropdown-fields/_models/index.mjs +2 -0
  68. package/esm2022/app/fields/dropdown-fields/_models/select-option.model.mjs +2 -0
  69. package/esm2022/app/fields/dropdown-fields/_models/select-pagination.model.mjs +2 -0
  70. package/esm2022/app/fields/dropdown-fields/dropdown-search-field/dropdown-search-field.component.mjs +520 -0
  71. package/esm2022/app/fields/dropdown-fields/index.mjs +7 -0
  72. package/esm2022/app/fields/dropdown-fields/multiselect-field/multiselect-field.component.mjs +379 -0
  73. package/esm2022/app/fields/dropdown-fields/select-field/select-field.component.mjs +359 -0
  74. package/esm2022/app/fields/input-fields/_base/base-field.component.mjs +151 -0
  75. package/esm2022/app/fields/input-fields/_base/base-field.directive.mjs +224 -0
  76. package/esm2022/app/fields/input-fields/_base/masked-text-field.base.mjs +135 -0
  77. package/esm2022/app/fields/input-fields/_base/ng-control-field.directive.mjs +127 -0
  78. package/esm2022/app/fields/input-fields/_models/field-common-inputs.model.mjs +2 -0
  79. package/esm2022/app/fields/input-fields/_models/index.mjs +2 -0
  80. package/esm2022/app/fields/input-fields/_utils/mask-complete.validators.mjs +61 -0
  81. package/esm2022/app/fields/input-fields/_utils/mask-format.utils.mjs +40 -0
  82. package/esm2022/app/fields/input-fields/cep-field/cep-field.component.mjs +48 -0
  83. package/esm2022/app/fields/input-fields/cpf-cnpj-field/cpf-cnpj-field.component.mjs +61 -0
  84. package/esm2022/app/fields/input-fields/date-field/date-field.component.mjs +147 -0
  85. package/esm2022/app/fields/input-fields/decimal-field/decimal-field.component.mjs +166 -0
  86. package/esm2022/app/fields/input-fields/index.mjs +22 -0
  87. package/esm2022/app/fields/input-fields/input-mask-field/input-mask-field.component.mjs +52 -0
  88. package/esm2022/app/fields/input-fields/integer-field/integer-field.component.mjs +143 -0
  89. package/esm2022/app/fields/input-fields/password-field/password-field.component.mjs +130 -0
  90. package/esm2022/app/fields/input-fields/phone-field/phone-field.component.mjs +66 -0
  91. package/esm2022/app/fields/input-fields/text-field/text-field.component.mjs +90 -0
  92. package/esm2022/app/fields/input-fields/textarea-field/textarea-field.component.mjs +125 -0
  93. package/esm2022/app/form-layout/_models/form-layout.model.mjs +48 -0
  94. package/esm2022/app/form-layout/_models/form-tabs.model.mjs +2 -0
  95. package/esm2022/app/form-layout/_models/index.mjs +2 -0
  96. package/esm2022/app/form-layout/_models/validation-summary.model.mjs +2 -0
  97. package/esm2022/app/form-layout/form-actions/form-actions.component.mjs +55 -0
  98. package/esm2022/app/form-layout/form-col/form-col.component.mjs +76 -0
  99. package/esm2022/app/form-layout/form-group/form-group.component.mjs +358 -0
  100. package/esm2022/app/form-layout/form-group/form-path.utils.mjs +65 -0
  101. package/esm2022/app/form-layout/form-group/form-root-invalid-ui-refresh.util.mjs +54 -0
  102. package/esm2022/app/form-layout/form-row/form-row.component.mjs +49 -0
  103. package/esm2022/app/form-layout/form-section/form-section.component.mjs +43 -0
  104. package/esm2022/app/form-layout/form-tab/form-tab.component.mjs +67 -0
  105. package/esm2022/app/form-layout/form-tabs/form-tabs.component.mjs +126 -0
  106. package/esm2022/app/form-layout/index.mjs +14 -0
  107. package/esm2022/app/form-layout/layout-stack/layout-stack.component.mjs +56 -0
  108. package/esm2022/app/form-layout/validation-summary/validation-summary.component.mjs +343 -0
  109. package/esm2022/app/loading/skeleton-loading/index.mjs +7 -0
  110. package/esm2022/app/loading/skeleton-loading/skeleton-block/skeleton-block.component.mjs +43 -0
  111. package/esm2022/app/loading/skeleton-loading/skeleton-card/skeleton-card.component.mjs +23 -0
  112. package/esm2022/app/loading/skeleton-loading/skeleton-field-shell/skeleton-field-shell.component.mjs +34 -0
  113. package/esm2022/app/loading/skeleton-loading/skeleton-list/skeleton-list.component.mjs +38 -0
  114. package/esm2022/app/loading/skeleton-loading/skeleton-table/skeleton-table.component.mjs +37 -0
  115. package/esm2022/app/loading/skeleton-loading/skeleton-text/skeleton-text.component.mjs +45 -0
  116. package/esm2022/app/menus/_models/drawer-side.model.mjs +8 -0
  117. package/esm2022/app/menus/_models/drawer-size.model.mjs +8 -0
  118. package/esm2022/app/menus/_models/menu-dropdown-placement.model.mjs +12 -0
  119. package/esm2022/app/menus/_models/menu-item.model.mjs +6 -0
  120. package/esm2022/app/menus/_utils/menu-connected-positions.util.mjs +41 -0
  121. package/esm2022/app/menus/_utils/menu-rows.util.mjs +39 -0
  122. package/esm2022/app/menus/_utils/submenu-connected-positions.util.mjs +23 -0
  123. package/esm2022/app/menus/action-menu/action-menu.component.mjs +48 -0
  124. package/esm2022/app/menus/context-menu/context-menu.component.mjs +112 -0
  125. package/esm2022/app/menus/drawer/drawer.component.mjs +142 -0
  126. package/esm2022/app/menus/dropdown-menu/dropdown-menu.component.mjs +99 -0
  127. package/esm2022/app/menus/index.mjs +11 -0
  128. package/esm2022/app/menus/menu-divider/menu-divider.component.mjs +14 -0
  129. package/esm2022/app/menus/menu-group/menu-group.component.mjs +32 -0
  130. package/esm2022/app/menus/menu-list/menu-list.component.mjs +399 -0
  131. package/esm2022/app/overlay/_models/overlay-placement.model.mjs +11 -0
  132. package/esm2022/app/overlay/_utils/anchored-overlay-positions.util.mjs +84 -0
  133. package/esm2022/app/overlay/anchored-overlay/anchored-overlay.component.mjs +121 -0
  134. package/esm2022/app/overlay/index.mjs +21 -0
  135. package/esm2022/app/overlay/popover/popover-body-template.directive.mjs +17 -0
  136. package/esm2022/app/overlay/popover/popover-footer-template.directive.mjs +17 -0
  137. package/esm2022/app/overlay/popover/popover-trigger.directive.mjs +15 -0
  138. package/esm2022/app/overlay/popover/popover.component.mjs +93 -0
  139. package/esm2022/app/overlay/tooltip/tooltip-panel-template.directive.mjs +20 -0
  140. package/esm2022/app/overlay/tooltip/tooltip.component.mjs +118 -0
  141. package/esm2022/app/theme/app-theme.service.mjs +49 -0
  142. package/esm2022/app/theme/index.mjs +2 -0
  143. package/esm2022/structra-public-api.mjs +18 -0
  144. package/esm2022/structra-ui.mjs +5 -0
  145. package/esm2022/structra-version.mjs +3 -0
  146. package/fesm2022/structra-ui.mjs +8971 -0
  147. package/fesm2022/structra-ui.mjs.map +1 -0
  148. package/index.d.ts +5 -0
  149. package/package.json +15 -6
@@ -0,0 +1,76 @@
1
+ import { Injectable, computed, signal } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ const DEFAULT_DURATION_MS = 5000;
4
+ let toastIdSeq = 0;
5
+ function nextId() {
6
+ if (typeof crypto !== 'undefined' && crypto.randomUUID) {
7
+ return crypto.randomUUID();
8
+ }
9
+ return `toast-${++toastIdSeq}`;
10
+ }
11
+ export class ToastService {
12
+ constructor() {
13
+ this.items = signal([]);
14
+ this.timers = new Map();
15
+ this.actionHandlers = new Map();
16
+ /** Lista actual (mais recente primeiro). */
17
+ this.toasts = computed(() => this.items());
18
+ }
19
+ /** Mostra um toast; devolve o id (para `dismiss` manual). */
20
+ show(options) {
21
+ const id = nextId();
22
+ const type = options.type ?? 'info';
23
+ const durationMs = options.durationMs === undefined ? DEFAULT_DURATION_MS : options.durationMs;
24
+ const row = {
25
+ id,
26
+ message: options.message,
27
+ title: options.title?.trim() || undefined,
28
+ type,
29
+ durationMs,
30
+ actionLabel: options.actionLabel?.trim() || undefined,
31
+ position: options.position ?? 'top',
32
+ };
33
+ this.items.update((list) => [row, ...list]);
34
+ if (options.onAction && row.actionLabel) {
35
+ this.actionHandlers.set(id, options.onAction);
36
+ }
37
+ this.clearTimer(id);
38
+ if (durationMs > 0) {
39
+ this.timers.set(id, setTimeout(() => this.dismiss(id), durationMs));
40
+ }
41
+ return id;
42
+ }
43
+ dismiss(id) {
44
+ this.clearTimer(id);
45
+ this.actionHandlers.delete(id);
46
+ this.items.update((list) => list.filter((t) => t.id !== id));
47
+ }
48
+ clear() {
49
+ for (const id of this.timers.keys()) {
50
+ this.clearTimer(id);
51
+ }
52
+ this.actionHandlers.clear();
53
+ this.items.set([]);
54
+ }
55
+ runAction(id) {
56
+ const fn = this.actionHandlers.get(id);
57
+ if (fn) {
58
+ fn();
59
+ }
60
+ this.dismiss(id);
61
+ }
62
+ clearTimer(id) {
63
+ const t = this.timers.get(id);
64
+ if (t != null) {
65
+ clearTimeout(t);
66
+ }
67
+ this.timers.delete(id);
68
+ }
69
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ToastService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
70
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ToastService, providedIn: 'root' }); }
71
+ }
72
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ToastService, decorators: [{
73
+ type: Injectable,
74
+ args: [{ providedIn: 'root' }]
75
+ }] });
76
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9hc3Quc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZGlhbG9ncy90b2FzdC90b2FzdC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFHN0QsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUM7QUFFakMsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO0FBRW5CLFNBQVMsTUFBTTtJQUNiLElBQUksT0FBTyxNQUFNLEtBQUssV0FBVyxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUN2RCxPQUFPLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBQ0QsT0FBTyxTQUFTLEVBQUUsVUFBVSxFQUFFLENBQUM7QUFDakMsQ0FBQztBQUdELE1BQU0sT0FBTyxZQUFZO0lBRHpCO1FBRW1CLFVBQUssR0FBRyxNQUFNLENBQWtCLEVBQUUsQ0FBQyxDQUFDO1FBQ3BDLFdBQU0sR0FBRyxJQUFJLEdBQUcsRUFBeUMsQ0FBQztRQUMxRCxtQkFBYyxHQUFHLElBQUksR0FBRyxFQUFzQixDQUFDO1FBRWhFLDRDQUE0QztRQUNuQyxXQUFNLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0tBaUVoRDtJQS9EQyw2REFBNkQ7SUFDN0QsSUFBSSxDQUFDLE9BQXlCO1FBQzVCLE1BQU0sRUFBRSxHQUFHLE1BQU0sRUFBRSxDQUFDO1FBQ3BCLE1BQU0sSUFBSSxHQUFjLE9BQU8sQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDO1FBQy9DLE1BQU0sVUFBVSxHQUNkLE9BQU8sQ0FBQyxVQUFVLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FB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QGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB0eXBlIHsgVG9hc3RJbnN0YW5jZSwgVG9hc3RTaG93T3B0aW9ucywgVG9hc3RUeXBlIH0gZnJvbSAnLi90b2FzdC5tb2RlbHMnO1xyXG5cclxuY29uc3QgREVGQVVMVF9EVVJBVElPTl9NUyA9IDUwMDA7XHJcblxyXG5sZXQgdG9hc3RJZFNlcSA9IDA7XHJcblxyXG5mdW5jdGlvbiBuZXh0SWQoKTogc3RyaW5nIHtcclxuICBpZiAodHlwZW9mIGNyeXB0byAhPT0gJ3VuZGVmaW5lZCcgJiYgY3J5cHRvLnJhbmRvbVVVSUQpIHtcclxuICAgIHJldHVybiBjcnlwdG8ucmFuZG9tVVVJRCgpO1xyXG4gIH1cclxuICByZXR1cm4gYHRvYXN0LSR7Kyt0b2FzdElkU2VxfWA7XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBUb2FzdFNlcnZpY2Uge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgaXRlbXMgPSBzaWduYWw8VG9hc3RJbnN0YW5jZVtdPihbXSk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSB0aW1lcnMgPSBuZXcgTWFwPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4+KCk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBhY3Rpb25IYW5kbGVycyA9IG5ldyBNYXA8c3RyaW5nLCAoKSA9PiB2b2lkPigpO1xyXG5cclxuICAvKiogTGlzdGEgYWN0dWFsIChtYWlzIHJlY2VudGUgcHJpbWVpcm8pLiAqL1xyXG4gIHJlYWRvbmx5IHRvYXN0cyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuaXRlbXMoKSk7XHJcblxyXG4gIC8qKiBNb3N0cmEgdW0gdG9hc3Q7IGRldm9sdmUgbyBpZCAocGFyYSBgZGlzbWlzc2AgbWFudWFsKS4gKi9cclxuICBzaG93KG9wdGlvbnM6IFRvYXN0U2hvd09wdGlvbnMpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgaWQgPSBuZXh0SWQoKTtcclxuICAgIGNvbnN0IHR5cGU6IFRvYXN0VHlwZSA9IG9wdGlvbnMudHlwZSA/PyAnaW5mbyc7XHJcbiAgICBjb25zdCBkdXJhdGlvbk1zID1cclxuICAgICAgb3B0aW9ucy5kdXJhdGlvbk1zID09PSB1bmRlZmluZWQgPyBERUZBVUxUX0RVUkFUSU9OX01TIDogb3B0aW9ucy5kdXJhdGlvbk1zO1xyXG5cclxuICAgIGNvbnN0IHJvdzogVG9hc3RJbnN0YW5jZSA9IHtcclxuICAgICAgaWQsXHJcbiAgICAgIG1lc3NhZ2U6IG9wdGlvbnMubWVzc2FnZSxcclxuICAgICAgdGl0bGU6IG9wdGlvbnMudGl0bGU/LnRyaW0oKSB8fCB1bmRlZmluZWQsXHJcbiAgICAgIHR5cGUsXHJcbiAgICAgIGR1cmF0aW9uTXMsXHJcbiAgICAgIGFjdGlvbkxhYmVsOiBvcHRpb25zLmFjdGlvbkxhYmVsPy50cmltKCkgfHwgdW5kZWZpbmVkLFxyXG4gICAgICBwb3NpdGlvbjogb3B0aW9ucy5wb3NpdGlvbiA/PyAndG9wJyxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5pdGVtcy51cGRhdGUoKGxpc3QpID0+IFtyb3csIC4uLmxpc3RdKTtcclxuXHJcbiAgICBpZiAob3B0aW9ucy5vbkFjdGlvbiAmJiByb3cuYWN0aW9uTGFiZWwpIHtcclxuICAgICAgdGhpcy5hY3Rpb25IYW5kbGVycy5zZXQoaWQsIG9wdGlvbnMub25BY3Rpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2xlYXJUaW1lcihpZCk7XHJcbiAgICBpZiAoZHVyYXRpb25NcyA+IDApIHtcclxuICAgICAgdGhpcy50aW1lcnMuc2V0KFxyXG4gICAgICAgIGlkLFxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5kaXNtaXNzKGlkKSwgZHVyYXRpb25NcyksXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGlkO1xyXG4gIH1cclxuXHJcbiAgZGlzbWlzcyhpZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmNsZWFyVGltZXIoaWQpO1xyXG4gICAgdGhpcy5hY3Rpb25IYW5kbGVycy5kZWxldGUoaWQpO1xyXG4gICAgdGhpcy5pdGVtcy51cGRhdGUoKGxpc3QpID0+IGxpc3QuZmlsdGVyKCh0KSA9PiB0LmlkICE9PSBpZCkpO1xyXG4gIH1cclxuXHJcbiAgY2xlYXIoKTogdm9pZCB7XHJcbiAgICBmb3IgKGNvbnN0IGlkIG9mIHRoaXMudGltZXJzLmtleXMoKSkge1xyXG4gICAgICB0aGlzLmNsZWFyVGltZXIoaWQpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hY3Rpb25IYW5kbGVycy5jbGVhcigpO1xyXG4gICAgdGhpcy5pdGVtcy5zZXQoW10pO1xyXG4gIH1cclxuXHJcbiAgcnVuQWN0aW9uKGlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IGZuID0gdGhpcy5hY3Rpb25IYW5kbGVycy5nZXQoaWQpO1xyXG4gICAgaWYgKGZuKSB7XHJcbiAgICAgIGZuKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmRpc21pc3MoaWQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjbGVhclRpbWVyKGlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IHQgPSB0aGlzLnRpbWVycy5nZXQoaWQpO1xyXG4gICAgaWYgKHQgIT0gbnVsbCkge1xyXG4gICAgICBjbGVhclRpbWVvdXQodCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnRpbWVycy5kZWxldGUoaWQpO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,158 @@
1
+ import { Directive, Input } from '@angular/core';
2
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
3
+ import { FormGroupDirective, NgControl, NgForm, Validators, } from '@angular/forms';
4
+ import { distinctUntilChanged, merge } from 'rxjs';
5
+ import { BaseFieldDirective } from '../../input-fields/_base/base-field.directive';
6
+ import * as i0 from "@angular/core";
7
+ export class BooleanFieldDirective extends BaseFieldDirective {
8
+ constructor() {
9
+ super(...arguments);
10
+ this.ngControl = null;
11
+ this.checked = false;
12
+ /** Cache para templates OnPush (evita getters a cada CD). */
13
+ this.uiInvalid = false;
14
+ this.uiErrorMessage = '';
15
+ this.uiAriaDescribedBy = null;
16
+ this.uiRequiredEffective = false;
17
+ /** Por omissão não mostra o parágrafo de erro (checkbox/switch); alinhado à base dos campos. */
18
+ this.showErrorMessage = false;
19
+ }
20
+ resolveControlForRequired() {
21
+ return this.ngControl?.control ?? undefined;
22
+ }
23
+ ngOnChanges(_changes) {
24
+ if (this.ngControl?.control) {
25
+ this.syncBoolUi();
26
+ }
27
+ }
28
+ ngOnInit() {
29
+ this.ngControl = this.injector.get(NgControl, null, {
30
+ optional: true,
31
+ self: true,
32
+ });
33
+ if (this.ngControl) {
34
+ this.ngControl.valueAccessor = this;
35
+ }
36
+ const c = this.ngControl?.control;
37
+ if (c) {
38
+ merge(c.statusChanges, c.valueChanges.pipe(distinctUntilChanged((a, b) => Object.is(a, b))))
39
+ .pipe(takeUntilDestroyed(this.destroyRef))
40
+ .subscribe(() => this.syncBoolUi());
41
+ this.syncBoolUi();
42
+ }
43
+ this.registerFormSubmitRecheckBool();
44
+ }
45
+ ngDoCheck() {
46
+ if (!this.ngControl?.control) {
47
+ return;
48
+ }
49
+ const sub = this.isParentFormSubmitted();
50
+ if (this.lastParentSubmitted === undefined) {
51
+ this.lastParentSubmitted = sub;
52
+ return;
53
+ }
54
+ if (this.lastParentSubmitted !== sub) {
55
+ this.lastParentSubmitted = sub;
56
+ this.syncBoolUi();
57
+ }
58
+ }
59
+ /**
60
+ * Checkbox/switch: mostrar erro após alterar o valor (`dirty`), após foco (`touched`)
61
+ * ou após envio do formulário — ao contrário dos inputs de texto, não há “valor intermédio”
62
+ * e o utilizador espera feedback imediato ao marcar/desmarcar.
63
+ */
64
+ boolInvalidShownAfterInteraction(control) {
65
+ return !!control && (control.dirty || control.touched || this.isParentFormSubmitted());
66
+ }
67
+ controlInvalidUi(control) {
68
+ if (!this.isEffectiveRequired(control)) {
69
+ return false;
70
+ }
71
+ return (!!control &&
72
+ control.invalid &&
73
+ this.boolInvalidShownAfterInteraction(control));
74
+ }
75
+ syncBoolUi() {
76
+ this.uiInvalid = this.baseInvalid;
77
+ this.uiRequiredEffective = this.requiredEffective;
78
+ this.uiErrorMessage = this.getErrorMessage();
79
+ this.uiAriaDescribedBy =
80
+ this.uiInvalid && this.uiErrorMessage ? this.errorElementId : null;
81
+ this.cdr.markForCheck();
82
+ }
83
+ registerFormSubmitRecheckBool() {
84
+ const fg = this.injector.get(FormGroupDirective, null, { optional: true });
85
+ const nf = this.injector.get(NgForm, null, { optional: true });
86
+ const recheck = () => this.syncBoolUi();
87
+ fg?.ngSubmit
88
+ ?.pipe(takeUntilDestroyed(this.destroyRef))
89
+ .subscribe(recheck);
90
+ nf?.ngSubmit
91
+ ?.pipe(takeUntilDestroyed(this.destroyRef))
92
+ .subscribe(recheck);
93
+ }
94
+ afterWriteValue(value) {
95
+ this.checked = value === true;
96
+ if (this.ngControl?.control) {
97
+ this.syncBoolUi();
98
+ }
99
+ }
100
+ setChecked(next) {
101
+ if (this.disabled || this.readonly) {
102
+ return;
103
+ }
104
+ this.checked = next;
105
+ this.emitModelValue(next);
106
+ const c = this.ngControl?.control;
107
+ if (c) {
108
+ c.markAsDirty();
109
+ this.syncBoolUi();
110
+ return;
111
+ }
112
+ this.cdr.markForCheck();
113
+ }
114
+ get baseInvalid() {
115
+ return this.controlInvalidUi(this.ngControl?.control);
116
+ }
117
+ /**
118
+ * A classe base só devolvia texto quando `isEffectiveRequired` batia com o mesmo instante
119
+ * do `NgControl`; com `requiredTrue` + submit, o estado vermelho aparecia sem mensagem.
120
+ */
121
+ getErrorMessage() {
122
+ if (!this.showErrorMessage) {
123
+ return '';
124
+ }
125
+ const c = this.ngControl?.control;
126
+ if (!c?.invalid) {
127
+ return super.getErrorMessage();
128
+ }
129
+ const showState = this.boolInvalidShownAfterInteraction(c);
130
+ if (!showState) {
131
+ return super.getErrorMessage();
132
+ }
133
+ if (c.hasError('required')) {
134
+ const requiredField = this.required ||
135
+ c.hasValidator(Validators.required) ||
136
+ c.hasValidator(Validators.requiredTrue);
137
+ if (requiredField) {
138
+ const custom = this.errorMessage.trim();
139
+ return custom.length > 0 ? custom : 'Campo obrigatório';
140
+ }
141
+ }
142
+ return super.getErrorMessage();
143
+ }
144
+ get errorElementId() {
145
+ return `${this.controlId}-error`;
146
+ }
147
+ onBlur() {
148
+ this.notifyTouched();
149
+ }
150
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BooleanFieldDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
151
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: BooleanFieldDirective, inputs: { showErrorMessage: "showErrorMessage" }, usesInheritance: true, usesOnChanges: true, ngImport: i0 }); }
152
+ }
153
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BooleanFieldDirective, decorators: [{
154
+ type: Directive
155
+ }], propDecorators: { showErrorMessage: [{
156
+ type: Input
157
+ }] } });
158
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vbGVhbi1maWVsZC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2ZpZWxkcy9jaGVja2JveC1maWVsZHMvX2Jhc2UvYm9vbGVhbi1maWVsZC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVyxLQUFLLEVBQW9DLE1BQU0sZUFBZSxDQUFDO0FBQzVGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFFTCxrQkFBa0IsRUFDbEIsU0FBUyxFQUNULE1BQU0sRUFDTixVQUFVLEdBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDOztBQUduRixNQUFNLE9BQWdCLHFCQUNwQixTQUFRLGtCQUFrQztJQUY1Qzs7UUFLWSxjQUFTLEdBQXFCLElBQUksQ0FBQztRQUs3QyxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBRWhCLDZEQUE2RDtRQUM3RCxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLG1CQUFjLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLHNCQUFpQixHQUFrQixJQUFJLENBQUM7UUFDeEMsd0JBQW1CLEdBQUcsS0FBSyxDQUFDO1FBRTVCLGdHQUFnRztRQUV2RixxQkFBZ0IsR0FBRyxLQUFLLENBQUM7S0EySm5DO0lBekpvQix5QkFBeUI7UUFDMUMsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLE9BQU8sSUFBSSxTQUFTLENBQUM7SUFDOUMsQ0FBQztJQUVELFdBQVcsQ0FBQyxRQUF1QjtRQUNqQyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FB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Q0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDO1lBQzFELENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVELElBQUksY0FBYztRQUNoQixPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsUUFBUSxDQUFDO0lBQ25DLENBQUM7SUFFRCxNQUFNO1FBQ0osSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7K0dBN0ttQixxQkFBcUI7bUdBQXJCLHFCQUFxQjs7NEZBQXJCLHFCQUFxQjtrQkFEMUMsU0FBUzs4QkFvQkMsZ0JBQWdCO3NCQUR4QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBEb0NoZWNrLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xyXG5pbXBvcnQge1xyXG4gIEFic3RyYWN0Q29udHJvbCxcclxuICBGb3JtR3JvdXBEaXJlY3RpdmUsXHJcbiAgTmdDb250cm9sLFxyXG4gIE5nRm9ybSxcclxuICBWYWxpZGF0b3JzLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1lcmdlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEJhc2VGaWVsZERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2lucHV0LWZpZWxkcy9fYmFzZS9iYXNlLWZpZWxkLmRpcmVjdGl2ZSc7XHJcblxyXG5ARGlyZWN0aXZlKClcclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJvb2xlYW5GaWVsZERpcmVjdGl2ZVxyXG4gIGV4dGVuZHMgQmFzZUZpZWxkRGlyZWN0aXZlPGJvb2xlYW4gfCBudWxsPlxyXG4gIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIERvQ2hlY2tcclxue1xyXG4gIHByb3RlY3RlZCBuZ0NvbnRyb2w6IE5nQ29udHJvbCB8IG51bGwgPSBudWxsO1xyXG5cclxuICAvKiogVmVyIHtAbGluayBOZ0NvbnRyb2xGaWVsZERpcmVjdGl2ZS5uZ0RvQ2hlY2t9IOKAlCBgcmVzZXRGb3JtKClgIHNlbSBgbmdTdWJtaXRgLiAqL1xyXG4gIHByaXZhdGUgbGFzdFBhcmVudFN1Ym1pdHRlZDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgY2hlY2tlZCA9IGZhbHNlO1xyXG5cclxuICAvKiogQ2FjaGUgcGFyYSB0ZW1wbGF0ZXMgT25QdXNoIChldml0YSBnZXR0ZXJzIGEgY2FkYSBDRCkuICovXHJcbiAgdWlJbnZhbGlkID0gZmFsc2U7XHJcbiAgdWlFcnJvck1lc3NhZ2UgPSAnJztcclxuICB1aUFyaWFEZXNjcmliZWRCeTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgdWlSZXF1aXJlZEVmZmVjdGl2ZSA9IGZhbHNlO1xyXG5cclxuICAvKiogUG9yIG9taXNzw6NvIG7Do28gbW9zdHJhIG8gcGFyw6FncmFmbyBkZSBlcnJvIChjaGVja2JveC9zd2l0Y2gpOyBhbGluaGFkbyDDoCBiYXNlIGRvcyBjYW1wb3MuICovXHJcbiAgQElucHV0KClcclxuICBvdmVycmlkZSBzaG93RXJyb3JNZXNzYWdlID0gZmFsc2U7XHJcblxyXG4gIHByb3RlY3RlZCBvdmVycmlkZSByZXNvbHZlQ29udHJvbEZvclJlcXVpcmVkKCk6IEFic3RyYWN0Q29udHJvbCB8IG51bGwgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMubmdDb250cm9sPy5jb250cm9sID8/IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKF9jaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5uZ0NvbnRyb2w/LmNvbnRyb2wpIHtcclxuICAgICAgdGhpcy5zeW5jQm9vbFVpKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMubmdDb250cm9sID0gdGhpcy5pbmplY3Rvci5nZXQoTmdDb250cm9sLCBudWxsLCB7XHJcbiAgICAgIG9wdGlvbmFsOiB0cnVlLFxyXG4gICAgICBzZWxmOiB0cnVlLFxyXG4gICAgfSk7XHJcbiAgICBpZiAodGhpcy5uZ0NvbnRyb2wpIHtcclxuICAgICAgdGhpcy5uZ0NvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XHJcbiAgICB9XHJcbiAgICBjb25zdCBjID0gdGhpcy5uZ0NvbnRyb2w/LmNvbnRyb2w7XHJcbiAgICBpZiAoYykge1xyXG4gICAgICBtZXJnZShcclxuICAgICAgICBjLnN0YXR1c0NoYW5nZXMsXHJcbiAgICAgICAgYy52YWx1ZUNoYW5nZXMucGlwZShcclxuICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChhLCBiKSA9PiBPYmplY3QuaXMoYSwgYikpLFxyXG4gICAgICAgICksXHJcbiAgICAgIClcclxuICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcclxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuc3luY0Jvb2xVaSgpKTtcclxuICAgICAgdGhpcy5zeW5jQm9vbFVpKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlZ2lzdGVyRm9ybVN1Ym1pdFJlY2hlY2tCb29sKCk7XHJcbiAgfVxyXG5cclxuICBuZ0RvQ2hlY2soKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMubmdDb250cm9sPy5jb250cm9sKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHN1YiA9IHRoaXMuaXNQYXJlbnRGb3JtU3VibWl0dGVkKCk7XHJcbiAgICBpZiAodGhpcy5sYXN0UGFyZW50U3VibWl0dGVkID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5sYXN0UGFyZW50U3VibWl0dGVkID0gc3ViO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5sYXN0UGFyZW50U3VibWl0dGVkICE9PSBzdWIpIHtcclxuICAgICAgdGhpcy5sYXN0UGFyZW50U3VibWl0dGVkID0gc3ViO1xyXG4gICAgICB0aGlzLnN5bmNCb29sVWkoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrYm94L3N3aXRjaDogbW9zdHJhciBlcnJvIGFww7NzIGFsdGVyYXIgbyB2YWxvciAoYGRpcnR5YCksIGFww7NzIGZvY28gKGB0b3VjaGVkYClcclxuICAgKiBvdSBhcMOzcyBlbnZpbyBkbyBmb3JtdWzDoXJpbyDigJQgYW8gY29udHLDoXJpbyBkb3MgaW5wdXRzIGRlIHRleHRvLCBuw6NvIGjDoSDigJx2YWxvciBpbnRlcm3DqWRpb+KAnVxyXG4gICAqIGUgbyB1dGlsaXphZG9yIGVzcGVyYSBmZWVkYmFjayBpbWVkaWF0byBhbyBtYXJjYXIvZGVzbWFyY2FyLlxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBib29sSW52YWxpZFNob3duQWZ0ZXJJbnRlcmFjdGlvbihcclxuICAgIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCB8IG51bGwgfCB1bmRlZmluZWQsXHJcbiAgKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gISFjb250cm9sICYmIChjb250cm9sLmRpcnR5IHx8IGNvbnRyb2wudG91Y2hlZCB8fCB0aGlzLmlzUGFyZW50Rm9ybVN1Ym1pdHRlZCgpKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBvdmVycmlkZSBjb250cm9sSW52YWxpZFVpKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCB8IG51bGwgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5pc0VmZmVjdGl2ZVJlcXVpcmVkKGNvbnRyb2wpKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiAoXHJcbiAgICAgICEhY29udHJvbCAmJlxyXG4gICAgICBjb250cm9sLmludmFsaWQgJiZcclxuICAgICAgdGhpcy5ib29sSW52YWxpZFNob3duQWZ0ZXJJbnRlcmFjdGlvbihjb250cm9sKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBzeW5jQm9vbFVpKCk6IHZvaWQge1xyXG4gICAgdGhpcy51aUludmFsaWQgPSB0aGlzLmJhc2VJbnZhbGlkO1xyXG4gICAgdGhpcy51aVJlcXVpcmVkRWZmZWN0aXZlID0gdGhpcy5yZXF1aXJlZEVmZmVjdGl2ZTtcclxuICAgIHRoaXMudWlFcnJvck1lc3NhZ2UgPSB0aGlzLmdldEVycm9yTWVzc2FnZSgpO1xyXG4gICAgdGhpcy51aUFyaWFEZXNjcmliZWRCeSA9XHJcbiAgICAgIHRoaXMudWlJbnZhbGlkICYmIHRoaXMudWlFcnJvck1lc3NhZ2UgPyB0aGlzLmVycm9yRWxlbWVudElkIDogbnVsbDtcclxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWdpc3RlckZvcm1TdWJtaXRSZWNoZWNrQm9vbCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGZnID0gdGhpcy5pbmplY3Rvci5nZXQoRm9ybUdyb3VwRGlyZWN0aXZlLCBudWxsLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xyXG4gICAgY29uc3QgbmYgPSB0aGlzLmluamVjdG9yLmdldChOZ0Zvcm0sIG51bGwsIHsgb3B0aW9uYWw6IHRydWUgfSk7XHJcbiAgICBjb25zdCByZWNoZWNrID0gKCk6IHZvaWQgPT4gdGhpcy5zeW5jQm9vbFVpKCk7XHJcbiAgICBmZz8ubmdTdWJtaXRcclxuICAgICAgPy5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxyXG4gICAgICAuc3Vic2NyaWJlKHJlY2hlY2spO1xyXG4gICAgbmY/Lm5nU3VibWl0XHJcbiAgICAgID8ucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcclxuICAgICAgLnN1YnNjcmliZShyZWNoZWNrKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBvdmVycmlkZSBhZnRlcldyaXRlVmFsdWUodmFsdWU6IGJvb2xlYW4gfCBudWxsKTogdm9pZCB7XHJcbiAgICB0aGlzLmNoZWNrZWQgPSB2YWx1ZSA9PT0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLm5nQ29udHJvbD8uY29udHJvbCkge1xyXG4gICAgICB0aGlzLnN5bmNCb29sVWkoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBzZXRDaGVja2VkKG5leHQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jaGVja2VkID0gbmV4dDtcclxuICAgIHRoaXMuZW1pdE1vZGVsVmFsdWUobmV4dCk7XHJcbiAgICBjb25zdCBjID0gdGhpcy5uZ0NvbnRyb2w/LmNvbnRyb2w7XHJcbiAgICBpZiAoYykge1xyXG4gICAgICBjLm1hcmtBc0RpcnR5KCk7XHJcbiAgICAgIHRoaXMuc3luY0Jvb2xVaSgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIGdldCBiYXNlSW52YWxpZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmNvbnRyb2xJbnZhbGlkVWkodGhpcy5uZ0NvbnRyb2w/LmNvbnRyb2wpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQSBjbGFzc2UgYmFzZSBzw7MgZGV2b2x2aWEgdGV4dG8gcXVhbmRvIGBpc0VmZmVjdGl2ZVJlcXVpcmVkYCBiYXRpYSBjb20gbyBtZXNtbyBpbnN0YW50ZVxyXG4gICAqIGRvIGBOZ0NvbnRyb2xgOyBjb20gYHJlcXVpcmVkVHJ1ZWAgKyBzdWJtaXQsIG8gZXN0YWRvIHZlcm1lbGhvIGFwYXJlY2lhIHNlbSBtZW5zYWdlbS5cclxuICAgKi9cclxuICBvdmVycmlkZSBnZXRFcnJvck1lc3NhZ2UoKTogc3RyaW5nIHtcclxuICAgIGlmICghdGhpcy5zaG93RXJyb3JNZXNzYWdlKSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICAgIGNvbnN0IGMgPSB0aGlzLm5nQ29udHJvbD8uY29udHJvbDtcclxuICAgIGlmICghYz8uaW52YWxpZCkge1xyXG4gICAgICByZXR1cm4gc3VwZXIuZ2V0RXJyb3JNZXNzYWdlKCk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBzaG93U3RhdGUgPSB0aGlzLmJvb2xJbnZhbGlkU2hvd25BZnRlckludGVyYWN0aW9uKGMpO1xyXG4gICAgaWYgKCFzaG93U3RhdGUpIHtcclxuICAgICAgcmV0dXJuIHN1cGVyLmdldEVycm9yTWVzc2FnZSgpO1xyXG4gICAgfVxyXG4gICAgaWYgKGMuaGFzRXJyb3IoJ3JlcXVpcmVkJykpIHtcclxuICAgICAgY29uc3QgcmVxdWlyZWRGaWVsZCA9XHJcbiAgICAgICAgdGhpcy5yZXF1aXJlZCB8fFxyXG4gICAgICAgIGMuaGFzVmFsaWRhdG9yKFZhbGlkYXRvcnMucmVxdWlyZWQpIHx8XHJcbiAgICAgICAgYy5oYXNWYWxpZGF0b3IoVmFsaWRhdG9ycy5yZXF1aXJlZFRydWUpO1xyXG4gICAgICBpZiAocmVxdWlyZWRGaWVsZCkge1xyXG4gICAgICAgIGNvbnN0IGN1c3RvbSA9IHRoaXMuZXJyb3JNZXNzYWdlLnRyaW0oKTtcclxuICAgICAgICByZXR1cm4gY3VzdG9tLmxlbmd0aCA+IDAgPyBjdXN0b20gOiAnQ2FtcG8gb2JyaWdhdMOzcmlvJztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN1cGVyLmdldEVycm9yTWVzc2FnZSgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGVycm9yRWxlbWVudElkKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYCR7dGhpcy5jb250cm9sSWR9LWVycm9yYDtcclxuICB9XHJcblxyXG4gIG9uQmx1cigpOiB2b2lkIHtcclxuICAgIHRoaXMubm90aWZ5VG91Y2hlZCgpO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,36 @@
1
+ import { ChangeDetectionStrategy, Component, forwardRef, } from '@angular/core';
2
+ import { NG_VALUE_ACCESSOR } from '@angular/forms';
3
+ import { SkeletonBlockComponent } from '../../../loading/skeleton-loading';
4
+ import { BooleanFieldDirective } from '../_base/boolean-field.directive';
5
+ import * as i0 from "@angular/core";
6
+ export class CheckboxFieldComponent extends BooleanFieldDirective {
7
+ onCheckboxClick(ev) {
8
+ if (this.readonly || this.loading) {
9
+ ev.preventDefault();
10
+ ev.stopPropagation();
11
+ }
12
+ }
13
+ onNativeChange(event) {
14
+ const el = event.target;
15
+ this.setChecked(el.checked);
16
+ }
17
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CheckboxFieldComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
18
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: CheckboxFieldComponent, isStandalone: true, selector: "app-checkbox-field", providers: [
19
+ {
20
+ provide: NG_VALUE_ACCESSOR,
21
+ useExisting: forwardRef(() => CheckboxFieldComponent),
22
+ multi: true,
23
+ },
24
+ ], usesInheritance: true, ngImport: i0, template: "@if (!loading) {\r\n<div class=\"checkbox-field\" [class.checkbox-field--invalid]=\"uiInvalid\"\r\n [class.checkbox-field--readonly]=\"readonly\">\r\n <label class=\"checkbox-field__row\">\r\n <input\r\n type=\"checkbox\"\r\n class=\"checkbox-field__native\"\r\n [id]=\"controlId\"\r\n [attr.name]=\"name || null\"\r\n [attr.tabindex]=\"readonly ? -1 : null\"\r\n [checked]=\"checked\"\r\n [disabled]=\"disabled\"\r\n [required]=\"uiRequiredEffective\"\r\n [attr.aria-invalid]=\"uiInvalid\"\r\n [attr.aria-describedby]=\"uiAriaDescribedBy\"\r\n [attr.aria-readonly]=\"readonly ? true : null\"\r\n [attr.aria-label]=\"label || placeholder || 'Op\u00E7\u00E3o'\"\r\n (click)=\"onCheckboxClick($event)\"\r\n (change)=\"onNativeChange($event)\"\r\n (blur)=\"onBlur()\"\r\n />\r\n @if (label) {\r\n <span class=\"checkbox-field__label\">{{ label }}</span>\r\n }\r\n </label>\r\n @if (showErrorMessage && uiInvalid && uiErrorMessage) {\r\n <p class=\"checkbox-field__error\" [id]=\"errorElementId\" role=\"alert\">{{ uiErrorMessage }}</p>\r\n }\r\n</div>\r\n} @else {\r\n<div class=\"checkbox-field checkbox-field--loading\" role=\"status\" aria-live=\"polite\" [attr.aria-busy]=\"true\"\r\n [attr.aria-label]=\"label || 'A carregar'\">\r\n <div class=\"checkbox-field__skeleton-row\" aria-hidden=\"true\">\r\n <app-skeleton-block width=\"1.1rem\" height=\"1.1rem\" radius=\"4px\" />\r\n <app-skeleton-block width=\"11rem\" height=\"0.72rem\" radius=\"6px\" />\r\n </div>\r\n</div>\r\n}\r\n", styles: ["@charset \"UTF-8\";:host{display:block;width:100%;box-sizing:border-box}.checkbox-field--invalid .checkbox-field__label{color:var(--ui-field-float-label-invalid-color)}.checkbox-field__row{display:flex;align-items:flex-start;gap:.5rem;margin:0;cursor:pointer;width:fit-content;max-width:100%}.checkbox-field__native{appearance:none;-webkit-appearance:none;width:1.1rem;height:1.1rem;margin-top:.15rem;flex-shrink:0;box-sizing:border-box;border:1px solid var(--ui-field-float-border);border-radius:4px;background-color:var(--ui-field-float-bg);background-repeat:no-repeat;background-position:center;background-size:.65rem auto;cursor:pointer;transition:border-color .15s ease,background-color .15s ease}.checkbox-field__native:focus-visible{outline:2px solid var(--ui-field-float-border-focus);outline-offset:2px}.checkbox-field__native:focus:not(:focus-visible){outline:2px solid var(--ui-field-float-border-focus);outline-offset:2px}.checkbox-field__native:checked{border-color:var(--ui-field-float-border-focus);background-color:var(--ui-field-float-border-focus);background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cpath fill='none' stroke='%23fff' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' d='M2.5 6l2.5 2.5 4.5-5'/%3E%3C/svg%3E\")}.checkbox-field__native:disabled{cursor:not-allowed;opacity:var(--ui-field-input-disabled-opacity)}.checkbox-field--invalid .checkbox-field__native{border-color:var(--ui-field-input-invalid-border)}.checkbox-field--invalid .checkbox-field__native:checked{border-color:var(--ui-field-input-invalid-border);background-color:var(--ui-field-input-invalid-border);background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cpath fill='none' stroke='%23fff' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' d='M2.5 6l2.5 2.5 4.5-5'/%3E%3C/svg%3E\")}.checkbox-field--invalid .checkbox-field__native:focus-visible{outline-color:var(--ui-field-input-invalid-border)}.checkbox-field--invalid .checkbox-field__native:focus:not(:focus-visible){outline:2px solid var(--ui-field-input-invalid-border);outline-offset:2px}.checkbox-field__label{font-size:1rem;line-height:1.35;color:var(--ui-field-float-label-color);cursor:pointer;-webkit-user-select:none;user-select:none}.checkbox-field__error{margin:.35rem 0 0 1.6rem;padding:0;font-size:.75rem;color:var(--ui-field-error-text-color);user-select:none;-webkit-user-select:none}.checkbox-field--loading{width:100%;max-width:100%;box-sizing:border-box}.checkbox-field--loading .checkbox-field__skeleton-row{display:flex;align-items:center;gap:.5rem;width:100%;max-width:100%;box-sizing:border-box}.checkbox-field--readonly .checkbox-field__row{cursor:default;pointer-events:none}.checkbox-field--readonly .checkbox-field__native{border-color:var(--ui-field-readonly-border);background-color:var(--ui-field-readonly-bg);cursor:default}.checkbox-field--readonly .checkbox-field__native:checked{border-color:var(--ui-field-readonly-border-focus);background-color:var(--ui-field-readonly-border-focus);background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cpath fill='none' stroke='%23fff' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' d='M2.5 6l2.5 2.5 4.5-5'/%3E%3C/svg%3E\")}.checkbox-field--readonly .checkbox-field__native:focus,.checkbox-field--readonly .checkbox-field__native:focus-visible{outline:none}.checkbox-field--readonly .checkbox-field__label{color:var(--ui-field-readonly-label-color);cursor:default}\n"], dependencies: [{ kind: "component", type: SkeletonBlockComponent, selector: "app-skeleton-block", inputs: ["width", "height", "radius", "animate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
25
+ }
26
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CheckboxFieldComponent, decorators: [{
27
+ type: Component,
28
+ args: [{ selector: 'app-checkbox-field', standalone: true, imports: [SkeletonBlockComponent], changeDetection: ChangeDetectionStrategy.OnPush, providers: [
29
+ {
30
+ provide: NG_VALUE_ACCESSOR,
31
+ useExisting: forwardRef(() => CheckboxFieldComponent),
32
+ multi: true,
33
+ },
34
+ ], template: "@if (!loading) {\r\n<div class=\"checkbox-field\" [class.checkbox-field--invalid]=\"uiInvalid\"\r\n [class.checkbox-field--readonly]=\"readonly\">\r\n <label class=\"checkbox-field__row\">\r\n <input\r\n type=\"checkbox\"\r\n class=\"checkbox-field__native\"\r\n [id]=\"controlId\"\r\n [attr.name]=\"name || null\"\r\n [attr.tabindex]=\"readonly ? -1 : null\"\r\n [checked]=\"checked\"\r\n [disabled]=\"disabled\"\r\n [required]=\"uiRequiredEffective\"\r\n [attr.aria-invalid]=\"uiInvalid\"\r\n [attr.aria-describedby]=\"uiAriaDescribedBy\"\r\n [attr.aria-readonly]=\"readonly ? true : null\"\r\n [attr.aria-label]=\"label || placeholder || 'Op\u00E7\u00E3o'\"\r\n (click)=\"onCheckboxClick($event)\"\r\n (change)=\"onNativeChange($event)\"\r\n (blur)=\"onBlur()\"\r\n />\r\n @if (label) {\r\n <span class=\"checkbox-field__label\">{{ label }}</span>\r\n }\r\n </label>\r\n @if (showErrorMessage && uiInvalid && uiErrorMessage) {\r\n <p class=\"checkbox-field__error\" [id]=\"errorElementId\" role=\"alert\">{{ uiErrorMessage }}</p>\r\n }\r\n</div>\r\n} @else {\r\n<div class=\"checkbox-field checkbox-field--loading\" role=\"status\" aria-live=\"polite\" [attr.aria-busy]=\"true\"\r\n [attr.aria-label]=\"label || 'A carregar'\">\r\n <div class=\"checkbox-field__skeleton-row\" aria-hidden=\"true\">\r\n <app-skeleton-block width=\"1.1rem\" height=\"1.1rem\" radius=\"4px\" />\r\n <app-skeleton-block width=\"11rem\" height=\"0.72rem\" radius=\"6px\" />\r\n </div>\r\n</div>\r\n}\r\n", styles: ["@charset \"UTF-8\";:host{display:block;width:100%;box-sizing:border-box}.checkbox-field--invalid .checkbox-field__label{color:var(--ui-field-float-label-invalid-color)}.checkbox-field__row{display:flex;align-items:flex-start;gap:.5rem;margin:0;cursor:pointer;width:fit-content;max-width:100%}.checkbox-field__native{appearance:none;-webkit-appearance:none;width:1.1rem;height:1.1rem;margin-top:.15rem;flex-shrink:0;box-sizing:border-box;border:1px solid var(--ui-field-float-border);border-radius:4px;background-color:var(--ui-field-float-bg);background-repeat:no-repeat;background-position:center;background-size:.65rem auto;cursor:pointer;transition:border-color .15s ease,background-color .15s ease}.checkbox-field__native:focus-visible{outline:2px solid var(--ui-field-float-border-focus);outline-offset:2px}.checkbox-field__native:focus:not(:focus-visible){outline:2px solid var(--ui-field-float-border-focus);outline-offset:2px}.checkbox-field__native:checked{border-color:var(--ui-field-float-border-focus);background-color:var(--ui-field-float-border-focus);background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cpath fill='none' stroke='%23fff' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' d='M2.5 6l2.5 2.5 4.5-5'/%3E%3C/svg%3E\")}.checkbox-field__native:disabled{cursor:not-allowed;opacity:var(--ui-field-input-disabled-opacity)}.checkbox-field--invalid .checkbox-field__native{border-color:var(--ui-field-input-invalid-border)}.checkbox-field--invalid .checkbox-field__native:checked{border-color:var(--ui-field-input-invalid-border);background-color:var(--ui-field-input-invalid-border);background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cpath fill='none' stroke='%23fff' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' d='M2.5 6l2.5 2.5 4.5-5'/%3E%3C/svg%3E\")}.checkbox-field--invalid .checkbox-field__native:focus-visible{outline-color:var(--ui-field-input-invalid-border)}.checkbox-field--invalid .checkbox-field__native:focus:not(:focus-visible){outline:2px solid var(--ui-field-input-invalid-border);outline-offset:2px}.checkbox-field__label{font-size:1rem;line-height:1.35;color:var(--ui-field-float-label-color);cursor:pointer;-webkit-user-select:none;user-select:none}.checkbox-field__error{margin:.35rem 0 0 1.6rem;padding:0;font-size:.75rem;color:var(--ui-field-error-text-color);user-select:none;-webkit-user-select:none}.checkbox-field--loading{width:100%;max-width:100%;box-sizing:border-box}.checkbox-field--loading .checkbox-field__skeleton-row{display:flex;align-items:center;gap:.5rem;width:100%;max-width:100%;box-sizing:border-box}.checkbox-field--readonly .checkbox-field__row{cursor:default;pointer-events:none}.checkbox-field--readonly .checkbox-field__native{border-color:var(--ui-field-readonly-border);background-color:var(--ui-field-readonly-bg);cursor:default}.checkbox-field--readonly .checkbox-field__native:checked{border-color:var(--ui-field-readonly-border-focus);background-color:var(--ui-field-readonly-border-focus);background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cpath fill='none' stroke='%23fff' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' d='M2.5 6l2.5 2.5 4.5-5'/%3E%3C/svg%3E\")}.checkbox-field--readonly .checkbox-field__native:focus,.checkbox-field--readonly .checkbox-field__native:focus-visible{outline:none}.checkbox-field--readonly .checkbox-field__label{color:var(--ui-field-readonly-label-color);cursor:default}\n"] }]
35
+ }] });
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tib3gtZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9maWVsZHMvY2hlY2tib3gtZmllbGRzL2NoZWNrYm94LWZpZWxkL2NoZWNrYm94LWZpZWxkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZmllbGRzL2NoZWNrYm94LWZpZWxkcy9jaGVja2JveC1maWVsZC9jaGVja2JveC1maWVsZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxVQUFVLEdBQ1gsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDM0UsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7O0FBaUJ6RSxNQUFNLE9BQU8sc0JBQXVCLFNBQVEscUJBQXFCO0lBQy9ELGVBQWUsQ0FBQyxFQUFjO1FBQzVCLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbEMsRUFBRSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3BCLEVBQUUsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN2QixDQUFDO0lBQ0gsQ0FBQztJQUVELGNBQWMsQ0FBQyxLQUFZO1FBQ3pCLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxNQUEwQixDQUFDO1FBQzVDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzlCLENBQUM7K0dBWFUsc0JBQXNCO21HQUF0QixzQkFBc0IsaUVBUnRCO1lBQ1Q7Z0JBQ0UsT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztnQkFDckQsS0FBSyxFQUFFLElBQUk7YUFDWjtTQUNGLGlEQ3RCSCx1akRBc0NBLDJrSEQxQlksc0JBQXNCOzs0RkFZckIsc0JBQXNCO2tCQWZsQyxTQUFTOytCQUNFLG9CQUFvQixjQUNsQixJQUFJLFdBQ1AsQ0FBQyxzQkFBc0IsQ0FBQyxtQkFHaEIsdUJBQXVCLENBQUMsTUFBTSxhQUNwQzt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSx1QkFBdUIsQ0FBQzs0QkFDckQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIENvbXBvbmVudCxcclxuICBmb3J3YXJkUmVmLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgU2tlbGV0b25CbG9ja0NvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2xvYWRpbmcvc2tlbGV0b24tbG9hZGluZyc7XHJcbmltcG9ydCB7IEJvb2xlYW5GaWVsZERpcmVjdGl2ZSB9IGZyb20gJy4uL19iYXNlL2Jvb2xlYW4tZmllbGQuZGlyZWN0aXZlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLWNoZWNrYm94LWZpZWxkJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtTa2VsZXRvbkJsb2NrQ29tcG9uZW50XSxcclxuICB0ZW1wbGF0ZVVybDogJy4vY2hlY2tib3gtZmllbGQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9jaGVja2JveC1maWVsZC5jb21wb25lbnQuc2NzcycsXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBDaGVja2JveEZpZWxkQ29tcG9uZW50KSxcclxuICAgICAgbXVsdGk6IHRydWUsXHJcbiAgICB9LFxyXG4gIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDaGVja2JveEZpZWxkQ29tcG9uZW50IGV4dGVuZHMgQm9vbGVhbkZpZWxkRGlyZWN0aXZlIHtcclxuICBvbkNoZWNrYm94Q2xpY2soZXY6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnJlYWRvbmx5IHx8IHRoaXMubG9hZGluZykge1xyXG4gICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uTmF0aXZlQ2hhbmdlKGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG4gICAgY29uc3QgZWwgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcclxuICAgIHRoaXMuc2V0Q2hlY2tlZChlbC5jaGVja2VkKTtcclxuICB9XHJcbn1cclxuIiwiQGlmICghbG9hZGluZykge1xyXG48ZGl2IGNsYXNzPVwiY2hlY2tib3gtZmllbGRcIiBbY2xhc3MuY2hlY2tib3gtZmllbGQtLWludmFsaWRdPVwidWlJbnZhbGlkXCJcclxuICBbY2xhc3MuY2hlY2tib3gtZmllbGQtLXJlYWRvbmx5XT1cInJlYWRvbmx5XCI+XHJcbiAgPGxhYmVsIGNsYXNzPVwiY2hlY2tib3gtZmllbGRfX3Jvd1wiPlxyXG4gICAgPGlucHV0XHJcbiAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgIGNsYXNzPVwiY2hlY2tib3gtZmllbGRfX25hdGl2ZVwiXHJcbiAgICAgIFtpZF09XCJjb250cm9sSWRcIlxyXG4gICAgICBbYXR0ci5uYW1lXT1cIm5hbWUgfHwgbnVsbFwiXHJcbiAgICAgIFthdHRyLnRhYmluZGV4XT1cInJlYWRvbmx5ID8gLTEgOiBudWxsXCJcclxuICAgICAgW2NoZWNrZWRdPVwiY2hlY2tlZFwiXHJcbiAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXHJcbiAgICAgIFtyZXF1aXJlZF09XCJ1aVJlcXVpcmVkRWZmZWN0aXZlXCJcclxuICAgICAgW2F0dHIuYXJpYS1pbnZhbGlkXT1cInVpSW52YWxpZFwiXHJcbiAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwidWlBcmlhRGVzY3JpYmVkQnlcIlxyXG4gICAgICBbYXR0ci5hcmlhLXJlYWRvbmx5XT1cInJlYWRvbmx5ID8gdHJ1ZSA6IG51bGxcIlxyXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImxhYmVsIHx8IHBsYWNlaG9sZGVyIHx8ICdPcMOnw6NvJ1wiXHJcbiAgICAgIChjbGljayk9XCJvbkNoZWNrYm94Q2xpY2soJGV2ZW50KVwiXHJcbiAgICAgIChjaGFuZ2UpPVwib25OYXRpdmVDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgIChibHVyKT1cIm9uQmx1cigpXCJcclxuICAgIC8+XHJcbiAgICBAaWYgKGxhYmVsKSB7XHJcbiAgICA8c3BhbiBjbGFzcz1cImNoZWNrYm94LWZpZWxkX19sYWJlbFwiPnt7IGxhYmVsIH19PC9zcGFuPlxyXG4gICAgfVxyXG4gIDwvbGFiZWw+XHJcbiAgQGlmIChzaG93RXJyb3JNZXNzYWdlICYmIHVpSW52YWxpZCAmJiB1aUVycm9yTWVzc2FnZSkge1xyXG4gIDxwIGNsYXNzPVwiY2hlY2tib3gtZmllbGRfX2Vycm9yXCIgW2lkXT1cImVycm9yRWxlbWVudElkXCIgcm9sZT1cImFsZXJ0XCI+e3sgdWlFcnJvck1lc3NhZ2UgfX08L3A+XHJcbiAgfVxyXG48L2Rpdj5cclxufSBAZWxzZSB7XHJcbjxkaXYgY2xhc3M9XCJjaGVja2JveC1maWVsZCBjaGVja2JveC1maWVsZC0tbG9hZGluZ1wiIHJvbGU9XCJzdGF0dXNcIiBhcmlhLWxpdmU9XCJwb2xpdGVcIiBbYXR0ci5hcmlhLWJ1c3ldPVwidHJ1ZVwiXHJcbiAgW2F0dHIuYXJpYS1sYWJlbF09XCJsYWJlbCB8fCAnQSBjYXJyZWdhcidcIj5cclxuICA8ZGl2IGNsYXNzPVwiY2hlY2tib3gtZmllbGRfX3NrZWxldG9uLXJvd1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxyXG4gICAgPGFwcC1za2VsZXRvbi1ibG9jayB3aWR0aD1cIjEuMXJlbVwiIGhlaWdodD1cIjEuMXJlbVwiIHJhZGl1cz1cIjRweFwiIC8+XHJcbiAgICA8YXBwLXNrZWxldG9uLWJsb2NrIHdpZHRoPVwiMTFyZW1cIiBoZWlnaHQ9XCIwLjcycmVtXCIgcmFkaXVzPVwiNnB4XCIgLz5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbn1cclxuIl19
@@ -0,0 +1,4 @@
1
+ export { BooleanFieldDirective } from './_base/boolean-field.directive';
2
+ export { CheckboxFieldComponent } from './checkbox-field/checkbox-field.component';
3
+ export { SwitchFieldComponent } from './switch-field/switch-field.component';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2ZpZWxkcy9jaGVja2JveC1maWVsZHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDeEUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDbkYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUNBQXVDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBCb29sZWFuRmllbGREaXJlY3RpdmUgfSBmcm9tICcuL19iYXNlL2Jvb2xlYW4tZmllbGQuZGlyZWN0aXZlJztcclxuZXhwb3J0IHsgQ2hlY2tib3hGaWVsZENvbXBvbmVudCB9IGZyb20gJy4vY2hlY2tib3gtZmllbGQvY2hlY2tib3gtZmllbGQuY29tcG9uZW50JztcclxuZXhwb3J0IHsgU3dpdGNoRmllbGRDb21wb25lbnQgfSBmcm9tICcuL3N3aXRjaC1maWVsZC9zd2l0Y2gtZmllbGQuY29tcG9uZW50JztcclxuIl19
@@ -0,0 +1,35 @@
1
+ import { ChangeDetectionStrategy, Component, forwardRef, } from '@angular/core';
2
+ import { NG_VALUE_ACCESSOR } from '@angular/forms';
3
+ import { SkeletonBlockComponent } from '../../../loading/skeleton-loading';
4
+ import { BooleanFieldDirective } from '../_base/boolean-field.directive';
5
+ import * as i0 from "@angular/core";
6
+ export class SwitchFieldComponent extends BooleanFieldDirective {
7
+ get labelId() {
8
+ return `${this.controlId}-switch-label`;
9
+ }
10
+ toggle() {
11
+ if (this.disabled || this.readonly || this.loading) {
12
+ return;
13
+ }
14
+ this.setChecked(!this.checked);
15
+ }
16
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SwitchFieldComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
17
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: SwitchFieldComponent, isStandalone: true, selector: "app-switch-field", providers: [
18
+ {
19
+ provide: NG_VALUE_ACCESSOR,
20
+ useExisting: forwardRef(() => SwitchFieldComponent),
21
+ multi: true,
22
+ },
23
+ ], usesInheritance: true, ngImport: i0, template: "@if (!loading) {\r\n<div class=\"switch-field\" [class.switch-field--invalid]=\"uiInvalid\"\r\n [class.switch-field--readonly]=\"readonly\">\r\n <label class=\"switch-field__row\">\r\n <button\r\n type=\"button\"\r\n class=\"switch-field__track\"\r\n role=\"switch\"\r\n [id]=\"controlId\"\r\n [attr.name]=\"name || null\"\r\n [attr.aria-checked]=\"checked\"\r\n [attr.aria-labelledby]=\"label ? labelId : null\"\r\n [attr.aria-invalid]=\"uiInvalid\"\r\n [attr.aria-describedby]=\"uiAriaDescribedBy\"\r\n [attr.aria-readonly]=\"readonly ? true : null\"\r\n [disabled]=\"disabled || readonly\"\r\n (click)=\"toggle()\"\r\n (blur)=\"onBlur()\"\r\n >\r\n <span class=\"switch-field__thumb\" aria-hidden=\"true\"></span>\r\n </button>\r\n @if (label) {\r\n <span class=\"switch-field__label\" [id]=\"labelId\">\r\n {{ label }}\r\n @if (uiRequiredEffective && showRequiredMark) {\r\n <span class=\"switch-field__required\" aria-hidden=\"true\">*</span>\r\n }\r\n </span>\r\n }\r\n </label>\r\n @if (showErrorMessage && uiInvalid && uiErrorMessage) {\r\n <p class=\"switch-field__error\" [id]=\"errorElementId\" role=\"alert\">{{ uiErrorMessage }}</p>\r\n }\r\n</div>\r\n} @else {\r\n<div class=\"switch-field switch-field--loading\" role=\"status\" aria-live=\"polite\" [attr.aria-busy]=\"true\"\r\n [attr.aria-label]=\"label || 'A carregar'\">\r\n <div class=\"switch-field__skeleton-row\" aria-hidden=\"true\">\r\n <app-skeleton-block width=\"2.75rem\" height=\"1.5rem\" radius=\"999px\" />\r\n <app-skeleton-block width=\"4.25rem\" height=\"0.72rem\" radius=\"6px\" />\r\n </div>\r\n</div>\r\n}\r\n", styles: [":host{display:block;width:100%;box-sizing:border-box}.switch-field--invalid .switch-field__label{color:var(--ui-field-float-label-invalid-color)}.switch-field__row{display:flex;align-items:center;gap:.65rem;margin:0;cursor:pointer;width:fit-content;max-width:100%}.switch-field__track{position:relative;width:2.75rem;height:1.5rem;padding:0;border:1px solid var(--ui-field-float-border);border-radius:999px;background:var(--ui-field-float-bg, #f3f3f3);cursor:pointer;flex-shrink:0;transition:background .15s ease,border-color .15s ease}.switch-field__track[aria-checked=true]{background:var(--ui-field-float-border-focus);border-color:var(--ui-field-float-border-focus)}.switch-field__track:focus-visible{outline:2px solid var(--ui-field-float-border-focus);outline-offset:2px}.switch-field__track:focus:not(:focus-visible){outline:2px solid var(--ui-field-float-border-focus);outline-offset:2px}.switch-field--invalid .switch-field__track{border-color:var(--ui-field-input-invalid-border)}.switch-field--invalid .switch-field__track[aria-checked=true]{background:var(--ui-field-input-invalid-border);border-color:var(--ui-field-input-invalid-border)}.switch-field--invalid .switch-field__track:focus-visible{outline:2px solid var(--ui-field-input-invalid-border);outline-offset:2px}.switch-field--invalid .switch-field__track:focus:not(:focus-visible){outline:2px solid var(--ui-field-input-invalid-border);outline-offset:2px}.switch-field__track:disabled{cursor:not-allowed;opacity:var(--ui-field-input-disabled-opacity)}.switch-field__thumb{position:absolute;top:2px;left:2px;width:1.1rem;height:1.1rem;border-radius:50%;background:#fff;box-shadow:0 1px 2px #0003;transition:transform .15s ease}.switch-field__track[aria-checked=true] .switch-field__thumb{transform:translate(1.2rem)}.switch-field__label{font-size:1rem;line-height:1.35;color:var(--ui-field-float-label-color);-webkit-user-select:none;user-select:none}.switch-field__required{color:var(--ui-field-required-mark-color);margin-left:.15rem}.switch-field__error{margin:.35rem 0 0;padding:0;font-size:.75rem;color:var(--ui-field-error-text-color);user-select:none;-webkit-user-select:none}.switch-field--loading{min-width:8.5rem;width:100%;max-width:100%;box-sizing:border-box}.switch-field--loading .switch-field__skeleton-row{display:flex;align-items:center;gap:.65rem;width:100%;min-width:0;max-width:100%;box-sizing:border-box}.switch-field--readonly .switch-field__row{cursor:default}.switch-field--readonly .switch-field__track:disabled{cursor:default;border-color:var(--ui-field-readonly-border);background:var(--ui-field-readonly-bg);opacity:1}.switch-field--readonly .switch-field__track:disabled[aria-checked=true]{background:var(--ui-field-readonly-border-focus);border-color:var(--ui-field-readonly-border-focus)}.switch-field--readonly .switch-field__track:disabled:focus,.switch-field--readonly .switch-field__track:disabled:focus-visible{outline:none}.switch-field--readonly .switch-field__label{color:var(--ui-field-readonly-label-color)}\n"], dependencies: [{ kind: "component", type: SkeletonBlockComponent, selector: "app-skeleton-block", inputs: ["width", "height", "radius", "animate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
24
+ }
25
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SwitchFieldComponent, decorators: [{
26
+ type: Component,
27
+ args: [{ selector: 'app-switch-field', standalone: true, imports: [SkeletonBlockComponent], changeDetection: ChangeDetectionStrategy.OnPush, providers: [
28
+ {
29
+ provide: NG_VALUE_ACCESSOR,
30
+ useExisting: forwardRef(() => SwitchFieldComponent),
31
+ multi: true,
32
+ },
33
+ ], template: "@if (!loading) {\r\n<div class=\"switch-field\" [class.switch-field--invalid]=\"uiInvalid\"\r\n [class.switch-field--readonly]=\"readonly\">\r\n <label class=\"switch-field__row\">\r\n <button\r\n type=\"button\"\r\n class=\"switch-field__track\"\r\n role=\"switch\"\r\n [id]=\"controlId\"\r\n [attr.name]=\"name || null\"\r\n [attr.aria-checked]=\"checked\"\r\n [attr.aria-labelledby]=\"label ? labelId : null\"\r\n [attr.aria-invalid]=\"uiInvalid\"\r\n [attr.aria-describedby]=\"uiAriaDescribedBy\"\r\n [attr.aria-readonly]=\"readonly ? true : null\"\r\n [disabled]=\"disabled || readonly\"\r\n (click)=\"toggle()\"\r\n (blur)=\"onBlur()\"\r\n >\r\n <span class=\"switch-field__thumb\" aria-hidden=\"true\"></span>\r\n </button>\r\n @if (label) {\r\n <span class=\"switch-field__label\" [id]=\"labelId\">\r\n {{ label }}\r\n @if (uiRequiredEffective && showRequiredMark) {\r\n <span class=\"switch-field__required\" aria-hidden=\"true\">*</span>\r\n }\r\n </span>\r\n }\r\n </label>\r\n @if (showErrorMessage && uiInvalid && uiErrorMessage) {\r\n <p class=\"switch-field__error\" [id]=\"errorElementId\" role=\"alert\">{{ uiErrorMessage }}</p>\r\n }\r\n</div>\r\n} @else {\r\n<div class=\"switch-field switch-field--loading\" role=\"status\" aria-live=\"polite\" [attr.aria-busy]=\"true\"\r\n [attr.aria-label]=\"label || 'A carregar'\">\r\n <div class=\"switch-field__skeleton-row\" aria-hidden=\"true\">\r\n <app-skeleton-block width=\"2.75rem\" height=\"1.5rem\" radius=\"999px\" />\r\n <app-skeleton-block width=\"4.25rem\" height=\"0.72rem\" radius=\"6px\" />\r\n </div>\r\n</div>\r\n}\r\n", styles: [":host{display:block;width:100%;box-sizing:border-box}.switch-field--invalid .switch-field__label{color:var(--ui-field-float-label-invalid-color)}.switch-field__row{display:flex;align-items:center;gap:.65rem;margin:0;cursor:pointer;width:fit-content;max-width:100%}.switch-field__track{position:relative;width:2.75rem;height:1.5rem;padding:0;border:1px solid var(--ui-field-float-border);border-radius:999px;background:var(--ui-field-float-bg, #f3f3f3);cursor:pointer;flex-shrink:0;transition:background .15s ease,border-color .15s ease}.switch-field__track[aria-checked=true]{background:var(--ui-field-float-border-focus);border-color:var(--ui-field-float-border-focus)}.switch-field__track:focus-visible{outline:2px solid var(--ui-field-float-border-focus);outline-offset:2px}.switch-field__track:focus:not(:focus-visible){outline:2px solid var(--ui-field-float-border-focus);outline-offset:2px}.switch-field--invalid .switch-field__track{border-color:var(--ui-field-input-invalid-border)}.switch-field--invalid .switch-field__track[aria-checked=true]{background:var(--ui-field-input-invalid-border);border-color:var(--ui-field-input-invalid-border)}.switch-field--invalid .switch-field__track:focus-visible{outline:2px solid var(--ui-field-input-invalid-border);outline-offset:2px}.switch-field--invalid .switch-field__track:focus:not(:focus-visible){outline:2px solid var(--ui-field-input-invalid-border);outline-offset:2px}.switch-field__track:disabled{cursor:not-allowed;opacity:var(--ui-field-input-disabled-opacity)}.switch-field__thumb{position:absolute;top:2px;left:2px;width:1.1rem;height:1.1rem;border-radius:50%;background:#fff;box-shadow:0 1px 2px #0003;transition:transform .15s ease}.switch-field__track[aria-checked=true] .switch-field__thumb{transform:translate(1.2rem)}.switch-field__label{font-size:1rem;line-height:1.35;color:var(--ui-field-float-label-color);-webkit-user-select:none;user-select:none}.switch-field__required{color:var(--ui-field-required-mark-color);margin-left:.15rem}.switch-field__error{margin:.35rem 0 0;padding:0;font-size:.75rem;color:var(--ui-field-error-text-color);user-select:none;-webkit-user-select:none}.switch-field--loading{min-width:8.5rem;width:100%;max-width:100%;box-sizing:border-box}.switch-field--loading .switch-field__skeleton-row{display:flex;align-items:center;gap:.65rem;width:100%;min-width:0;max-width:100%;box-sizing:border-box}.switch-field--readonly .switch-field__row{cursor:default}.switch-field--readonly .switch-field__track:disabled{cursor:default;border-color:var(--ui-field-readonly-border);background:var(--ui-field-readonly-bg);opacity:1}.switch-field--readonly .switch-field__track:disabled[aria-checked=true]{background:var(--ui-field-readonly-border-focus);border-color:var(--ui-field-readonly-border-focus)}.switch-field--readonly .switch-field__track:disabled:focus,.switch-field--readonly .switch-field__track:disabled:focus-visible{outline:none}.switch-field--readonly .switch-field__label{color:var(--ui-field-readonly-label-color)}\n"] }]
34
+ }] });
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3dpdGNoLWZpZWxkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZmllbGRzL2NoZWNrYm94LWZpZWxkcy9zd2l0Y2gtZmllbGQvc3dpdGNoLWZpZWxkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZmllbGRzL2NoZWNrYm94LWZpZWxkcy9zd2l0Y2gtZmllbGQvc3dpdGNoLWZpZWxkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsR0FDWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUMzRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQzs7QUFpQnpFLE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxxQkFBcUI7SUFDN0QsSUFBSSxPQUFPO1FBQ1QsT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLGVBQWUsQ0FBQztJQUMxQyxDQUFDO0lBRUQsTUFBTTtRQUNKLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNuRCxPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDakMsQ0FBQzsrR0FWVSxvQkFBb0I7bUdBQXBCLG9CQUFvQiwrREFScEI7WUFDVDtnQkFDRSxPQUFPLEVBQUUsaUJBQWlCO2dCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLG9CQUFvQixDQUFDO2dCQUNuRCxLQUFLLEVBQUUsSUFBSTthQUNaO1NBQ0YsaURDdEJILDRyREEyQ0EsdWdHRC9CWSxzQkFBc0I7OzRGQVlyQixvQkFBb0I7a0JBZmhDLFNBQVM7K0JBQ0Usa0JBQWtCLGNBQ2hCLElBQUksV0FDUCxDQUFDLHNCQUFzQixDQUFDLG1CQUdoQix1QkFBdUIsQ0FBQyxNQUFNLGFBQ3BDO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLHFCQUFxQixDQUFDOzRCQUNuRCxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ29tcG9uZW50LFxyXG4gIGZvcndhcmRSZWYsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBTa2VsZXRvbkJsb2NrQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vbG9hZGluZy9za2VsZXRvbi1sb2FkaW5nJztcclxuaW1wb3J0IHsgQm9vbGVhbkZpZWxkRGlyZWN0aXZlIH0gZnJvbSAnLi4vX2Jhc2UvYm9vbGVhbi1maWVsZC5kaXJlY3RpdmUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtc3dpdGNoLWZpZWxkJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtTa2VsZXRvbkJsb2NrQ29tcG9uZW50XSxcclxuICB0ZW1wbGF0ZVVybDogJy4vc3dpdGNoLWZpZWxkLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vc3dpdGNoLWZpZWxkLmNvbXBvbmVudC5zY3NzJyxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFN3aXRjaEZpZWxkQ29tcG9uZW50KSxcclxuICAgICAgbXVsdGk6IHRydWUsXHJcbiAgICB9LFxyXG4gIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTd2l0Y2hGaWVsZENvbXBvbmVudCBleHRlbmRzIEJvb2xlYW5GaWVsZERpcmVjdGl2ZSB7XHJcbiAgZ2V0IGxhYmVsSWQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBgJHt0aGlzLmNvbnRyb2xJZH0tc3dpdGNoLWxhYmVsYDtcclxuICB9XHJcblxyXG4gIHRvZ2dsZSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHkgfHwgdGhpcy5sb2FkaW5nKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuc2V0Q2hlY2tlZCghdGhpcy5jaGVja2VkKTtcclxuICB9XHJcbn1cclxuIiwiQGlmICghbG9hZGluZykge1xyXG48ZGl2IGNsYXNzPVwic3dpdGNoLWZpZWxkXCIgW2NsYXNzLnN3aXRjaC1maWVsZC0taW52YWxpZF09XCJ1aUludmFsaWRcIlxyXG4gIFtjbGFzcy5zd2l0Y2gtZmllbGQtLXJlYWRvbmx5XT1cInJlYWRvbmx5XCI+XHJcbiAgPGxhYmVsIGNsYXNzPVwic3dpdGNoLWZpZWxkX19yb3dcIj5cclxuICAgIDxidXR0b25cclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgIGNsYXNzPVwic3dpdGNoLWZpZWxkX190cmFja1wiXHJcbiAgICAgIHJvbGU9XCJzd2l0Y2hcIlxyXG4gICAgICBbaWRdPVwiY29udHJvbElkXCJcclxuICAgICAgW2F0dHIubmFtZV09XCJuYW1lIHx8IG51bGxcIlxyXG4gICAgICBbYXR0ci5hcmlhLWNoZWNrZWRdPVwiY2hlY2tlZFwiXHJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJsYWJlbCA/IGxhYmVsSWQgOiBudWxsXCJcclxuICAgICAgW2F0dHIuYXJpYS1pbnZhbGlkXT1cInVpSW52YWxpZFwiXHJcbiAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwidWlBcmlhRGVzY3JpYmVkQnlcIlxyXG4gICAgICBbYXR0ci5hcmlhLXJlYWRvbmx5XT1cInJlYWRvbmx5ID8gdHJ1ZSA6IG51bGxcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgcmVhZG9ubHlcIlxyXG4gICAgICAoY2xpY2spPVwidG9nZ2xlKClcIlxyXG4gICAgICAoYmx1cik9XCJvbkJsdXIoKVwiXHJcbiAgICA+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwic3dpdGNoLWZpZWxkX190aHVtYlwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgQGlmIChsYWJlbCkge1xyXG4gICAgPHNwYW4gY2xhc3M9XCJzd2l0Y2gtZmllbGRfX2xhYmVsXCIgW2lkXT1cImxhYmVsSWRcIj5cclxuICAgICAge3sgbGFiZWwgfX1cclxuICAgICAgQGlmICh1aVJlcXVpcmVkRWZmZWN0aXZlICYmIHNob3dSZXF1aXJlZE1hcmspIHtcclxuICAgICAgPHNwYW4gY2xhc3M9XCJzd2l0Y2gtZmllbGRfX3JlcXVpcmVkXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+Kjwvc3Bhbj5cclxuICAgICAgfVxyXG4gICAgPC9zcGFuPlxyXG4gICAgfVxyXG4gIDwvbGFiZWw+XHJcbiAgQGlmIChzaG93RXJyb3JNZXNzYWdlICYmIHVpSW52YWxpZCAmJiB1aUVycm9yTWVzc2FnZSkge1xyXG4gIDxwIGNsYXNzPVwic3dpdGNoLWZpZWxkX19lcnJvclwiIFtpZF09XCJlcnJvckVsZW1lbnRJZFwiIHJvbGU9XCJhbGVydFwiPnt7IHVpRXJyb3JNZXNzYWdlIH19PC9wPlxyXG4gIH1cclxuPC9kaXY+XHJcbn0gQGVsc2Uge1xyXG48ZGl2IGNsYXNzPVwic3dpdGNoLWZpZWxkIHN3aXRjaC1maWVsZC0tbG9hZGluZ1wiIHJvbGU9XCJzdGF0dXNcIiBhcmlhLWxpdmU9XCJwb2xpdGVcIiBbYXR0ci5hcmlhLWJ1c3ldPVwidHJ1ZVwiXHJcbiAgW2F0dHIuYXJpYS1sYWJlbF09XCJsYWJlbCB8fCAnQSBjYXJyZWdhcidcIj5cclxuICA8ZGl2IGNsYXNzPVwic3dpdGNoLWZpZWxkX19za2VsZXRvbi1yb3dcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cclxuICAgIDxhcHAtc2tlbGV0b24tYmxvY2sgd2lkdGg9XCIyLjc1cmVtXCIgaGVpZ2h0PVwiMS41cmVtXCIgcmFkaXVzPVwiOTk5cHhcIiAvPlxyXG4gICAgPGFwcC1za2VsZXRvbi1ibG9jayB3aWR0aD1cIjQuMjVyZW1cIiBoZWlnaHQ9XCIwLjcycmVtXCIgcmFkaXVzPVwiNnB4XCIgLz5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbn1cclxuIl19
@@ -0,0 +1,117 @@
1
+ import { NgClass, NgTemplateOutlet } from '@angular/common';
2
+ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, booleanAttribute, computed, inject, } from '@angular/core';
3
+ import { CdkConnectedOverlay, CdkOverlayOrigin, } from '@angular/cdk/overlay';
4
+ import { AppThemeService } from '../../../../theme';
5
+ import * as i0 from "@angular/core";
6
+ /** Posição por omissão do CDK (equivalente ao comportamento anterior sem `positions` explícitas). */
7
+ const DEFAULT_CONNECTED_POSITIONS = [
8
+ {
9
+ originX: 'start',
10
+ originY: 'bottom',
11
+ overlayX: 'start',
12
+ overlayY: 'top',
13
+ },
14
+ ];
15
+ /**
16
+ * Base de overlay para **listas ligadas a campos** (select, dropdown-menu, etc.).
17
+ * Para tooltips/popovers genéricos ver `AnchoredOverlayComponent` em `overlay/` — mesma stack CDK e tema,
18
+ * API de fecho semelhante (`open`/`openChange`, Escape), mas defaults diferentes (ex.: backdrop em dropdowns).
19
+ */
20
+ export class DropdownBaseComponent {
21
+ constructor() {
22
+ this.appTheme = inject(AppThemeService);
23
+ /**
24
+ * O overlay do CDK fica sob `body`; sem estas classes, `var(--app-color-*)` cai no `:root`.
25
+ * Tem de ser **array**: uma única string com espaço quebra `classList.add` e as classes não aplicam.
26
+ */
27
+ this.overlayPanelClasses = computed(() => ['app-library-theme', this.appTheme.themeClass()]);
28
+ /**
29
+ * O CDK não reaplica `cdkConnectedOverlayPanelClass` quando o overlay já existe.
30
+ * As classes de tema no painel interno seguem o tema activo sempre.
31
+ */
32
+ this.panelThemeNgClass = computed(() => {
33
+ const themeClass = this.appTheme.themeClass();
34
+ return {
35
+ 'app-library-theme': true,
36
+ [themeClass]: true,
37
+ };
38
+ });
39
+ this.open = false;
40
+ this.openChange = new EventEmitter();
41
+ /** Largura do painel em px (ex.: largura total do campo). */
42
+ this.panelWidthPx = null;
43
+ this.closeOnEscape = true;
44
+ this.hasBackdrop = true;
45
+ /** Empurra o overlay para caber no viewport quando há espaço insuficiente. */
46
+ this.pushConnectedOverlay = false;
47
+ /**
48
+ * `true`: painel sem fundo/borda/sombra próprios — o conteúdo (ex.: `app-menu-list`) define o chrome.
49
+ * Evita dupla moldura com `menu-surface-shell` nos menus de acção.
50
+ */
51
+ this.bareOverlayPanel = false;
52
+ }
53
+ get overlayWidthPx() {
54
+ const w = this.panelWidthPx;
55
+ return w != null && w > 0 ? w : 0;
56
+ }
57
+ get effectiveConnectedPositions() {
58
+ return this.connectedPositions ?? DEFAULT_CONNECTED_POSITIONS;
59
+ }
60
+ onBackdropClick() {
61
+ this.setOpen(false);
62
+ }
63
+ /**
64
+ * Cliques noutros controlos (fora do painel e fora do trigger) nem sempre passam pelo backdrop;
65
+ * o CDK expõe `overlayOutsideClick` para o mesmo efeito de fechar.
66
+ */
67
+ onOverlayOutsideClick() {
68
+ this.setOpen(false);
69
+ }
70
+ onOverlayKeydown(ev) {
71
+ if (this.closeOnEscape && ev.key === 'Escape') {
72
+ ev.preventDefault();
73
+ this.setOpen(false);
74
+ }
75
+ }
76
+ setOpen(next) {
77
+ if (this.open === next) {
78
+ return;
79
+ }
80
+ this.open = next;
81
+ this.openChange.emit(next);
82
+ }
83
+ toggle() {
84
+ this.setOpen(!this.open);
85
+ }
86
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DropdownBaseComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
87
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "17.3.12", type: DropdownBaseComponent, isStandalone: true, selector: "app-dropdown-base", inputs: { open: ["open", "open", booleanAttribute], panelTemplate: "panelTemplate", panelWidthPx: "panelWidthPx", closeOnEscape: ["closeOnEscape", "closeOnEscape", booleanAttribute], hasBackdrop: ["hasBackdrop", "hasBackdrop", booleanAttribute], connectedPositions: "connectedPositions", pushConnectedOverlay: ["pushConnectedOverlay", "pushConnectedOverlay", booleanAttribute], bareOverlayPanel: ["bareOverlayPanel", "bareOverlayPanel", booleanAttribute] }, outputs: { openChange: "openChange" }, ngImport: i0, template: "<div class=\"dropdown-base\">\r\n <span class=\"dropdown-base__origin\" cdkOverlayOrigin #dropdownOrigin=\"cdkOverlayOrigin\">\r\n <ng-content select=\"[appDropdownTrigger]\" />\r\n </span>\r\n\r\n <ng-template\r\n cdkConnectedOverlay\r\n [cdkConnectedOverlayPositions]=\"effectiveConnectedPositions\"\r\n [cdkConnectedOverlayPush]=\"pushConnectedOverlay\"\r\n [cdkConnectedOverlayPanelClass]=\"overlayPanelClasses()\"\r\n [cdkConnectedOverlayOrigin]=\"dropdownOrigin\"\r\n [cdkConnectedOverlayOpen]=\"open\"\r\n [cdkConnectedOverlayWidth]=\"$any(overlayWidthPx > 0 ? overlayWidthPx : undefined)\"\r\n [cdkConnectedOverlayMinWidth]=\"$any(overlayWidthPx > 0 ? overlayWidthPx : undefined)\"\r\n [cdkConnectedOverlayHasBackdrop]=\"hasBackdrop\"\r\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\r\n [cdkConnectedOverlayDisableClose]=\"false\"\r\n (backdropClick)=\"onBackdropClick()\"\r\n (overlayOutsideClick)=\"onOverlayOutsideClick()\"\r\n (overlayKeydown)=\"onOverlayKeydown($event)\"\r\n (detach)=\"setOpen(false)\"\r\n >\r\n <div\r\n class=\"dropdown-base__panel\"\r\n [class.dropdown-base__panel--bare]=\"bareOverlayPanel\"\r\n [ngClass]=\"panelThemeNgClass()\"\r\n role=\"presentation\"\r\n >\r\n <ng-container [ngTemplateOutlet]=\"panelTemplate\" />\r\n </div>\r\n </ng-template>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";:host{display:flex;flex:1;min-width:0;width:100%;box-sizing:border-box}.dropdown-base{display:flex;flex:1;min-width:0;width:100%;box-sizing:border-box}.dropdown-base__origin{display:block;width:100%;min-width:0;flex:1 1 auto;box-sizing:border-box}.dropdown-base__panel{width:100%;box-sizing:border-box;background:var(--app-color-nav-surface, var(--app-color-surface, #fff));border:1px solid var(--ui-field-float-border, #ccc);border-radius:4px;box-shadow:0 4px 12px var(--app-color-overlay-shadow, rgba(0, 0, 0, .12));overflow:visible;max-height:none}.dropdown-base__panel--bare{background:transparent;border:none;box-shadow:none;border-radius:0;overflow:visible}\n"], dependencies: [{ kind: "directive", type: CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
88
+ }
89
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DropdownBaseComponent, decorators: [{
90
+ type: Component,
91
+ args: [{ selector: 'app-dropdown-base', standalone: true, imports: [CdkConnectedOverlay, CdkOverlayOrigin, NgClass, NgTemplateOutlet], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"dropdown-base\">\r\n <span class=\"dropdown-base__origin\" cdkOverlayOrigin #dropdownOrigin=\"cdkOverlayOrigin\">\r\n <ng-content select=\"[appDropdownTrigger]\" />\r\n </span>\r\n\r\n <ng-template\r\n cdkConnectedOverlay\r\n [cdkConnectedOverlayPositions]=\"effectiveConnectedPositions\"\r\n [cdkConnectedOverlayPush]=\"pushConnectedOverlay\"\r\n [cdkConnectedOverlayPanelClass]=\"overlayPanelClasses()\"\r\n [cdkConnectedOverlayOrigin]=\"dropdownOrigin\"\r\n [cdkConnectedOverlayOpen]=\"open\"\r\n [cdkConnectedOverlayWidth]=\"$any(overlayWidthPx > 0 ? overlayWidthPx : undefined)\"\r\n [cdkConnectedOverlayMinWidth]=\"$any(overlayWidthPx > 0 ? overlayWidthPx : undefined)\"\r\n [cdkConnectedOverlayHasBackdrop]=\"hasBackdrop\"\r\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\r\n [cdkConnectedOverlayDisableClose]=\"false\"\r\n (backdropClick)=\"onBackdropClick()\"\r\n (overlayOutsideClick)=\"onOverlayOutsideClick()\"\r\n (overlayKeydown)=\"onOverlayKeydown($event)\"\r\n (detach)=\"setOpen(false)\"\r\n >\r\n <div\r\n class=\"dropdown-base__panel\"\r\n [class.dropdown-base__panel--bare]=\"bareOverlayPanel\"\r\n [ngClass]=\"panelThemeNgClass()\"\r\n role=\"presentation\"\r\n >\r\n <ng-container [ngTemplateOutlet]=\"panelTemplate\" />\r\n </div>\r\n </ng-template>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";:host{display:flex;flex:1;min-width:0;width:100%;box-sizing:border-box}.dropdown-base{display:flex;flex:1;min-width:0;width:100%;box-sizing:border-box}.dropdown-base__origin{display:block;width:100%;min-width:0;flex:1 1 auto;box-sizing:border-box}.dropdown-base__panel{width:100%;box-sizing:border-box;background:var(--app-color-nav-surface, var(--app-color-surface, #fff));border:1px solid var(--ui-field-float-border, #ccc);border-radius:4px;box-shadow:0 4px 12px var(--app-color-overlay-shadow, rgba(0, 0, 0, .12));overflow:visible;max-height:none}.dropdown-base__panel--bare{background:transparent;border:none;box-shadow:none;border-radius:0;overflow:visible}\n"] }]
92
+ }], propDecorators: { open: [{
93
+ type: Input,
94
+ args: [{ transform: booleanAttribute }]
95
+ }], openChange: [{
96
+ type: Output
97
+ }], panelTemplate: [{
98
+ type: Input,
99
+ args: [{ required: true }]
100
+ }], panelWidthPx: [{
101
+ type: Input
102
+ }], closeOnEscape: [{
103
+ type: Input,
104
+ args: [{ transform: booleanAttribute }]
105
+ }], hasBackdrop: [{
106
+ type: Input,
107
+ args: [{ transform: booleanAttribute }]
108
+ }], connectedPositions: [{
109
+ type: Input
110
+ }], pushConnectedOverlay: [{
111
+ type: Input,
112
+ args: [{ transform: booleanAttribute }]
113
+ }], bareOverlayPanel: [{
114
+ type: Input,
115
+ args: [{ transform: booleanAttribute }]
116
+ }] } });
117
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24tYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2ZpZWxkcy9kcm9wZG93bi1maWVsZHMvX2Jhc2UvZHJvcGRvd24tYmFzZS9kcm9wZG93bi1iYXNlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZmllbGRzL2Ryb3Bkb3duLWZpZWxkcy9fYmFzZS9kcm9wZG93bi1iYXNlL2Ryb3Bkb3duLWJhc2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzVELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUVOLGdCQUFnQixFQUNoQixRQUFRLEVBQ1IsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsZ0JBQWdCLEdBRWpCLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDOztBQUVwRCxxR0FBcUc7QUFDckcsTUFBTSwyQkFBMkIsR0FBd0I7SUFDdkQ7UUFDRSxPQUFPLEVBQUUsT0FBTztRQUNoQixPQUFPLEVBQUUsUUFBUTtRQUNqQixRQUFRLEVBQUUsT0FBTztRQUNqQixRQUFRLEVBQUUsS0FBSztLQUNoQjtDQUNGLENBQUM7QUFFRjs7OztHQUlHO0FBU0gsTUFBTSxPQUFPLHFCQUFxQjtJQVJsQztRQVNtQixhQUFRLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBRXBEOzs7V0FHRztRQUNNLHdCQUFtQixHQUFHLFFBQVEsQ0FDckMsR0FBYSxFQUFFLENBQUMsQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFD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QkFDRSxXQUFXO3NCQUFsRCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQU03QixrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBR2tDLG9CQUFvQjtzQkFBM0QsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFNRSxnQkFBZ0I7c0JBQXZELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ0NsYXNzLCBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBDb21wb25lbnQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIElucHV0LFxyXG4gIE91dHB1dCxcclxuICBUZW1wbGF0ZVJlZixcclxuICBib29sZWFuQXR0cmlidXRlLFxyXG4gIGNvbXB1dGVkLFxyXG4gIGluamVjdCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBDZGtDb25uZWN0ZWRPdmVybGF5LFxyXG4gIENka092ZXJsYXlPcmlnaW4sXHJcbiAgdHlwZSBDb25uZWN0ZWRQb3NpdGlvbixcclxufSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XHJcbmltcG9ydCB7IEFwcFRoZW1lU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3RoZW1lJztcclxuXHJcbi8qKiBQb3Npw6fDo28gcG9yIG9taXNzw6NvIGRvIENESyAoZXF1aXZhbGVudGUgYW8gY29tcG9ydGFtZW50byBhbnRlcmlvciBzZW0gYHBvc2l0aW9uc2AgZXhwbMOtY2l0YXMpLiAqL1xyXG5jb25zdCBERUZBVUxUX0NPTk5FQ1RFRF9QT1NJVElPTlM6IENvbm5lY3RlZFBvc2l0aW9uW10gPSBbXHJcbiAge1xyXG4gICAgb3JpZ2luWDogJ3N0YXJ0JyxcclxuICAgIG9yaWdpblk6ICdib3R0b20nLFxyXG4gICAgb3ZlcmxheVg6ICdzdGFydCcsXHJcbiAgICBvdmVybGF5WTogJ3RvcCcsXHJcbiAgfSxcclxuXTtcclxuXHJcbi8qKlxyXG4gKiBCYXNlIGRlIG92ZXJsYXkgcGFyYSAqKmxpc3RhcyBsaWdhZGFzIGEgY2FtcG9zKiogKHNlbGVjdCwgZHJvcGRvd24tbWVudSwgZXRjLikuXHJcbiAqIFBhcmEgdG9vbHRpcHMvcG9wb3ZlcnMgZ2Vuw6lyaWNvcyB2ZXIgYEFuY2hvcmVkT3ZlcmxheUNvbXBvbmVudGAgZW0gYG92ZXJsYXkvYCDigJQgbWVzbWEgc3RhY2sgQ0RLIGUgdGVtYSxcclxuICogQVBJIGRlIGZlY2hvIHNlbWVsaGFudGUgKGBvcGVuYC9gb3BlbkNoYW5nZWAsIEVzY2FwZSksIG1hcyBkZWZhdWx0cyBkaWZlcmVudGVzIChleC46IGJhY2tkcm9wIGVtIGRyb3Bkb3ducykuXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1kcm9wZG93bi1iYXNlJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtDZGtDb25uZWN0ZWRPdmVybGF5LCBDZGtPdmVybGF5T3JpZ2luLCBOZ0NsYXNzLCBOZ1RlbXBsYXRlT3V0bGV0XSxcclxuICB0ZW1wbGF0ZVVybDogJy4vZHJvcGRvd24tYmFzZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2Ryb3Bkb3duLWJhc2UuY29tcG9uZW50LnNjc3MnLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRHJvcGRvd25CYXNlQ29tcG9uZW50IHtcclxuICBwcml2YXRlIHJlYWRvbmx5IGFwcFRoZW1lID0gaW5qZWN0KEFwcFRoZW1lU2VydmljZSk7XHJcblxyXG4gIC8qKlxyXG4gICAqIE8gb3ZlcmxheSBkbyBDREsgZmljYSBzb2IgYGJvZHlgOyBzZW0gZXN0YXMgY2xhc3NlcywgYHZhcigtLWFwcC1jb2xvci0qKWAgY2FpIG5vIGA6cm9vdGAuXHJcbiAgICogVGVtIGRlIHNlciAqKmFycmF5Kio6IHVtYSDDum5pY2Egc3RyaW5nIGNvbSBlc3Bhw6dvIHF1ZWJyYSBgY2xhc3NMaXN0LmFkZGAgZSBhcyBjbGFzc2VzIG7Do28gYXBsaWNhbS5cclxuICAgKi9cclxuICByZWFkb25seSBvdmVybGF5UGFuZWxDbGFzc2VzID0gY29tcHV0ZWQoXHJcbiAgICAoKTogc3RyaW5nW10gPT4gWydhcHAtbGlicmFyeS10aGVtZScsIHRoaXMuYXBwVGhlbWUudGhlbWVDbGFzcygpXSxcclxuICApO1xyXG5cclxuICAvKipcclxuICAgKiBPIENESyBuw6NvIHJlYXBsaWNhIGBjZGtDb25uZWN0ZWRPdmVybGF5UGFuZWxDbGFzc2AgcXVhbmRvIG8gb3ZlcmxheSBqw6EgZXhpc3RlLlxyXG4gICAqIEFzIGNsYXNzZXMgZGUgdGVtYSBubyBwYWluZWwgaW50ZXJubyBzZWd1ZW0gbyB0ZW1hIGFjdGl2byBzZW1wcmUuXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgcGFuZWxUaGVtZU5nQ2xhc3MgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICBjb25zdCB0aGVtZUNsYXNzID0gdGhpcy5hcHBUaGVtZS50aGVtZUNsYXNzKCk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAnYXBwLWxpYnJhcnktdGhlbWUnOiB0cnVlLFxyXG4gICAgICBbdGhlbWVDbGFzc106IHRydWUsXHJcbiAgICB9O1xyXG4gIH0pO1xyXG5cclxuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgb3BlbiA9IGZhbHNlO1xyXG4gIEBPdXRwdXQoKSByZWFkb25seSBvcGVuQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG5cclxuICAvKiogQ29udGXDumRvIGRvIHBhaW5lbCAobGlzdGEsIGV0Yy4pIHJlbmRlcml6YWRvIG5vIG92ZXJsYXkuICovXHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgcGFuZWxUZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPHVua25vd24+O1xyXG5cclxuICAvKiogTGFyZ3VyYSBkbyBwYWluZWwgZW0gcHggKGV4LjogbGFyZ3VyYSB0b3RhbCBkbyBjYW1wbykuICovXHJcbiAgQElucHV0KCkgcGFuZWxXaWR0aFB4OiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGNsb3NlT25Fc2NhcGUgPSB0cnVlO1xyXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBoYXNCYWNrZHJvcCA9IHRydWU7XHJcblxyXG4gIC8qKlxyXG4gICAqIFBvc2nDp8O1ZXMgZG8gb3ZlcmxheSBsaWdhZGFzIGFvIHRyaWdnZXIgKGV4LjogbWVudSBjb20gZmxpcCB2ZXJ0aWNhbCkuXHJcbiAgICogUG9yIG9taXNzw6NvIG1hbnTDqW0gbyBhbGluaGFtZW50byBjbMOhc3NpY28gwqtwb3IgYmFpeG/CuyBkb3MgY2FtcG9zLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGNvbm5lY3RlZFBvc2l0aW9uczogQ29ubmVjdGVkUG9zaXRpb25bXSB8IHVuZGVmaW5lZDtcclxuXHJcbiAgLyoqIEVtcHVycmEgbyBvdmVybGF5IHBhcmEgY2FiZXIgbm8gdmlld3BvcnQgcXVhbmRvIGjDoSBlc3Bhw6dvIGluc3VmaWNpZW50ZS4gKi9cclxuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgcHVzaENvbm5lY3RlZE92ZXJsYXkgPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogYHRydWVgOiBwYWluZWwgc2VtIGZ1bmRvL2JvcmRhL3NvbWJyYSBwcsOzcHJpb3Mg4oCUIG8gY29udGXDumRvIChleC46IGBhcHAtbWVudS1saXN0YCkgZGVmaW5lIG8gY2hyb21lLlxyXG4gICAqIEV2aXRhIGR1cGxhIG1vbGR1cmEgY29tIGBtZW51LXN1cmZhY2Utc2hlbGxgIG5vcyBtZW51cyBkZSBhY8Onw6NvLlxyXG4gICAqL1xyXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBiYXJlT3ZlcmxheVBhbmVsID0gZmFsc2U7XHJcblxyXG4gIGdldCBvdmVybGF5V2lkdGhQeCgpOiBudW1iZXIge1xyXG4gICAgY29uc3QgdyA9IHRoaXMucGFuZWxXaWR0aFB4O1xyXG4gICAgcmV0dXJuIHcgIT0gbnVsbCAmJiB3ID4gMCA/IHcgOiAwO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGVmZmVjdGl2ZUNvbm5lY3RlZFBvc2l0aW9ucygpOiBDb25uZWN0ZWRQb3NpdGlvbltdIHtcclxuICAgIHJldHVybiB0aGlzLmNvbm5lY3RlZFBvc2l0aW9ucyA/PyBERUZBVUxUX0NPTk5FQ1RFRF9QT1NJVElPTlM7XHJcbiAgfVxyXG5cclxuICBvbkJhY2tkcm9wQ2xpY2soKTogdm9pZCB7XHJcbiAgICB0aGlzLnNldE9wZW4oZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xpcXVlcyBub3V0cm9zIGNvbnRyb2xvcyAoZm9yYSBkbyBwYWluZWwgZSBmb3JhIGRvIHRyaWdnZXIpIG5lbSBzZW1wcmUgcGFzc2FtIHBlbG8gYmFja2Ryb3A7XHJcbiAgICogbyBDREsgZXhww7VlIGBvdmVybGF5T3V0c2lkZUNsaWNrYCBwYXJhIG8gbWVzbW8gZWZlaXRvIGRlIGZlY2hhci5cclxuICAgKi9cclxuICBvbk92ZXJsYXlPdXRzaWRlQ2xpY2soKTogdm9pZCB7XHJcbiAgICB0aGlzLnNldE9wZW4oZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgb25PdmVybGF5S2V5ZG93bihldjogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY2xvc2VPbkVzY2FwZSAmJiBldi5rZXkgPT09ICdFc2NhcGUnKSB7XHJcbiAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIHRoaXMuc2V0T3BlbihmYWxzZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRPcGVuKG5leHQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLm9wZW4gPT09IG5leHQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5vcGVuID0gbmV4dDtcclxuICAgIHRoaXMub3BlbkNoYW5nZS5lbWl0KG5leHQpO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZXRPcGVuKCF0aGlzLm9wZW4pO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiZHJvcGRvd24tYmFzZVwiPlxyXG4gIDxzcGFuIGNsYXNzPVwiZHJvcGRvd24tYmFzZV9fb3JpZ2luXCIgY2RrT3ZlcmxheU9yaWdpbiAjZHJvcGRvd25PcmlnaW49XCJjZGtPdmVybGF5T3JpZ2luXCI+XHJcbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbYXBwRHJvcGRvd25UcmlnZ2VyXVwiIC8+XHJcbiAgPC9zcGFuPlxyXG5cclxuICA8bmctdGVtcGxhdGVcclxuICAgIGNka0Nvbm5lY3RlZE92ZXJsYXlcclxuICAgIFtjZGtDb25uZWN0ZWRPdmVybGF5UG9zaXRpb25zXT1cImVmZmVjdGl2ZUNvbm5lY3RlZFBvc2l0aW9uc1wiXHJcbiAgICBbY2RrQ29ubmVjdGVkT3ZlcmxheVB1c2hdPVwicHVzaENvbm5lY3RlZE92ZXJsYXlcIlxyXG4gICAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlQYW5lbENsYXNzXT1cIm92ZXJsYXlQYW5lbENsYXNzZXMoKVwiXHJcbiAgICBbY2RrQ29ubmVjdGVkT3ZlcmxheU9yaWdpbl09XCJkcm9wZG93bk9yaWdpblwiXHJcbiAgICBbY2RrQ29ubmVjdGVkT3ZlcmxheU9wZW5dPVwib3BlblwiXHJcbiAgICBbY2RrQ29ubmVjdGVkT3ZlcmxheVdpZHRoXT1cIiRhbnkob3ZlcmxheVdpZHRoUHggPiAwID8gb3ZlcmxheVdpZHRoUHggOiB1bmRlZmluZWQpXCJcclxuICAgIFtjZGtDb25uZWN0ZWRPdmVybGF5TWluV2lkdGhdPVwiJGFueShvdmVybGF5V2lkdGhQeCA+IDAgPyBvdmVybGF5V2lkdGhQeCA6IHVuZGVmaW5lZClcIlxyXG4gICAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlIYXNCYWNrZHJvcF09XCJoYXNCYWNrZHJvcFwiXHJcbiAgICBjZGtDb25uZWN0ZWRPdmVybGF5QmFja2Ryb3BDbGFzcz1cImNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wXCJcclxuICAgIFtjZGtDb25uZWN0ZWRPdmVybGF5RGlzYWJsZUNsb3NlXT1cImZhbHNlXCJcclxuICAgIChiYWNrZHJvcENsaWNrKT1cIm9uQmFja2Ryb3BDbGljaygpXCJcclxuICAgIChvdmVybGF5T3V0c2lkZUNsaWNrKT1cIm9uT3ZlcmxheU91dHNpZGVDbGljaygpXCJcclxuICAgIChvdmVybGF5S2V5ZG93bik9XCJvbk92ZXJsYXlLZXlkb3duKCRldmVudClcIlxyXG4gICAgKGRldGFjaCk9XCJzZXRPcGVuKGZhbHNlKVwiXHJcbiAgPlxyXG4gICAgPGRpdlxyXG4gICAgICBjbGFzcz1cImRyb3Bkb3duLWJhc2VfX3BhbmVsXCJcclxuICAgICAgW2NsYXNzLmRyb3Bkb3duLWJhc2VfX3BhbmVsLS1iYXJlXT1cImJhcmVPdmVybGF5UGFuZWxcIlxyXG4gICAgICBbbmdDbGFzc109XCJwYW5lbFRoZW1lTmdDbGFzcygpXCJcclxuICAgICAgcm9sZT1cInByZXNlbnRhdGlvblwiXHJcbiAgICA+XHJcbiAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwicGFuZWxUZW1wbGF0ZVwiIC8+XHJcbiAgICA8L2Rpdj5cclxuICA8L25nLXRlbXBsYXRlPlxyXG48L2Rpdj5cclxuIl19