@ngxsmk/cdk 1.3.1 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (179) hide show
  1. package/README.md +1 -1
  2. package/cva-base/cva-base.d.ts +34 -0
  3. package/cva-base/cva-base.d.ts.map +1 -0
  4. package/cva-base/index.d.ts +2 -0
  5. package/cva-base/index.d.ts.map +1 -0
  6. package/cva-base/ngxsmk-cdk-cva-base.d.ts.map +1 -0
  7. package/esm2022/cva-base/cva-base.mjs +45 -0
  8. package/esm2022/cva-base/index.mjs +2 -0
  9. package/esm2022/cva-base/ngxsmk-cdk-cva-base.mjs +5 -0
  10. package/esm2022/input-group/index.mjs +3 -0
  11. package/esm2022/input-group/input-group-engine.mjs +219 -0
  12. package/esm2022/input-group/models/index.mjs +2 -0
  13. package/esm2022/input-group/models/input-group.model.mjs +2 -0
  14. package/esm2022/input-group/ngxsmk-cdk-input-group.mjs +5 -0
  15. package/esm2022/listbox-keyboard/index.mjs +2 -0
  16. package/esm2022/listbox-keyboard/listbox-keyboard.mjs +145 -0
  17. package/esm2022/listbox-keyboard/ngxsmk-cdk-listbox-keyboard.mjs +5 -0
  18. package/esm2022/public-api.mjs +10 -1
  19. package/esm2022/scheduler/index.mjs +5 -0
  20. package/esm2022/scheduler/models/date-range.mjs +2 -0
  21. package/esm2022/scheduler/models/event.model.mjs +2 -0
  22. package/esm2022/scheduler/models/index.mjs +6 -0
  23. package/esm2022/scheduler/models/resource.model.mjs +5 -0
  24. package/esm2022/scheduler/models/selection.model.mjs +7 -0
  25. package/esm2022/scheduler/models/view.model.mjs +7 -0
  26. package/esm2022/scheduler/ngxsmk-cdk-scheduler.mjs +5 -0
  27. package/esm2022/scheduler/plugin/drag-plugin.mjs +82 -0
  28. package/esm2022/scheduler/plugin/index.mjs +8 -0
  29. package/esm2022/scheduler/plugin/keyboard-plugin.mjs +150 -0
  30. package/esm2022/scheduler/plugin/plugin-host.mjs +48 -0
  31. package/esm2022/scheduler/plugin/plugin.types.mjs +2 -0
  32. package/esm2022/scheduler/plugin/resize-plugin.mjs +74 -0
  33. package/esm2022/scheduler/plugin/selection-plugin.mjs +84 -0
  34. package/esm2022/scheduler/plugin/tooltip-plugin.mjs +103 -0
  35. package/esm2022/scheduler/scheduler-engine.mjs +316 -0
  36. package/esm2022/scheduler/utils/date-utils.mjs +131 -0
  37. package/esm2022/scheduler/utils/index.mjs +3 -0
  38. package/esm2022/scheduler/utils/snap.mjs +24 -0
  39. package/esm2022/spreadsheet/index.mjs +5 -0
  40. package/esm2022/spreadsheet/models/cell.model.mjs +2 -0
  41. package/esm2022/spreadsheet/models/column.model.mjs +2 -0
  42. package/esm2022/spreadsheet/models/filter.model.mjs +2 -0
  43. package/esm2022/spreadsheet/models/formula.model.mjs +2 -0
  44. package/esm2022/spreadsheet/models/index.mjs +8 -0
  45. package/esm2022/spreadsheet/models/row.model.mjs +2 -0
  46. package/esm2022/spreadsheet/models/selection.model.mjs +2 -0
  47. package/esm2022/spreadsheet/models/sort.model.mjs +2 -0
  48. package/esm2022/spreadsheet/ngxsmk-cdk-spreadsheet.mjs +5 -0
  49. package/esm2022/spreadsheet/plugin/clipboard-plugin.mjs +171 -0
  50. package/esm2022/spreadsheet/plugin/filter-plugin.mjs +87 -0
  51. package/esm2022/spreadsheet/plugin/formula-plugin.mjs +456 -0
  52. package/esm2022/spreadsheet/plugin/index.mjs +10 -0
  53. package/esm2022/spreadsheet/plugin/plugin-host.mjs +188 -0
  54. package/esm2022/spreadsheet/plugin/plugin.types.mjs +2 -0
  55. package/esm2022/spreadsheet/plugin/selection-plugin.mjs +114 -0
  56. package/esm2022/spreadsheet/plugin/sort-plugin.mjs +63 -0
  57. package/esm2022/spreadsheet/plugin/undo-plugin.mjs +138 -0
  58. package/esm2022/spreadsheet/plugin/validation-plugin.mjs +71 -0
  59. package/esm2022/spreadsheet/spreadsheet-engine.mjs +547 -0
  60. package/esm2022/spreadsheet/utils/cell-utils.mjs +129 -0
  61. package/esm2022/spreadsheet/utils/index.mjs +2 -0
  62. package/esm2022/testing/a11y.mjs +6 -3
  63. package/fesm2022/ngxsmk-cdk-cva-base.mjs +52 -0
  64. package/fesm2022/ngxsmk-cdk-cva-base.mjs.map +1 -0
  65. package/fesm2022/ngxsmk-cdk-input-group.mjs +226 -0
  66. package/fesm2022/ngxsmk-cdk-input-group.mjs.map +1 -0
  67. package/fesm2022/ngxsmk-cdk-listbox-keyboard.mjs +152 -0
  68. package/fesm2022/ngxsmk-cdk-listbox-keyboard.mjs.map +1 -0
  69. package/fesm2022/ngxsmk-cdk-scheduler.mjs +1035 -0
  70. package/fesm2022/ngxsmk-cdk-scheduler.mjs.map +1 -0
  71. package/fesm2022/ngxsmk-cdk-spreadsheet.mjs +1969 -0
  72. package/fesm2022/ngxsmk-cdk-spreadsheet.mjs.map +1 -0
  73. package/fesm2022/ngxsmk-cdk-testing.mjs +5 -2
  74. package/fesm2022/ngxsmk-cdk-testing.mjs.map +1 -1
  75. package/fesm2022/ngxsmk-cdk.mjs +5 -0
  76. package/fesm2022/ngxsmk-cdk.mjs.map +1 -1
  77. package/input-group/index.d.ts +3 -0
  78. package/input-group/index.d.ts.map +1 -0
  79. package/input-group/input-group-engine.d.ts +88 -0
  80. package/input-group/input-group-engine.d.ts.map +1 -0
  81. package/input-group/models/index.d.ts +2 -0
  82. package/input-group/models/index.d.ts.map +1 -0
  83. package/input-group/models/input-group.model.d.ts +114 -0
  84. package/input-group/models/input-group.model.d.ts.map +1 -0
  85. package/input-group/ngxsmk-cdk-input-group.d.ts.map +1 -0
  86. package/listbox-keyboard/index.d.ts +2 -0
  87. package/listbox-keyboard/index.d.ts.map +1 -0
  88. package/listbox-keyboard/listbox-keyboard.d.ts +60 -0
  89. package/listbox-keyboard/listbox-keyboard.d.ts.map +1 -0
  90. package/listbox-keyboard/ngxsmk-cdk-listbox-keyboard.d.ts.map +1 -0
  91. package/package.json +40 -1
  92. package/public-api.d.ts +8 -0
  93. package/public-api.d.ts.map +1 -1
  94. package/scheduler/index.d.ts +5 -0
  95. package/scheduler/index.d.ts.map +1 -0
  96. package/scheduler/models/date-range.d.ts +6 -0
  97. package/scheduler/models/date-range.d.ts.map +1 -0
  98. package/scheduler/models/event.model.d.ts +50 -0
  99. package/scheduler/models/event.model.d.ts.map +1 -0
  100. package/scheduler/models/index.d.ts +6 -0
  101. package/scheduler/models/index.d.ts.map +1 -0
  102. package/scheduler/models/resource.model.d.ts +16 -0
  103. package/scheduler/models/resource.model.d.ts.map +1 -0
  104. package/scheduler/models/selection.model.d.ts +12 -0
  105. package/scheduler/models/selection.model.d.ts.map +1 -0
  106. package/scheduler/models/view.model.d.ts +21 -0
  107. package/scheduler/models/view.model.d.ts.map +1 -0
  108. package/scheduler/ngxsmk-cdk-scheduler.d.ts.map +1 -0
  109. package/scheduler/plugin/drag-plugin.d.ts +28 -0
  110. package/scheduler/plugin/drag-plugin.d.ts.map +1 -0
  111. package/scheduler/plugin/index.d.ts +8 -0
  112. package/scheduler/plugin/index.d.ts.map +1 -0
  113. package/scheduler/plugin/keyboard-plugin.d.ts +24 -0
  114. package/scheduler/plugin/keyboard-plugin.d.ts.map +1 -0
  115. package/scheduler/plugin/plugin-host.d.ts +16 -0
  116. package/scheduler/plugin/plugin-host.d.ts.map +1 -0
  117. package/scheduler/plugin/plugin.types.d.ts +9 -0
  118. package/scheduler/plugin/plugin.types.d.ts.map +1 -0
  119. package/scheduler/plugin/resize-plugin.d.ts +26 -0
  120. package/scheduler/plugin/resize-plugin.d.ts.map +1 -0
  121. package/scheduler/plugin/selection-plugin.d.ts +40 -0
  122. package/scheduler/plugin/selection-plugin.d.ts.map +1 -0
  123. package/scheduler/plugin/tooltip-plugin.d.ts +41 -0
  124. package/scheduler/plugin/tooltip-plugin.d.ts.map +1 -0
  125. package/scheduler/scheduler-engine.d.ts +95 -0
  126. package/scheduler/scheduler-engine.d.ts.map +1 -0
  127. package/scheduler/utils/date-utils.d.ts +26 -0
  128. package/scheduler/utils/date-utils.d.ts.map +1 -0
  129. package/scheduler/utils/index.d.ts +3 -0
  130. package/scheduler/utils/index.d.ts.map +1 -0
  131. package/scheduler/utils/snap.d.ts +7 -0
  132. package/scheduler/utils/snap.d.ts.map +1 -0
  133. package/spreadsheet/index.d.ts +5 -0
  134. package/spreadsheet/index.d.ts.map +1 -0
  135. package/spreadsheet/models/cell.model.d.ts +44 -0
  136. package/spreadsheet/models/cell.model.d.ts.map +1 -0
  137. package/spreadsheet/models/column.model.d.ts +77 -0
  138. package/spreadsheet/models/column.model.d.ts.map +1 -0
  139. package/spreadsheet/models/filter.model.d.ts +15 -0
  140. package/spreadsheet/models/filter.model.d.ts.map +1 -0
  141. package/spreadsheet/models/formula.model.d.ts +65 -0
  142. package/spreadsheet/models/formula.model.d.ts.map +1 -0
  143. package/spreadsheet/models/index.d.ts +8 -0
  144. package/spreadsheet/models/index.d.ts.map +1 -0
  145. package/spreadsheet/models/row.model.d.ts +33 -0
  146. package/spreadsheet/models/row.model.d.ts.map +1 -0
  147. package/spreadsheet/models/selection.model.d.ts +18 -0
  148. package/spreadsheet/models/selection.model.d.ts.map +1 -0
  149. package/spreadsheet/models/sort.model.d.ts +14 -0
  150. package/spreadsheet/models/sort.model.d.ts.map +1 -0
  151. package/spreadsheet/ngxsmk-cdk-spreadsheet.d.ts.map +1 -0
  152. package/spreadsheet/plugin/clipboard-plugin.d.ts +24 -0
  153. package/spreadsheet/plugin/clipboard-plugin.d.ts.map +1 -0
  154. package/spreadsheet/plugin/filter-plugin.d.ts +21 -0
  155. package/spreadsheet/plugin/filter-plugin.d.ts.map +1 -0
  156. package/spreadsheet/plugin/formula-plugin.d.ts +39 -0
  157. package/spreadsheet/plugin/formula-plugin.d.ts.map +1 -0
  158. package/spreadsheet/plugin/index.d.ts +10 -0
  159. package/spreadsheet/plugin/index.d.ts.map +1 -0
  160. package/spreadsheet/plugin/plugin-host.d.ts +66 -0
  161. package/spreadsheet/plugin/plugin-host.d.ts.map +1 -0
  162. package/spreadsheet/plugin/plugin.types.d.ts +58 -0
  163. package/spreadsheet/plugin/plugin.types.d.ts.map +1 -0
  164. package/spreadsheet/plugin/selection-plugin.d.ts +28 -0
  165. package/spreadsheet/plugin/selection-plugin.d.ts.map +1 -0
  166. package/spreadsheet/plugin/sort-plugin.d.ts +18 -0
  167. package/spreadsheet/plugin/sort-plugin.d.ts.map +1 -0
  168. package/spreadsheet/plugin/undo-plugin.d.ts +40 -0
  169. package/spreadsheet/plugin/undo-plugin.d.ts.map +1 -0
  170. package/spreadsheet/plugin/validation-plugin.d.ts +29 -0
  171. package/spreadsheet/plugin/validation-plugin.d.ts.map +1 -0
  172. package/spreadsheet/spreadsheet-engine.d.ts +194 -0
  173. package/spreadsheet/spreadsheet-engine.d.ts.map +1 -0
  174. package/spreadsheet/utils/cell-utils.d.ts +26 -0
  175. package/spreadsheet/utils/cell-utils.d.ts.map +1 -0
  176. package/spreadsheet/utils/index.d.ts +2 -0
  177. package/spreadsheet/utils/index.d.ts.map +1 -0
  178. package/testing/a11y.d.ts +5 -1
  179. package/testing/a11y.d.ts.map +1 -1
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Low-level, zoneless-friendly Angular behaviors that power NGXSMK components. Each behavior is its own secondary entry point, so you only bundle what you import.
4
4
 
5
- Part of the [NGXSMK UI kit](https://github.com/NGXSMK/ngxsmk-ui-kit).
5
+ Part of the [NGXSMK UI kit](https://ngxsmk.github.io/ngxsmk-ui-kit).
6
6
 
7
7
  ## Compatibility
8
8
 
@@ -0,0 +1,34 @@
1
+ import { ControlValueAccessor } from '@angular/forms';
2
+ /**
3
+ * Abstract base providing the CVA plumbing shared by every form component:
4
+ * `onChange` / `onTouched` storage, `formDisabled` signal, and the composite
5
+ * `isDisabled` computed. Sub-classes implement only `inputDisabled()` (the
6
+ * component's own `input()` signal value) and `writeValue()` (type-specific
7
+ * coercion).
8
+ *
9
+ * ```ts
10
+ * export class NgxsmkCheckbox extends CvaBase<boolean> {
11
+ * readonly disabled = input(false, { transform: booleanAttribute });
12
+ * protected inputDisabled() { return this.disabled(); }
13
+ * writeValue(value: unknown) { this.checked.set(!!value); }
14
+ * }
15
+ * ```
16
+ */
17
+ export declare abstract class CvaBase<T = unknown> implements ControlValueAccessor {
18
+ private _onChange;
19
+ private _onTouched;
20
+ private readonly _formDisabled;
21
+ /** Composite disabled state: component's own input OR form-driven disable. */
22
+ readonly isDisabled: import("@angular/core").Signal<boolean>;
23
+ /** Return the component's own `disabled` input signal value. */
24
+ protected abstract inputDisabled(): boolean;
25
+ abstract writeValue(value: unknown): void;
26
+ registerOnChange(fn: (value: T) => void): void;
27
+ registerOnTouched(fn: () => void): void;
28
+ setDisabledState(isDisabled: boolean): void;
29
+ /** Fire the registered onChange callback. */
30
+ protected emitChange(value: T): void;
31
+ /** Fire the registered onTouched callback. */
32
+ protected emitTouched(): void;
33
+ }
34
+ //# sourceMappingURL=cva-base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cva-base.d.ts","sourceRoot":"","sources":["../../../../packages/cdk/cva-base/cva-base.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAEtD;;;;;;;;;;;;;;GAcG;AACH,8BAAsB,OAAO,CAAC,CAAC,GAAG,OAAO,CAAE,YAAW,oBAAoB;IAExE,OAAO,CAAC,SAAS,CAAgC;IAEjD,OAAO,CAAC,UAAU,CAAwB;IAE1C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAiB;IAE/C,8EAA8E;IAC9E,QAAQ,CAAC,UAAU,0CAAgE;IAEnF,gEAAgE;IAChE,SAAS,CAAC,QAAQ,CAAC,aAAa,IAAI,OAAO;IAE3C,QAAQ,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAEzC,gBAAgB,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,GAAG,IAAI;IAI9C,iBAAiB,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI;IAIvC,gBAAgB,CAAC,UAAU,EAAE,OAAO,GAAG,IAAI;IAI3C,6CAA6C;IAC7C,SAAS,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI;IAIpC,8CAA8C;IAC9C,SAAS,CAAC,WAAW,IAAI,IAAI;CAG9B"}
@@ -0,0 +1,2 @@
1
+ export * from './cva-base';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../packages/cdk/cva-base/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ngxsmk-cdk-cva-base.d.ts","sourceRoot":"","sources":["../../../../packages/cdk/cva-base/ngxsmk-cdk-cva-base.ts"],"names":[],"mappings":"AAAA;;GAEG;;AAEH,cAAc,SAAS,CAAC"}
@@ -0,0 +1,45 @@
1
+ import { computed, signal } from '@angular/core';
2
+ /**
3
+ * Abstract base providing the CVA plumbing shared by every form component:
4
+ * `onChange` / `onTouched` storage, `formDisabled` signal, and the composite
5
+ * `isDisabled` computed. Sub-classes implement only `inputDisabled()` (the
6
+ * component's own `input()` signal value) and `writeValue()` (type-specific
7
+ * coercion).
8
+ *
9
+ * ```ts
10
+ * export class NgxsmkCheckbox extends CvaBase<boolean> {
11
+ * readonly disabled = input(false, { transform: booleanAttribute });
12
+ * protected inputDisabled() { return this.disabled(); }
13
+ * writeValue(value: unknown) { this.checked.set(!!value); }
14
+ * }
15
+ * ```
16
+ */
17
+ export class CvaBase {
18
+ constructor() {
19
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
20
+ this._onChange = () => { };
21
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
22
+ this._onTouched = () => { };
23
+ this._formDisabled = signal(false);
24
+ /** Composite disabled state: component's own input OR form-driven disable. */
25
+ this.isDisabled = computed(() => this.inputDisabled() || this._formDisabled());
26
+ }
27
+ registerOnChange(fn) {
28
+ this._onChange = fn;
29
+ }
30
+ registerOnTouched(fn) {
31
+ this._onTouched = fn;
32
+ }
33
+ setDisabledState(isDisabled) {
34
+ this._formDisabled.set(isDisabled);
35
+ }
36
+ /** Fire the registered onChange callback. */
37
+ emitChange(value) {
38
+ this._onChange(value);
39
+ }
40
+ /** Fire the registered onTouched callback. */
41
+ emitTouched() {
42
+ this._onTouched();
43
+ }
44
+ }
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3ZhLWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jZGsvY3ZhLWJhc2UvY3ZhLWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHakQ7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxNQUFNLE9BQWdCLE9BQU87SUFBN0I7UUFDRSxnRUFBZ0U7UUFDeEQsY0FBUyxHQUF1QixHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7UUFDakQsZ0VBQWdFO1FBQ3hELGVBQVUsR0FBZSxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7UUFFekIsa0JBQWEsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFL0MsOEVBQThFO1FBQ3JFLGVBQVUsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO0lBNEJyRixDQUFDO0lBckJDLGdCQUFnQixDQUFDLEVBQXNCO1FBQ3JDLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxFQUFjO1FBQzlCLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxVQUFtQjtRQUNsQyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsNkNBQTZDO0lBQ25DLFVBQVUsQ0FBQyxLQUFRO1FBQzNCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVELDhDQUE4QztJQUNwQyxXQUFXO1FBQ25CLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNwQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb21wdXRlZCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuLyoqXG4gKiBBYnN0cmFjdCBiYXNlIHByb3ZpZGluZyB0aGUgQ1ZBIHBsdW1iaW5nIHNoYXJlZCBieSBldmVyeSBmb3JtIGNvbXBvbmVudDpcbiAqIGBvbkNoYW5nZWAgLyBgb25Ub3VjaGVkYCBzdG9yYWdlLCBgZm9ybURpc2FibGVkYCBzaWduYWwsIGFuZCB0aGUgY29tcG9zaXRlXG4gKiBgaXNEaXNhYmxlZGAgY29tcHV0ZWQuIFN1Yi1jbGFzc2VzIGltcGxlbWVudCBvbmx5IGBpbnB1dERpc2FibGVkKClgICh0aGVcbiAqIGNvbXBvbmVudCdzIG93biBgaW5wdXQoKWAgc2lnbmFsIHZhbHVlKSBhbmQgYHdyaXRlVmFsdWUoKWAgKHR5cGUtc3BlY2lmaWNcbiAqIGNvZXJjaW9uKS5cbiAqXG4gKiBgYGB0c1xuICogZXhwb3J0IGNsYXNzIE5neHNta0NoZWNrYm94IGV4dGVuZHMgQ3ZhQmFzZTxib29sZWFuPiB7XG4gKiAgIHJlYWRvbmx5IGRpc2FibGVkID0gaW5wdXQoZmFsc2UsIHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pO1xuICogICBwcm90ZWN0ZWQgaW5wdXREaXNhYmxlZCgpIHsgcmV0dXJuIHRoaXMuZGlzYWJsZWQoKTsgfVxuICogICB3cml0ZVZhbHVlKHZhbHVlOiB1bmtub3duKSB7IHRoaXMuY2hlY2tlZC5zZXQoISF2YWx1ZSk7IH1cbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ3ZhQmFzZTxUID0gdW5rbm93bj4gaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgcHJpdmF0ZSBfb25DaGFuZ2U6ICh2YWx1ZTogVCkgPT4gdm9pZCA9ICgpID0+IHt9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gIHByaXZhdGUgX29uVG91Y2hlZDogKCkgPT4gdm9pZCA9ICgpID0+IHt9O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2Zvcm1EaXNhYmxlZCA9IHNpZ25hbChmYWxzZSk7XG5cbiAgLyoqIENvbXBvc2l0ZSBkaXNhYmxlZCBzdGF0ZTogY29tcG9uZW50J3Mgb3duIGlucHV0IE9SIGZvcm0tZHJpdmVuIGRpc2FibGUuICovXG4gIHJlYWRvbmx5IGlzRGlzYWJsZWQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmlucHV0RGlzYWJsZWQoKSB8fCB0aGlzLl9mb3JtRGlzYWJsZWQoKSk7XG5cbiAgLyoqIFJldHVybiB0aGUgY29tcG9uZW50J3Mgb3duIGBkaXNhYmxlZGAgaW5wdXQgc2lnbmFsIHZhbHVlLiAqL1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgaW5wdXREaXNhYmxlZCgpOiBib29sZWFuO1xuXG4gIGFic3RyYWN0IHdyaXRlVmFsdWUodmFsdWU6IHVua25vd24pOiB2b2lkO1xuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogVCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMuX29uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMuX29uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5fZm9ybURpc2FibGVkLnNldChpc0Rpc2FibGVkKTtcbiAgfVxuXG4gIC8qKiBGaXJlIHRoZSByZWdpc3RlcmVkIG9uQ2hhbmdlIGNhbGxiYWNrLiAqL1xuICBwcm90ZWN0ZWQgZW1pdENoYW5nZSh2YWx1ZTogVCk6IHZvaWQge1xuICAgIHRoaXMuX29uQ2hhbmdlKHZhbHVlKTtcbiAgfVxuXG4gIC8qKiBGaXJlIHRoZSByZWdpc3RlcmVkIG9uVG91Y2hlZCBjYWxsYmFjay4gKi9cbiAgcHJvdGVjdGVkIGVtaXRUb3VjaGVkKCk6IHZvaWQge1xuICAgIHRoaXMuX29uVG91Y2hlZCgpO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export * from './cva-base';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jZGsvY3ZhLWJhc2UvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxZQUFZLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2N2YS1iYXNlJztcbiJdfQ==
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './index';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4c21rLWNkay1jdmEtYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Nkay9jdmEtYmFzZS9uZ3hzbWstY2RrLWN2YS1iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19
@@ -0,0 +1,3 @@
1
+ export * from './input-group-engine';
2
+ export * from './models';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jZGsvaW5wdXQtZ3JvdXAvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLFVBQVUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vaW5wdXQtZ3JvdXAtZW5naW5lJztcbmV4cG9ydCAqIGZyb20gJy4vbW9kZWxzJztcbiJdfQ==
@@ -0,0 +1,219 @@
1
+ import { computed, signal } from '@angular/core';
2
+ /**
3
+ * InputGroupEngine — headless, signal-based state machine for input group behaviour.
4
+ * Zero DOM, zero Angular template dependencies.
5
+ */
6
+ export class InputGroupEngine {
7
+ constructor(config = {}) {
8
+ this.focused = signal(false);
9
+ this.hovered = signal(false);
10
+ this.touched = signal(false);
11
+ this.dirty = signal(false);
12
+ this.status = signal('none');
13
+ this.message = signal('');
14
+ this.disabled = signal(false);
15
+ this.readonly = signal(false);
16
+ this.passwordVisible = signal(false);
17
+ this.loading = signal(false);
18
+ this.addons = signal([]);
19
+ this.placeholder = signal('');
20
+ this.label = signal('');
21
+ this.hint = signal('');
22
+ this.required = signal(false);
23
+ this.maxLength = signal(undefined);
24
+ this.minLength = signal(undefined);
25
+ this.showClear = signal(false);
26
+ this.showCounter = signal(false);
27
+ this.fullWidth = signal(true);
28
+ this.floatingLabel = signal(false);
29
+ this._asyncTimer = null;
30
+ this._config = config;
31
+ // Initialize config signals
32
+ this.value = signal(config.initialValue ?? '');
33
+ this.type = signal(config.type ?? 'text');
34
+ this.variant = signal(config.variant ?? 'outlined');
35
+ this.size = signal(config.size ?? 'md');
36
+ this.radius = signal(config.radius ?? 'md');
37
+ this.density = signal(config.density ?? 'comfortable');
38
+ this.disabled.set(config.disabled ?? false);
39
+ this.readonly.set(config.readonly ?? false);
40
+ this.placeholder.set(config.placeholder ?? '');
41
+ this.label.set(config.label ?? '');
42
+ this.hint.set(config.hint ?? '');
43
+ this.required.set(config.required ?? false);
44
+ this.maxLength.set(config.maxLength);
45
+ this.minLength.set(config.minLength);
46
+ this.showClear.set(config.showClear ?? false);
47
+ this.showCounter.set(config.showCounter ?? false);
48
+ this.fullWidth.set(config.fullWidth ?? true);
49
+ this.floatingLabel.set(config.floatingLabel ?? false);
50
+ if (config.initialValue) {
51
+ this.dirty.set(true);
52
+ this.touched.set(true);
53
+ }
54
+ // Lifecycle hooks
55
+ this.onFocus = signal(() => {
56
+ /* noop */
57
+ });
58
+ this.onBlur = signal(() => {
59
+ /* noop */
60
+ });
61
+ this.onChange = signal(() => {
62
+ /* noop */
63
+ });
64
+ this.onClear = signal(() => {
65
+ /* noop */
66
+ });
67
+ this.onValidationChange = signal(() => {
68
+ /* noop */
69
+ });
70
+ // ── Computed ──
71
+ this.charCount = computed(() => this.value().length);
72
+ this.hasContent = computed(() => this.value().length > 0);
73
+ this.isActive = computed(() => this.focused() || this.hasContent());
74
+ this.isOverLength = computed(() => {
75
+ const max = this.maxLength();
76
+ return max != null ? this.value().length > max : false;
77
+ });
78
+ this.isUnderLength = computed(() => {
79
+ const min = this.minLength();
80
+ return min != null && this.touched() ? this.value().length < min : false;
81
+ });
82
+ this.hasError = computed(() => this.status() === 'error');
83
+ this.hasSuccess = computed(() => this.status() === 'success');
84
+ this.hasWarning = computed(() => this.status() === 'warning');
85
+ this.isInvalid = computed(() => this.hasError() || this.isOverLength() || this.isUnderLength());
86
+ this.showPlaceholder = computed(() => {
87
+ return !this.hasContent() && !this.focused();
88
+ });
89
+ this.shouldFloat = computed(() => {
90
+ if (this.floatingLabel())
91
+ return this.isActive() || this.hasContent();
92
+ return false;
93
+ });
94
+ this.leadingAddons = computed(() => this.addons().filter((a) => a.position === 'leading'));
95
+ this.trailingAddons = computed(() => this.addons().filter((a) => a.position === 'trailing'));
96
+ this.hasLeading = computed(() => this.leadingAddons().length > 0);
97
+ this.hasTrailing = computed(() => this.trailingAddons().length > 0);
98
+ this.inputType = computed(() => {
99
+ if (this.type() === 'password') {
100
+ return this.passwordVisible() ? 'text' : 'password';
101
+ }
102
+ return this.type();
103
+ });
104
+ }
105
+ // ── Value Operations ──
106
+ setValue(value) {
107
+ this.value.set(value);
108
+ this.dirty.set(true);
109
+ this._runValidation(value);
110
+ this.onChange()(value);
111
+ }
112
+ clear() {
113
+ this.setValue('');
114
+ this.onClear()();
115
+ }
116
+ getValue() {
117
+ return this.value();
118
+ }
119
+ // ── Focus Operations ──
120
+ focus() {
121
+ this.focused.set(true);
122
+ this.onFocus()();
123
+ }
124
+ blur() {
125
+ this.focused.set(false);
126
+ this.touched.set(true);
127
+ this._runValidation(this.value());
128
+ this.onBlur()();
129
+ }
130
+ // ── Password ──
131
+ togglePasswordVisibility() {
132
+ this.passwordVisible.update((v) => !v);
133
+ }
134
+ // ── Loading ──
135
+ showLoading() {
136
+ this.loading.set(true);
137
+ }
138
+ hideLoading() {
139
+ this.loading.set(false);
140
+ }
141
+ // ── Add-ons ──
142
+ addAddon(addon) {
143
+ this.addons.update((list) => [...list, addon]);
144
+ }
145
+ removeAddon(id) {
146
+ this.addons.update((list) => list.filter((a) => a.id !== id));
147
+ }
148
+ // ── Validation ──
149
+ setStatus(status, message = '') {
150
+ this.status.set(status);
151
+ this.message.set(message);
152
+ this.onValidationChange()(status, message);
153
+ }
154
+ _runValidation(value) {
155
+ const validator = this._config.validator;
156
+ if (validator) {
157
+ const result = validator(value);
158
+ this.status.set(result.status);
159
+ this.message.set(result.message);
160
+ this.onValidationChange()(result.status, result.message);
161
+ return;
162
+ }
163
+ // Built-in validations
164
+ if (this.required() && !value) {
165
+ this.status.set('error');
166
+ this.message.set('This field is required');
167
+ this.onValidationChange()('error', 'This field is required');
168
+ return;
169
+ }
170
+ if (this.isOverLength()) {
171
+ this.status.set('error');
172
+ this.message.set(`Maximum ${this.maxLength()} characters`);
173
+ this.onValidationChange()('error', `Maximum ${this.maxLength()} characters`);
174
+ return;
175
+ }
176
+ if (this.isUnderLength()) {
177
+ this.status.set('error');
178
+ this.message.set(`Minimum ${this.minLength()} characters`);
179
+ this.onValidationChange()('error', `Minimum ${this.minLength()} characters`);
180
+ return;
181
+ }
182
+ this.status.set('none');
183
+ this.message.set('');
184
+ this.onValidationChange()('none', '');
185
+ // Async validation
186
+ const asyncValidator = this._config.asyncValidator;
187
+ if (asyncValidator && value) {
188
+ if (this._asyncTimer)
189
+ clearTimeout(this._asyncTimer);
190
+ this.status.set('pending');
191
+ this.message.set('');
192
+ this._asyncTimer = setTimeout(async () => {
193
+ const result = await asyncValidator(value);
194
+ if (this.value() === value) {
195
+ this.status.set(result);
196
+ this.onValidationChange()(result, '');
197
+ }
198
+ }, this._config.asyncDebounce ?? 300);
199
+ }
200
+ }
201
+ // ── Reset ──
202
+ reset() {
203
+ this.value.set(this._config.initialValue ?? '');
204
+ this.focused.set(false);
205
+ this.touched.set(false);
206
+ this.dirty.set(false);
207
+ this.status.set('none');
208
+ this.message.set('');
209
+ this.passwordVisible.set(false);
210
+ }
211
+ // ── Enable/Disable ──
212
+ enable() {
213
+ this.disabled.set(false);
214
+ }
215
+ disable() {
216
+ this.disabled.set(true);
217
+ }
218
+ }
219
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtZ3JvdXAtZW5naW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY2RrL2lucHV0LWdyb3VwL2lucHV0LWdyb3VwLWVuZ2luZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBb0MsTUFBTSxlQUFlLENBQUM7QUF1Qm5GOzs7R0FHRztBQUNILE1BQU0sT0FBTyxnQkFBZ0I7SUE0RDNCLFlBQVksU0FBaUMsRUFBRTtRQXpEdEMsWUFBTyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QixZQUFPLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hCLFlBQU8sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEIsVUFBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0QixXQUFNLEdBQUcsTUFBTSxDQUFtQixNQUFNLENBQUMsQ0FBQztRQUMxQyxZQUFPLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3JCLGFBQVEsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekIsYUFBUSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QixvQkFBZSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoQyxZQUFPLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hCLFdBQU0sR0FBRyxNQUFNLENBQW9CLEVBQUUsQ0FBQyxDQUFDO1FBUXZDLGdCQUFXLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pCLFVBQUssR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbkIsU0FBSSxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNsQixhQUFRLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pCLGNBQVMs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QztRQUN0QixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNyQixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsdUJBQXVCO0lBRXZCLE1BQU07UUFDSixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQsT0FBTztRQUNMLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbXB1dGVkLCBzaWduYWwsIHR5cGUgV3JpdGFibGVTaWduYWwsIHR5cGUgU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgdHlwZSB7XG4gIElucHV0R3JvdXBDb25maWcsXG4gIElucHV0R3JvdXBBZGRvbixcbiAgSW5wdXRHcm91cElucHV0VHlwZSxcbiAgSW5wdXRHcm91cFZhcmlhbnQsXG4gIElucHV0R3JvdXBTaXplLFxuICBJbnB1dEdyb3VwUmFkaXVzLFxuICBJbnB1dEdyb3VwRGVuc2l0eSxcbiAgVmFsaWRhdGlvblN0YXR1cyxcbn0gZnJvbSAnLi9tb2RlbHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElucHV0R3JvdXBFbmdpbmVDb25maWcgZXh0ZW5kcyBJbnB1dEdyb3VwQ29uZmlnIHtcbiAgLyoqIEluaXRpYWwgdmFsdWUuICovXG4gIGluaXRpYWxWYWx1ZT86IHN0cmluZztcbiAgLyoqIEFzeW5jIHZhbGlkYXRvciBmdW5jdGlvbi4gKi9cbiAgYXN5bmNWYWxpZGF0b3I/OiAodmFsdWU6IHN0cmluZykgPT4gUHJvbWlzZTxWYWxpZGF0aW9uU3RhdHVzPjtcbiAgLyoqIFN5bmMgdmFsaWRhdG9yIGZ1bmN0aW9uLiAqL1xuICB2YWxpZGF0b3I/OiAodmFsdWU6IHN0cmluZykgPT4geyBzdGF0dXM6IFZhbGlkYXRpb25TdGF0dXM7IG1lc3NhZ2U6IHN0cmluZyB9O1xuICAvKiogRGVib3VuY2UgZm9yIGFzeW5jIHZhbGlkYXRpb24gaW4gbXMuICovXG4gIGFzeW5jRGVib3VuY2U/OiBudW1iZXI7XG59XG5cbi8qKlxuICogSW5wdXRHcm91cEVuZ2luZSDigJQgaGVhZGxlc3MsIHNpZ25hbC1iYXNlZCBzdGF0ZSBtYWNoaW5lIGZvciBpbnB1dCBncm91cCBiZWhhdmlvdXIuXG4gKiBaZXJvIERPTSwgemVybyBBbmd1bGFyIHRlbXBsYXRlIGRlcGVuZGVuY2llcy5cbiAqL1xuZXhwb3J0IGNsYXNzIElucHV0R3JvdXBFbmdpbmUge1xuICAvLyDilIDilIAgQ29yZSBTdGF0ZSDilIDilIBcbiAgcmVhZG9ubHkgdmFsdWU6IFdyaXRhYmxlU2lnbmFsPHN0cmluZz47XG4gIHJlYWRvbmx5IGZvY3VzZWQgPSBzaWduYWwoZmFsc2UpO1xuICByZWFkb25seSBob3ZlcmVkID0gc2lnbmFsKGZhbHNlKTtcbiAgcmVhZG9ubHkgdG91Y2hlZCA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IGRpcnR5ID0gc2lnbmFsKGZhbHNlKTtcbiAgcmVhZG9ubHkgc3RhdHVzID0gc2lnbmFsPFZhbGlkYXRpb25TdGF0dXM+KCdub25lJyk7XG4gIHJlYWRvbmx5IG1lc3NhZ2UgPSBzaWduYWwoJycpO1xuICByZWFkb25seSBkaXNhYmxlZCA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IHJlYWRvbmx5ID0gc2lnbmFsKGZhbHNlKTtcbiAgcmVhZG9ubHkgcGFzc3dvcmRWaXNpYmxlID0gc2lnbmFsKGZhbHNlKTtcbiAgcmVhZG9ubHkgbG9hZGluZyA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IGFkZG9ucyA9IHNpZ25hbDxJbnB1dEdyb3VwQWRkb25bXT4oW10pO1xuXG4gIC8vIOKUgOKUgCBDb25maWcg4pSA4pSAXG4gIHJlYWRvbmx5IHR5cGU6IFdyaXRhYmxlU2lnbmFsPElucHV0R3JvdXBJbnB1dFR5cGU+O1xuICByZWFkb25seSB2YXJpYW50OiBXcml0YWJsZVNpZ25hbDxJbnB1dEdyb3VwVmFyaWFudD47XG4gIHJlYWRvbmx5IHNpemU6IFdyaXRhYmxlU2lnbmFsPElucHV0R3JvdXBTaXplPjtcbiAgcmVhZG9ubHkgcmFkaXVzOiBXcml0YWJsZVNpZ25hbDxJbnB1dEdyb3VwUmFkaXVzPjtcbiAgcmVhZG9ubHkgZGVuc2l0eTogV3JpdGFibGVTaWduYWw8SW5wdXRHcm91cERlbnNpdHk+O1xuICByZWFkb25seSBwbGFjZWhvbGRlciA9IHNpZ25hbCgnJyk7XG4gIHJlYWRvbmx5IGxhYmVsID0gc2lnbmFsKCcnKTtcbiAgcmVhZG9ubHkgaGludCA9IHNpZ25hbCgnJyk7XG4gIHJlYWRvbmx5IHJlcXVpcmVkID0gc2lnbmFsKGZhbHNlKTtcbiAgcmVhZG9ubHkgbWF4TGVuZ3RoID0gc2lnbmFsPG51bWJlciB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcmVhZG9ubHkgbWluTGVuZ3RoID0gc2lnbmFsPG51bWJlciB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcmVhZG9ubHkgc2hvd0NsZWFyID0gc2lnbmFsKGZhbHNlKTtcbiAgcmVhZG9ubHkgc2hvd0NvdW50ZXIgPSBzaWduYWwoZmFsc2UpO1xuICByZWFkb25seSBmdWxsV2lkdGggPSBzaWduYWwodHJ1ZSk7XG4gIHJlYWRvbmx5IGZsb2F0aW5nTGFiZWwgPSBzaWduYWwoZmFsc2UpO1xuXG4gIC8vIOKUgOKUgCBDb21wdXRlZCDilIDilIBcbiAgcmVhZG9ubHkgY2hhckNvdW50OiBTaWduYWw8bnVtYmVyPjtcbiAgcmVhZG9ubHkgaGFzQ29udGVudDogU2lnbmFsPGJvb2xlYW4+O1xuICByZWFkb25seSBpc0FjdGl2ZTogU2lnbmFsPGJvb2xlYW4+O1xuICByZWFkb25seSBpc092ZXJMZW5ndGg6IFNpZ25hbDxib29sZWFuPjtcbiAgcmVhZG9ubHkgaXNVbmRlckxlbmd0aDogU2lnbmFsPGJvb2xlYW4+O1xuICByZWFkb25seSBoYXNFcnJvcjogU2lnbmFsPGJvb2xlYW4+O1xuICByZWFkb25seSBoYXNTdWNjZXNzOiBTaWduYWw8Ym9vbGVhbj47XG4gIHJlYWRvbmx5IGhhc1dhcm5pbmc6IFNpZ25hbDxib29sZWFuPjtcbiAgcmVhZG9ubHkgaXNJbnZhbGlkOiBTaWduYWw8Ym9vbGVhbj47XG4gIHJlYWRvbmx5IHNob3dQbGFjZWhvbGRlcjogU2lnbmFsPGJvb2xlYW4+O1xuICByZWFkb25seSBzaG91bGRGbG9hdDogU2lnbmFsPGJvb2xlYW4+O1xuICByZWFkb25seSBsZWFkaW5nQWRkb25zOiBTaWduYWw8SW5wdXRHcm91cEFkZG9uW10+O1xuICByZWFkb25seSB0cmFpbGluZ0FkZG9uczogU2lnbmFsPElucHV0R3JvdXBBZGRvbltdPjtcbiAgcmVhZG9ubHkgaGFzTGVhZGluZzogU2lnbmFsPGJvb2xlYW4+O1xuICByZWFkb25seSBoYXNUcmFpbGluZzogU2lnbmFsPGJvb2xlYW4+O1xuICByZWFkb25seSBpbnB1dFR5cGU6IFNpZ25hbDxJbnB1dEdyb3VwSW5wdXRUeXBlPjtcblxuICAvLyDilIDilIAgTGlmZWN5Y2xlIEhvb2tzIOKUgOKUgFxuICByZWFkb25seSBvbkZvY3VzOiBXcml0YWJsZVNpZ25hbDwoKSA9PiB2b2lkPjtcbiAgcmVhZG9ubHkgb25CbHVyOiBXcml0YWJsZVNpZ25hbDwoKSA9PiB2b2lkPjtcbiAgcmVhZG9ubHkgb25DaGFuZ2U6IFdyaXRhYmxlU2lnbmFsPCh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkPjtcbiAgcmVhZG9ubHkgb25DbGVhcjogV3JpdGFibGVTaWduYWw8KCkgPT4gdm9pZD47XG4gIHJlYWRvbmx5IG9uVmFsaWRhdGlvbkNoYW5nZTogV3JpdGFibGVTaWduYWw8KHN0YXR1czogVmFsaWRhdGlvblN0YXR1cywgbWVzc2FnZTogc3RyaW5nKSA9PiB2b2lkPjtcblxuICBwcml2YXRlIF9jb25maWc6IElucHV0R3JvdXBFbmdpbmVDb25maWc7XG4gIHByaXZhdGUgX2FzeW5jVGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoY29uZmlnOiBJbnB1dEdyb3VwRW5naW5lQ29uZmlnID0ge30pIHtcbiAgICB0aGlzLl9jb25maWcgPSBjb25maWc7XG5cbiAgICAvLyBJbml0aWFsaXplIGNvbmZpZyBzaWduYWxzXG4gICAgdGhpcy52YWx1ZSA9IHNpZ25hbChjb25maWcuaW5pdGlhbFZhbHVlID8/ICcnKTtcbiAgICB0aGlzLnR5cGUgPSBzaWduYWwoY29uZmlnLnR5cGUgPz8gJ3RleHQnKTtcbiAgICB0aGlzLnZhcmlhbnQgPSBzaWduYWwoY29uZmlnLnZhcmlhbnQgPz8gJ291dGxpbmVkJyk7XG4gICAgdGhpcy5zaXplID0gc2lnbmFsKGNvbmZpZy5zaXplID8/ICdtZCcpO1xuICAgIHRoaXMucmFkaXVzID0gc2lnbmFsKGNvbmZpZy5yYWRpdXMgPz8gJ21kJyk7XG4gICAgdGhpcy5kZW5zaXR5ID0gc2lnbmFsKGNvbmZpZy5kZW5zaXR5ID8/ICdjb21mb3J0YWJsZScpO1xuICAgIHRoaXMuZGlzYWJsZWQuc2V0KGNvbmZpZy5kaXNhYmxlZCA/PyBmYWxzZSk7XG4gICAgdGhpcy5yZWFkb25seS5zZXQoY29uZmlnLnJlYWRvbmx5ID8/IGZhbHNlKTtcbiAgICB0aGlzLnBsYWNlaG9sZGVyLnNldChjb25maWcucGxhY2Vob2xkZXIgPz8gJycpO1xuICAgIHRoaXMubGFiZWwuc2V0KGNvbmZpZy5sYWJlbCA/PyAnJyk7XG4gICAgdGhpcy5oaW50LnNldChjb25maWcuaGludCA/PyAnJyk7XG4gICAgdGhpcy5yZXF1aXJlZC5zZXQoY29uZmlnLnJlcXVpcmVkID8/IGZhbHNlKTtcbiAgICB0aGlzLm1heExlbmd0aC5zZXQoY29uZmlnLm1heExlbmd0aCk7XG4gICAgdGhpcy5taW5MZW5ndGguc2V0KGNvbmZpZy5taW5MZW5ndGgpO1xuICAgIHRoaXMuc2hvd0NsZWFyLnNldChjb25maWcuc2hvd0NsZWFyID8/IGZhbHNlKTtcbiAgICB0aGlzLnNob3dDb3VudGVyLnNldChjb25maWcuc2hvd0NvdW50ZXIgPz8gZmFsc2UpO1xuICAgIHRoaXMuZnVsbFdpZHRoLnNldChjb25maWcuZnVsbFdpZHRoID8/IHRydWUpO1xuICAgIHRoaXMuZmxvYXRpbmdMYWJlbC5zZXQoY29uZmlnLmZsb2F0aW5nTGFiZWwgPz8gZmFsc2UpO1xuXG4gICAgaWYgKGNvbmZpZy5pbml0aWFsVmFsdWUpIHtcbiAgICAgIHRoaXMuZGlydHkuc2V0KHRydWUpO1xuICAgICAgdGhpcy50b3VjaGVkLnNldCh0cnVlKTtcbiAgICB9XG5cbiAgICAvLyBMaWZlY3ljbGUgaG9va3NcbiAgICB0aGlzLm9uRm9jdXMgPSBzaWduYWwoKCkgPT4ge1xuICAgICAgLyogbm9vcCAqL1xuICAgIH0pO1xuICAgIHRoaXMub25CbHVyID0gc2lnbmFsKCgpID0+IHtcbiAgICAgIC8qIG5vb3AgKi9cbiAgICB9KTtcbiAgICB0aGlzLm9uQ2hhbmdlID0gc2lnbmFsKCgpID0+IHtcbiAgICAgIC8qIG5vb3AgKi9cbiAgICB9KTtcbiAgICB0aGlzLm9uQ2xlYXIgPSBzaWduYWwoKCkgPT4ge1xuICAgICAgLyogbm9vcCAqL1xuICAgIH0pO1xuICAgIHRoaXMub25WYWxpZGF0aW9uQ2hhbmdlID0gc2lnbmFsKCgpID0+IHtcbiAgICAgIC8qIG5vb3AgKi9cbiAgICB9KTtcblxuICAgIC8vIOKUgOKUgCBDb21wdXRlZCDilIDilIBcblxuICAgIHRoaXMuY2hhckNvdW50ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy52YWx1ZSgpLmxlbmd0aCk7XG5cbiAgICB0aGlzLmhhc0NvbnRlbnQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnZhbHVlKCkubGVuZ3RoID4gMCk7XG5cbiAgICB0aGlzLmlzQWN0aXZlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5mb2N1c2VkKCkgfHwgdGhpcy5oYXNDb250ZW50KCkpO1xuXG4gICAgdGhpcy5pc092ZXJMZW5ndGggPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICBjb25zdCBtYXggPSB0aGlzLm1heExlbmd0aCgpO1xuICAgICAgcmV0dXJuIG1heCAhPSBudWxsID8gdGhpcy52YWx1ZSgpLmxlbmd0aCA+IG1heCA6IGZhbHNlO1xuICAgIH0pO1xuXG4gICAgdGhpcy5pc1VuZGVyTGVuZ3RoID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgY29uc3QgbWluID0gdGhpcy5taW5MZW5ndGgoKTtcbiAgICAgIHJldHVybiBtaW4gIT0gbnVsbCAmJiB0aGlzLnRvdWNoZWQoKSA/IHRoaXMudmFsdWUoKS5sZW5ndGggPCBtaW4gOiBmYWxzZTtcbiAgICB9KTtcblxuICAgIHRoaXMuaGFzRXJyb3IgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnN0YXR1cygpID09PSAnZXJyb3InKTtcbiAgICB0aGlzLmhhc1N1Y2Nlc3MgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnN0YXR1cygpID09PSAnc3VjY2VzcycpO1xuICAgIHRoaXMuaGFzV2FybmluZyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc3RhdHVzKCkgPT09ICd3YXJuaW5nJyk7XG4gICAgdGhpcy5pc0ludmFsaWQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmhhc0Vycm9yKCkgfHwgdGhpcy5pc092ZXJMZW5ndGgoKSB8fCB0aGlzLmlzVW5kZXJMZW5ndGgoKSk7XG5cbiAgICB0aGlzLnNob3dQbGFjZWhvbGRlciA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgIHJldHVybiAhdGhpcy5oYXNDb250ZW50KCkgJiYgIXRoaXMuZm9jdXNlZCgpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5zaG91bGRGbG9hdCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmZsb2F0aW5nTGFiZWwoKSkgcmV0dXJuIHRoaXMuaXNBY3RpdmUoKSB8fCB0aGlzLmhhc0NvbnRlbnQoKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcblxuICAgIHRoaXMubGVhZGluZ0FkZG9ucyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuYWRkb25zKCkuZmlsdGVyKChhKSA9PiBhLnBvc2l0aW9uID09PSAnbGVhZGluZycpKTtcblxuICAgIHRoaXMudHJhaWxpbmdBZGRvbnMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmFkZG9ucygpLmZpbHRlcigoYSkgPT4gYS5wb3NpdGlvbiA9PT0gJ3RyYWlsaW5nJykpO1xuXG4gICAgdGhpcy5oYXNMZWFkaW5nID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5sZWFkaW5nQWRkb25zKCkubGVuZ3RoID4gMCk7XG4gICAgdGhpcy5oYXNUcmFpbGluZyA9IGNvbXB1dGVkKCgpID0+IHRoaXMudHJhaWxpbmdBZGRvbnMoKS5sZW5ndGggPiAwKTtcblxuICAgIHRoaXMuaW5wdXRUeXBlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMudHlwZSgpID09PSAncGFzc3dvcmQnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhc3N3b3JkVmlzaWJsZSgpID8gJ3RleHQnIDogJ3Bhc3N3b3JkJztcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLnR5cGUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBWYWx1ZSBPcGVyYXRpb25zIOKUgOKUgFxuXG4gIHNldFZhbHVlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlLnNldCh2YWx1ZSk7XG4gICAgdGhpcy5kaXJ0eS5zZXQodHJ1ZSk7XG4gICAgdGhpcy5fcnVuVmFsaWRhdGlvbih2YWx1ZSk7XG4gICAgdGhpcy5vbkNoYW5nZSgpKHZhbHVlKTtcbiAgfVxuXG4gIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuc2V0VmFsdWUoJycpO1xuICAgIHRoaXMub25DbGVhcigpKCk7XG4gIH1cblxuICBnZXRWYWx1ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnZhbHVlKCk7XG4gIH1cblxuICAvLyDilIDilIAgRm9jdXMgT3BlcmF0aW9ucyDilIDilIBcblxuICBmb2N1cygpOiB2b2lkIHtcbiAgICB0aGlzLmZvY3VzZWQuc2V0KHRydWUpO1xuICAgIHRoaXMub25Gb2N1cygpKCk7XG4gIH1cblxuICBibHVyKCk6IHZvaWQge1xuICAgIHRoaXMuZm9jdXNlZC5zZXQoZmFsc2UpO1xuICAgIHRoaXMudG91Y2hlZC5zZXQodHJ1ZSk7XG4gICAgdGhpcy5fcnVuVmFsaWRhdGlvbih0aGlzLnZhbHVlKCkpO1xuICAgIHRoaXMub25CbHVyKCkoKTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBQYXNzd29yZCDilIDilIBcblxuICB0b2dnbGVQYXNzd29yZFZpc2liaWxpdHkoKTogdm9pZCB7XG4gICAgdGhpcy5wYXNzd29yZFZpc2libGUudXBkYXRlKCh2KSA9PiAhdik7XG4gIH1cblxuICAvLyDilIDilIAgTG9hZGluZyDilIDilIBcblxuICBzaG93TG9hZGluZygpOiB2b2lkIHtcbiAgICB0aGlzLmxvYWRpbmcuc2V0KHRydWUpO1xuICB9XG5cbiAgaGlkZUxvYWRpbmcoKTogdm9pZCB7XG4gICAgdGhpcy5sb2FkaW5nLnNldChmYWxzZSk7XG4gIH1cblxuICAvLyDilIDilIAgQWRkLW9ucyDilIDilIBcblxuICBhZGRBZGRvbihhZGRvbjogSW5wdXRHcm91cEFkZG9uKTogdm9pZCB7XG4gICAgdGhpcy5hZGRvbnMudXBkYXRlKChsaXN0KSA9PiBbLi4ubGlzdCwgYWRkb25dKTtcbiAgfVxuXG4gIHJlbW92ZUFkZG9uKGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmFkZG9ucy51cGRhdGUoKGxpc3QpID0+IGxpc3QuZmlsdGVyKChhKSA9PiBhLmlkICE9PSBpZCkpO1xuICB9XG5cbiAgLy8g4pSA4pSAIFZhbGlkYXRpb24g4pSA4pSAXG5cbiAgc2V0U3RhdHVzKHN0YXR1czogVmFsaWRhdGlvblN0YXR1cywgbWVzc2FnZSA9ICcnKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0dXMuc2V0KHN0YXR1cyk7XG4gICAgdGhpcy5tZXNzYWdlLnNldChtZXNzYWdlKTtcbiAgICB0aGlzLm9uVmFsaWRhdGlvbkNoYW5nZSgpKHN0YXR1cywgbWVzc2FnZSk7XG4gIH1cblxuICBwcml2YXRlIF9ydW5WYWxpZGF0aW9uKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCB2YWxpZGF0b3IgPSB0aGlzLl9jb25maWcudmFsaWRhdG9yO1xuICAgIGlmICh2YWxpZGF0b3IpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHZhbGlkYXRvcih2YWx1ZSk7XG4gICAgICB0aGlzLnN0YXR1cy5zZXQocmVzdWx0LnN0YXR1cyk7XG4gICAgICB0aGlzLm1lc3NhZ2Uuc2V0KHJlc3VsdC5tZXNzYWdlKTtcbiAgICAgIHRoaXMub25WYWxpZGF0aW9uQ2hhbmdlKCkocmVzdWx0LnN0YXR1cywgcmVzdWx0Lm1lc3NhZ2UpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEJ1aWx0LWluIHZhbGlkYXRpb25zXG4gICAgaWYgKHRoaXMucmVxdWlyZWQoKSAmJiAhdmFsdWUpIHtcbiAgICAgIHRoaXMuc3RhdHVzLnNldCgnZXJyb3InKTtcbiAgICAgIHRoaXMubWVzc2FnZS5zZXQoJ1RoaXMgZmllbGQgaXMgcmVxdWlyZWQnKTtcbiAgICAgIHRoaXMub25WYWxpZGF0aW9uQ2hhbmdlKCkoJ2Vycm9yJywgJ1RoaXMgZmllbGQgaXMgcmVxdWlyZWQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc092ZXJMZW5ndGgoKSkge1xuICAgICAgdGhpcy5zdGF0dXMuc2V0KCdlcnJvcicpO1xuICAgICAgdGhpcy5tZXNzYWdlLnNldChgTWF4aW11bSAke3RoaXMubWF4TGVuZ3RoKCl9IGNoYXJhY3RlcnNgKTtcbiAgICAgIHRoaXMub25WYWxpZGF0aW9uQ2hhbmdlKCkoJ2Vycm9yJywgYE1heGltdW0gJHt0aGlzLm1heExlbmd0aCgpfSBjaGFyYWN0ZXJzYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNVbmRlckxlbmd0aCgpKSB7XG4gICAgICB0aGlzLnN0YXR1cy5zZXQoJ2Vycm9yJyk7XG4gICAgICB0aGlzLm1lc3NhZ2Uuc2V0KGBNaW5pbXVtICR7dGhpcy5taW5MZW5ndGgoKX0gY2hhcmFjdGVyc2ApO1xuICAgICAgdGhpcy5vblZhbGlkYXRpb25DaGFuZ2UoKSgnZXJyb3InLCBgTWluaW11bSAke3RoaXMubWluTGVuZ3RoKCl9IGNoYXJhY3RlcnNgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXR1cy5zZXQoJ25vbmUnKTtcbiAgICB0aGlzLm1lc3NhZ2Uuc2V0KCcnKTtcbiAgICB0aGlzLm9uVmFsaWRhdGlvbkNoYW5nZSgpKCdub25lJywgJycpO1xuXG4gICAgLy8gQXN5bmMgdmFsaWRhdGlvblxuICAgIGNvbnN0IGFzeW5jVmFsaWRhdG9yID0gdGhpcy5fY29uZmlnLmFzeW5jVmFsaWRhdG9yO1xuICAgIGlmIChhc3luY1ZhbGlkYXRvciAmJiB2YWx1ZSkge1xuICAgICAgaWYgKHRoaXMuX2FzeW5jVGltZXIpIGNsZWFyVGltZW91dCh0aGlzLl9hc3luY1RpbWVyKTtcbiAgICAgIHRoaXMuc3RhdHVzLnNldCgncGVuZGluZycpO1xuICAgICAgdGhpcy5tZXNzYWdlLnNldCgnJyk7XG4gICAgICB0aGlzLl9hc3luY1RpbWVyID0gc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGFzeW5jVmFsaWRhdG9yKHZhbHVlKTtcbiAgICAgICAgaWYgKHRoaXMudmFsdWUoKSA9PT0gdmFsdWUpIHtcbiAgICAgICAgICB0aGlzLnN0YXR1cy5zZXQocmVzdWx0KTtcbiAgICAgICAgICB0aGlzLm9uVmFsaWRhdGlvbkNoYW5nZSgpKHJlc3VsdCwgJycpO1xuICAgICAgICB9XG4gICAgICB9LCB0aGlzLl9jb25maWcuYXN5bmNEZWJvdW5jZSA/PyAzMDApO1xuICAgIH1cbiAgfVxuXG4gIC8vIOKUgOKUgCBSZXNldCDilIDilIBcblxuICByZXNldCgpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlLnNldCh0aGlzLl9jb25maWcuaW5pdGlhbFZhbHVlID8/ICcnKTtcbiAgICB0aGlzLmZvY3VzZWQuc2V0KGZhbHNlKTtcbiAgICB0aGlzLnRvdWNoZWQuc2V0KGZhbHNlKTtcbiAgICB0aGlzLmRpcnR5LnNldChmYWxzZSk7XG4gICAgdGhpcy5zdGF0dXMuc2V0KCdub25lJyk7XG4gICAgdGhpcy5tZXNzYWdlLnNldCgnJyk7XG4gICAgdGhpcy5wYXNzd29yZFZpc2libGUuc2V0KGZhbHNlKTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBFbmFibGUvRGlzYWJsZSDilIDilIBcblxuICBlbmFibGUoKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZC5zZXQoZmFsc2UpO1xuICB9XG5cbiAgZGlzYWJsZSgpOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkLnNldCh0cnVlKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,2 @@
1
+ export * from './input-group.model';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jZGsvaW5wdXQtZ3JvdXAvbW9kZWxzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMscUJBQXFCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2lucHV0LWdyb3VwLm1vZGVsJztcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtZ3JvdXAubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jZGsvaW5wdXQtZ3JvdXAvbW9kZWxzL2lucHV0LWdyb3VwLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKiogU3VwcG9ydGVkIEhUTUwgaW5wdXQgdHlwZXMgdGhhdCB0aGUgZ3JvdXAgY2FuIHdyYXAuICovXG5leHBvcnQgdHlwZSBJbnB1dEdyb3VwSW5wdXRUeXBlID1cbiAgfCAndGV4dCdcbiAgfCAncGFzc3dvcmQnXG4gIHwgJ2VtYWlsJ1xuICB8ICdudW1iZXInXG4gIHwgJ3NlYXJjaCdcbiAgfCAndGVsJ1xuICB8ICd1cmwnXG4gIHwgJ2RhdGUnXG4gIHwgJ3RpbWUnXG4gIHwgJ2RhdGV0aW1lLWxvY2FsJ1xuICB8ICdjb2xvcidcbiAgfCAnZmlsZSc7XG5cbi8qKiBWaXN1YWwgdmFyaWFudCBvZiB0aGUgaW5wdXQgZ3JvdXAgY29udGFpbmVyLiAqL1xuZXhwb3J0IHR5cGUgSW5wdXRHcm91cFZhcmlhbnQgPSAnb3V0bGluZWQnIHwgJ2ZpbGxlZCcgfCAnc29mdCcgfCAnZ2hvc3QnIHwgJ3VuZGVybGluZSc7XG5cbi8qKiBTaXplIHByZXNldCBjb250cm9sbGluZyBoZWlnaHQsIHBhZGRpbmcsIGFuZCBmb250IHNpemUuICovXG5leHBvcnQgdHlwZSBJbnB1dEdyb3VwU2l6ZSA9ICdzbScgfCAnbWQnIHwgJ2xnJyB8ICd4bCc7XG5cbi8qKiBDb3JuZXIgcmFkaXVzIHByZXNldC4gKi9cbmV4cG9ydCB0eXBlIElucHV0R3JvdXBSYWRpdXMgPSAnbm9uZScgfCAnc20nIHwgJ21kJyB8ICdsZycgfCAneGwnIHwgJ3BpbGwnO1xuXG4vKiogRGVuc2l0eSBwcmVzZXQgY29udHJvbGxpbmcgc3BhY2luZy4gKi9cbmV4cG9ydCB0eXBlIElucHV0R3JvdXBEZW5zaXR5ID0gJ2NvbXBhY3QnIHwgJ2NvbWZvcnRhYmxlJyB8ICdzcGFjaW91cyc7XG5cbi8qKiBWYWxpZGF0aW9uIHN0YXR1cyBkaXNwbGF5ZWQgb24gdGhlIGdyb3VwLiAqL1xuZXhwb3J0IHR5cGUgVmFsaWRhdGlvblN0YXR1cyA9ICdlcnJvcicgfCAnd2FybmluZycgfCAnc3VjY2VzcycgfCAnaW5mbycgfCAncGVuZGluZycgfCAnbm9uZSc7XG5cbi8qKiBQb3NpdGlvbiBvZiBhbiBhZGQtb24gZWxlbWVudC4gKi9cbmV4cG9ydCB0eXBlIEFkZG9uUG9zaXRpb24gPSAnbGVhZGluZycgfCAndHJhaWxpbmcnO1xuXG4vKiogQ29udGVudCB0eXBlIGZvciBhbiBhZGQtb24gc2xvdC4gKi9cbmV4cG9ydCB0eXBlIEFkZG9uQ29udGVudFR5cGUgPVxuICAndGV4dCcgfCAnaWNvbicgfCAnYnV0dG9uJyB8ICdhdmF0YXInIHwgJ2JhZGdlJyB8ICdjaGlwJyB8ICd0b2dnbGUnIHwgJ3NwaW5uZXInIHwgJ2N1c3RvbSc7XG5cbi8qKiBDb25maWd1cmF0aW9uIGZvciBhIHNpbmdsZSBhZGQtb24gZWxlbWVudC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5wdXRHcm91cEFkZG9uIHtcbiAgLyoqIFVuaXF1ZSBrZXkgZm9yIHRyYWNraW5nLiAqL1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuICAvKiogUG9zaXRpb246IGxlYWRpbmcgb3IgdHJhaWxpbmcuICovXG4gIHJlYWRvbmx5IHBvc2l0aW9uOiBBZGRvblBvc2l0aW9uO1xuICAvKiogV2hhdCBraW5kIG9mIGNvbnRlbnQgdGhpcyBhZGQtb24gaG9sZHMuICovXG4gIHJlYWRvbmx5IGNvbnRlbnRUeXBlOiBBZGRvbkNvbnRlbnRUeXBlO1xuICAvKiogVGV4dCBjb250ZW50ICh3aGVuIGNvbnRlbnRUeXBlIGlzICd0ZXh0JykuICovXG4gIHJlYWRvbmx5IHRleHQ/OiBzdHJpbmc7XG4gIC8qKiBJY29uIG5hbWUgb3IgU1ZHIHBhdGggKHdoZW4gY29udGVudFR5cGUgaXMgJ2ljb24nKS4gKi9cbiAgcmVhZG9ubHkgaWNvbj86IHN0cmluZztcbiAgLyoqIFdoZXRoZXIgdGhpcyBhZGQtb24gaXMgaW50ZXJhY3RpdmUgKGNsaWNrYWJsZSkuICovXG4gIHJlYWRvbmx5IGludGVyYWN0aXZlPzogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgdGhpcyBhZGQtb24gaXMgZGlzYWJsZWQuICovXG4gIHJlYWRvbmx5IGRpc2FibGVkPzogYm9vbGVhbjtcbiAgLyoqIEN1c3RvbSBDU1MgY2xhc3MgYXBwbGllZCB0byB0aGUgYWRkLW9uIGVsZW1lbnQuICovXG4gIHJlYWRvbmx5IGNsYXNzTmFtZT86IHN0cmluZztcbiAgLyoqIEFSSUEgbGFiZWwgZm9yIHRoZSBhZGQtb24uICovXG4gIHJlYWRvbmx5IGFyaWFMYWJlbD86IHN0cmluZztcbiAgLyoqIFRvb2x0aXAgdGV4dCBmb3IgdGhlIGFkZC1vbi4gKi9cbiAgcmVhZG9ubHkgdG9vbHRpcD86IHN0cmluZztcbiAgLyoqIFRlbXBsYXRlIGtleSBmb3IgY3VzdG9tIHJlbmRlcmluZy4gKi9cbiAgcmVhZG9ubHkgdGVtcGxhdGVLZXk/OiBzdHJpbmc7XG59XG5cbi8qKiBGdWxsIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBpbnB1dCBncm91cC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5wdXRHcm91cENvbmZpZyB7XG4gIC8qKiBIVE1MIGlucHV0IHR5cGUuICovXG4gIHR5cGU/OiBJbnB1dEdyb3VwSW5wdXRUeXBlO1xuICAvKiogVmlzdWFsIHZhcmlhbnQuICovXG4gIHZhcmlhbnQ/OiBJbnB1dEdyb3VwVmFyaWFudDtcbiAgLyoqIFNpemUuICovXG4gIHNpemU/OiBJbnB1dEdyb3VwU2l6ZTtcbiAgLyoqIENvcm5lciByYWRpdXMuICovXG4gIHJhZGl1cz86IElucHV0R3JvdXBSYWRpdXM7XG4gIC8qKiBEZW5zaXR5LiAqL1xuICBkZW5zaXR5PzogSW5wdXRHcm91cERlbnNpdHk7XG4gIC8qKiBXaGV0aGVyIHRoZSBlbnRpcmUgZ3JvdXAgaXMgZGlzYWJsZWQuICovXG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgdGhlIGlucHV0IGlzIHJlYWQtb25seS4gKi9cbiAgcmVhZG9ubHk/OiBib29sZWFuO1xuICAvKiogUGxhY2Vob2xkZXIgdGV4dC4gKi9cbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIC8qKiBMYWJlbCB0ZXh0IChjYW4gYWxzbyBiZSBwcm92aWRlZCB2aWEgdGVtcGxhdGUpLiAqL1xuICBsYWJlbD86IHN0cmluZztcbiAgLyoqIEhpbnQgdGV4dCBiZWxvdyB0aGUgaW5wdXQuICovXG4gIGhpbnQ/OiBzdHJpbmc7XG4gIC8qKiBXaGV0aGVyIHRoZSBpbnB1dCBpcyByZXF1aXJlZC4gKi9cbiAgcmVxdWlyZWQ/OiBib29sZWFuO1xuICAvKiogTWF4aW11bSBjaGFyYWN0ZXIgbGVuZ3RoLiAqL1xuICBtYXhMZW5ndGg/OiBudW1iZXI7XG4gIC8qKiBNaW5pbXVtIGNoYXJhY3RlciBsZW5ndGguICovXG4gIG1pbkxlbmd0aD86IG51bWJlcjtcbiAgLyoqIFdoZXRoZXIgdG8gc2hvdyBhIGNsZWFyIGJ1dHRvbi4gKi9cbiAgc2hvd0NsZWFyPzogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgdG8gc2hvdyBhIGNoYXJhY3RlciBjb3VudGVyLiAqL1xuICBzaG93Q291bnRlcj86IGJvb2xlYW47XG4gIC8qKiBXaGV0aGVyIHRoZSBpbnB1dCB0YWtlcyBmdWxsIHdpZHRoLiAqL1xuICBmdWxsV2lkdGg/OiBib29sZWFuO1xuICAvKiogV2hldGhlciB0aGUgaW5wdXQgaXMgbG9hZGluZy4gKi9cbiAgbG9hZGluZz86IGJvb2xlYW47XG4gIC8qKiBXaGV0aGVyIHRoZSBpbnB1dCBncm91cCBzdXBwb3J0cyBSVEwuICovXG4gIHJ0bD86IGJvb2xlYW47XG4gIC8qKiBGbG9hdGluZyBsYWJlbCBtb2RlLiAqL1xuICBmbG9hdGluZ0xhYmVsPzogYm9vbGVhbjtcbn1cblxuLyoqIFJ1bnRpbWUgc3RhdGUgdHJhY2tlZCBieSB0aGUgZW5naW5lLiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnB1dEdyb3VwU3RhdGUge1xuICAvKiogQ3VycmVudCB2YWx1ZS4gKi9cbiAgcmVhZG9ubHkgdmFsdWU6IHN0cmluZztcbiAgLyoqIFdoZXRoZXIgdGhlIGlucHV0IGhhcyBmb2N1cy4gKi9cbiAgcmVhZG9ubHkgZm9jdXNlZDogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgdGhlIG1vdXNlIGlzIGhvdmVyaW5nLiAqL1xuICByZWFkb25seSBob3ZlcmVkOiBib29sZWFuO1xuICAvKiogV2hldGhlciB0aGUgdmFsdWUgaGFzIGJlZW4gdG91Y2hlZCAoYmx1cnJlZCBhdCBsZWFzdCBvbmNlKS4gKi9cbiAgcmVhZG9ubHkgdG91Y2hlZDogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgdGhlIHZhbHVlIGhhcyBiZWVuIG1vZGlmaWVkIGZyb20gaW5pdGlhbC4gKi9cbiAgcmVhZG9ubHkgZGlydHk6IGJvb2xlYW47XG4gIC8qKiBDdXJyZW50IHZhbGlkYXRpb24gc3RhdHVzLiAqL1xuICByZWFkb25seSBzdGF0dXM6IFZhbGlkYXRpb25TdGF0dXM7XG4gIC8qKiBWYWxpZGF0aW9uIG1lc3NhZ2UgdGV4dC4gKi9cbiAgcmVhZG9ubHkgbWVzc2FnZTogc3RyaW5nO1xuICAvKiogV2hldGhlciB0aGUgaW5wdXQgaXMgZGlzYWJsZWQuICovXG4gIHJlYWRvbmx5IGRpc2FibGVkOiBib29sZWFuO1xuICAvKiogV2hldGhlciB0aGUgaW5wdXQgaXMgcmVhZC1vbmx5LiAqL1xuICByZWFkb25seSByZWFkb25seTogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgdGhlIHBhc3N3b3JkIGlzIGN1cnJlbnRseSB2aXNpYmxlIChyZXZlYWwgdG9nZ2xlKS4gKi9cbiAgcmVhZG9ubHkgcGFzc3dvcmRWaXNpYmxlOiBib29sZWFuO1xuICAvKiogV2hldGhlciB0aGUgbG9hZGluZyBpbmRpY2F0b3IgaXMgc2hvd2luZy4gKi9cbiAgcmVhZG9ubHkgbG9hZGluZzogYm9vbGVhbjtcbiAgLyoqIEN1cnJlbnQgY2hhcmFjdGVyIGNvdW50LiAqL1xuICByZWFkb25seSBjaGFyQ291bnQ6IG51bWJlcjtcbiAgLyoqIFJlZ2lzdGVyZWQgYWRkLW9ucy4gKi9cbiAgcmVhZG9ubHkgYWRkb25zOiByZWFkb25seSBJbnB1dEdyb3VwQWRkb25bXTtcbiAgLyoqIFdoZXRoZXIgdGhlIGlucHV0IGhhcyBjb250ZW50IChmb3IgZmxvYXRpbmcgbGFiZWwgcG9zaXRpb25pbmcpLiAqL1xuICByZWFkb25seSBoYXNDb250ZW50OiBib29sZWFuO1xufVxuIl19
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './index';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4c21rLWNkay1pbnB1dC1ncm91cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Nkay9pbnB1dC1ncm91cC9uZ3hzbWstY2RrLWlucHV0LWdyb3VwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19
@@ -0,0 +1,2 @@
1
+ export * from './listbox-keyboard';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jZGsvbGlzdGJveC1rZXlib2FyZC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG9CQUFvQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9saXN0Ym94LWtleWJvYXJkJztcbiJdfQ==
@@ -0,0 +1,145 @@
1
+ import { signal } from '@angular/core';
2
+ /**
3
+ * Shared arrow-key navigation for dropdown listboxes.
4
+ *
5
+ * Encapsulates `activeIndex`, `move(delta)`, `scrollActiveIntoView()`, and the
6
+ * full `onKeydown()` handler. Components provide only their option list and
7
+ * CSS selector.
8
+ *
9
+ * ```ts
10
+ * private readonly kb = new ListboxKeyboard({
11
+ * optionSelector: '.ngxsmk-combobox__option',
12
+ * options: () => this.filtered(),
13
+ * host: this.host,
14
+ * });
15
+ * ```
16
+ */
17
+ export class ListboxKeyboard {
18
+ constructor(config) {
19
+ this.activeIndex = signal(-1);
20
+ this.config = config;
21
+ }
22
+ /** Override the host element used for scroll queries (e.g. for portals). */
23
+ setHost(host) {
24
+ this.config.host = host;
25
+ }
26
+ /** Move the active index by `delta` positions, wrapping around. */
27
+ move(delta) {
28
+ const opts = this.config.options();
29
+ if (!opts.length)
30
+ return;
31
+ let next = this.activeIndex() + delta;
32
+ const min = this.config.placeholderIndex ?? 0;
33
+ for (let guard = 0; guard <= opts.length; guard++) {
34
+ if (next < min) {
35
+ next = opts.length - 1;
36
+ }
37
+ else if (next > opts.length - 1) {
38
+ next = min;
39
+ }
40
+ if (!this.config.skipDisabled || next === min || !opts[next]?.disabled) {
41
+ break;
42
+ }
43
+ next += delta;
44
+ }
45
+ this.activeIndex.set(next);
46
+ this.scrollActiveIntoView();
47
+ }
48
+ /** Scroll the active option into view within the host element. */
49
+ scrollActiveIntoView() {
50
+ requestAnimationFrame(() => {
51
+ const host = this.config.host?.nativeElement;
52
+ if (!host)
53
+ return;
54
+ const items = host.querySelectorAll(this.config.optionSelector);
55
+ let idx = this.activeIndex();
56
+ // Offset by 1 if there's a placeholder before the options
57
+ if (this.config.placeholderIndex !== undefined && idx >= 0) {
58
+ idx += 1;
59
+ }
60
+ items[idx]?.scrollIntoView({ block: 'nearest' });
61
+ });
62
+ }
63
+ /** Jump to the first enabled option. */
64
+ home() {
65
+ const opts = this.config.options();
66
+ if (!opts.length)
67
+ return;
68
+ const min = this.config.placeholderIndex ?? 0;
69
+ if (this.config.skipDisabled) {
70
+ const first = opts.findIndex((o) => !o.disabled);
71
+ this.activeIndex.set(first >= 0 ? first : min);
72
+ }
73
+ else {
74
+ this.activeIndex.set(min);
75
+ }
76
+ this.scrollActiveIntoView();
77
+ }
78
+ /** Jump to the last option. */
79
+ end() {
80
+ const opts = this.config.options();
81
+ if (!opts.length)
82
+ return;
83
+ this.activeIndex.set(opts.length - 1);
84
+ this.scrollActiveIntoView();
85
+ }
86
+ /**
87
+ * Handle a keyboard event for listbox navigation.
88
+ *
89
+ * @returns `true` if the event was handled, `false` if the caller should
90
+ * handle it (e.g. for typeahead or open/close toggling).
91
+ */
92
+ handleKeydown(event, callbacks = {}) {
93
+ const opts = this.config.options();
94
+ const isOpen = callbacks.isOpen?.() ?? true;
95
+ switch (event.key) {
96
+ case 'ArrowDown':
97
+ event.preventDefault();
98
+ if (!isOpen) {
99
+ callbacks.onOpen?.();
100
+ }
101
+ else {
102
+ this.move(1);
103
+ }
104
+ return true;
105
+ case 'ArrowUp':
106
+ event.preventDefault();
107
+ if (isOpen) {
108
+ this.move(-1);
109
+ }
110
+ return true;
111
+ case 'Home':
112
+ if (isOpen && opts.length) {
113
+ event.preventDefault();
114
+ this.home();
115
+ }
116
+ return true;
117
+ case 'End':
118
+ if (isOpen && opts.length) {
119
+ event.preventDefault();
120
+ this.end();
121
+ }
122
+ return true;
123
+ case 'Enter':
124
+ case ' ':
125
+ case 'Spacebar':
126
+ if (isOpen) {
127
+ event.preventDefault();
128
+ const idx = this.activeIndex();
129
+ if (idx >= 0 && opts[idx]) {
130
+ callbacks.onSelect?.(idx);
131
+ }
132
+ }
133
+ return true;
134
+ case 'Escape':
135
+ if (isOpen) {
136
+ event.preventDefault();
137
+ callbacks.onClose?.();
138
+ }
139
+ return true;
140
+ default:
141
+ return false;
142
+ }
143
+ }
144
+ }
145
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdGJveC1rZXlib2FyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Nkay9saXN0Ym94LWtleWJvYXJkL2xpc3Rib3gta2V5Ym9hcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQW9CbkQ7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxNQUFNLE9BQU8sZUFBZTtJQUsxQixZQUFZLE1BQTZCO1FBSmhDLGdCQUFXLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFLaEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQUVELDRFQUE0RTtJQUM1RSxPQUFPLENBQUMsSUFBNkI7UUFDbkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQzFCLENBQUM7SUFFRCxtRUFBbUU7SUFDbkUsSUFBSSxDQUFDLEtBQWE7UUFDaEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNuQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPO1FBRXpCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRyxLQUFLLENBQUM7UUFDdEMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLENBQUM7UUFFOUMsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUNsRCxJQUFJLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztnQkFDZixJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDekIsQ0FBQztpQkFBTSxJQUFJLElBQUksR0FBRyxJQUFJ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QUFHLENBQUMsRUFBRSxDQUFDO3dCQUMxQixTQUFTLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQzVCLENBQUM7Z0JBQ0gsQ0FBQztnQkFDRCxPQUFPLElBQUksQ0FBQztZQUVkLEtBQUssUUFBUTtnQkFDWCxJQUFJLE1BQU0sRUFBRSxDQUFDO29CQUNYLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztvQkFDdkIsU0FBUyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7Z0JBQ3hCLENBQUM7Z0JBQ0QsT0FBTyxJQUFJLENBQUM7WUFFZDtnQkFDRSxPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRWxlbWVudFJlZiwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgbGlzdGJveCBrZXlib2FyZCBuYXZpZ2F0aW9uLlxuICpcbiAqIEBwcm9wZXJ0eSBvcHRpb25TZWxlY3RvciAtIENTUyBzZWxlY3RvciBmb3Igb3B0aW9uIGVsZW1lbnRzXG4gKiBAcHJvcGVydHkgb3B0aW9ucyAtIEZ1bmN0aW9uIHJldHVybmluZyB0aGUgY3VycmVudCBvcHRpb24gbGlzdFxuICogQHByb3BlcnR5IGhvc3QgLSBPcHRpb25hbCBob3N0IGVsZW1lbnQgZm9yIHNjcm9sbCBxdWVyaWVzIChkZWZhdWx0cyB0byBpbmplY3QoRWxlbWVudFJlZikpXG4gKiBAcHJvcGVydHkgcGxhY2Vob2xkZXJJbmRleCAtIEluZGV4IGZvciB0aGUgcGxhY2Vob2xkZXIgaXRlbSAoLTEgaWYgbm9uZSlcbiAqIEBwcm9wZXJ0eSBza2lwRGlzYWJsZWQgLSBXaGV0aGVyIHRvIHNraXAgZGlzYWJsZWQgb3B0aW9ucyBkdXJpbmcgbmF2aWdhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIExpc3Rib3hLZXlib2FyZENvbmZpZyB7XG4gIG9wdGlvblNlbGVjdG9yOiBzdHJpbmc7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIG9wdGlvbnM6ICgpID0+IGFueVtdO1xuICBob3N0PzogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG4gIHBsYWNlaG9sZGVySW5kZXg/OiBudW1iZXI7XG4gIHNraXBEaXNhYmxlZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogU2hhcmVkIGFycm93LWtleSBuYXZpZ2F0aW9uIGZvciBkcm9wZG93biBsaXN0Ym94ZXMuXG4gKlxuICogRW5jYXBzdWxhdGVzIGBhY3RpdmVJbmRleGAsIGBtb3ZlKGRlbHRhKWAsIGBzY3JvbGxBY3RpdmVJbnRvVmlldygpYCwgYW5kIHRoZVxuICogZnVsbCBgb25LZXlkb3duKClgIGhhbmRsZXIuIENvbXBvbmVudHMgcHJvdmlkZSBvbmx5IHRoZWlyIG9wdGlvbiBsaXN0IGFuZFxuICogQ1NTIHNlbGVjdG9yLlxuICpcbiAqIGBgYHRzXG4gKiBwcml2YXRlIHJlYWRvbmx5IGtiID0gbmV3IExpc3Rib3hLZXlib2FyZCh7XG4gKiAgIG9wdGlvblNlbGVjdG9yOiAnLm5neHNtay1jb21ib2JveF9fb3B0aW9uJyxcbiAqICAgb3B0aW9uczogKCkgPT4gdGhpcy5maWx0ZXJlZCgpLFxuICogICBob3N0OiB0aGlzLmhvc3QsXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgTGlzdGJveEtleWJvYXJkIHtcbiAgcmVhZG9ubHkgYWN0aXZlSW5kZXggPSBzaWduYWwoLTEpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnOiBMaXN0Ym94S2V5Ym9hcmRDb25maWc7XG5cbiAgY29uc3RydWN0b3IoY29uZmlnOiBMaXN0Ym94S2V5Ym9hcmRDb25maWcpIHtcbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgfVxuXG4gIC8qKiBPdmVycmlkZSB0aGUgaG9zdCBlbGVtZW50IHVzZWQgZm9yIHNjcm9sbCBxdWVyaWVzIChlLmcuIGZvciBwb3J0YWxzKS4gKi9cbiAgc2V0SG9zdChob3N0OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50Pik6IHZvaWQge1xuICAgIHRoaXMuY29uZmlnLmhvc3QgPSBob3N0O1xuICB9XG5cbiAgLyoqIE1vdmUgdGhlIGFjdGl2ZSBpbmRleCBieSBgZGVsdGFgIHBvc2l0aW9ucywgd3JhcHBpbmcgYXJvdW5kLiAqL1xuICBtb3ZlKGRlbHRhOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBvcHRzID0gdGhpcy5jb25maWcub3B0aW9ucygpO1xuICAgIGlmICghb3B0cy5sZW5ndGgpIHJldHVybjtcblxuICAgIGxldCBuZXh0ID0gdGhpcy5hY3RpdmVJbmRleCgpICsgZGVsdGE7XG4gICAgY29uc3QgbWluID0gdGhpcy5jb25maWcucGxhY2Vob2xkZXJJbmRleCA/PyAwO1xuXG4gICAgZm9yIChsZXQgZ3VhcmQgPSAwOyBndWFyZCA8PSBvcHRzLmxlbmd0aDsgZ3VhcmQrKykge1xuICAgICAgaWYgKG5leHQgPCBtaW4pIHtcbiAgICAgICAgbmV4dCA9IG9wdHMubGVuZ3RoIC0gMTtcbiAgICAgIH0gZWxzZSBpZiAobmV4dCA+IG9wdHMubGVuZ3RoIC0gMSkge1xuICAgICAgICBuZXh0ID0gbWluO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLmNvbmZpZy5za2lwRGlzYWJsZWQgfHwgbmV4dCA9PT0gbWluIHx8ICFvcHRzW25leHRdPy5kaXNhYmxlZCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIG5leHQgKz0gZGVsdGE7XG4gICAgfVxuXG4gICAgdGhpcy5hY3RpdmVJbmRleC5zZXQobmV4dCk7XG4gICAgdGhpcy5zY3JvbGxBY3RpdmVJbnRvVmlldygpO1xuICB9XG5cbiAgLyoqIFNjcm9sbCB0aGUgYWN0aXZlIG9wdGlvbiBpbnRvIHZpZXcgd2l0aGluIHRoZSBob3N0IGVsZW1lbnQuICovXG4gIHNjcm9sbEFjdGl2ZUludG9WaWV3KCk6IHZvaWQge1xuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICBjb25zdCBob3N0ID0gdGhpcy5jb25maWcuaG9zdD8ubmF0aXZlRWxlbWVudDtcbiAgICAgIGlmICghaG9zdCkgcmV0dXJuO1xuICAgICAgY29uc3QgaXRlbXMgPSBob3N0LnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTEVsZW1lbnQ+KHRoaXMuY29uZmlnLm9wdGlvblNlbGVjdG9yKTtcbiAgICAgIGxldCBpZHggPSB0aGlzLmFjdGl2ZUluZGV4KCk7XG4gICAgICAvLyBPZmZzZXQgYnkgMSBpZiB0aGVyZSdzIGEgcGxhY2Vob2xkZXIgYmVmb3JlIHRoZSBvcHRpb25zXG4gICAgICBpZiAodGhpcy5jb25maWcucGxhY2Vob2xkZXJJbmRleCAhPT0gdW5kZWZpbmVkICYmIGlkeCA+PSAwKSB7XG4gICAgICAgIGlkeCArPSAxO1xuICAgICAgfVxuICAgICAgaXRlbXNbaWR4XT8uc2Nyb2xsSW50b1ZpZXcoeyBibG9jazogJ25lYXJlc3QnIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqIEp1bXAgdG8gdGhlIGZpcnN0IGVuYWJsZWQgb3B0aW9uLiAqL1xuICBob21lKCk6IHZvaWQge1xuICAgIGNvbnN0IG9wdHMgPSB0aGlzLmNvbmZpZy5vcHRpb25zKCk7XG4gICAgaWYgKCFvcHRzLmxlbmd0aCkgcmV0dXJuO1xuICAgIGNvbnN0IG1pbiA9IHRoaXMuY29uZmlnLnBsYWNlaG9sZGVySW5kZXggPz8gMDtcbiAgICBpZiAodGhpcy5jb25maWcuc2tpcERpc2FibGVkKSB7XG4gICAgICBjb25zdCBmaXJzdCA9IG9wdHMuZmluZEluZGV4KChvKSA9PiAhby5kaXNhYmxlZCk7XG4gICAgICB0aGlzLmFjdGl2ZUluZGV4LnNldChmaXJzdCA+PSAwID8gZmlyc3QgOiBtaW4pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFjdGl2ZUluZGV4LnNldChtaW4pO1xuICAgIH1cbiAgICB0aGlzLnNjcm9sbEFjdGl2ZUludG9WaWV3KCk7XG4gIH1cblxuICAvKiogSnVtcCB0byB0aGUgbGFzdCBvcHRpb24uICovXG4gIGVuZCgpOiB2b2lkIHtcbiAgICBjb25zdCBvcHRzID0gdGhpcy5jb25maWcub3B0aW9ucygpO1xuICAgIGlmICghb3B0cy5sZW5ndGgpIHJldHVybjtcbiAgICB0aGlzLmFjdGl2ZUluZGV4LnNldChvcHRzLmxlbmd0aCAtIDEpO1xuICAgIHRoaXMuc2Nyb2xsQWN0aXZlSW50b1ZpZXcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgYSBrZXlib2FyZCBldmVudCBmb3IgbGlzdGJveCBuYXZpZ2F0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGV2ZW50IHdhcyBoYW5kbGVkLCBgZmFsc2VgIGlmIHRoZSBjYWxsZXIgc2hvdWxkXG4gICAqICAgaGFuZGxlIGl0IChlLmcuIGZvciB0eXBlYWhlYWQgb3Igb3Blbi9jbG9zZSB0b2dnbGluZykuXG4gICAqL1xuICBoYW5kbGVLZXlkb3duKFxuICAgIGV2ZW50OiBLZXlib2FyZEV2ZW50LFxuICAgIGNhbGxiYWNrczoge1xuICAgICAgb25TZWxlY3Q/OiAoaW5kZXg6IG51bWJlcikgPT4gdm9pZDtcbiAgICAgIG9uT3Blbj86ICgpID0+IHZvaWQ7XG4gICAgICBvbkNsb3NlPzogKCkgPT4gdm9pZDtcbiAgICAgIGlzT3Blbj86ICgpID0+IGJvb2xlYW47XG4gICAgfSA9IHt9LFxuICApOiBib29sZWFuIHtcbiAgICBjb25zdCBvcHRzID0gdGhpcy5jb25maWcub3B0aW9ucygpO1xuICAgIGNvbnN0IGlzT3BlbiA9IGNhbGxiYWNrcy5pc09wZW4/LigpID8/IHRydWU7XG5cbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKCFpc09wZW4pIHtcbiAgICAgICAgICBjYWxsYmFja3Mub25PcGVuPy4oKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLm1vdmUoMSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICAgIGNhc2UgJ0Fycm93VXAnOlxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAoaXNPcGVuKSB7XG4gICAgICAgICAgdGhpcy5tb3ZlKC0xKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcblxuICAgICAgY2FzZSAnSG9tZSc6XG4gICAgICAgIGlmIChpc09wZW4gJiYgb3B0cy5sZW5ndGgpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIHRoaXMuaG9tZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgICBjYXNlICdFbmQnOlxuICAgICAgICBpZiAoaXNPcGVuICYmIG9wdHMubGVuZ3RoKSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB0aGlzLmVuZCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgICBjYXNlICdFbnRlcic6XG4gICAgICBjYXNlICcgJzpcbiAgICAgIGNhc2UgJ1NwYWNlYmFyJzpcbiAgICAgICAgaWYgKGlzT3Blbikge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgY29uc3QgaWR4ID0gdGhpcy5hY3RpdmVJbmRleCgpO1xuICAgICAgICAgIGlmIChpZHggPj0gMCAmJiBvcHRzW2lkeF0pIHtcbiAgICAgICAgICAgIGNhbGxiYWNrcy5vblNlbGVjdD8uKGlkeCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgICBjYXNlICdFc2NhcGUnOlxuICAgICAgICBpZiAoaXNPcGVuKSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBjYWxsYmFja3Mub25DbG9zZT8uKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './index';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4c21rLWNkay1saXN0Ym94LWtleWJvYXJkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY2RrL2xpc3Rib3gta2V5Ym9hcmQvbmd4c21rLWNkay1saXN0Ym94LWtleWJvYXJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19