@cuby-ui/cdk 0.0.487 → 0.0.489

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 (210) hide show
  1. package/constants/empty.d.ts +10 -0
  2. package/constants/handlers.d.ts +8 -0
  3. package/constants/index.d.ts +4 -0
  4. package/constants/svg-node-filter.d.ts +1 -0
  5. package/constants/units.d.ts +17 -0
  6. package/date-time/index.d.ts +1 -0
  7. package/date-time/time.d.ts +14 -0
  8. package/directives/active-zone/active-zone.directive.d.ts +22 -0
  9. package/directives/active-zone/index.d.ts +1 -0
  10. package/directives/auto-resizing.directive.d.ts +18 -0
  11. package/directives/click-outside.directive.d.ts +9 -0
  12. package/directives/content-editable-value-accessor.directive.d.ts +17 -0
  13. package/directives/dimensions-observer.directive.d.ts +13 -0
  14. package/directives/drag-drop/drag-drop.directive.d.ts +42 -0
  15. package/directives/drag-drop/drag-drop.options.d.ts +11 -0
  16. package/directives/drag-drop/drag-list.directive.d.ts +10 -0
  17. package/directives/drag-drop/drag-pointer.directive.d.ts +8 -0
  18. package/directives/drag-drop/index.d.ts +4 -0
  19. package/directives/element.directive.d.ts +8 -0
  20. package/directives/focus-trap.directive.d.ts +14 -0
  21. package/directives/handle-scroll.directive.d.ts +23 -0
  22. package/directives/hovered/hovered.directive.d.ts +7 -0
  23. package/directives/hovered/hovered.service.d.ts +12 -0
  24. package/directives/hovered/index.d.ts +2 -0
  25. package/directives/index.d.ts +17 -0
  26. package/directives/item.directive.d.ts +5 -0
  27. package/directives/ladder-list.directive.d.ts +13 -0
  28. package/directives/let.context.d.ts +9 -0
  29. package/directives/let.directive.d.ts +9 -0
  30. package/directives/target.directive.d.ts +14 -0
  31. package/directives/typed-template.directive.d.ts +13 -0
  32. package/directives/typed-template.options.d.ts +3 -0
  33. package/esm2022/constants/empty.mjs +24 -0
  34. package/esm2022/constants/handlers.mjs +11 -0
  35. package/esm2022/constants/index.mjs +5 -0
  36. package/esm2022/constants/svg-node-filter.mjs +6 -0
  37. package/esm2022/constants/units.mjs +64 -0
  38. package/esm2022/cuby-ui-cdk.mjs +5 -0
  39. package/esm2022/date-time/index.mjs +2 -0
  40. package/esm2022/date-time/time.mjs +72 -0
  41. package/esm2022/directives/active-zone/active-zone.directive.mjs +75 -0
  42. package/esm2022/directives/active-zone/index.mjs +2 -0
  43. package/esm2022/directives/auto-resizing.directive.mjs +64 -0
  44. package/esm2022/directives/click-outside.directive.mjs +29 -0
  45. package/esm2022/directives/content-editable-value-accessor.directive.mjs +44 -0
  46. package/esm2022/directives/dimensions-observer.directive.mjs +32 -0
  47. package/esm2022/directives/drag-drop/drag-drop.directive.mjs +184 -0
  48. package/esm2022/directives/drag-drop/drag-drop.options.mjs +2 -0
  49. package/esm2022/directives/drag-drop/drag-list.directive.mjs +22 -0
  50. package/esm2022/directives/drag-drop/drag-pointer.directive.mjs +20 -0
  51. package/esm2022/directives/drag-drop/index.mjs +4 -0
  52. package/esm2022/directives/element.directive.mjs +19 -0
  53. package/esm2022/directives/focus-trap.directive.mjs +50 -0
  54. package/esm2022/directives/handle-scroll.directive.mjs +81 -0
  55. package/esm2022/directives/hovered/hovered.directive.mjs +21 -0
  56. package/esm2022/directives/hovered/hovered.service.mjs +32 -0
  57. package/esm2022/directives/hovered/index.mjs +3 -0
  58. package/esm2022/directives/index.mjs +18 -0
  59. package/esm2022/directives/item.directive.mjs +14 -0
  60. package/esm2022/directives/ladder-list.directive.mjs +42 -0
  61. package/esm2022/directives/let.context.mjs +12 -0
  62. package/esm2022/directives/let.directive.mjs +23 -0
  63. package/esm2022/directives/target.directive.mjs +36 -0
  64. package/esm2022/directives/typed-template.directive.mjs +27 -0
  65. package/esm2022/directives/typed-template.options.mjs +2 -0
  66. package/esm2022/index.mjs +12 -0
  67. package/esm2022/interfaces/dimensions.mjs +2 -0
  68. package/esm2022/interfaces/index.mjs +4 -0
  69. package/esm2022/interfaces/on-change.mjs +2 -0
  70. package/esm2022/interfaces/on-touched.mjs +2 -0
  71. package/esm2022/models/consumption-units.mjs +2 -0
  72. package/esm2022/models/index.mjs +2 -0
  73. package/esm2022/observables/if-map.mjs +5 -0
  74. package/esm2022/observables/index.mjs +5 -0
  75. package/esm2022/observables/typed-from-event.mjs +9 -0
  76. package/esm2022/observables/watch.mjs +6 -0
  77. package/esm2022/observables/zone.mjs +34 -0
  78. package/esm2022/pipes/filter.pipe.mjs +17 -0
  79. package/esm2022/pipes/index.mjs +2 -0
  80. package/esm2022/services/consumption-units.service.mjs +67 -0
  81. package/esm2022/services/destroy.service.mjs +15 -0
  82. package/esm2022/services/id.service.mjs +21 -0
  83. package/esm2022/services/index.mjs +5 -0
  84. package/esm2022/services/popover.service.mjs +41 -0
  85. package/esm2022/tokens/active-element.mjs +52 -0
  86. package/esm2022/tokens/animation-frame.mjs +21 -0
  87. package/esm2022/tokens/environment.mjs +47 -0
  88. package/esm2022/tokens/history.mjs +5 -0
  89. package/esm2022/tokens/index.mjs +11 -0
  90. package/esm2022/tokens/local-storage.mjs +5 -0
  91. package/esm2022/tokens/navigator.mjs +6 -0
  92. package/esm2022/tokens/removed-element.mjs +19 -0
  93. package/esm2022/tokens/session-storage.mjs +5 -0
  94. package/esm2022/tokens/user-agent.mjs +6 -0
  95. package/esm2022/tokens/window.mjs +11 -0
  96. package/esm2022/types/context.mjs +2 -0
  97. package/esm2022/types/date-time.mjs +2 -0
  98. package/esm2022/types/handler.mjs +2 -0
  99. package/esm2022/types/index.mjs +9 -0
  100. package/esm2022/types/input-type.mjs +2 -0
  101. package/esm2022/types/mapper.mjs +2 -0
  102. package/esm2022/types/matcher.mjs +2 -0
  103. package/esm2022/types/nullable.mjs +2 -0
  104. package/esm2022/types/value-of.mjs +2 -0
  105. package/esm2022/utils/dom/contains-or-after.mjs +9 -0
  106. package/esm2022/utils/dom/element-checks.mjs +20 -0
  107. package/esm2022/utils/dom/get-actual-target.mjs +7 -0
  108. package/esm2022/utils/dom/get-document-or-shadow-root.mjs +6 -0
  109. package/esm2022/utils/dom/get-element-obscurers.mjs +42 -0
  110. package/esm2022/utils/dom/index.mjs +8 -0
  111. package/esm2022/utils/dom/inject-element.mjs +5 -0
  112. package/esm2022/utils/dom/point-to-client-rect.mjs +17 -0
  113. package/esm2022/utils/files/files.uploader.mjs +19 -0
  114. package/esm2022/utils/files/index.mjs +3 -0
  115. package/esm2022/utils/files/take-capture-from-video.mjs +25 -0
  116. package/esm2022/utils/focus/blur-native-focused.mjs +9 -0
  117. package/esm2022/utils/focus/get-closest-focusable.mjs +22 -0
  118. package/esm2022/utils/focus/get-native-focused.mjs +11 -0
  119. package/esm2022/utils/focus/index.mjs +7 -0
  120. package/esm2022/utils/focus/is-native-focused.mjs +13 -0
  121. package/esm2022/utils/focus/is-native-keyboard-focusable.mjs +26 -0
  122. package/esm2022/utils/focus/is-native-mouse-focusable.mjs +6 -0
  123. package/esm2022/utils/index.mjs +8 -0
  124. package/esm2022/utils/math/clamp.mjs +11 -0
  125. package/esm2022/utils/math/index.mjs +2 -0
  126. package/esm2022/utils/miscellaneous/array-remove.mjs +4 -0
  127. package/esm2022/utils/miscellaneous/index.mjs +6 -0
  128. package/esm2022/utils/miscellaneous/is-present.mjs +4 -0
  129. package/esm2022/utils/miscellaneous/move-item-in-array.mjs +10 -0
  130. package/esm2022/utils/miscellaneous/pure.mjs +81 -0
  131. package/esm2022/utils/miscellaneous/px.mjs +7 -0
  132. package/esm2022/utils/platform/index.mjs +2 -0
  133. package/esm2022/utils/platform/is-ios.mjs +6 -0
  134. package/esm2022/utils/token/create-token.mjs +8 -0
  135. package/esm2022/utils/token/index.mjs +3 -0
  136. package/esm2022/utils/token/provide.mjs +4 -0
  137. package/fesm2022/cuby-ui-cdk.mjs +1644 -0
  138. package/fesm2022/cuby-ui-cdk.mjs.map +1 -0
  139. package/index.d.ts +11 -0
  140. package/interfaces/dimensions.d.ts +4 -0
  141. package/interfaces/index.d.ts +3 -0
  142. package/interfaces/on-change.d.ts +3 -0
  143. package/interfaces/on-touched.d.ts +3 -0
  144. package/models/consumption-units.d.ts +14 -0
  145. package/models/index.d.ts +1 -0
  146. package/observables/if-map.d.ts +3 -0
  147. package/observables/index.d.ts +4 -0
  148. package/observables/typed-from-event.d.ts +16 -0
  149. package/observables/watch.d.ts +3 -0
  150. package/observables/zone.d.ts +7 -0
  151. package/package.json +1 -4
  152. package/pipes/filter.pipe.d.ts +8 -0
  153. package/pipes/index.d.ts +1 -0
  154. package/services/consumption-units.service.d.ts +13 -0
  155. package/services/destroy.service.d.ts +8 -0
  156. package/services/id.service.d.ts +8 -0
  157. package/services/index.d.ts +4 -0
  158. package/services/popover.service.d.ts +23 -0
  159. package/tokens/active-element.d.ts +5 -0
  160. package/tokens/animation-frame.d.ts +3 -0
  161. package/tokens/environment.d.ts +19 -0
  162. package/tokens/history.d.ts +1 -0
  163. package/tokens/index.d.ts +10 -0
  164. package/tokens/local-storage.d.ts +1 -0
  165. package/tokens/navigator.d.ts +2 -0
  166. package/tokens/removed-element.d.ts +4 -0
  167. package/tokens/session-storage.d.ts +1 -0
  168. package/tokens/user-agent.d.ts +2 -0
  169. package/tokens/window.d.ts +1 -0
  170. package/types/context.d.ts +3 -0
  171. package/types/date-time.d.ts +1 -0
  172. package/types/handler.d.ts +4 -0
  173. package/types/index.d.ts +8 -0
  174. package/types/input-type.d.ts +1 -0
  175. package/types/mapper.d.ts +1 -0
  176. package/types/matcher.d.ts +2 -0
  177. package/types/nullable.d.ts +1 -0
  178. package/types/value-of.d.ts +1 -0
  179. package/utils/dom/contains-or-after.d.ts +1 -0
  180. package/utils/dom/element-checks.d.ts +6 -0
  181. package/utils/dom/get-actual-target.d.ts +4 -0
  182. package/utils/dom/get-document-or-shadow-root.d.ts +1 -0
  183. package/utils/dom/get-element-obscurers.d.ts +9 -0
  184. package/utils/dom/index.d.ts +7 -0
  185. package/utils/dom/inject-element.d.ts +1 -0
  186. package/utils/dom/point-to-client-rect.d.ts +1 -0
  187. package/utils/files/files.uploader.d.ts +5 -0
  188. package/utils/files/index.d.ts +2 -0
  189. package/utils/files/take-capture-from-video.d.ts +1 -0
  190. package/utils/focus/blur-native-focused.d.ts +1 -0
  191. package/utils/focus/get-closest-focusable.d.ts +7 -0
  192. package/utils/focus/get-native-focused.d.ts +1 -0
  193. package/utils/focus/index.d.ts +6 -0
  194. package/utils/focus/is-native-focused.d.ts +9 -0
  195. package/utils/focus/is-native-keyboard-focusable.d.ts +1 -0
  196. package/utils/focus/is-native-mouse-focusable.d.ts +1 -0
  197. package/utils/index.d.ts +7 -0
  198. package/utils/math/clamp.d.ts +8 -0
  199. package/utils/math/index.d.ts +1 -0
  200. package/utils/miscellaneous/array-remove.d.ts +1 -0
  201. package/utils/miscellaneous/index.d.ts +5 -0
  202. package/utils/miscellaneous/is-present.d.ts +1 -0
  203. package/utils/miscellaneous/move-item-in-array.d.ts +1 -0
  204. package/utils/miscellaneous/pure.d.ts +21 -0
  205. package/utils/miscellaneous/px.d.ts +4 -0
  206. package/utils/platform/index.d.ts +1 -0
  207. package/utils/platform/is-ios.d.ts +3 -0
  208. package/utils/token/create-token.d.ts +3 -0
  209. package/utils/token/index.d.ts +2 -0
  210. package/utils/token/provide.d.ts +3 -0
@@ -0,0 +1,72 @@
1
+ export class CuiTime {
2
+ constructor(hours, minutes, seconds = 0, ms = 0) {
3
+ this.hours = hours;
4
+ this.minutes = minutes;
5
+ this.seconds = seconds;
6
+ this.ms = ms;
7
+ }
8
+ static fromString(time) {
9
+ const hours = this.parseHours(time);
10
+ const minutes = Number(time.slice(3, 5)) || 0;
11
+ const seconds = Number(time.slice(6, 8)) || 0;
12
+ const ms = Number(time.slice(9, 12)) || 0;
13
+ return new CuiTime(hours, minutes, seconds, ms);
14
+ }
15
+ static fromPT(time) {
16
+ let duration = time.trim().toUpperCase();
17
+ if (!duration.startsWith('P')) {
18
+ throw new Error('Invalid PT format: does not start with P');
19
+ }
20
+ duration = duration.substring(1);
21
+ if (duration.startsWith('T')) {
22
+ duration = duration.substring(1);
23
+ }
24
+ const regex = /(\d+(\.\d+)?)([HMS])/g;
25
+ let match;
26
+ let hours = 0, minutes = 0, seconds = 0, ms = 0;
27
+ while ((match = regex.exec(duration)) !== null) {
28
+ const value = parseFloat(match[1]);
29
+ const unit = match[3];
30
+ if (unit === 'H') {
31
+ hours = value;
32
+ }
33
+ else if (unit === 'M') {
34
+ minutes = value;
35
+ }
36
+ else if (unit === 'S') {
37
+ seconds = Math.floor(value);
38
+ ms = Math.round((value - seconds) * 1000);
39
+ }
40
+ }
41
+ return new CuiTime(hours, minutes, seconds, ms);
42
+ }
43
+ static parseHours(time) {
44
+ return Number(time.slice(0, 2));
45
+ }
46
+ toString(mode) {
47
+ const needAddMs = mode?.startsWith('HH:MM:SS.MSS') || (!mode && this.ms > 0);
48
+ const needAddSeconds = needAddMs || mode?.startsWith('HH:MM:SS') || (!mode && this.seconds > 0);
49
+ const hhMm = `${this.formatTime(this.hours)}:${this.formatTime(this.minutes)}`;
50
+ const ss = needAddSeconds ? `:${this.formatTime(this.seconds)}` : '';
51
+ const mss = needAddMs ? `.${this.formatTime(this.ms, 3)}` : '';
52
+ return `${hhMm}${ss}${mss}`;
53
+ }
54
+ toPT(mode) {
55
+ let duration = 'PT';
56
+ if (this.hours !== 0) {
57
+ duration += `${this.hours}H`;
58
+ }
59
+ if (this.minutes !== 0) {
60
+ duration += `${this.minutes}M`;
61
+ }
62
+ const totalSeconds = this.seconds + this.ms / 1000;
63
+ if (totalSeconds !== 0 || duration === 'PT') {
64
+ duration += `${parseFloat(totalSeconds.toFixed(3))}S`;
65
+ }
66
+ return duration;
67
+ }
68
+ formatTime(time, digits = 2) {
69
+ return String(time).padStart(digits, '0');
70
+ }
71
+ }
72
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2Nkay9kYXRlLXRpbWUvdGltZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLE9BQU8sT0FBTztJQUNoQixZQUNvQixLQUFhLEVBQ2IsT0FBZSxFQUNmLFVBQVUsQ0FBQyxFQUNYLEtBQUssQ0FBQztRQUhOLFVBQUssR0FBTCxLQUFLLENBQVE7UUFDYixZQUFPLEdBQVAsT0FBTyxDQUFRO1FBQ2YsWUFBTyxHQUFQLE9BQU8sQ0FBSTtRQUNYLE9BQUUsR0FBRixFQUFFLENBQUk7SUFDdkIsQ0FBQztJQUVHLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBWTtRQUNqQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BDLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUMsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTFDLE9BQU8sSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVNLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBWTtRQUM3QixJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFekMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM1QixNQUFNLElBQUksS0FBSyxDQUFDLDBDQUEwQyxDQUFDLENBQUM7UUFDaEUsQ0FBQztRQUVELFFBQVEsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRWpDLElBQUksUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzNCLFFBQVEsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JDLENBQUM7UUFFRCxNQUFNLEtBQUssR0FBRyx1QkFBdUIsQ0FBQztRQUN0QyxJQUFJLEtBQUssQ0FBQztRQUNWLElBQUksS0FBSyxHQUFHLENBQUMsRUFDVCxPQUFPLEdBQUcsQ0FBQyxFQUNYLE9BQU8sR0FBRyxDQUFDLEVBQ1gsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUVYLE9BQU8sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQzdDLE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuQyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFdEIsSUFBSSxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7Z0JBQ2YsS0FBSyxHQUFHLEtBQUssQ0FBQztZQUNsQixDQUFDO2lCQUFNLElBQUksSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO2dCQUN0QixPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3BCLENBQUM7aUJBQU0sSUFBSSxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7Z0JBQ3RCLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM1QixFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztZQUM5QyxDQUFDO1FBQ0wsQ0FBQztRQUVELE9BQU8sSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVPLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBWTtRQUNsQyxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFTSxRQUFRLENBQUMsSUFBa0I7UUFDOUIsTUFBTSxTQUFTLEdBQUcsSUFBSSxFQUFFLFVBQVUsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDN0UsTUFBTSxjQUFjLEdBQUcsU0FBUyxJQUFJLElBQUksRUFBRSxVQUFVLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2hHLE1BQU0sSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUMvRSxNQUFNLEVBQUUsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3JFLE1BQU0sR0FBRyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRS9ELE9BQU8sR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFTSxJQUFJLENBQUMsSUFBa0I7UUFDMUIsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNuQixRQUFRLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUM7UUFDakMsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNyQixRQUFRLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUM7UUFDbkMsQ0FBQztRQUVELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFFbkQsSUFBSSxZQUFZLEtBQUssQ0FBQyxJQUFJLFFBQVEsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUMxQyxRQUFRLElBQUksR0FBRyxVQUFVLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDMUQsQ0FBQztRQUVELE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7SUFFTyxVQUFVLENBQUMsSUFBWSxFQUFFLE1BQU0sR0FBRyxDQUFDO1FBQ3ZDLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDOUMsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDdWlUaW1lTW9kZSB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIEN1aVRpbWUge1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgaG91cnM6IG51bWJlcixcbiAgICAgICAgcHVibGljIHJlYWRvbmx5IG1pbnV0ZXM6IG51bWJlcixcbiAgICAgICAgcHVibGljIHJlYWRvbmx5IHNlY29uZHMgPSAwLFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgbXMgPSAwXG4gICAgKSB7fVxuXG4gICAgcHVibGljIHN0YXRpYyBmcm9tU3RyaW5nKHRpbWU6IHN0cmluZyk6IEN1aVRpbWUge1xuICAgICAgICBjb25zdCBob3VycyA9IHRoaXMucGFyc2VIb3Vycyh0aW1lKTtcbiAgICAgICAgY29uc3QgbWludXRlcyA9IE51bWJlcih0aW1lLnNsaWNlKDMsIDUpKSB8fCAwO1xuICAgICAgICBjb25zdCBzZWNvbmRzID0gTnVtYmVyKHRpbWUuc2xpY2UoNiwgOCkpIHx8IDA7XG4gICAgICAgIGNvbnN0IG1zID0gTnVtYmVyKHRpbWUuc2xpY2UoOSwgMTIpKSB8fCAwO1xuXG4gICAgICAgIHJldHVybiBuZXcgQ3VpVGltZShob3VycywgbWludXRlcywgc2Vjb25kcywgbXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZnJvbVBUKHRpbWU6IHN0cmluZyk6IEN1aVRpbWUge1xuICAgICAgICBsZXQgZHVyYXRpb24gPSB0aW1lLnRyaW0oKS50b1VwcGVyQ2FzZSgpO1xuXG4gICAgICAgIGlmICghZHVyYXRpb24uc3RhcnRzV2l0aCgnUCcpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgUFQgZm9ybWF0OiBkb2VzIG5vdCBzdGFydCB3aXRoIFAnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGR1cmF0aW9uID0gZHVyYXRpb24uc3Vic3RyaW5nKDEpO1xuXG4gICAgICAgIGlmIChkdXJhdGlvbi5zdGFydHNXaXRoKCdUJykpIHtcbiAgICAgICAgICAgIGR1cmF0aW9uID0gZHVyYXRpb24uc3Vic3RyaW5nKDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVnZXggPSAvKFxcZCsoXFwuXFxkKyk/KShbSE1TXSkvZztcbiAgICAgICAgbGV0IG1hdGNoO1xuICAgICAgICBsZXQgaG91cnMgPSAwLFxuICAgICAgICAgICAgbWludXRlcyA9IDAsXG4gICAgICAgICAgICBzZWNvbmRzID0gMCxcbiAgICAgICAgICAgIG1zID0gMDtcblxuICAgICAgICB3aGlsZSAoKG1hdGNoID0gcmVnZXguZXhlYyhkdXJhdGlvbikpICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHBhcnNlRmxvYXQobWF0Y2hbMV0pO1xuICAgICAgICAgICAgY29uc3QgdW5pdCA9IG1hdGNoWzNdO1xuXG4gICAgICAgICAgICBpZiAodW5pdCA9PT0gJ0gnKSB7XG4gICAgICAgICAgICAgICAgaG91cnMgPSB2YWx1ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodW5pdCA9PT0gJ00nKSB7XG4gICAgICAgICAgICAgICAgbWludXRlcyA9IHZhbHVlO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh1bml0ID09PSAnUycpIHtcbiAgICAgICAgICAgICAgICBzZWNvbmRzID0gTWF0aC5mbG9vcih2YWx1ZSk7XG4gICAgICAgICAgICAgICAgbXMgPSBNYXRoLnJvdW5kKCh2YWx1ZSAtIHNlY29uZHMpICogMTAwMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IEN1aVRpbWUoaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIG1zKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBwYXJzZUhvdXJzKHRpbWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBOdW1iZXIodGltZS5zbGljZSgwLCAyKSk7XG4gICAgfVxuXG4gICAgcHVibGljIHRvU3RyaW5nKG1vZGU/OiBDdWlUaW1lTW9kZSk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IG5lZWRBZGRNcyA9IG1vZGU/LnN0YXJ0c1dpdGgoJ0hIOk1NOlNTLk1TUycpIHx8ICghbW9kZSAmJiB0aGlzLm1zID4gMCk7XG4gICAgICAgIGNvbnN0IG5lZWRBZGRTZWNvbmRzID0gbmVlZEFkZE1zIHx8IG1vZGU/LnN0YXJ0c1dpdGgoJ0hIOk1NOlNTJykgfHwgKCFtb2RlICYmIHRoaXMuc2Vjb25kcyA+IDApO1xuICAgICAgICBjb25zdCBoaE1tID0gYCR7dGhpcy5mb3JtYXRUaW1lKHRoaXMuaG91cnMpfToke3RoaXMuZm9ybWF0VGltZSh0aGlzLm1pbnV0ZXMpfWA7XG4gICAgICAgIGNvbnN0IHNzID0gbmVlZEFkZFNlY29uZHMgPyBgOiR7dGhpcy5mb3JtYXRUaW1lKHRoaXMuc2Vjb25kcyl9YCA6ICcnO1xuICAgICAgICBjb25zdCBtc3MgPSBuZWVkQWRkTXMgPyBgLiR7dGhpcy5mb3JtYXRUaW1lKHRoaXMubXMsIDMpfWAgOiAnJztcblxuICAgICAgICByZXR1cm4gYCR7aGhNbX0ke3NzfSR7bXNzfWA7XG4gICAgfVxuXG4gICAgcHVibGljIHRvUFQobW9kZT86IEN1aVRpbWVNb2RlKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IGR1cmF0aW9uID0gJ1BUJztcbiAgICAgICAgaWYgKHRoaXMuaG91cnMgIT09IDApIHtcbiAgICAgICAgICAgIGR1cmF0aW9uICs9IGAke3RoaXMuaG91cnN9SGA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5taW51dGVzICE9PSAwKSB7XG4gICAgICAgICAgICBkdXJhdGlvbiArPSBgJHt0aGlzLm1pbnV0ZXN9TWA7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0b3RhbFNlY29uZHMgPSB0aGlzLnNlY29uZHMgKyB0aGlzLm1zIC8gMTAwMDtcblxuICAgICAgICBpZiAodG90YWxTZWNvbmRzICE9PSAwIHx8IGR1cmF0aW9uID09PSAnUFQnKSB7XG4gICAgICAgICAgICBkdXJhdGlvbiArPSBgJHtwYXJzZUZsb2F0KHRvdGFsU2Vjb25kcy50b0ZpeGVkKDMpKX1TYDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkdXJhdGlvbjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZvcm1hdFRpbWUodGltZTogbnVtYmVyLCBkaWdpdHMgPSAyKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIFN0cmluZyh0aW1lKS5wYWRTdGFydChkaWdpdHMsICcwJyk7XG4gICAgfVxufVxuIl19
@@ -0,0 +1,75 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import { Directive, inject, Input, NgZone, Output } from '@angular/core';
3
+ import { NgControl } from '@angular/forms';
4
+ import { cuiZoneOptimized } from '../../observables';
5
+ import { CUI_ACTIVE_ELEMENT } from '../../tokens';
6
+ import { cuiArrayRemove, cuiInjectElement, cuiPure } from '../../utils';
7
+ import { distinctUntilChanged, map, skip, startWith, tap } from 'rxjs';
8
+ import * as i0 from "@angular/core";
9
+ export class CuiActiveZone {
10
+ constructor() {
11
+ this.control = inject(NgControl, { self: true, optional: true });
12
+ this.active$ = inject(CUI_ACTIVE_ELEMENT);
13
+ this.zone = inject(NgZone);
14
+ this.el = cuiInjectElement();
15
+ this.cuiActiveZoneParent = null;
16
+ this.subActiveZones = [];
17
+ this.directParentActiveZone = inject(CuiActiveZone, {
18
+ skipSelf: true,
19
+ optional: true
20
+ });
21
+ this.cuiActiveZoneChange = this.active$.pipe(map((element) => !!element && this.contains(element)), startWith(false), distinctUntilChanged(), skip(1), tap((active) => {
22
+ if (!active && typeof this.control?.valueAccessor.onTouched === 'function') {
23
+ this.control.valueAccessor.onTouched();
24
+ }
25
+ }), cuiZoneOptimized(this.zone));
26
+ this.directParentActiveZone?.addSubActiveZone(this);
27
+ }
28
+ set cuiActiveZoneParentSetter(zone) {
29
+ this.setZone(zone);
30
+ }
31
+ ngOnDestroy() {
32
+ this.directParentActiveZone?.removeSubActiveZone(this);
33
+ this.cuiActiveZoneParent?.removeSubActiveZone(this);
34
+ }
35
+ contains(node) {
36
+ return (this.el.contains(node) ||
37
+ this.subActiveZones.some((item, index, array) => array.indexOf(item) === index && item.contains(node)));
38
+ }
39
+ setZone(zone) {
40
+ this.cuiActiveZoneParent?.removeSubActiveZone(this);
41
+ zone?.addSubActiveZone(this);
42
+ this.cuiActiveZoneParent = zone;
43
+ }
44
+ addSubActiveZone(activeZone) {
45
+ this.subActiveZones = [...this.subActiveZones, activeZone];
46
+ }
47
+ removeSubActiveZone(activeZone) {
48
+ this.subActiveZones = cuiArrayRemove(this.subActiveZones, this.subActiveZones.indexOf(activeZone));
49
+ }
50
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CuiActiveZone, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
51
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: CuiActiveZone, isStandalone: true, selector: "[cuiActiveZone]:not(ng-container), [cuiActiveZoneChange]:not(ng-container), [cuiActiveZoneParent]:not(ng-container)", inputs: { cuiActiveZoneParentSetter: ["cuiActiveZoneParent", "cuiActiveZoneParentSetter"] }, outputs: { cuiActiveZoneChange: "cuiActiveZoneChange" }, host: { listeners: { "document:mousedown.silent": "(0)" } }, exportAs: ["cuiActiveZone"], ngImport: i0 }); }
52
+ }
53
+ __decorate([
54
+ cuiPure,
55
+ __metadata("design:type", Function),
56
+ __metadata("design:paramtypes", [Object]),
57
+ __metadata("design:returntype", void 0)
58
+ ], CuiActiveZone.prototype, "setZone", null);
59
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CuiActiveZone, decorators: [{
60
+ type: Directive,
61
+ args: [{
62
+ standalone: true,
63
+ selector: '[cuiActiveZone]:not(ng-container), [cuiActiveZoneChange]:not(ng-container), [cuiActiveZoneParent]:not(ng-container)',
64
+ exportAs: 'cuiActiveZone',
65
+ host: {
66
+ '(document:mousedown.silent)': '(0)'
67
+ }
68
+ }]
69
+ }], ctorParameters: () => [], propDecorators: { cuiActiveZoneChange: [{
70
+ type: Output
71
+ }], cuiActiveZoneParentSetter: [{
72
+ type: Input,
73
+ args: ['cuiActiveZoneParent']
74
+ }], setZone: [] } });
75
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aXZlLXpvbmUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2RrL2RpcmVjdGl2ZXMvYWN0aXZlLXpvbmUvYWN0aXZlLXpvbmUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDckQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2xELE9BQU8sRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRXhFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBV3ZFLE1BQU0sT0FBTyxhQUFhO0lBMEJ0QjtRQXpCaUIsWUFBTyxHQUFRLE1BQU0sQ0FBQyxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ2pFLFlBQU8sR0FBRyxNQUFNLENBQTZCLGtCQUFrQixDQUFDLENBQUM7UUFDakUsU0FBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0QixPQUFFLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztRQUNqQyx3QkFBbUIsR0FBeUIsSUFBSSxDQUFDO1FBQ2pELG1CQUFjLEdBQTZCLEVBQUUsQ0FBQztRQUNyQywyQkFBc0IsR0FBRyxNQUFNLENBQUMsYUFBYSxFQUFFO1lBQzVELFFBQVEsRUFBRSxJQUFJO1lBQ2QsUUFBUSxFQUFFLElBQUk7U0FDakIsQ0FBQyxDQUFDO1FBR2Esd0JBQW1CLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQ25ELEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQ3JELFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFDaEIsb0JBQW9CLEVBQUUsRUFDdEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUNQLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ1gsSUFBSSxDQUFDLE1BQU0sSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUUsYUFBYSxDQUFDLFNBQVMsS0FBSyxVQUFVLEVBQUUsQ0FBQztnQkFDekUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDM0MsQ0FBQztRQUNMLENBQUMsQ0FBQyxFQUNGLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FDOUIsQ0FBQztRQUdFLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsSUFDVyx5QkFBeUIsQ0FBQyxJQUEwQjtRQUMzRCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFFTSxXQUFXO1FBQ2QsSUFBSSxDQUFDLHNCQUFzQixFQUFFLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxtQkFBbUIsRUFBRSxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRU0sUUFBUSxDQUFDLElBQVU7UUFDdEIsT0FBTyxDQUNILElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztZQUN0QixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQ3pHLENBQUM7SUFDTixDQUFDO0lBR08sT0FBTyxDQUFDLElBQTBCO1FBQ3RDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwRCxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQztJQUNwQyxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsVUFBeUI7UUFDOUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRU8sbUJBQW1CLENBQUMsVUFBeUI7UUFDakQsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQ3ZHLENBQUM7K0dBNURRLGFBQWE7bUdBQWIsYUFBYTs7QUFnRGQ7SUFEUCxPQUFPOzs7OzRDQUtQOzRGQXBEUSxhQUFhO2tCQVR6QixTQUFTO21CQUFDO29CQUNQLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQ0oscUhBQXFIO29CQUN6SCxRQUFRLEVBQUUsZUFBZTtvQkFDekIsSUFBSSxFQUFFO3dCQUNGLDZCQUE2QixFQUFFLEtBQUs7cUJBQ3ZDO2lCQUNKO3dEQWNtQixtQkFBbUI7c0JBRGxDLE1BQU07Z0JBbUJJLHlCQUF5QjtzQkFEbkMsS0FBSzt1QkFBQyxxQkFBcUI7Z0JBa0JwQixPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERpcmVjdGl2ZSwgaW5qZWN0LCBJbnB1dCwgTmdab25lLCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5nQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGN1aVpvbmVPcHRpbWl6ZWQgfSBmcm9tICcuLi8uLi9vYnNlcnZhYmxlcyc7XG5pbXBvcnQgeyBDVUlfQUNUSVZFX0VMRU1FTlQgfSBmcm9tICcuLi8uLi90b2tlbnMnO1xuaW1wb3J0IHsgY3VpQXJyYXlSZW1vdmUsIGN1aUluamVjdEVsZW1lbnQsIGN1aVB1cmUgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgdHlwZSB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAsIHNraXAsIHN0YXJ0V2l0aCwgdGFwIH0gZnJvbSAncnhqcyc7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6XG4gICAgICAgICdbY3VpQWN0aXZlWm9uZV06bm90KG5nLWNvbnRhaW5lciksIFtjdWlBY3RpdmVab25lQ2hhbmdlXTpub3QobmctY29udGFpbmVyKSwgW2N1aUFjdGl2ZVpvbmVQYXJlbnRdOm5vdChuZy1jb250YWluZXIpJyxcbiAgICBleHBvcnRBczogJ2N1aUFjdGl2ZVpvbmUnLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJyhkb2N1bWVudDptb3VzZWRvd24uc2lsZW50KSc6ICcoMCknXG4gICAgfVxufSlcbmV4cG9ydCBjbGFzcyBDdWlBY3RpdmVab25lIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbnRyb2w6IGFueSA9IGluamVjdChOZ0NvbnRyb2wsIHsgc2VsZjogdHJ1ZSwgb3B0aW9uYWw6IHRydWUgfSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBhY3RpdmUkID0gaW5qZWN0PE9ic2VydmFibGU8RWxlbWVudCB8IG51bGw+PihDVUlfQUNUSVZFX0VMRU1FTlQpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgem9uZSA9IGluamVjdChOZ1pvbmUpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZWwgPSBjdWlJbmplY3RFbGVtZW50KCk7XG4gICAgcHJpdmF0ZSBjdWlBY3RpdmVab25lUGFyZW50OiBDdWlBY3RpdmVab25lIHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBzdWJBY3RpdmVab25lczogcmVhZG9ubHkgQ3VpQWN0aXZlWm9uZVtdID0gW107XG4gICAgcHJpdmF0ZSByZWFkb25seSBkaXJlY3RQYXJlbnRBY3RpdmVab25lID0gaW5qZWN0KEN1aUFjdGl2ZVpvbmUsIHtcbiAgICAgICAgc2tpcFNlbGY6IHRydWUsXG4gICAgICAgIG9wdGlvbmFsOiB0cnVlXG4gICAgfSk7XG5cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgcmVhZG9ubHkgY3VpQWN0aXZlWm9uZUNoYW5nZSA9IHRoaXMuYWN0aXZlJC5waXBlKFxuICAgICAgICBtYXAoKGVsZW1lbnQpID0+ICEhZWxlbWVudCAmJiB0aGlzLmNvbnRhaW5zKGVsZW1lbnQpKSxcbiAgICAgICAgc3RhcnRXaXRoKGZhbHNlKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgc2tpcCgxKSxcbiAgICAgICAgdGFwKChhY3RpdmUpID0+IHtcbiAgICAgICAgICAgIGlmICghYWN0aXZlICYmIHR5cGVvZiB0aGlzLmNvbnRyb2w/LnZhbHVlQWNjZXNzb3Iub25Ub3VjaGVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb250cm9sLnZhbHVlQWNjZXNzb3Iub25Ub3VjaGVkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBjdWlab25lT3B0aW1pemVkKHRoaXMuem9uZSlcbiAgICApO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuZGlyZWN0UGFyZW50QWN0aXZlWm9uZT8uYWRkU3ViQWN0aXZlWm9uZSh0aGlzKTtcbiAgICB9XG5cbiAgICBASW5wdXQoJ2N1aUFjdGl2ZVpvbmVQYXJlbnQnKVxuICAgIHB1YmxpYyBzZXQgY3VpQWN0aXZlWm9uZVBhcmVudFNldHRlcih6b25lOiBDdWlBY3RpdmVab25lIHwgbnVsbCkge1xuICAgICAgICB0aGlzLnNldFpvbmUoem9uZSk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRpcmVjdFBhcmVudEFjdGl2ZVpvbmU/LnJlbW92ZVN1YkFjdGl2ZVpvbmUodGhpcyk7XG4gICAgICAgIHRoaXMuY3VpQWN0aXZlWm9uZVBhcmVudD8ucmVtb3ZlU3ViQWN0aXZlWm9uZSh0aGlzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY29udGFpbnMobm9kZTogTm9kZSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy5lbC5jb250YWlucyhub2RlKSB8fFxuICAgICAgICAgICAgdGhpcy5zdWJBY3RpdmVab25lcy5zb21lKChpdGVtLCBpbmRleCwgYXJyYXkpID0+IGFycmF5LmluZGV4T2YoaXRlbSkgPT09IGluZGV4ICYmIGl0ZW0uY29udGFpbnMobm9kZSkpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgQGN1aVB1cmVcbiAgICBwcml2YXRlIHNldFpvbmUoem9uZTogQ3VpQWN0aXZlWm9uZSB8IG51bGwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jdWlBY3RpdmVab25lUGFyZW50Py5yZW1vdmVTdWJBY3RpdmVab25lKHRoaXMpO1xuICAgICAgICB6b25lPy5hZGRTdWJBY3RpdmVab25lKHRoaXMpO1xuICAgICAgICB0aGlzLmN1aUFjdGl2ZVpvbmVQYXJlbnQgPSB6b25lO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkU3ViQWN0aXZlWm9uZShhY3RpdmVab25lOiBDdWlBY3RpdmVab25lKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3ViQWN0aXZlWm9uZXMgPSBbLi4udGhpcy5zdWJBY3RpdmVab25lcywgYWN0aXZlWm9uZV07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW1vdmVTdWJBY3RpdmVab25lKGFjdGl2ZVpvbmU6IEN1aUFjdGl2ZVpvbmUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdWJBY3RpdmVab25lcyA9IGN1aUFycmF5UmVtb3ZlKHRoaXMuc3ViQWN0aXZlWm9uZXMsIHRoaXMuc3ViQWN0aXZlWm9uZXMuaW5kZXhPZihhY3RpdmVab25lKSk7XG4gICAgfVxufVxuIl19
@@ -0,0 +1,2 @@
1
+ export * from './active-zone.directive';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jZGsvZGlyZWN0aXZlcy9hY3RpdmUtem9uZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHlCQUF5QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9hY3RpdmUtem9uZS5kaXJlY3RpdmUnO1xuIl19
@@ -0,0 +1,64 @@
1
+ import { Directive, ElementRef, HostListener, inject } from '@angular/core';
2
+ import { NgControl, NgModel } from '@angular/forms';
3
+ import { takeUntil } from 'rxjs';
4
+ import { CUI_WINDOW } from '../tokens';
5
+ import { CuiDestroyService } from '../services';
6
+ import * as i0 from "@angular/core";
7
+ export class CuiAutoResizingDirective {
8
+ constructor() {
9
+ this.window = inject(CUI_WINDOW);
10
+ this.element = inject(ElementRef).nativeElement;
11
+ this.ngControl = inject(NgControl, { self: true, optional: true });
12
+ this.ngModel = inject(NgModel, { self: true, optional: true });
13
+ this.destroy$ = inject(CuiDestroyService, { self: true });
14
+ this.elementStyles = this.element.style;
15
+ }
16
+ ngOnInit() {
17
+ this.initNgControlValueChangeSubscription();
18
+ this.initNgModelValueChangeSubscription();
19
+ }
20
+ ngAfterViewChecked() {
21
+ this.resize();
22
+ }
23
+ onInput() {
24
+ this.resize();
25
+ }
26
+ initNgControlValueChangeSubscription() {
27
+ if (!this.ngControl) {
28
+ return;
29
+ }
30
+ this.ngControl.valueChanges.pipe(takeUntil(this.destroy$)).subscribe(this.resize.bind(this));
31
+ }
32
+ initNgModelValueChangeSubscription() {
33
+ if (!this.ngModel) {
34
+ return;
35
+ }
36
+ this.ngModel.valueChanges.pipe(takeUntil(this.destroy$)).subscribe(this.resize.bind(this));
37
+ }
38
+ resize() {
39
+ const { maxHeight: computedMaxHeight, borderTopWidth, borderBottomWidth } = this.window.getComputedStyle(this.element);
40
+ this.elementStyles.height = 'auto';
41
+ this.elementStyles.height =
42
+ this.element.scrollHeight + parseFloat(borderTopWidth) + parseFloat(borderBottomWidth) + 'px';
43
+ if (parseFloat(this.element.style.height) < parseFloat(computedMaxHeight)) {
44
+ this.elementStyles.overflow = 'hidden';
45
+ return;
46
+ }
47
+ this.elementStyles.overflowY = 'scroll';
48
+ this.elementStyles.height = computedMaxHeight;
49
+ }
50
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CuiAutoResizingDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
51
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: CuiAutoResizingDirective, isStandalone: true, selector: "textarea[cuiAutoResizing]", host: { listeners: { "input": "onInput()" } }, providers: [CuiDestroyService], ngImport: i0 }); }
52
+ }
53
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CuiAutoResizingDirective, decorators: [{
54
+ type: Directive,
55
+ args: [{
56
+ standalone: true,
57
+ selector: 'textarea[cuiAutoResizing]',
58
+ providers: [CuiDestroyService]
59
+ }]
60
+ }], propDecorators: { onInput: [{
61
+ type: HostListener,
62
+ args: ['input']
63
+ }] } });
64
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0by1yZXNpemluZy5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jZGsvZGlyZWN0aXZlcy9hdXRvLXJlc2l6aW5nLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVFLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVqQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGFBQWEsQ0FBQzs7QUFPaEQsTUFBTSxPQUFPLHdCQUF3QjtJQUxyQztRQU1xQixXQUFNLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzVCLFlBQU8sR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsYUFBNEIsQ0FBQztRQUMxRCxjQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDOUQsWUFBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzFELGFBQVEsR0FBRyxNQUFNLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUVyRCxrQkFBYSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO0tBb0R2RDtJQWxEVSxRQUFRO1FBQ1gsSUFBSSxDQUFDLG9DQUFvQyxFQUFFLENBQUM7UUFDNUMsSUFBSSxDQUFDLGtDQUFrQyxFQUFFLENBQUM7SUFDOUMsQ0FBQztJQUVNLGtCQUFrQjtRQUNyQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUdTLE9BQU87UUFDYixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUVPLG9DQUFvQztRQUN4QyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2xCLE9BQU87UUFDWCxDQUFDO1FBRUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFhLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNsRyxDQUFDO0lBRU8sa0NBQWtDO1FBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDaEIsT0FBTztRQUNYLENBQUM7UUFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQWEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2hHLENBQUM7SUFFTyxNQUFNO1FBQ1YsTUFBTSxFQUNGLFNBQVMsRUFBRSxpQkFBaUIsRUFDNUIsY0FBYyxFQUNkLGlCQUFpQixFQUNwQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRS9DLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNuQyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU07WUFDckIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEdBQUcsVUFBVSxDQUFDLGNBQWMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLElBQUksQ0FBQztRQUVsRyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxVQUFVLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDO1lBQ3hFLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztZQUV2QyxPQUFPO1FBQ1gsQ0FBQztRQUVELElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztRQUN4QyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxpQkFBaUIsQ0FBQztJQUNsRCxDQUFDOytHQTFEUSx3QkFBd0I7bUdBQXhCLHdCQUF3Qix1SEFGdEIsQ0FBQyxpQkFBaUIsQ0FBQzs7NEZBRXJCLHdCQUF3QjtrQkFMcEMsU0FBUzttQkFBQztvQkFDUCxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFLDJCQUEyQjtvQkFDckMsU0FBUyxFQUFFLENBQUMsaUJBQWlCLENBQUM7aUJBQ2pDOzhCQW9CYSxPQUFPO3NCQURoQixZQUFZO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFmdGVyVmlld0NoZWNrZWQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmdDb250cm9sLCBOZ01vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IENVSV9XSU5ET1cgfSBmcm9tICcuLi90b2tlbnMnO1xuaW1wb3J0IHsgQ3VpRGVzdHJveVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcyc7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6ICd0ZXh0YXJlYVtjdWlBdXRvUmVzaXppbmddJyxcbiAgICBwcm92aWRlcnM6IFtDdWlEZXN0cm95U2VydmljZV1cbn0pXG5leHBvcnQgY2xhc3MgQ3VpQXV0b1Jlc2l6aW5nRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdDaGVja2VkIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHdpbmRvdyA9IGluamVjdChDVUlfV0lORE9XKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnQgPSBpbmplY3QoRWxlbWVudFJlZikubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IG5nQ29udHJvbCA9IGluamVjdChOZ0NvbnRyb2wsIHsgc2VsZjogdHJ1ZSwgb3B0aW9uYWw6IHRydWUgfSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBuZ01vZGVsID0gaW5qZWN0KE5nTW9kZWwsIHsgc2VsZjogdHJ1ZSwgb3B0aW9uYWw6IHRydWUgfSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95JCA9IGluamVjdChDdWlEZXN0cm95U2VydmljZSwgeyBzZWxmOiB0cnVlIH0pO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBlbGVtZW50U3R5bGVzID0gdGhpcy5lbGVtZW50LnN0eWxlO1xuXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmluaXROZ0NvbnRyb2xWYWx1ZUNoYW5nZVN1YnNjcmlwdGlvbigpO1xuICAgICAgICB0aGlzLmluaXROZ01vZGVsVmFsdWVDaGFuZ2VTdWJzY3JpcHRpb24oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdBZnRlclZpZXdDaGVja2VkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlc2l6ZSgpO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2lucHV0JylcbiAgICBwcm90ZWN0ZWQgb25JbnB1dCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZXNpemUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXROZ0NvbnRyb2xWYWx1ZUNoYW5nZVN1YnNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLm5nQ29udHJvbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5uZ0NvbnRyb2wudmFsdWVDaGFuZ2VzIS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHRoaXMucmVzaXplLmJpbmQodGhpcykpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdE5nTW9kZWxWYWx1ZUNoYW5nZVN1YnNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLm5nTW9kZWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubmdNb2RlbC52YWx1ZUNoYW5nZXMhLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUodGhpcy5yZXNpemUuYmluZCh0aGlzKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXNpemUoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIG1heEhlaWdodDogY29tcHV0ZWRNYXhIZWlnaHQsXG4gICAgICAgICAgICBib3JkZXJUb3BXaWR0aCxcbiAgICAgICAgICAgIGJvcmRlckJvdHRvbVdpZHRoXG4gICAgICAgIH0gPSB0aGlzLndpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuZWxlbWVudCk7XG5cbiAgICAgICAgdGhpcy5lbGVtZW50U3R5bGVzLmhlaWdodCA9ICdhdXRvJztcbiAgICAgICAgdGhpcy5lbGVtZW50U3R5bGVzLmhlaWdodCA9XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuc2Nyb2xsSGVpZ2h0ICsgcGFyc2VGbG9hdChib3JkZXJUb3BXaWR0aCkgKyBwYXJzZUZsb2F0KGJvcmRlckJvdHRvbVdpZHRoKSArICdweCc7XG5cbiAgICAgICAgaWYgKHBhcnNlRmxvYXQodGhpcy5lbGVtZW50LnN0eWxlLmhlaWdodCkgPCBwYXJzZUZsb2F0KGNvbXB1dGVkTWF4SGVpZ2h0KSkge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50U3R5bGVzLm92ZXJmbG93ID0gJ2hpZGRlbic7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZWxlbWVudFN0eWxlcy5vdmVyZmxvd1kgPSAnc2Nyb2xsJztcbiAgICAgICAgdGhpcy5lbGVtZW50U3R5bGVzLmhlaWdodCA9IGNvbXB1dGVkTWF4SGVpZ2h0O1xuICAgIH1cbn1cbiJdfQ==
@@ -0,0 +1,29 @@
1
+ import { Directive, ElementRef, EventEmitter, HostListener, inject, Output } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class CuiClickOutsideDirective {
4
+ constructor() {
5
+ this.element = inject(ElementRef).nativeElement;
6
+ this.cuiClickOutside = new EventEmitter();
7
+ }
8
+ onClickOutside(target) {
9
+ if (this.element.contains(target)) {
10
+ return;
11
+ }
12
+ this.cuiClickOutside.emit(target);
13
+ }
14
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CuiClickOutsideDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
15
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: CuiClickOutsideDirective, isStandalone: true, selector: "(cuiClickOutside)", outputs: { cuiClickOutside: "cuiClickOutside" }, host: { listeners: { "document:click": "onClickOutside($event.target)" } }, ngImport: i0 }); }
16
+ }
17
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CuiClickOutsideDirective, decorators: [{
18
+ type: Directive,
19
+ args: [{
20
+ standalone: true,
21
+ selector: '(cuiClickOutside)'
22
+ }]
23
+ }], propDecorators: { cuiClickOutside: [{
24
+ type: Output
25
+ }], onClickOutside: [{
26
+ type: HostListener,
27
+ args: ['document:click', ['$event.target']]
28
+ }] } });
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpY2stb3V0c2lkZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jZGsvZGlyZWN0aXZlcy9jbGljay1vdXRzaWRlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBTWxHLE1BQU0sT0FBTyx3QkFBd0I7SUFKckM7UUFLcUIsWUFBTyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxhQUFhLENBQUM7UUFHckQsb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBZSxDQUFDO0tBVTVEO0lBUGEsY0FBYyxDQUFDLE1BQW1CO1FBQ3hDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNoQyxPQUFPO1FBQ1gsQ0FBQztRQUVELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3RDLENBQUM7K0dBYlEsd0JBQXdCO21HQUF4Qix3QkFBd0I7OzRGQUF4Qix3QkFBd0I7a0JBSnBDLFNBQVM7bUJBQUM7b0JBQ1AsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRSxtQkFBbUI7aUJBQ2hDOzhCQUtVLGVBQWU7c0JBRHJCLE1BQU07Z0JBSUcsY0FBYztzQkFEdkIsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLGVBQWUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIGluamVjdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6ICcoY3VpQ2xpY2tPdXRzaWRlKSdcbn0pXG5leHBvcnQgY2xhc3MgQ3VpQ2xpY2tPdXRzaWRlRGlyZWN0aXZlIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnQgPSBpbmplY3QoRWxlbWVudFJlZikubmF0aXZlRWxlbWVudDtcblxuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBjdWlDbGlja091dHNpZGUgPSBuZXcgRXZlbnRFbWl0dGVyPEhUTUxFbGVtZW50PigpO1xuXG4gICAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudC50YXJnZXQnXSlcbiAgICBwcm90ZWN0ZWQgb25DbGlja091dHNpZGUodGFyZ2V0OiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5lbGVtZW50LmNvbnRhaW5zKHRhcmdldCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY3VpQ2xpY2tPdXRzaWRlLmVtaXQodGFyZ2V0KTtcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,44 @@
1
+ import { Directive, ElementRef, HostListener, inject } from '@angular/core';
2
+ import { NG_VALUE_ACCESSOR } from '@angular/forms';
3
+ import { cuiProvide } from '../utils/token';
4
+ import * as i0 from "@angular/core";
5
+ export class CuiContentEditableValueAccessorDirective {
6
+ constructor() {
7
+ this.element = inject(ElementRef).nativeElement;
8
+ }
9
+ writeValue(value) {
10
+ this.element.innerText = value ?? '';
11
+ }
12
+ registerOnChange(fn) {
13
+ this.onChange = fn;
14
+ }
15
+ registerOnTouched(fn) {
16
+ this.onTouched = fn;
17
+ }
18
+ setDisabledState(isDisabled) {
19
+ this.element.contentEditable = String(!isDisabled);
20
+ }
21
+ onInput() {
22
+ this.onChange(this.element.innerHTML === '<br>' ? '' : this.element.innerText);
23
+ }
24
+ onBlur() {
25
+ this.onTouched();
26
+ }
27
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CuiContentEditableValueAccessorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
28
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: CuiContentEditableValueAccessorDirective, isStandalone: true, selector: "[contenteditable][formControlName], [contenteditable][formControl], [contenteditable][ngModel]", host: { listeners: { "input": "onInput()", "blur": "onBlur()" } }, providers: [cuiProvide(NG_VALUE_ACCESSOR, CuiContentEditableValueAccessorDirective, true)], ngImport: i0 }); }
29
+ }
30
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CuiContentEditableValueAccessorDirective, decorators: [{
31
+ type: Directive,
32
+ args: [{
33
+ standalone: true,
34
+ selector: '[contenteditable][formControlName], [contenteditable][formControl], [contenteditable][ngModel]',
35
+ providers: [cuiProvide(NG_VALUE_ACCESSOR, CuiContentEditableValueAccessorDirective, true)]
36
+ }]
37
+ }], propDecorators: { onInput: [{
38
+ type: HostListener,
39
+ args: ['input']
40
+ }], onBlur: [{
41
+ type: HostListener,
42
+ args: ['blur']
43
+ }] } });
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC1lZGl0YWJsZS12YWx1ZS1hY2Nlc3Nvci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jZGsvZGlyZWN0aXZlcy9jb250ZW50LWVkaXRhYmxlLXZhbHVlLWFjY2Vzc29yLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTVFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSW5ELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFPNUMsTUFBTSxPQUFPLHdDQUF3QztJQUxyRDtRQU1xQixZQUFPLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLGFBQTRCLENBQUM7S0E4QjlFO0lBekJVLFVBQVUsQ0FBQyxLQUEwQjtRQUN4QyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDO0lBQ3pDLENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxFQUF1QjtRQUMzQyxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRU0saUJBQWlCLENBQUMsRUFBZ0I7UUFDckMsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVNLGdCQUFnQixDQUFDLFVBQW1CO1FBQ3ZDLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxHQUFHLE1BQU0sQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFHUyxPQUFPO1FBQ2IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNuRixDQUFDO0lBR1MsTUFBTTtRQUNaLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNyQixDQUFDOytHQTlCUSx3Q0FBd0M7bUdBQXhDLHdDQUF3QyxnTkFGdEMsQ0FBQyxVQUFVLENBQUMsaUJBQWlCLEVBQUUsd0NBQXdDLEVBQUUsSUFBSSxDQUFDLENBQUM7OzRGQUVqRix3Q0FBd0M7a0JBTHBELFNBQVM7bUJBQUM7b0JBQ1AsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRSxnR0FBZ0c7b0JBQzFHLFNBQVMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsNENBQTRDLElBQUksQ0FBQyxDQUFDO2lCQUM3Rjs4QkF3QmEsT0FBTztzQkFEaEIsWUFBWTt1QkFBQyxPQUFPO2dCQU1YLE1BQU07c0JBRGYsWUFBWTt1QkFBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHR5cGUgeyBDb250cm9sVmFsdWVBY2Nlc3NvciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgdHlwZSB7IEN1aU51bGxhYmxlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBDdWlPbkNoYW5nZSwgQ3VpT25Ub3VjaGVkIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBjdWlQcm92aWRlIH0gZnJvbSAnLi4vdXRpbHMvdG9rZW4nO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAnW2NvbnRlbnRlZGl0YWJsZV1bZm9ybUNvbnRyb2xOYW1lXSwgW2NvbnRlbnRlZGl0YWJsZV1bZm9ybUNvbnRyb2xdLCBbY29udGVudGVkaXRhYmxlXVtuZ01vZGVsXScsXG4gICAgcHJvdmlkZXJzOiBbY3VpUHJvdmlkZShOR19WQUxVRV9BQ0NFU1NPUiwgQ3VpQ29udGVudEVkaXRhYmxlVmFsdWVBY2Nlc3NvckRpcmVjdGl2ZSwgdHJ1ZSldXG59KVxuZXhwb3J0IGNsYXNzIEN1aUNvbnRlbnRFZGl0YWJsZVZhbHVlQWNjZXNzb3JEaXJlY3RpdmUgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBlbGVtZW50ID0gaW5qZWN0KEVsZW1lbnRSZWYpLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICBwcm90ZWN0ZWQgb25DaGFuZ2UhOiBDdWlPbkNoYW5nZTxzdHJpbmc+O1xuICAgIHByb3RlY3RlZCBvblRvdWNoZWQhOiBDdWlPblRvdWNoZWQ7XG5cbiAgICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogQ3VpTnVsbGFibGU8c3RyaW5nPik6IHZvaWQge1xuICAgICAgICB0aGlzLmVsZW1lbnQuaW5uZXJUZXh0ID0gdmFsdWUgPz8gJyc7XG4gICAgfVxuXG4gICAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46IEN1aU9uQ2hhbmdlPHN0cmluZz4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogQ3VpT25Ub3VjaGVkKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gICAgfVxuXG4gICAgcHVibGljIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmVsZW1lbnQuY29udGVudEVkaXRhYmxlID0gU3RyaW5nKCFpc0Rpc2FibGVkKTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdpbnB1dCcpXG4gICAgcHJvdGVjdGVkIG9uSW5wdXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5lbGVtZW50LmlubmVySFRNTCA9PT0gJzxicj4nID8gJycgOiB0aGlzLmVsZW1lbnQuaW5uZXJUZXh0KTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdibHVyJylcbiAgICBwcm90ZWN0ZWQgb25CbHVyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgIH1cbn1cbiJdfQ==
@@ -0,0 +1,32 @@
1
+ import { Directive, ElementRef, EventEmitter, inject, Output } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class CuiDimensionsObserverDirective {
4
+ constructor() {
5
+ this.element = inject(ElementRef).nativeElement;
6
+ this.observer = new ResizeObserver((entries) => {
7
+ entries.forEach(() => this.cuiResizeObserver.emit({
8
+ width: this.element.offsetWidth,
9
+ height: this.element.offsetHeight
10
+ }));
11
+ });
12
+ this.cuiResizeObserver = new EventEmitter();
13
+ }
14
+ ngOnInit() {
15
+ this.observer.observe(this.element);
16
+ }
17
+ ngOnDestroy() {
18
+ this.observer.disconnect();
19
+ }
20
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CuiDimensionsObserverDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
21
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: CuiDimensionsObserverDirective, isStandalone: true, selector: "[cuiResizeObserver]", outputs: { cuiResizeObserver: "cuiResizeObserver" }, ngImport: i0 }); }
22
+ }
23
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CuiDimensionsObserverDirective, decorators: [{
24
+ type: Directive,
25
+ args: [{
26
+ standalone: true,
27
+ selector: '[cuiResizeObserver]'
28
+ }]
29
+ }], propDecorators: { cuiResizeObserver: [{
30
+ type: Output
31
+ }] } });
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGltZW5zaW9ucy1vYnNlcnZlci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jZGsvZGlyZWN0aXZlcy9kaW1lbnNpb25zLW9ic2VydmVyLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFRcEYsTUFBTSxPQUFPLDhCQUE4QjtJQUozQztRQUtxQixZQUFPLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLGFBQTRCLENBQUM7UUFFMUQsYUFBUSxHQUFHLElBQUksY0FBYyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDdkQsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FDakIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQztnQkFDeEIsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVztnQkFDL0IsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWTthQUNwQyxDQUFDLENBQ0wsQ0FBQztRQUNOLENBQUMsQ0FBQyxDQUFDO1FBR0ksc0JBQWlCLEdBQUcsSUFBSSxZQUFZLEVBQWlCLENBQUM7S0FTaEU7SUFQVSxRQUFRO1FBQ1gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUMvQixDQUFDOytHQXJCUSw4QkFBOEI7bUdBQTlCLDhCQUE4Qjs7NEZBQTlCLDhCQUE4QjtrQkFKMUMsU0FBUzttQkFBQztvQkFDUCxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFLHFCQUFxQjtpQkFDbEM7OEJBY1UsaUJBQWlCO3NCQUR2QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBPbkluaXQsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIGluamVjdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB0eXBlIHsgQ3VpRGltZW5zaW9ucyB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAnW2N1aVJlc2l6ZU9ic2VydmVyXSdcbn0pXG5leHBvcnQgY2xhc3MgQ3VpRGltZW5zaW9uc09ic2VydmVyRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZWxlbWVudCA9IGluamVjdChFbGVtZW50UmVmKS5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBvYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoZW50cmllcykgPT4ge1xuICAgICAgICBlbnRyaWVzLmZvckVhY2goKCkgPT5cbiAgICAgICAgICAgIHRoaXMuY3VpUmVzaXplT2JzZXJ2ZXIuZW1pdCh7XG4gICAgICAgICAgICAgICAgd2lkdGg6IHRoaXMuZWxlbWVudC5vZmZzZXRXaWR0aCxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IHRoaXMuZWxlbWVudC5vZmZzZXRIZWlnaHRcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfSk7XG5cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgY3VpUmVzaXplT2JzZXJ2ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPEN1aURpbWVuc2lvbnM+KCk7XG5cbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMub2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmVsZW1lbnQpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLm9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,184 @@
1
+ import { DOCUMENT } from '@angular/common';
2
+ import { Directive, ElementRef, inject, input, NgZone, output, Renderer2, signal } from '@angular/core';
3
+ import { CuiDragListDirective } from './drag-list.directive';
4
+ import * as i0 from "@angular/core";
5
+ export class CuiDragDropDirective {
6
+ constructor() {
7
+ this.zone = inject(NgZone);
8
+ this.document = inject(DOCUMENT);
9
+ this.renderer = inject(Renderer2);
10
+ this.element = inject(ElementRef).nativeElement;
11
+ this.dragListDirective = inject(CuiDragListDirective);
12
+ this.PLACEHOLDER_CLASS = 'cui-drag-drop-placeholder';
13
+ this.listId = this.dragListDirective.listId;
14
+ this.itemAttribute = `${this.listId}-drag-item`;
15
+ this.abortController = new AbortController();
16
+ this.hostAbortController = new AbortController();
17
+ this.draggingElement = signal(null);
18
+ this.placeholderElement = signal(null);
19
+ this.dragData = signal({});
20
+ this.disabled = input(false);
21
+ this.elementDragged = output();
22
+ this.initDragItem();
23
+ this.initPointerEvents(this.element);
24
+ }
25
+ ngOnDestroy() {
26
+ this.destroyEvents();
27
+ }
28
+ changePointerEvents(element) {
29
+ this.hostAbortController.abort();
30
+ this.hostAbortController = new AbortController();
31
+ this.initPointerEvents(element);
32
+ }
33
+ onDrag(clientX, clientY) {
34
+ if (!this.draggingElement()) {
35
+ return;
36
+ }
37
+ const elementsFromPoint = this.document.elementsFromPoint(clientX, clientY);
38
+ const elementFromPoint = elementsFromPoint.find((element) => element.closest(`#${this.listId}`));
39
+ if (!elementFromPoint) {
40
+ return;
41
+ }
42
+ const targetElement = elementFromPoint.closest(`[${this.itemAttribute}]`);
43
+ if (!targetElement || targetElement === this.draggingElement()) {
44
+ return;
45
+ }
46
+ this.configurateDragData(targetElement, clientY);
47
+ }
48
+ onDragStart(event) {
49
+ if (this.disabled()) {
50
+ return;
51
+ }
52
+ let isClicked = true;
53
+ const elementClientRect = this.element.getBoundingClientRect();
54
+ const shiftX = event.clientX - elementClientRect.left;
55
+ const shiftY = event.clientY - elementClientRect.top;
56
+ this.prevIndex = this.calculatePreviousIndex();
57
+ this.document.addEventListener('pointermove', ({ clientX, clientY }) => {
58
+ if (isClicked) {
59
+ this.prepareMoving();
60
+ isClicked = false;
61
+ }
62
+ const draggingElement = this.draggingElement();
63
+ this.renderer.setStyle(draggingElement, 'left', clientX - shiftX + 'px');
64
+ this.renderer.setStyle(draggingElement, 'top', clientY - shiftY + 'px');
65
+ this.onDrag(clientX, clientY);
66
+ }, { signal: this.abortController.signal });
67
+ }
68
+ onDragEnd() {
69
+ const { targetElement, pointer } = this.dragData();
70
+ if (targetElement && pointer) {
71
+ this.elementDragged.emit({
72
+ index: this.index,
73
+ prevIndex: this.prevIndex,
74
+ targetElement,
75
+ pointer
76
+ });
77
+ }
78
+ // remove document events
79
+ this.abortController.abort();
80
+ this.abortController = new AbortController();
81
+ this.removeDragElement();
82
+ this.removePlaceholder();
83
+ this.dragData.set({});
84
+ }
85
+ initDragItem() {
86
+ this.renderer.setAttribute(this.element, this.itemAttribute, 'true');
87
+ }
88
+ initPointerEvents(element) {
89
+ const signal = this.hostAbortController.signal;
90
+ this.zone.runOutsideAngular(() => {
91
+ element.addEventListener('pointerup', this.onDragEnd.bind(this), { signal });
92
+ element.addEventListener('pointerdown', this.onDragStart.bind(this), { signal });
93
+ });
94
+ }
95
+ destroyEvents() {
96
+ this.hostAbortController.abort();
97
+ this.abortController.abort();
98
+ }
99
+ prepareMoving() {
100
+ const placeholderElement = this.createPlaceholderElement();
101
+ const draggingElement = this.createDragElement();
102
+ this.document.addEventListener('pointerup', this.onDragEnd.bind(this), {
103
+ signal: this.abortController.signal
104
+ });
105
+ this.element.after(placeholderElement);
106
+ this.draggingElement.set(draggingElement);
107
+ this.element.remove();
108
+ this.document.body.append(draggingElement);
109
+ }
110
+ configurateDragData(targetElement, clientY) {
111
+ const placeholderElement = this.placeholderElement();
112
+ const boundingRect = targetElement.getBoundingClientRect();
113
+ const middleY = boundingRect.top + boundingRect.height / 2;
114
+ if (clientY < middleY) {
115
+ targetElement.before(placeholderElement);
116
+ this.dragData.set({ targetElement, pointer: 'BEFORE' });
117
+ }
118
+ else {
119
+ targetElement.after(placeholderElement);
120
+ this.dragData.set({ targetElement, pointer: 'AFTER' });
121
+ }
122
+ this.index = this.calculateIndex(placeholderElement);
123
+ }
124
+ createDragElement() {
125
+ const width = this.element.clientWidth;
126
+ const draggingElement = this.element.cloneNode(true);
127
+ this.renderer.setStyle(draggingElement, 'position', 'fixed');
128
+ this.renderer.setStyle(draggingElement, 'display', 'block');
129
+ this.renderer.setStyle(draggingElement, 'margin', '0');
130
+ this.renderer.setStyle(draggingElement, 'width', `${width}px`);
131
+ return draggingElement;
132
+ }
133
+ createPlaceholderElement() {
134
+ const element = this.placeholderElement();
135
+ if (element) {
136
+ return element;
137
+ }
138
+ const placeholderElement = this.renderer.createElement('div');
139
+ this.renderer.addClass(placeholderElement, this.PLACEHOLDER_CLASS);
140
+ this.placeholderElement.set(placeholderElement);
141
+ return placeholderElement;
142
+ }
143
+ removeDragElement() {
144
+ const draggingElement = this.draggingElement();
145
+ if (!draggingElement) {
146
+ return;
147
+ }
148
+ draggingElement.remove();
149
+ this.draggingElement.set(null);
150
+ }
151
+ removePlaceholder() {
152
+ const placeholderElement = this.placeholderElement();
153
+ if (!placeholderElement) {
154
+ return;
155
+ }
156
+ placeholderElement.after(this.element);
157
+ placeholderElement.remove();
158
+ this.placeholderElement.set(null);
159
+ }
160
+ calculateIndex(placeholderElement) {
161
+ const childNodes = placeholderElement.parentElement.childNodes;
162
+ const elements = Array.from(childNodes).filter((node) => node instanceof HTMLElement);
163
+ return elements.indexOf(placeholderElement);
164
+ }
165
+ calculatePreviousIndex() {
166
+ let index = 0;
167
+ let currentElement = this.element;
168
+ while (currentElement && currentElement.previousElementSibling) {
169
+ index++;
170
+ currentElement = currentElement.previousElementSibling;
171
+ }
172
+ return index;
173
+ }
174
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CuiDragDropDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
175
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.14", type: CuiDragDropDirective, isStandalone: true, selector: "[cuiDragDrop]", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { elementDragged: "elementDragged" }, ngImport: i0 }); }
176
+ }
177
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CuiDragDropDirective, decorators: [{
178
+ type: Directive,
179
+ args: [{
180
+ selector: '[cuiDragDrop]',
181
+ standalone: true
182
+ }]
183
+ }], ctorParameters: () => [] });
184
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZy1kcm9wLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nkay9kaXJlY3RpdmVzL2RyYWctZHJvcC9kcmFnLWRyb3AuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUl4RyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7QUFNN0QsTUFBTSxPQUFPLG9CQUFvQjtJQXlCN0I7UUF4QmlCLFNBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEIsYUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM1QixhQUFRLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzdCLFlBQU8sR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsYUFBYSxDQUFDO1FBQzNDLHNCQUFpQixHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBRWpELHNCQUFpQixHQUFHLDJCQUEyQixDQUFDO1FBRWhELFdBQU0sR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDO1FBQ3ZDLGtCQUFhLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxZQUFZLENBQUM7UUFJcEQsb0JBQWUsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO1FBQ3hDLHdCQUFtQixHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7UUFFakMsb0JBQWUsR0FBRyxNQUFNLENBQTJCLElBQUksQ0FBQyxDQUFDO1FBQ3pELHVCQUFrQixHQUFHLE1BQU0sQ0FBMkIsSUFBSSxDQUFD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QztRQUNoRSxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxZQUFZLFdBQVcsQ0FBQyxDQUFDO1FBRXRGLE9BQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQyxrQkFBbUIsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFTyxzQkFBc0I7UUFDMUIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsSUFBSSxjQUFjLEdBQVksSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUUzQyxPQUFPLGNBQWMsSUFBSSxjQUFjLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztZQUM3RCxLQUFLLEVBQUUsQ0FBQztZQUNSLGNBQWMsR0FBRyxjQUFjLENBQUMsc0JBQXNCLENBQUM7UUFDM0QsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7K0dBdk9RLG9CQUFvQjttR0FBcEIsb0JBQW9COzs0RkFBcEIsb0JBQW9CO2tCQUpoQyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxlQUFlO29CQUN6QixVQUFVLEVBQUUsSUFBSTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB0eXBlIHsgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgaW5qZWN0LCBpbnB1dCwgTmdab25lLCBvdXRwdXQsIFJlbmRlcmVyMiwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB0eXBlIHsgQ3VpTnVsbGFibGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XHJcblxyXG5pbXBvcnQgdHlwZSB7IEN1aURyYWdEYXRhLCBDdWlEcmFnRHJvcERhdGEgfSBmcm9tICcuL2RyYWctZHJvcC5vcHRpb25zJztcclxuaW1wb3J0IHsgQ3VpRHJhZ0xpc3REaXJlY3RpdmUgfSBmcm9tICcuL2RyYWctbGlzdC5kaXJlY3RpdmUnO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgICBzZWxlY3RvcjogJ1tjdWlEcmFnRHJvcF0nLFxyXG4gICAgc3RhbmRhbG9uZTogdHJ1ZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ3VpRHJhZ0Ryb3BEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSB6b25lID0gaW5qZWN0KE5nWm9uZSk7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50ID0gaW5qZWN0KERPQ1VNRU5UKTtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVuZGVyZXIgPSBpbmplY3QoUmVuZGVyZXIyKTtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZWxlbWVudCA9IGluamVjdChFbGVtZW50UmVmKS5uYXRpdmVFbGVtZW50O1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBkcmFnTGlzdERpcmVjdGl2ZSA9IGluamVjdChDdWlEcmFnTGlzdERpcmVjdGl2ZSk7XHJcblxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBQTEFDRUhPTERFUl9DTEFTUyA9ICdjdWktZHJhZy1kcm9wLXBsYWNlaG9sZGVyJztcclxuXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxpc3RJZCA9IHRoaXMuZHJhZ0xpc3REaXJlY3RpdmUubGlzdElkO1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBpdGVtQXR0cmlidXRlID0gYCR7dGhpcy5saXN0SWR9LWRyYWctaXRlbWA7XHJcblxyXG4gICAgcHJpdmF0ZSBpbmRleCE6IG51bWJlcjtcclxuICAgIHByaXZhdGUgcHJldkluZGV4ITogbnVtYmVyO1xyXG4gICAgcHJpdmF0ZSBhYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XHJcbiAgICBwcml2YXRlIGhvc3RBYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XHJcblxyXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGRyYWdnaW5nRWxlbWVudCA9IHNpZ25hbDxDdWlOdWxsYWJsZTxIVE1MRWxlbWVudD4+KG51bGwpO1xyXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHBsYWNlaG9sZGVyRWxlbWVudCA9IHNpZ25hbDxDdWlOdWxsYWJsZTxIVE1MRWxlbWVudD4+KG51bGwpO1xyXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGRyYWdEYXRhID0gc2lnbmFsPEN1aURyYWdEYXRhPih7fSk7XHJcblxyXG4gICAgcHVibGljIHJlYWRvbmx5IGRpc2FibGVkID0gaW5wdXQoZmFsc2UpO1xyXG5cclxuICAgIHB1YmxpYyByZWFkb25seSBlbGVtZW50RHJhZ2dlZCA9IG91dHB1dDxDdWlEcmFnRHJvcERhdGE+KCk7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5pbml0RHJhZ0l0ZW0oKTtcclxuICAgICAgICB0aGlzLmluaXRQb2ludGVyRXZlbnRzKHRoaXMuZWxlbWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZGVzdHJveUV2ZW50cygpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjaGFuZ2VQb2ludGVyRXZlbnRzKGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5ob3N0QWJvcnRDb250cm9sbGVyLmFib3J0KCk7XHJcbiAgICAgICAgdGhpcy5ob3N0QWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xyXG5cclxuICAgICAgICB0aGlzLmluaXRQb2ludGVyRXZlbnRzKGVsZW1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb25EcmFnKGNsaWVudFg6IG51bWJlciwgY2xpZW50WTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmRyYWdnaW5nRWxlbWVudCgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGVsZW1lbnRzRnJvbVBvaW50ID0gdGhpcy5kb2N1bWVudC5lbGVtZW50c0Zyb21Qb2ludChjbGllbnRYLCBjbGllbnRZKTtcclxuICAgICAgICBjb25zdCBlbGVtZW50RnJvbVBvaW50ID0gZWxlbWVudHNGcm9tUG9pbnQuZmluZCgoZWxlbWVudCkgPT4gZWxlbWVudC5jbG9zZXN0KGAjJHt0aGlzLmxpc3RJZH1gKSk7XHJcblxyXG4gICAgICAgIGlmICghZWxlbWVudEZyb21Qb2ludCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB0YXJnZXRFbGVtZW50ID0gZWxlbWVudEZyb21Qb2ludC5jbG9zZXN0PEhUTUxFbGVtZW50PihgWyR7dGhpcy5pdGVtQXR0cmlidXRlfV1gKTtcclxuXHJcbiAgICAgICAgaWYgKCF0YXJnZXRFbGVtZW50IHx8IHRhcmdldEVsZW1lbnQgPT09IHRoaXMuZHJhZ2dpbmdFbGVtZW50KCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jb25maWd1cmF0ZURyYWdEYXRhKHRhcmdldEVsZW1lbnQsIGNsaWVudFkpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb25EcmFnU3RhcnQoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBpc0NsaWNrZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICBjb25zdCBlbGVtZW50Q2xpZW50UmVjdCA9IHRoaXMuZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICBjb25zdCBzaGlmdFggPSBldmVudC5jbGllbnRYIC0gZWxlbWVudENsaWVudFJlY3QubGVmdDtcclxuICAgICAgICBjb25zdCBzaGlmdFkgPSBldmVudC5jbGllbnRZIC0gZWxlbWVudENsaWVudFJlY3QudG9wO1xyXG5cclxuICAgICAgICB0aGlzLnByZXZJbmRleCA9IHRoaXMuY2FsY3VsYXRlUHJldmlvdXNJbmRleCgpO1xyXG5cclxuICAgICAgICB0aGlzLmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXHJcbiAgICAgICAgICAgICdwb2ludGVybW92ZScsXHJcbiAgICAgICAgICAgICh7IGNsaWVudFgsIGNsaWVudFkgfSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzQ2xpY2tlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJlcGFyZU1vdmluZygpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpc0NsaWNrZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBkcmFnZ2luZ0VsZW1lbnQgPSB0aGlzLmRyYWdnaW5nRWxlbWVudCgpO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoZHJhZ2dpbmdFbGVtZW50LCAnbGVmdCcsIGNsaWVudFggLSBzaGlmdFggKyAncHgnKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoZHJhZ2dpbmdFbGVtZW50LCAndG9wJywgY2xpZW50WSAtIHNoaWZ0WSArICdweCcpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vbkRyYWcoY2xpZW50WCwgY2xpZW50WSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHsgc2lnbmFsOiB0aGlzLmFib3J0Q29udHJvbGxlci5zaWduYWwgfVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvbkRyYWdFbmQoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgeyB0YXJnZXRFbGVtZW50LCBwb2ludGVyIH0gPSB0aGlzLmRyYWdEYXRhKCk7XHJcblxyXG4gICAgICAgIGlmICh0YXJnZXRFbGVtZW50ICYmIHBvaW50ZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5lbGVtZW50RHJhZ2dlZC5lbWl0KHtcclxuICAgICAgICAgICAgICAgIGluZGV4OiB0aGlzLmluZGV4LFxyXG4gICAgICAgICAgICAgICAgcHJldkluZGV4OiB0aGlzLnByZXZJbmRleCxcclxuICAgICAgICAgICAgICAgIHRhcmdldEVsZW1lbnQsXHJcbiAgICAgICAgICAgICAgICBwb2ludGVyXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gcmVtb3ZlIGRvY3VtZW50IGV2ZW50c1xyXG4gICAgICAgIHRoaXMuYWJvcnRDb250cm9sbGVyLmFib3J0KCk7XHJcbiAgICAgICAgdGhpcy5hYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XHJcblxyXG4gICAgICAgIHRoaXMucmVtb3ZlRHJhZ0VsZW1lbnQoKTtcclxuICAgICAgICB0aGlzLnJlbW92ZVBsYWNlaG9sZGVyKCk7XHJcbiAgICAgICAgdGhpcy5kcmFnRGF0YS5zZXQoe30pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaW5pdERyYWdJdGVtKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuZWxlbWVudCwgdGhpcy5pdGVtQXR0cmlidXRlLCAndHJ1ZScpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaW5pdFBvaW50ZXJFdmVudHMoZWxlbWVudDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBzaWduYWwgPSB0aGlzLmhvc3RBYm9ydENvbnRyb2xsZXIuc2lnbmFsO1xyXG5cclxuICAgICAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xyXG4gICAgICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJ1cCcsIHRoaXMub25EcmFnRW5kLmJpbmQodGhpcyksIHsgc2lnbmFsIH0pO1xyXG4gICAgICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgdGhpcy5vbkRyYWdTdGFydC5iaW5kKHRoaXMpLCB7IHNpZ25hbCB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGRlc3Ryb3lFdmVudHMoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5ob3N0QWJvcnRDb250cm9sbGVyLmFib3J0KCk7XHJcbiAgICAgICAgdGhpcy5hYm9ydENvbnRyb2xsZXIuYWJvcnQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHByZXBhcmVNb3ZpbmcoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgcGxhY2Vob2xkZXJFbGVtZW50ID0gdGhpcy5jcmVhdGVQbGFjZWhvbGRlckVsZW1lbnQoKTtcclxuICAgICAgICBjb25zdCBkcmFnZ2luZ0VsZW1lbnQgPSB0aGlzLmNyZWF0ZURyYWdFbGVtZW50KCk7XHJcblxyXG4gICAgICAgIHRoaXMuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcnVwJywgdGhpcy5vbkRyYWdFbmQuYmluZCh0aGlzKSwge1xyXG4gICAgICAgICAgICBzaWduYWw6IHRoaXMuYWJvcnRDb250cm9sbGVyLnNpZ25hbFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmVsZW1lbnQuYWZ0ZXIocGxhY2Vob2xkZXJFbGVtZW50KTtcclxuICAgICAgICB0aGlzLmRyYWdnaW5nRWxlbWVudC5zZXQoZHJhZ2dpbmdFbGVtZW50KTtcclxuXHJcbiAgICAgICAgdGhpcy5lbGVtZW50LnJlbW92ZSgpO1xyXG4gICAgICAgIHRoaXMuZG9jdW1lbnQuYm9keS5hcHBlbmQoZHJhZ2dpbmdFbGVtZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNvbmZpZ3VyYXRlRHJhZ0RhdGEodGFyZ2V0RWxlbWVudDogSFRNTEVsZW1lbnQsIGNsaWVudFk6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHBsYWNlaG9sZGVyRWxlbWVudCA9IHRoaXMucGxhY2Vob2xkZXJFbGVtZW50KCk7XHJcbiAgICAgICAgY29uc3QgYm91bmRpbmdSZWN0ID0gdGFyZ2V0RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICBjb25zdCBtaWRkbGVZID0gYm91bmRpbmdSZWN0LnRvcCArIGJvdW5kaW5nUmVjdC5oZWlnaHQgLyAyO1xyXG5cclxuICAgICAgICBpZiAoY2xpZW50WSA8IG1pZGRsZVkpIHtcclxuICAgICAgICAgICAgdGFyZ2V0RWxlbWVudC5iZWZvcmUocGxhY2Vob2xkZXJFbGVtZW50ISk7XHJcbiAgICAgICAgICAgIHRoaXMuZHJhZ0RhdGEuc2V0KHsgdGFyZ2V0RWxlbWVudCwgcG9pbnRlcjogJ0JFRk9SRScgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGFyZ2V0RWxlbWVudC5hZnRlcihwbGFjZWhvbGRlckVsZW1lbnQhKTtcclxuICAgICAgICAgICAgdGhpcy5kcmFnRGF0YS5zZXQoeyB0YXJnZXRFbGVtZW50LCBwb2ludGVyOiAnQUZURVInIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pbmRleCA9IHRoaXMuY2FsY3VsYXRlSW5kZXgocGxhY2Vob2xkZXJFbGVtZW50ISk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjcmVhdGVEcmFnRWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XHJcbiAgICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLmVsZW1lbnQuY2xpZW50V2lkdGg7XHJcbiAgICAgICAgY29uc3QgZHJhZ2dpbmdFbGVtZW50ID0gdGhpcy5lbGVtZW50LmNsb25lTm9kZSh0cnVlKSBhcyBIVE1MRWxlbWVudDtcclxuXHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShkcmFnZ2luZ0VsZW1lbnQsICdwb3NpdGlvbicsICdmaXhlZCcpO1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoZHJhZ2dpbmdFbGVtZW50LCAnZGlzcGxheScsICdibG9jaycpO1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoZHJhZ2dpbmdFbGVtZW50LCAnbWFyZ2luJywgJzAnKTtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGRyYWdnaW5nRWxlbWVudCwgJ3dpZHRoJywgYCR7d2lkdGh9cHhgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGRyYWdnaW5nRWxlbWVudDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNyZWF0ZVBsYWNlaG9sZGVyRWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XHJcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMucGxhY2Vob2xkZXJFbGVtZW50KCk7XHJcblxyXG4gICAgICAgIGlmIChlbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcGxhY2Vob2xkZXJFbGVtZW50ID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuXHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhwbGFjZWhvbGRlckVsZW1lbnQsIHRoaXMuUExBQ0VIT0xERVJfQ0xBU1MpO1xyXG4gICAgICAgIHRoaXMucGxhY2Vob2xkZXJFbGVtZW50LnNldChwbGFjZWhvbGRlckVsZW1lbnQpO1xyXG5cclxuICAgICAgICByZXR1cm4gcGxhY2Vob2xkZXJFbGVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVtb3ZlRHJhZ0VsZW1lbnQoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgZHJhZ2dpbmdFbGVtZW50ID0gdGhpcy5kcmFnZ2luZ0VsZW1lbnQoKTtcclxuXHJcbiAgICAgICAgaWYgKCFkcmFnZ2luZ0VsZW1lbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZHJhZ2dpbmdFbGVtZW50LnJlbW92ZSgpO1xyXG4gICAgICAgIHRoaXMuZHJhZ2dpbmdFbGVtZW50LnNldChudWxsKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlbW92ZVBsYWNlaG9sZGVyKCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHBsYWNlaG9sZGVyRWxlbWVudCA9IHRoaXMucGxhY2Vob2xkZXJFbGVtZW50KCk7XHJcblxyXG4gICAgICAgIGlmICghcGxhY2Vob2xkZXJFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHBsYWNlaG9sZGVyRWxlbWVudC5hZnRlcih0aGlzLmVsZW1lbnQpO1xyXG4gICAgICAgIHBsYWNlaG9sZGVyRWxlbWVudC5yZW1vdmUoKTtcclxuICAgICAgICB0aGlzLnBsYWNlaG9sZGVyRWxlbWVudC5zZXQobnVsbCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjYWxjdWxhdGVJbmRleChwbGFjZWhvbGRlckVsZW1lbnQ6IEhUTUxFbGVtZW50KTogbnVtYmVyIHtcclxuICAgICAgICBjb25zdCBjaGlsZE5vZGVzID0gcGxhY2Vob2xkZXJFbGVtZW50LnBhcmVudEVsZW1lbnQhLmNoaWxkTm9kZXM7XHJcbiAgICAgICAgY29uc3QgZWxlbWVudHMgPSBBcnJheS5mcm9tKGNoaWxkTm9kZXMpLmZpbHRlcigobm9kZSkgPT4gbm9kZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnRzLmluZGV4T2YocGxhY2Vob2xkZXJFbGVtZW50ISk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjYWxjdWxhdGVQcmV2aW91c0luZGV4KCk6IG51bWJlciB7XHJcbiAgICAgICAgbGV0IGluZGV4ID0gMDtcclxuICAgICAgICBsZXQgY3VycmVudEVsZW1lbnQ6IEVsZW1lbnQgPSB0aGlzLmVsZW1lbnQ7XHJcblxyXG4gICAgICAgIHdoaWxlIChjdXJyZW50RWxlbWVudCAmJiBjdXJyZW50RWxlbWVudC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKSB7XHJcbiAgICAgICAgICAgIGluZGV4Kys7XHJcbiAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50ID0gY3VycmVudEVsZW1lbnQucHJldmlvdXNFbGVtZW50U2libGluZztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBpbmRleDtcclxuICAgIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZy1kcm9wLm9wdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jZGsvZGlyZWN0aXZlcy9kcmFnLWRyb3AvZHJhZy1kcm9wLm9wdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgQ3VpRHJhZ0Ryb3BEYXRhIHtcclxuICAgIHJlYWRvbmx5IGluZGV4OiBudW1iZXI7XHJcbiAgICByZWFkb25seSBwcmV2SW5kZXg6IG51bWJlcjtcclxuICAgIHJlYWRvbmx5IHBvaW50ZXI6IEN1aURyb3BQb2ludGVyO1xyXG4gICAgcmVhZG9ubHkgdGFyZ2V0RWxlbWVudDogSFRNTEVsZW1lbnQ7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ3VpRHJhZ0RhdGEge1xyXG4gICAgcmVhZG9ubHkgcG9pbnRlcj86IEN1aURyb3BQb2ludGVyO1xyXG4gICAgcmVhZG9ubHkgdGFyZ2V0RWxlbWVudD86IEhUTUxFbGVtZW50O1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBDdWlEcm9wUG9pbnRlciA9ICdCRUZPUkUnIHwgJ0FGVEVSJztcclxuIl19