@radix-ng/primitives 0.1.0 → 0.2.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 (148) hide show
  1. package/README.md +2 -4
  2. package/checkbox/src/checkbox-indicator.directive.d.ts +6 -0
  3. package/checkbox/src/checkbox.directive.d.ts +71 -0
  4. package/checkbox/src/checkbox.token.d.ts +4 -0
  5. package/esm2022/checkbox/index.mjs +4 -0
  6. package/esm2022/checkbox/radix-ng-primitives-checkbox.mjs +5 -0
  7. package/esm2022/checkbox/src/checkbox-indicator.directive.mjs +23 -0
  8. package/esm2022/checkbox/src/checkbox.directive.mjs +135 -0
  9. package/esm2022/checkbox/src/checkbox.token.mjs +6 -0
  10. package/esm2022/index.mjs +2 -0
  11. package/esm2022/label/index.mjs +2 -0
  12. package/esm2022/label/radix-ng-primitives-label.mjs +5 -0
  13. package/esm2022/label/src/label.directive.mjs +46 -0
  14. package/esm2022/progress/index.mjs +3 -0
  15. package/esm2022/progress/radix-ng-primitives-progress.mjs +5 -0
  16. package/esm2022/progress/src/progress-indicator.directive.mjs +23 -0
  17. package/esm2022/progress/src/progress.directive.mjs +62 -0
  18. package/esm2022/progress/src/progress.token.mjs +6 -0
  19. package/esm2022/radio/index.mjs +6 -0
  20. package/esm2022/radio/radix-ng-primitives-radio.mjs +5 -0
  21. package/esm2022/radio/src/radio-group.directive.mjs +108 -0
  22. package/esm2022/radio/src/radio-group.token.mjs +6 -0
  23. package/esm2022/radio/src/radio-indicator.directive.mjs +30 -0
  24. package/esm2022/radio/src/radio-item.directive.mjs +79 -0
  25. package/esm2022/radio/src/radio-item.token.mjs +6 -0
  26. package/esm2022/radix-ng-primitives.mjs +5 -0
  27. package/esm2022/roving-focus/index.mjs +5 -0
  28. package/esm2022/roving-focus/radix-ng-primitives-roving-focus.mjs +5 -0
  29. package/esm2022/roving-focus/src/roving-focus-group.directive.mjs +115 -0
  30. package/esm2022/roving-focus/src/roving-focus-group.token.mjs +9 -0
  31. package/esm2022/roving-focus/src/roving-focus-item.directive.mjs +91 -0
  32. package/esm2022/roving-focus/src/roving-focus-item.token.mjs +6 -0
  33. package/esm2022/separator/index.mjs +2 -0
  34. package/esm2022/separator/radix-ng-primitives-separator.mjs +5 -0
  35. package/esm2022/separator/src/separator.directive.mjs +37 -0
  36. package/esm2022/switch/index.mjs +4 -0
  37. package/esm2022/switch/radix-ng-primitives-switch.mjs +5 -0
  38. package/esm2022/switch/src/switch-thumb.directive.mjs +25 -0
  39. package/esm2022/switch/src/switch.directive.mjs +125 -0
  40. package/esm2022/switch/src/switch.token.mjs +6 -0
  41. package/esm2022/visually-hidden/index.mjs +2 -0
  42. package/esm2022/visually-hidden/radix-ng-primitives-visually-hidden.mjs +5 -0
  43. package/esm2022/visually-hidden/src/visually-hidden.directive.mjs +42 -0
  44. package/fesm2022/radix-ng-primitives-checkbox.mjs +166 -0
  45. package/fesm2022/radix-ng-primitives-checkbox.mjs.map +1 -0
  46. package/fesm2022/radix-ng-primitives-label.mjs +53 -0
  47. package/fesm2022/radix-ng-primitives-label.mjs.map +1 -0
  48. package/fesm2022/radix-ng-primitives-progress.mjs +93 -0
  49. package/fesm2022/radix-ng-primitives-progress.mjs.map +1 -0
  50. package/fesm2022/radix-ng-primitives-radio.mjs +221 -0
  51. package/fesm2022/radix-ng-primitives-radio.mjs.map +1 -0
  52. package/fesm2022/radix-ng-primitives-roving-focus.mjs +220 -0
  53. package/fesm2022/radix-ng-primitives-roving-focus.mjs.map +1 -0
  54. package/fesm2022/radix-ng-primitives-separator.mjs +44 -0
  55. package/fesm2022/radix-ng-primitives-separator.mjs.map +1 -0
  56. package/fesm2022/radix-ng-primitives-switch.mjs +158 -0
  57. package/fesm2022/radix-ng-primitives-switch.mjs.map +1 -0
  58. package/fesm2022/radix-ng-primitives-visually-hidden.mjs +49 -0
  59. package/fesm2022/radix-ng-primitives-visually-hidden.mjs.map +1 -0
  60. package/fesm2022/radix-ng-primitives.mjs +4 -0
  61. package/fesm2022/radix-ng-primitives.mjs.map +1 -0
  62. package/label/src/label.directive.d.ts +14 -0
  63. package/package.json +88 -24
  64. package/progress/src/progress-indicator.directive.d.ts +6 -0
  65. package/progress/src/progress.directive.d.ts +26 -0
  66. package/progress/src/progress.token.d.ts +4 -0
  67. package/radio/README.md +1 -0
  68. package/radio/index.d.ts +5 -0
  69. package/radio/src/radio-group.directive.d.ts +65 -0
  70. package/radio/src/radio-group.token.d.ts +4 -0
  71. package/radio/src/radio-indicator.directive.d.ts +13 -0
  72. package/radio/src/radio-item.directive.d.ts +36 -0
  73. package/radio/src/radio-item.token.d.ts +4 -0
  74. package/roving-focus/src/roving-focus-group.directive.d.ts +55 -0
  75. package/roving-focus/src/roving-focus-group.token.d.ts +7 -0
  76. package/roving-focus/src/roving-focus-item.directive.d.ts +52 -0
  77. package/roving-focus/src/roving-focus-item.token.d.ts +4 -0
  78. package/separator/src/separator.directive.d.ts +16 -0
  79. package/switch/src/switch-thumb.directive.d.ts +9 -0
  80. package/switch/src/switch.directive.d.ts +73 -0
  81. package/switch/src/switch.token.d.ts +4 -0
  82. package/visually-hidden/src/visually-hidden.directive.d.ts +11 -0
  83. package/.docs/overview/accessibility.docs.mdx +0 -45
  84. package/.docs/overview/installation.docs.mdx +0 -15
  85. package/.docs/overview/introduction.docs.mdx +0 -59
  86. package/.docs/utils/storybook.ts +0 -30
  87. package/.eslintrc.json +0 -56
  88. package/.storybook/helpers/bages-config.ts +0 -43
  89. package/.storybook/main.ts +0 -24
  90. package/.storybook/manager-head.html +0 -76
  91. package/.storybook/manager.ts +0 -6
  92. package/.storybook/preview.ts +0 -58
  93. package/.storybook/rdxTheme.ts +0 -8
  94. package/.storybook/tsconfig.json +0 -20
  95. package/CHANGELOG.md +0 -6
  96. package/checkbox/ng-package.json +0 -5
  97. package/checkbox/src/checkbox-indicator.directive.ts +0 -15
  98. package/checkbox/src/checkbox.directive.ts +0 -138
  99. package/checkbox/src/checkbox.token.ts +0 -8
  100. package/checkbox/stories/checkbox.component.ts +0 -50
  101. package/checkbox/stories/checkbox.stories.ts +0 -29
  102. package/checkbox/stories/style.css +0 -265
  103. package/jest.config.ts +0 -22
  104. package/label/ng-package.json +0 -5
  105. package/label/src/label.directive.ts +0 -36
  106. package/label/stories/label.docs.mdx +0 -40
  107. package/label/stories/label.stories.ts +0 -63
  108. package/ng-package.json +0 -7
  109. package/progress/ng-package.json +0 -5
  110. package/progress/src/progress-indicator.directive.ts +0 -15
  111. package/progress/src/progress.directive.ts +0 -51
  112. package/progress/src/progress.token.ts +0 -8
  113. package/progress/stories/progress.docs.mdx +0 -66
  114. package/progress/stories/progress.stories.ts +0 -61
  115. package/project.json +0 -90
  116. package/roving-focus/ng-package.json +0 -5
  117. package/roving-focus/src/roving-focus-group.directive.ts +0 -135
  118. package/roving-focus/src/roving-focus-group.token.ts +0 -13
  119. package/roving-focus/src/roving-focus-item.directive.ts +0 -98
  120. package/roving-focus/src/roving-focus-item.token.ts +0 -10
  121. package/separator/ng-package.json +0 -5
  122. package/separator/src/separator.directive.spec.ts +0 -59
  123. package/separator/src/separator.directive.ts +0 -24
  124. package/separator/stories/separator.docs.mdx +0 -38
  125. package/separator/stories/separator.stories.ts +0 -91
  126. package/switch/ng-package.json +0 -5
  127. package/switch/src/switch-thumb.directive.ts +0 -17
  128. package/switch/src/switch.directive.ts +0 -132
  129. package/switch/src/switch.token.ts +0 -8
  130. package/switch/stories/switch.docs.mdx +0 -74
  131. package/switch/stories/switch.stories.ts +0 -76
  132. package/test-setup.ts +0 -8
  133. package/tsconfig.json +0 -32
  134. package/tsconfig.lib.json +0 -19
  135. package/tsconfig.lib.prod.json +0 -9
  136. package/tsconfig.spec.json +0 -21
  137. package/visually-hidden/ng-package.json +0 -5
  138. package/visually-hidden/src/visually-hidden.directive.spec.ts +0 -48
  139. package/visually-hidden/src/visually-hidden.directive.ts +0 -35
  140. package/visually-hidden/stories/visually-hidden.docs.mdx +0 -35
  141. /package/checkbox/{index.ts → index.d.ts} +0 -0
  142. /package/{index.ts → index.d.ts} +0 -0
  143. /package/label/{index.ts → index.d.ts} +0 -0
  144. /package/progress/{index.ts → index.d.ts} +0 -0
  145. /package/roving-focus/{index.ts → index.d.ts} +0 -0
  146. /package/separator/{index.ts → index.d.ts} +0 -0
  147. /package/switch/{index.ts → index.d.ts} +0 -0
  148. /package/visually-hidden/{index.ts → index.d.ts} +0 -0
@@ -0,0 +1,125 @@
1
+ import { Directive, ElementRef, EventEmitter, HostListener, Input, Output, booleanAttribute, inject } from '@angular/core';
2
+ import { NG_VALUE_ACCESSOR } from '@angular/forms';
3
+ import { SwitchToken } from './switch.token';
4
+ import * as i0 from "@angular/core";
5
+ export class SwitchDirective {
6
+ constructor() {
7
+ /**
8
+ * Access the element ref.
9
+ */
10
+ this.elementRef = inject(ElementRef);
11
+ /**
12
+ * Determine if the switch is a button
13
+ */
14
+ this.isButton = this.elementRef.nativeElement.tagName === 'BUTTON';
15
+ /**
16
+ * Determine if the switch is checked.
17
+ * The controlled state of the switch.
18
+ * @default false
19
+ */
20
+ this.checked = false;
21
+ /**
22
+ * Determine if the switch is disabled.
23
+ * When true, prevents the user from interacting with the switch.
24
+ * @default false
25
+ */
26
+ this.disabled = false;
27
+ /**
28
+ * Event emitted when the checked state changes.
29
+ */
30
+ this.checkedChange = new EventEmitter();
31
+ }
32
+ /**
33
+ * Register the onChange callback.
34
+ * @param fn The onChange callback.
35
+ * @internal
36
+ */
37
+ registerOnChange(fn) {
38
+ this.onChange = fn;
39
+ }
40
+ /**
41
+ * Register the onTouched callback.
42
+ * @param fn The onTouched callback.
43
+ * @internal
44
+ */
45
+ registerOnTouched(fn) {
46
+ this.onTouched = fn;
47
+ }
48
+ /**
49
+ * Write the value to the checked state.
50
+ * @param checked The checked state.
51
+ * @internal
52
+ */
53
+ writeValue(checked) {
54
+ this.checked = checked;
55
+ }
56
+ /**
57
+ * Set the disabled state.
58
+ * @param isDisabled The disabled state.
59
+ * @internal
60
+ */
61
+ setDisabledState(isDisabled) {
62
+ this.disabled = isDisabled;
63
+ }
64
+ /**
65
+ * Toggle the checked state.
66
+ */
67
+ toggle() {
68
+ if (this.disabled) {
69
+ return;
70
+ }
71
+ this.checked = !this.checked;
72
+ this.checkedChange.emit(this.checked);
73
+ this.onChange?.(this.checked);
74
+ }
75
+ /**
76
+ * Handle the keydown event.
77
+ */
78
+ onKeyDown() {
79
+ // If the switch is not a button then the space key will not toggle the checked state automatically,
80
+ // so we need to do it manually.
81
+ if (!this.isButton) {
82
+ this.toggle();
83
+ }
84
+ }
85
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: SwitchDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
86
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "17.3.3", type: SwitchDirective, isStandalone: true, selector: "[rdxSwitch]", inputs: { checked: ["checked", "checked", booleanAttribute], disabled: ["disabled", "disabled", booleanAttribute] }, outputs: { checkedChange: "checkedChange" }, host: { attributes: { "role": "switch" }, listeners: { "focus": "onTouched?.()", "click": "toggle()", "keydown.space": "onKeyDown()" }, properties: { "attr.type": "isButton ? \"button\" : null", "attr.aria-checked": "checked", "attr.data-state": "checked ? \"checked\" : \"unchecked\"", "attr.data-disabled": "disabled ? \"true\" : null", "attr.disabled": "isButton && disabled ? disabled : null" } }, providers: [
87
+ { provide: SwitchToken, useExisting: SwitchDirective },
88
+ { provide: NG_VALUE_ACCESSOR, useExisting: SwitchDirective, multi: true }
89
+ ], ngImport: i0 }); }
90
+ }
91
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: SwitchDirective, decorators: [{
92
+ type: Directive,
93
+ args: [{
94
+ selector: '[rdxSwitch]',
95
+ standalone: true,
96
+ providers: [
97
+ { provide: SwitchToken, useExisting: SwitchDirective },
98
+ { provide: NG_VALUE_ACCESSOR, useExisting: SwitchDirective, multi: true }
99
+ ],
100
+ host: {
101
+ role: 'switch',
102
+ '[attr.type]': 'isButton ? "button" : null',
103
+ '[attr.aria-checked]': 'checked',
104
+ '[attr.data-state]': 'checked ? "checked" : "unchecked"',
105
+ '[attr.data-disabled]': 'disabled ? "true" : null',
106
+ '[attr.disabled]': 'isButton && disabled ? disabled : null',
107
+ '(focus)': 'onTouched?.()'
108
+ }
109
+ }]
110
+ }], propDecorators: { checked: [{
111
+ type: Input,
112
+ args: [{ transform: booleanAttribute }]
113
+ }], disabled: [{
114
+ type: Input,
115
+ args: [{ transform: booleanAttribute }]
116
+ }], checkedChange: [{
117
+ type: Output
118
+ }], toggle: [{
119
+ type: HostListener,
120
+ args: ['click']
121
+ }], onKeyDown: [{
122
+ type: HostListener,
123
+ args: ['keydown.space']
124
+ }] } });
125
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3dpdGNoLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3ByaW1pdGl2ZXMvc3dpdGNoL3NyYy9zd2l0Y2guZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFDTixnQkFBZ0IsRUFDaEIsTUFBTSxFQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBbUI3QyxNQUFNLE9BQU8sZUFBZTtJQWpCNUI7UUFrQkk7O1dBRUc7UUFDYyxlQUFVLEdBQUcsTUFBTSxDQUEwQixVQUFVLENBQUMsQ0FBQztRQUUxRTs7V0FFRztRQUNPLGFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEtBQUssUUFBUSxDQUFDO1FBRXhFOzs7O1dBSUc7UUFDcUMsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUV4RDs7OztXQUlHO1FBQ3FDLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFFekQ7O1dBRUc7UUFDZ0Isa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO0tBeUVsRTtJQTdERzs7OztPQUlHO0lBQ0gsZ0JBQWdCLENBQUMsRUFBOEI7UUFDM0MsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxpQkFBaUIsQ0FBQyxFQUFjO1FBQzVCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsVUFBVSxDQUFDLE9BQWdCO1FBQ3ZCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0lBQzNCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsZ0JBQWdCLENBQUMsVUFBbUI7UUFDaEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7SUFDL0IsQ0FBQztJQUVEOztPQUVHO0lBRUgsTUFBTTtRQUNGLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2hCLE9BQU87UUFDWCxDQUFDO1FBRUQsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDN0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVEOztPQUVHO0lBRU8sU0FBUztRQUNmLG9HQUFvRztRQUNwRyxnQ0FBZ0M7UUFDaEMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNqQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDbEIsQ0FBQztJQUNMLENBQUM7OEdBcEdRLGVBQWU7a0dBQWYsZUFBZSx5RkFnQkosZ0JBQWdCLHNDQU9oQixnQkFBZ0IsK2NBckN6QjtZQUNQLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFO1lBQ3RELEVBQUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTtTQUM1RTs7MkZBV1EsZUFBZTtrQkFqQjNCLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLGFBQWE7b0JBQ3ZCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixTQUFTLEVBQUU7d0JBQ1AsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsaUJBQWlCLEVBQUU7d0JBQ3RELEVBQUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFdBQVcsaUJBQWlCLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTtxQkFDNUU7b0JBQ0QsSUFBSSxFQUFFO3dCQUNGLElBQUksRUFBRSxRQUFRO3dCQUNkLGFBQWEsRUFBRSw0QkFBNEI7d0JBQzNDLHFCQUFxQixFQUFFLFNBQVM7d0JBQ2hDLG1CQUFtQixFQUFFLG1DQUFtQzt3QkFDeEQsc0JBQXNCLEVBQUUsMEJBQTBCO3dCQUNsRCxpQkFBaUIsRUFBRSx3Q0FBd0M7d0JBQzNELFNBQVMsRUFBRSxlQUFlO3FCQUM3QjtpQkFDSjs4QkFpQjJDLE9BQU87c0JBQTlDLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBT0UsUUFBUTtzQkFBL0MsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFLbkIsYUFBYTtzQkFBL0IsTUFBTTtnQkFvRFAsTUFBTTtzQkFETCxZQUFZO3VCQUFDLE9BQU87Z0JBZVgsU0FBUztzQkFEbEIsWUFBWTt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBEaXJlY3RpdmUsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIElucHV0LFxuICAgIE91dHB1dCxcbiAgICBib29sZWFuQXR0cmlidXRlLFxuICAgIGluamVjdFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFN3aXRjaFRva2VuIH0gZnJvbSAnLi9zd2l0Y2gudG9rZW4nO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1tyZHhTd2l0Y2hdJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7IHByb3ZpZGU6IFN3aXRjaFRva2VuLCB1c2VFeGlzdGluZzogU3dpdGNoRGlyZWN0aXZlIH0sXG4gICAgICAgIHsgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsIHVzZUV4aXN0aW5nOiBTd2l0Y2hEaXJlY3RpdmUsIG11bHRpOiB0cnVlIH1cbiAgICBdLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgcm9sZTogJ3N3aXRjaCcsXG4gICAgICAgICdbYXR0ci50eXBlXSc6ICdpc0J1dHRvbiA/IFwiYnV0dG9uXCIgOiBudWxsJyxcbiAgICAgICAgJ1thdHRyLmFyaWEtY2hlY2tlZF0nOiAnY2hlY2tlZCcsXG4gICAgICAgICdbYXR0ci5kYXRhLXN0YXRlXSc6ICdjaGVja2VkID8gXCJjaGVja2VkXCIgOiBcInVuY2hlY2tlZFwiJyxcbiAgICAgICAgJ1thdHRyLmRhdGEtZGlzYWJsZWRdJzogJ2Rpc2FibGVkID8gXCJ0cnVlXCIgOiBudWxsJyxcbiAgICAgICAgJ1thdHRyLmRpc2FibGVkXSc6ICdpc0J1dHRvbiAmJiBkaXNhYmxlZCA/IGRpc2FibGVkIDogbnVsbCcsXG4gICAgICAgICcoZm9jdXMpJzogJ29uVG91Y2hlZD8uKCknXG4gICAgfVxufSlcbmV4cG9ydCBjbGFzcyBTd2l0Y2hEaXJlY3RpdmUgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gICAgLyoqXG4gICAgICogQWNjZXNzIHRoZSBlbGVtZW50IHJlZi5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnRSZWYgPSBpbmplY3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+KEVsZW1lbnRSZWYpO1xuXG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lIGlmIHRoZSBzd2l0Y2ggaXMgYSBidXR0b25cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgaXNCdXR0b24gPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC50YWdOYW1lID09PSAnQlVUVE9OJztcblxuICAgIC8qKlxuICAgICAqIERldGVybWluZSBpZiB0aGUgc3dpdGNoIGlzIGNoZWNrZWQuXG4gICAgICogVGhlIGNvbnRyb2xsZWQgc3RhdGUgb2YgdGhlIHN3aXRjaC5cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBjaGVja2VkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZXRlcm1pbmUgaWYgdGhlIHN3aXRjaCBpcyBkaXNhYmxlZC5cbiAgICAgKiBXaGVuIHRydWUsIHByZXZlbnRzIHRoZSB1c2VyIGZyb20gaW50ZXJhY3Rpbmcgd2l0aCB0aGUgc3dpdGNoLlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIGNoZWNrZWQgc3RhdGUgY2hhbmdlcy5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgcmVhZG9ubHkgY2hlY2tlZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIC8qKlxuICAgICAqIFN0b3JlIHRoZSBvbkNoYW5nZSBjYWxsYmFjay5cbiAgICAgKi9cbiAgICBwcml2YXRlIG9uQ2hhbmdlPzogKGNoZWNrZWQ6IGJvb2xlYW4pID0+IHZvaWQ7XG5cbiAgICAvKipcbiAgICAgKiBTdG9yZSB0aGUgb25Ub3VjaGVkIGNhbGxiYWNrLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBvblRvdWNoZWQ/OiAoKSA9PiB2b2lkO1xuXG4gICAgLyoqXG4gICAgICogUmVnaXN0ZXIgdGhlIG9uQ2hhbmdlIGNhbGxiYWNrLlxuICAgICAqIEBwYXJhbSBmbiBUaGUgb25DaGFuZ2UgY2FsbGJhY2suXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKGNoZWNrZWQ6IGJvb2xlYW4pID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlZ2lzdGVyIHRoZSBvblRvdWNoZWQgY2FsbGJhY2suXG4gICAgICogQHBhcmFtIGZuIFRoZSBvblRvdWNoZWQgY2FsbGJhY2suXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXcml0ZSB0aGUgdmFsdWUgdG8gdGhlIGNoZWNrZWQgc3RhdGUuXG4gICAgICogQHBhcmFtIGNoZWNrZWQgVGhlIGNoZWNrZWQgc3RhdGUuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgd3JpdGVWYWx1ZShjaGVja2VkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2hlY2tlZCA9IGNoZWNrZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBkaXNhYmxlZCBzdGF0ZS5cbiAgICAgKiBAcGFyYW0gaXNEaXNhYmxlZCBUaGUgZGlzYWJsZWQgc3RhdGUuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRvZ2dsZSB0aGUgY2hlY2tlZCBzdGF0ZS5cbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKCdjbGljaycpXG4gICAgdG9nZ2xlKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jaGVja2VkID0gIXRoaXMuY2hlY2tlZDtcbiAgICAgICAgdGhpcy5jaGVja2VkQ2hhbmdlLmVtaXQodGhpcy5jaGVja2VkKTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZT8uKHRoaXMuY2hlY2tlZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGFuZGxlIHRoZSBrZXlkb3duIGV2ZW50LlxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uc3BhY2UnKVxuICAgIHByb3RlY3RlZCBvbktleURvd24oKTogdm9pZCB7XG4gICAgICAgIC8vIElmIHRoZSBzd2l0Y2ggaXMgbm90IGEgYnV0dG9uIHRoZW4gdGhlIHNwYWNlIGtleSB3aWxsIG5vdCB0b2dnbGUgdGhlIGNoZWNrZWQgc3RhdGUgYXV0b21hdGljYWxseSxcbiAgICAgICAgLy8gc28gd2UgbmVlZCB0byBkbyBpdCBtYW51YWxseS5cbiAgICAgICAgaWYgKCF0aGlzLmlzQnV0dG9uKSB7XG4gICAgICAgICAgICB0aGlzLnRvZ2dsZSgpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
@@ -0,0 +1,6 @@
1
+ import { InjectionToken, inject } from '@angular/core';
2
+ export const SwitchToken = new InjectionToken('SwitchToken');
3
+ export function injectSwitch() {
4
+ return inject(SwitchToken);
5
+ }
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3dpdGNoLnRva2VuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcHJpbWl0aXZlcy9zd2l0Y2gvc3JjL3N3aXRjaC50b2tlbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUd2RCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsSUFBSSxjQUFjLENBQWtCLGFBQWEsQ0FBQyxDQUFDO0FBRTlFLE1BQU0sVUFBVSxZQUFZO0lBQ3hCLE9BQU8sTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQy9CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgdHlwZSB7IFN3aXRjaERpcmVjdGl2ZSB9IGZyb20gJy4vc3dpdGNoLmRpcmVjdGl2ZSc7XG5cbmV4cG9ydCBjb25zdCBTd2l0Y2hUb2tlbiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxTd2l0Y2hEaXJlY3RpdmU+KCdTd2l0Y2hUb2tlbicpO1xuXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0U3dpdGNoKCk6IFN3aXRjaERpcmVjdGl2ZSB7XG4gICAgcmV0dXJuIGluamVjdChTd2l0Y2hUb2tlbik7XG59XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export * from './src/visually-hidden.directive';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9wcmltaXRpdmVzL3Zpc3VhbGx5LWhpZGRlbi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGlDQUFpQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9zcmMvdmlzdWFsbHktaGlkZGVuLmRpcmVjdGl2ZSc7XG4iXX0=
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './index';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaXgtbmctcHJpbWl0aXZlcy12aXN1YWxseS1oaWRkZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9wcmltaXRpdmVzL3Zpc3VhbGx5LWhpZGRlbi9yYWRpeC1uZy1wcmltaXRpdmVzLXZpc3VhbGx5LWhpZGRlbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ==
@@ -0,0 +1,42 @@
1
+ import { Directive, ElementRef, inject } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class VisuallyHiddenDirective {
4
+ constructor() {
5
+ /**
6
+ * Access the element.
7
+ */
8
+ this.element = inject(ElementRef);
9
+ }
10
+ ngOnInit() {
11
+ // hide the element
12
+ Object.assign(this.element.nativeElement.style, {
13
+ position: 'absolute',
14
+ border: 0,
15
+ width: '1px',
16
+ height: '1px',
17
+ padding: 0,
18
+ margin: '-1px',
19
+ overflow: 'hidden',
20
+ clip: 'rect(0, 0, 0, 0)',
21
+ whiteSpace: 'nowrap',
22
+ wordWrap: 'normal',
23
+ // Avoid browsers rendering the focus ring in some cases.
24
+ outline: 'none',
25
+ appearance: 'none',
26
+ // Avoid some cases where the browser will still render the native controls
27
+ '-webkit-appearance': 'none',
28
+ '-moz-appearance': 'none',
29
+ left: 0
30
+ });
31
+ }
32
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: VisuallyHiddenDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
33
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.3", type: VisuallyHiddenDirective, isStandalone: true, selector: "[rdxVisuallyHidden]", ngImport: i0 }); }
34
+ }
35
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: VisuallyHiddenDirective, decorators: [{
36
+ type: Directive,
37
+ args: [{
38
+ selector: '[rdxVisuallyHidden]',
39
+ standalone: true
40
+ }]
41
+ }] });
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlzdWFsbHktaGlkZGVuLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3ByaW1pdGl2ZXMvdmlzdWFsbHktaGlkZGVuL3NyYy92aXN1YWxseS1oaWRkZW4uZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFNdEUsTUFBTSxPQUFPLHVCQUF1QjtJQUpwQztRQUtJOztXQUVHO1FBQ2MsWUFBTyxHQUFHLE1BQU0sQ0FBMEIsVUFBVSxDQUFDLENBQUM7S0F3QjFFO0lBdEJHLFFBQVE7UUFDSixtQkFBbUI7UUFDbkIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUU7WUFDNUMsUUFBUSxFQUFFLFVBQVU7WUFDcEIsTUFBTSxFQUFFLENBQUM7WUFDVCxLQUFLLEVBQUUsS0FBSztZQUNaLE1BQU0sRUFBRSxLQUFLO1lBQ2IsT0FBTyxFQUFFLENBQUM7WUFDVixNQUFNLEVBQUUsTUFBTTtZQUNkLFFBQVEsRUFBRSxRQUFRO1lBQ2xCLElBQUksRUFBRSxrQkFBa0I7WUFDeEIsVUFBVSxFQUFFLFFBQVE7WUFDcEIsUUFBUSxFQUFFLFFBQVE7WUFDbEIseURBQXlEO1lBQ3pELE9BQU8sRUFBRSxNQUFNO1lBQ2YsVUFBVSxFQUFFLE1BQU07WUFDbEIsMkVBQTJFO1lBQzNFLG9CQUFvQixFQUFFLE1BQU07WUFDNUIsaUJBQWlCLEVBQUUsTUFBTTtZQUN6QixJQUFJLEVBQUUsQ0FBQztTQUNWLENBQUMsQ0FBQztJQUNQLENBQUM7OEdBM0JRLHVCQUF1QjtrR0FBdkIsdUJBQXVCOzsyRkFBdkIsdUJBQXVCO2tCQUpuQyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxxQkFBcUI7b0JBQy9CLFVBQVUsRUFBRSxJQUFJO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgT25Jbml0LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbcmR4VmlzdWFsbHlIaWRkZW5dJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIFZpc3VhbGx5SGlkZGVuRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0IHtcbiAgICAvKipcbiAgICAgKiBBY2Nlc3MgdGhlIGVsZW1lbnQuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBlbGVtZW50ID0gaW5qZWN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PihFbGVtZW50UmVmKTtcblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICAvLyBoaWRlIHRoZSBlbGVtZW50XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuc3R5bGUsIHtcbiAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgYm9yZGVyOiAwLFxuICAgICAgICAgICAgd2lkdGg6ICcxcHgnLFxuICAgICAgICAgICAgaGVpZ2h0OiAnMXB4JyxcbiAgICAgICAgICAgIHBhZGRpbmc6IDAsXG4gICAgICAgICAgICBtYXJnaW46ICctMXB4JyxcbiAgICAgICAgICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICAgICAgICAgIGNsaXA6ICdyZWN0KDAsIDAsIDAsIDApJyxcbiAgICAgICAgICAgIHdoaXRlU3BhY2U6ICdub3dyYXAnLFxuICAgICAgICAgICAgd29yZFdyYXA6ICdub3JtYWwnLFxuICAgICAgICAgICAgLy8gQXZvaWQgYnJvd3NlcnMgcmVuZGVyaW5nIHRoZSBmb2N1cyByaW5nIGluIHNvbWUgY2FzZXMuXG4gICAgICAgICAgICBvdXRsaW5lOiAnbm9uZScsXG4gICAgICAgICAgICBhcHBlYXJhbmNlOiAnbm9uZScsXG4gICAgICAgICAgICAvLyBBdm9pZCBzb21lIGNhc2VzIHdoZXJlIHRoZSBicm93c2VyIHdpbGwgc3RpbGwgcmVuZGVyIHRoZSBuYXRpdmUgY29udHJvbHNcbiAgICAgICAgICAgICctd2Via2l0LWFwcGVhcmFuY2UnOiAnbm9uZScsXG4gICAgICAgICAgICAnLW1vei1hcHBlYXJhbmNlJzogJ25vbmUnLFxuICAgICAgICAgICAgbGVmdDogMFxuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,166 @@
1
+ import * as i0 from '@angular/core';
2
+ import { InjectionToken, inject, EventEmitter, booleanAttribute, Directive, Input, Output, HostListener } from '@angular/core';
3
+ import { NG_VALUE_ACCESSOR } from '@angular/forms';
4
+
5
+ const CheckboxToken = new InjectionToken('CheckboxToken');
6
+ function injectCheckbox() {
7
+ return inject(CheckboxToken);
8
+ }
9
+
10
+ class CheckboxDirective {
11
+ constructor() {
12
+ /**
13
+ * Defines whether the checkbox is checked.
14
+ */
15
+ this.checked = false;
16
+ /**
17
+ * Defines whether the checkbox is indeterminate.
18
+ */
19
+ this.indeterminate = false;
20
+ /**
21
+ * Defines whether the checkbox is disabled.
22
+ */
23
+ this.disabled = false;
24
+ /**
25
+ * Event emitted when the checkbox checked state changes.
26
+ */
27
+ this.checkedChange = new EventEmitter();
28
+ /**
29
+ * Event emitted when the indeterminate state changes.
30
+ */
31
+ this.indeterminateChange = new EventEmitter();
32
+ }
33
+ /**
34
+ * Determine the state
35
+ */
36
+ get state() {
37
+ if (this.indeterminate) {
38
+ return 'indeterminate';
39
+ }
40
+ return this.checked ? 'checked' : 'unchecked';
41
+ }
42
+ onKeydown(event) {
43
+ // According to WAI ARIA, Checkboxes don't activate on enter keypress
44
+ if (event.key === 'Enter') {
45
+ event.preventDefault();
46
+ }
47
+ }
48
+ onClick() {
49
+ this.checked = this.indeterminate ? true : !this.checked;
50
+ this.checkedChange.emit(this.checked);
51
+ this.onChange?.(this.checked);
52
+ // if the checkbox was indeterminate, it isn't anymore
53
+ if (this.indeterminate) {
54
+ this.indeterminate = false;
55
+ this.indeterminateChange.emit(this.indeterminate);
56
+ }
57
+ }
58
+ onBlur() {
59
+ this.onTouched?.();
60
+ }
61
+ /**
62
+ * Sets the checked state of the checkbox.
63
+ * @param checked The checked state of the checkbox.
64
+ * @internal
65
+ */
66
+ writeValue(checked) {
67
+ this.checked = checked;
68
+ }
69
+ /**
70
+ * Registers a callback function that should be called when the checkbox checked state changes.
71
+ * @param fn The callback function.
72
+ * @internal
73
+ */
74
+ registerOnChange(fn) {
75
+ this.onChange = fn;
76
+ }
77
+ /**
78
+ * Registers a callback function that should be called when the checkbox is blurred.
79
+ * @param fn The callback function.
80
+ * @internal
81
+ */
82
+ registerOnTouched(fn) {
83
+ this.onTouched = fn;
84
+ }
85
+ /**
86
+ * Sets the disabled state of the checkbox.
87
+ * @param isDisabled The disabled state of the checkbox.
88
+ * @internal
89
+ */
90
+ setDisabledState(isDisabled) {
91
+ this.disabled = isDisabled;
92
+ }
93
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: CheckboxDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
94
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "17.3.3", type: CheckboxDirective, isStandalone: true, selector: "button[rdxCheckbox]", inputs: { checked: ["checked", "checked", booleanAttribute], indeterminate: ["indeterminate", "indeterminate", booleanAttribute], disabled: ["disabled", "disabled", booleanAttribute] }, outputs: { checkedChange: "checkedChange", indeterminateChange: "indeterminateChange" }, host: { attributes: { "type": "button", "role": "checkbox" }, listeners: { "keydown": "onKeydown($event)", "click": "onClick()", "blur": "onBlur()" }, properties: { "disabled": "disabled", "attr.aria-checked": "indeterminate ? \"mixed\" : checked", "attr.data-disabled": "disabled ? \"\" : null", "attr.data-state": "state" } }, providers: [
95
+ { provide: CheckboxToken, useExisting: CheckboxDirective },
96
+ { provide: NG_VALUE_ACCESSOR, useExisting: CheckboxDirective, multi: true }
97
+ ], ngImport: i0 }); }
98
+ }
99
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: CheckboxDirective, decorators: [{
100
+ type: Directive,
101
+ args: [{
102
+ selector: 'button[rdxCheckbox]',
103
+ standalone: true,
104
+ providers: [
105
+ { provide: CheckboxToken, useExisting: CheckboxDirective },
106
+ { provide: NG_VALUE_ACCESSOR, useExisting: CheckboxDirective, multi: true }
107
+ ],
108
+ host: {
109
+ type: 'button',
110
+ role: 'checkbox',
111
+ '[disabled]': 'disabled',
112
+ '[attr.aria-checked]': 'indeterminate ? "mixed" : checked',
113
+ '[attr.data-disabled]': 'disabled ? "" : null',
114
+ '[attr.data-state]': 'state'
115
+ }
116
+ }]
117
+ }], propDecorators: { checked: [{
118
+ type: Input,
119
+ args: [{ transform: booleanAttribute }]
120
+ }], indeterminate: [{
121
+ type: Input,
122
+ args: [{ transform: booleanAttribute }]
123
+ }], disabled: [{
124
+ type: Input,
125
+ args: [{ transform: booleanAttribute }]
126
+ }], checkedChange: [{
127
+ type: Output
128
+ }], indeterminateChange: [{
129
+ type: Output
130
+ }], onKeydown: [{
131
+ type: HostListener,
132
+ args: ['keydown', ['$event']]
133
+ }], onClick: [{
134
+ type: HostListener,
135
+ args: ['click']
136
+ }], onBlur: [{
137
+ type: HostListener,
138
+ args: ['blur']
139
+ }] } });
140
+
141
+ class CheckboxIndicatorDirective {
142
+ constructor() {
143
+ this.checkbox = injectCheckbox();
144
+ }
145
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: CheckboxIndicatorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
146
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.3", type: CheckboxIndicatorDirective, isStandalone: true, selector: "[rdxCheckboxIndicator]", host: { properties: { "style.pointer-events": "\"none\"", "attr.data-state": "checkbox.state", "attr.data-disabled": "checkbox.disabled ? \"\" : null" } }, ngImport: i0 }); }
147
+ }
148
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: CheckboxIndicatorDirective, decorators: [{
149
+ type: Directive,
150
+ args: [{
151
+ selector: '[rdxCheckboxIndicator]',
152
+ standalone: true,
153
+ host: {
154
+ '[style.pointer-events]': '"none"',
155
+ '[attr.data-state]': 'checkbox.state',
156
+ '[attr.data-disabled]': 'checkbox.disabled ? "" : null'
157
+ }
158
+ }]
159
+ }] });
160
+
161
+ /**
162
+ * Generated bundle index. Do not edit.
163
+ */
164
+
165
+ export { CheckboxDirective, CheckboxIndicatorDirective, CheckboxToken, injectCheckbox };
166
+ //# sourceMappingURL=radix-ng-primitives-checkbox.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"radix-ng-primitives-checkbox.mjs","sources":["../../../packages/primitives/checkbox/src/checkbox.token.ts","../../../packages/primitives/checkbox/src/checkbox.directive.ts","../../../packages/primitives/checkbox/src/checkbox-indicator.directive.ts","../../../packages/primitives/checkbox/radix-ng-primitives-checkbox.ts"],"sourcesContent":["import { InjectionToken, inject } from '@angular/core';\nimport type { CheckboxDirective } from './checkbox.directive';\n\nexport const CheckboxToken = new InjectionToken<CheckboxDirective>('CheckboxToken');\n\nexport function injectCheckbox(): CheckboxDirective {\n return inject(CheckboxToken);\n}\n","import {\n Directive,\n EventEmitter,\n HostListener,\n Input,\n Output,\n booleanAttribute\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { CheckboxToken } from './checkbox.token';\n\n@Directive({\n selector: 'button[rdxCheckbox]',\n standalone: true,\n providers: [\n { provide: CheckboxToken, useExisting: CheckboxDirective },\n { provide: NG_VALUE_ACCESSOR, useExisting: CheckboxDirective, multi: true }\n ],\n host: {\n type: 'button',\n role: 'checkbox',\n '[disabled]': 'disabled',\n '[attr.aria-checked]': 'indeterminate ? \"mixed\" : checked',\n '[attr.data-disabled]': 'disabled ? \"\" : null',\n '[attr.data-state]': 'state'\n }\n})\nexport class CheckboxDirective implements ControlValueAccessor {\n /**\n * Defines whether the checkbox is checked.\n */\n @Input({ transform: booleanAttribute }) checked = false;\n\n /**\n * Defines whether the checkbox is indeterminate.\n */\n @Input({ transform: booleanAttribute })\n indeterminate = false;\n\n /**\n * Defines whether the checkbox is disabled.\n */\n @Input({ transform: booleanAttribute }) disabled = false;\n\n /**\n * Event emitted when the checkbox checked state changes.\n */\n @Output() readonly checkedChange = new EventEmitter<boolean>();\n\n /**\n * Event emitted when the indeterminate state changes.\n */\n @Output() readonly indeterminateChange = new EventEmitter<boolean>();\n\n /**\n * Determine the state\n */\n get state(): 'checked' | 'unchecked' | 'indeterminate' {\n if (this.indeterminate) {\n return 'indeterminate';\n }\n return this.checked ? 'checked' : 'unchecked';\n }\n\n /**\n * Store the callback function that should be called when the checkbox checked state changes.\n * @internal\n */\n private onChange?: (checked: boolean) => void;\n\n /**\n * Store the callback function that should be called when the checkbox is blurred.\n * @internal\n */\n private onTouched?: () => void;\n\n @HostListener('keydown', ['$event'])\n onKeydown(event: KeyboardEvent): void {\n // According to WAI ARIA, Checkboxes don't activate on enter keypress\n if (event.key === 'Enter') {\n event.preventDefault();\n }\n }\n\n @HostListener('click')\n onClick(): void {\n this.checked = this.indeterminate ? true : !this.checked;\n this.checkedChange.emit(this.checked);\n this.onChange?.(this.checked);\n\n // if the checkbox was indeterminate, it isn't anymore\n if (this.indeterminate) {\n this.indeterminate = false;\n this.indeterminateChange.emit(this.indeterminate);\n }\n }\n\n @HostListener('blur')\n onBlur(): void {\n this.onTouched?.();\n }\n\n /**\n * Sets the checked state of the checkbox.\n * @param checked The checked state of the checkbox.\n * @internal\n */\n writeValue(checked: boolean): void {\n this.checked = checked;\n }\n\n /**\n * Registers a callback function that should be called when the checkbox checked state changes.\n * @param fn The callback function.\n * @internal\n */\n registerOnChange(fn: (checked: boolean) => void): void {\n this.onChange = fn;\n }\n\n /**\n * Registers a callback function that should be called when the checkbox is blurred.\n * @param fn The callback function.\n * @internal\n */\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n /**\n * Sets the disabled state of the checkbox.\n * @param isDisabled The disabled state of the checkbox.\n * @internal\n */\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n}\n","import { Directive } from '@angular/core';\nimport { injectCheckbox } from './checkbox.token';\n\n@Directive({\n selector: '[rdxCheckboxIndicator]',\n standalone: true,\n host: {\n '[style.pointer-events]': '\"none\"',\n '[attr.data-state]': 'checkbox.state',\n '[attr.data-disabled]': 'checkbox.disabled ? \"\" : null'\n }\n})\nexport class CheckboxIndicatorDirective {\n protected readonly checkbox = injectCheckbox();\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ import * as i0 from '@angular/core';
2
+ import { Directive, Optional, Input, HostListener } from '@angular/core';
3
+
4
+ class LabelDirective {
5
+ constructor(el) {
6
+ this.el = el;
7
+ /**
8
+ * The id of the element the label is associated with.
9
+ * @default '-'
10
+ */
11
+ this.htmlFor = '';
12
+ }
13
+ // prevent text selection when double-clicking label
14
+ // The main problem with double-clicks in a web app is that
15
+ // you will have to create special code to handle this on touch enabled devices.
16
+ onMouseDown(event) {
17
+ const target = event.target;
18
+ // only prevent text selection if clicking inside the label itself
19
+ if (['BUTTON', 'INPUT', 'SELECT', 'TEXTAREA'].includes(target.tagName)) {
20
+ return;
21
+ }
22
+ // prevent text selection when double-clicking label
23
+ if (this.el.nativeElement.contains(target) && !event.defaultPrevented && event.detail > 1) {
24
+ event.preventDefault();
25
+ }
26
+ }
27
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: LabelDirective, deps: [{ token: i0.ElementRef, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
28
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.3", type: LabelDirective, isStandalone: true, selector: "label[rdxLabel]", inputs: { htmlFor: "htmlFor" }, host: { listeners: { "mousedown": "onMouseDown($event)" }, properties: { "attr.for": "htmlFor ? htmlFor : null" } }, ngImport: i0 }); }
29
+ }
30
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: LabelDirective, decorators: [{
31
+ type: Directive,
32
+ args: [{
33
+ selector: 'label[rdxLabel]',
34
+ standalone: true,
35
+ host: {
36
+ '[attr.for]': 'htmlFor ? htmlFor : null'
37
+ }
38
+ }]
39
+ }], ctorParameters: () => [{ type: i0.ElementRef, decorators: [{
40
+ type: Optional
41
+ }] }], propDecorators: { htmlFor: [{
42
+ type: Input
43
+ }], onMouseDown: [{
44
+ type: HostListener,
45
+ args: ['mousedown', ['$event']]
46
+ }] } });
47
+
48
+ /**
49
+ * Generated bundle index. Do not edit.
50
+ */
51
+
52
+ export { LabelDirective };
53
+ //# sourceMappingURL=radix-ng-primitives-label.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"radix-ng-primitives-label.mjs","sources":["../../../packages/primitives/label/src/label.directive.ts","../../../packages/primitives/label/radix-ng-primitives-label.ts"],"sourcesContent":["import { Directive, ElementRef, HostListener, Input, Optional } from '@angular/core';\n\n@Directive({\n selector: 'label[rdxLabel]',\n standalone: true,\n host: {\n '[attr.for]': 'htmlFor ? htmlFor : null'\n }\n})\nexport class LabelDirective {\n /**\n * The id of the element the label is associated with.\n * @default '-'\n */\n @Input() htmlFor = '';\n\n constructor(@Optional() private el: ElementRef) {}\n\n // prevent text selection when double-clicking label\n // The main problem with double-clicks in a web app is that\n // you will have to create special code to handle this on touch enabled devices.\n @HostListener('mousedown', ['$event'])\n onMouseDown(event: MouseEvent): void {\n const target = event.target as HTMLElement;\n\n // only prevent text selection if clicking inside the label itself\n if (['BUTTON', 'INPUT', 'SELECT', 'TEXTAREA'].includes(target.tagName)) {\n return;\n }\n\n // prevent text selection when double-clicking label\n if (this.el.nativeElement.contains(target) && !event.defaultPrevented && event.detail > 1) {\n event.preventDefault();\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;MASa,cAAc,CAAA;AAOvB,IAAA,WAAA,CAAgC,EAAc,EAAA;QAAd,IAAE,CAAA,EAAA,GAAF,EAAE,CAAY;AAN9C;;;AAGG;QACM,IAAO,CAAA,OAAA,GAAG,EAAE,CAAC;KAE4B;;;;AAMlD,IAAA,WAAW,CAAC,KAAiB,EAAA;AACzB,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB,CAAC;;AAG3C,QAAA,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;YACpE,OAAO;SACV;;QAGD,IAAI,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YACvF,KAAK,CAAC,cAAc,EAAE,CAAC;SAC1B;KACJ;8GAzBQ,cAAc,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAAd,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,WAAA,EAAA,qBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,UAAA,EAAA,0BAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;2FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAP1B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,IAAI,EAAE;AACF,wBAAA,YAAY,EAAE,0BAA0B;AAC3C,qBAAA;AACJ,iBAAA,CAAA;;0BAQgB,QAAQ;yCAFZ,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAQN,WAAW,EAAA,CAAA;sBADV,YAAY;uBAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAA;;;ACrBzC;;AAEG;;;;"}
@@ -0,0 +1,93 @@
1
+ import * as i0 from '@angular/core';
2
+ import { InjectionToken, inject, Directive, numberAttribute, Input } from '@angular/core';
3
+
4
+ const ProgressToken = new InjectionToken('ProgressDirective');
5
+ function injectProgress() {
6
+ return inject(ProgressToken);
7
+ }
8
+
9
+ class ProgressIndicatorDirective {
10
+ constructor() {
11
+ this.progress = injectProgress();
12
+ }
13
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: ProgressIndicatorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
14
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.3", type: ProgressIndicatorDirective, isStandalone: true, selector: "[rdxProgressIndicator]", host: { properties: { "attr.data-state": "progress.state", "attr.data-value": "progress.value", "attr.data-max": "progress.max" } }, ngImport: i0 }); }
15
+ }
16
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: ProgressIndicatorDirective, decorators: [{
17
+ type: Directive,
18
+ args: [{
19
+ selector: '[rdxProgressIndicator]',
20
+ standalone: true,
21
+ host: {
22
+ '[attr.data-state]': 'progress.state',
23
+ '[attr.data-value]': 'progress.value',
24
+ '[attr.data-max]': 'progress.max'
25
+ }
26
+ }]
27
+ }] });
28
+
29
+ class ProgressDirective {
30
+ constructor() {
31
+ /**
32
+ * Define the progress value.
33
+ */
34
+ this.value = 0;
35
+ /**
36
+ * Define the progress max value.
37
+ * @default 100
38
+ */
39
+ this.max = 100;
40
+ /**
41
+ * Define a function that returns the progress value label.
42
+ */
43
+ this.valueLabel = (value, max) => `${Math.round((value / max) * 100)}%`;
44
+ }
45
+ /**
46
+ * Get the state of the progress bar.
47
+ * @returns 'indeterminate' | 'loading' | 'complete'
48
+ * @internal
49
+ */
50
+ get state() {
51
+ return this.value == null
52
+ ? 'indeterminate'
53
+ : this.value === this.max
54
+ ? 'complete'
55
+ : 'loading';
56
+ }
57
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: ProgressDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
58
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "17.3.3", type: ProgressDirective, isStandalone: true, selector: "[rdxProgress]", inputs: { value: ["rdxProgressValue", "value", numberAttribute], max: ["rdxProgressMax", "max", numberAttribute], valueLabel: ["rdxProgressValueLabel", "valueLabel"] }, host: { attributes: { "role": "progressbar" }, properties: { "attr.aria-valuemax": "max", "attr.aria-valuemin": "0", "attr.aria-valuenow": "value", "attr.aria-valuetext": "valueLabel(value, max)", "attr.data-state": "state", "attr.data-value": "value", "attr.data-max": "max" } }, providers: [{ provide: ProgressToken, useExisting: ProgressDirective }], ngImport: i0 }); }
59
+ }
60
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: ProgressDirective, decorators: [{
61
+ type: Directive,
62
+ args: [{
63
+ selector: '[rdxProgress]',
64
+ standalone: true,
65
+ providers: [{ provide: ProgressToken, useExisting: ProgressDirective }],
66
+ host: {
67
+ role: 'progressbar',
68
+ '[attr.aria-valuemax]': 'max',
69
+ '[attr.aria-valuemin]': '0',
70
+ '[attr.aria-valuenow]': 'value',
71
+ '[attr.aria-valuetext]': 'valueLabel(value, max)',
72
+ '[attr.data-state]': 'state',
73
+ '[attr.data-value]': 'value',
74
+ '[attr.data-max]': 'max'
75
+ }
76
+ }]
77
+ }], propDecorators: { value: [{
78
+ type: Input,
79
+ args: [{ alias: 'rdxProgressValue', transform: numberAttribute }]
80
+ }], max: [{
81
+ type: Input,
82
+ args: [{ alias: 'rdxProgressMax', transform: numberAttribute }]
83
+ }], valueLabel: [{
84
+ type: Input,
85
+ args: ['rdxProgressValueLabel']
86
+ }] } });
87
+
88
+ /**
89
+ * Generated bundle index. Do not edit.
90
+ */
91
+
92
+ export { ProgressDirective, ProgressIndicatorDirective };
93
+ //# sourceMappingURL=radix-ng-primitives-progress.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"radix-ng-primitives-progress.mjs","sources":["../../../packages/primitives/progress/src/progress.token.ts","../../../packages/primitives/progress/src/progress-indicator.directive.ts","../../../packages/primitives/progress/src/progress.directive.ts","../../../packages/primitives/progress/radix-ng-primitives-progress.ts"],"sourcesContent":["import { InjectionToken, inject } from '@angular/core';\nimport type { ProgressDirective } from './progress.directive';\n\nexport const ProgressToken = new InjectionToken<ProgressDirective>('ProgressDirective');\n\nexport function injectProgress(): ProgressDirective {\n return inject(ProgressToken);\n}\n","import { Directive } from '@angular/core';\nimport { injectProgress } from './progress.token';\n\n@Directive({\n selector: '[rdxProgressIndicator]',\n standalone: true,\n host: {\n '[attr.data-state]': 'progress.state',\n '[attr.data-value]': 'progress.value',\n '[attr.data-max]': 'progress.max'\n }\n})\nexport class ProgressIndicatorDirective {\n protected readonly progress = injectProgress();\n}\n","import { Directive, Input, numberAttribute } from '@angular/core';\nimport { ProgressToken } from './progress.token';\n\n@Directive({\n selector: '[rdxProgress]',\n standalone: true,\n providers: [{ provide: ProgressToken, useExisting: ProgressDirective }],\n host: {\n role: 'progressbar',\n '[attr.aria-valuemax]': 'max',\n '[attr.aria-valuemin]': '0',\n '[attr.aria-valuenow]': 'value',\n '[attr.aria-valuetext]': 'valueLabel(value, max)',\n '[attr.data-state]': 'state',\n '[attr.data-value]': 'value',\n '[attr.data-max]': 'max'\n }\n})\nexport class ProgressDirective {\n /**\n * Define the progress value.\n */\n @Input({ alias: 'rdxProgressValue', transform: numberAttribute }) value = 0;\n\n /**\n * Define the progress max value.\n * @default 100\n */\n @Input({ alias: 'rdxProgressMax', transform: numberAttribute }) max = 100;\n\n /**\n * Define a function that returns the progress value label.\n */\n @Input('rdxProgressValueLabel') valueLabel: (value: number, max: number) => string = (\n value,\n max\n ) => `${Math.round((value / max) * 100)}%`;\n\n /**\n * Get the state of the progress bar.\n * @returns 'indeterminate' | 'loading' | 'complete'\n * @internal\n */\n get state(): 'indeterminate' | 'loading' | 'complete' {\n return this.value == null\n ? 'indeterminate'\n : this.value === this.max\n ? 'complete'\n : 'loading';\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}