@symbiote-native/slider 0.1.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 (109) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +90 -0
  3. package/build/angular/index.d.ts +3 -0
  4. package/build/angular/index.js +2 -0
  5. package/build/angular/slider/index.android.d.ts +9 -0
  6. package/build/angular/slider/index.android.js +71 -0
  7. package/build/angular/slider/index.d.ts +2 -0
  8. package/build/angular/slider/index.ios.d.ts +11 -0
  9. package/build/angular/slider/index.ios.js +72 -0
  10. package/build/angular/slider/index.js +3 -0
  11. package/build/angular/slider/shared.d.ts +84 -0
  12. package/build/angular/slider/shared.js +648 -0
  13. package/build/core/constants.d.ts +20 -0
  14. package/build/core/constants.js +40 -0
  15. package/build/core/index.d.ts +7 -0
  16. package/build/core/index.js +11 -0
  17. package/build/core/render-slider.d.ts +11 -0
  18. package/build/core/render-slider.js +66 -0
  19. package/build/core/render-steps-indicator.d.ts +28 -0
  20. package/build/core/render-steps-indicator.js +91 -0
  21. package/build/core/slider-props.d.ts +52 -0
  22. package/build/core/slider-props.js +6 -0
  23. package/build/core/slider-state.d.ts +15 -0
  24. package/build/core/slider-state.js +73 -0
  25. package/build/react/index.d.ts +4 -0
  26. package/build/react/index.js +7 -0
  27. package/build/react/slider/index.android.d.ts +1 -0
  28. package/build/react/slider/index.android.js +10 -0
  29. package/build/react/slider/index.d.ts +1 -0
  30. package/build/react/slider/index.ios.d.ts +1 -0
  31. package/build/react/slider/index.ios.js +11 -0
  32. package/build/react/slider/index.js +3 -0
  33. package/build/react/slider/shared.d.ts +10 -0
  34. package/build/react/slider/shared.js +175 -0
  35. package/build/register.d.ts +1 -0
  36. package/build/register.js +48 -0
  37. package/build/vue/index.d.ts +3 -0
  38. package/build/vue/index.js +8 -0
  39. package/build/vue/slider/index.android.d.ts +18 -0
  40. package/build/vue/slider/index.android.js +10 -0
  41. package/build/vue/slider/index.d.ts +2 -0
  42. package/build/vue/slider/index.ios.d.ts +18 -0
  43. package/build/vue/slider/index.ios.js +11 -0
  44. package/build/vue/slider/index.js +3 -0
  45. package/build/vue/slider/shared.d.ts +26 -0
  46. package/build/vue/slider/shared.js +254 -0
  47. package/build-ngc/angular/index.d.ts +3 -0
  48. package/build-ngc/angular/index.js +3 -0
  49. package/build-ngc/angular/index.js.map +1 -0
  50. package/build-ngc/angular/slider/index.android.d.ts +12 -0
  51. package/build-ngc/angular/slider/index.android.js +28 -0
  52. package/build-ngc/angular/slider/index.android.js.map +1 -0
  53. package/build-ngc/angular/slider/index.d.ts +2 -0
  54. package/build-ngc/angular/slider/index.ios.d.ts +14 -0
  55. package/build-ngc/angular/slider/index.ios.js +29 -0
  56. package/build-ngc/angular/slider/index.ios.js.map +1 -0
  57. package/build-ngc/angular/slider/index.js +4 -0
  58. package/build-ngc/angular/slider/index.js.map +1 -0
  59. package/build-ngc/angular/slider/shared.d.ts +87 -0
  60. package/build-ngc/angular/slider/shared.js +427 -0
  61. package/build-ngc/angular/slider/shared.js.map +1 -0
  62. package/build-ngc/core/constants.d.ts +20 -0
  63. package/build-ngc/core/constants.js +41 -0
  64. package/build-ngc/core/constants.js.map +1 -0
  65. package/build-ngc/core/index.d.ts +7 -0
  66. package/build-ngc/core/index.js +12 -0
  67. package/build-ngc/core/index.js.map +1 -0
  68. package/build-ngc/core/render-slider.d.ts +11 -0
  69. package/build-ngc/core/render-slider.js +67 -0
  70. package/build-ngc/core/render-slider.js.map +1 -0
  71. package/build-ngc/core/render-steps-indicator.d.ts +28 -0
  72. package/build-ngc/core/render-steps-indicator.js +92 -0
  73. package/build-ngc/core/render-steps-indicator.js.map +1 -0
  74. package/build-ngc/core/slider-props.d.ts +52 -0
  75. package/build-ngc/core/slider-props.js +7 -0
  76. package/build-ngc/core/slider-props.js.map +1 -0
  77. package/build-ngc/core/slider-state.d.ts +15 -0
  78. package/build-ngc/core/slider-state.js +74 -0
  79. package/build-ngc/core/slider-state.js.map +1 -0
  80. package/build-ngc/register.d.ts +1 -0
  81. package/build-ngc/register.js +49 -0
  82. package/build-ngc/register.js.map +1 -0
  83. package/package.json +116 -0
  84. package/src/angular/index.ts +4 -0
  85. package/src/angular/slider/index.android.ts +25 -0
  86. package/src/angular/slider/index.ios.ts +26 -0
  87. package/src/angular/slider/index.ts +5 -0
  88. package/src/angular/slider/shared.ts +364 -0
  89. package/src/angular/slider/slider.test.ts +260 -0
  90. package/src/core/constants.ts +47 -0
  91. package/src/core/index.ts +46 -0
  92. package/src/core/render-slider.ts +89 -0
  93. package/src/core/render-steps-indicator.ts +154 -0
  94. package/src/core/slider-props.ts +83 -0
  95. package/src/core/slider-state.ts +112 -0
  96. package/src/react/index.ts +11 -0
  97. package/src/react/slider/index.android.ts +13 -0
  98. package/src/react/slider/index.ios.ts +14 -0
  99. package/src/react/slider/index.ts +4 -0
  100. package/src/react/slider/shared.ts +332 -0
  101. package/src/react/slider/slider.test.tsx +203 -0
  102. package/src/register.test.tsx +89 -0
  103. package/src/register.ts +59 -0
  104. package/src/vue/index.ts +11 -0
  105. package/src/vue/slider/index.android.ts +13 -0
  106. package/src/vue/slider/index.ios.ts +14 -0
  107. package/src/vue/slider/index.ts +5 -0
  108. package/src/vue/slider/shared.ts +383 -0
  109. package/src/vue/slider/slider.test.ts +184 -0
@@ -0,0 +1,28 @@
1
+ // Slider on Android: the native view sizes itself (no default height), lays out implicit steps at
2
+ // 128-point resolution, and keeps the step row at the top. Mirrors the library's Android branches.
3
+ import { ChangeDetectionStrategy, Component } from '@angular/core';
4
+ import { DescriptorOutlet } from '@symbiote-native/angular';
5
+ import { SliderBase } from './shared';
6
+ import { SLIDER_STEP_RESOLUTION_ANDROID } from '../../core';
7
+ import * as i0 from "@angular/core";
8
+ const ANDROID_STEPS_CONTAINER_TOP = 0;
9
+ export class Slider extends SliderBase {
10
+ platform = {
11
+ defaultStyle: {},
12
+ stepResolution: SLIDER_STEP_RESOLUTION_ANDROID,
13
+ stepsContainerTop: ANDROID_STEPS_CONTAINER_TOP,
14
+ };
15
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: Slider, deps: null, target: i0.ɵɵFactoryTarget.Component });
16
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.4", type: Slider, isStandalone: true, selector: "Slider", usesInheritance: true, ngImport: i0, template: `<symbiote-descriptor-outlet [node]="descriptor" />`, isInline: true, dependencies: [{ kind: "component", type: DescriptorOutlet, selector: "symbiote-descriptor-outlet", inputs: ["node"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
17
+ }
18
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: Slider, decorators: [{
19
+ type: Component,
20
+ args: [{
21
+ selector: 'Slider',
22
+ standalone: true,
23
+ imports: [DescriptorOutlet],
24
+ changeDetection: ChangeDetectionStrategy.OnPush,
25
+ template: `<symbiote-descriptor-outlet [node]="descriptor" />`,
26
+ }]
27
+ }] });
28
+ //# sourceMappingURL=index.android.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.android.js","sourceRoot":"","sources":["../../../src/angular/slider/index.android.ts"],"names":[],"mappings":"AAAA,kGAAkG;AAClG,mGAAmG;AAEnG,OAAO,EAAE,uBAAuB,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,8BAA8B,EAAE,MAAM,YAAY,CAAC;;AAG5D,MAAM,2BAA2B,GAAG,CAAC,CAAC;AAStC,MAAM,OAAO,MAAO,SAAQ,UAAU;IACjB,QAAQ,GAAG;QAC5B,YAAY,EAAE,EAAE;QAChB,cAAc,EAAE,8BAA8B;QAC9C,iBAAiB,EAAE,2BAA2B;KAC/C,CAAC;uGALS,MAAM;2FAAN,MAAM,yFAFP,oDAAoD,4DAFpD,gBAAgB;;2FAIf,MAAM;kBAPlB,SAAS;mBAAC;oBACT,QAAQ,EAAE,QAAQ;oBAClB,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,gBAAgB,CAAC;oBAC3B,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,QAAQ,EAAE,oDAAoD;iBAC/D"}
@@ -0,0 +1,2 @@
1
+ export { Slider } from './index.ios';
2
+ export type { ISliderProps } from './shared';
@@ -0,0 +1,14 @@
1
+ import { SliderBase } from './shared';
2
+ import * as i0 from "@angular/core";
3
+ export type { ISliderProps } from './shared';
4
+ export declare class Slider extends SliderBase {
5
+ protected readonly platform: {
6
+ defaultStyle: {
7
+ height: number;
8
+ };
9
+ stepResolution: number;
10
+ stepsContainerTop: number;
11
+ };
12
+ static ɵfac: i0.ɵɵFactoryDeclaration<Slider, never>;
13
+ static ɵcmp: i0.ɵɵComponentDeclaration<Slider, "Slider", never, {}, {}, never, never, true, never>;
14
+ }
@@ -0,0 +1,29 @@
1
+ // Slider on iOS: the native view has an intrinsic 40pt height (the wrapper applies it as the
2
+ // default), lays out implicit steps at 1000-point resolution, and nudges the step row down 10pt.
3
+ // Also the base (./index re-exports it) for headless. Mirrors the library's iOS branches.
4
+ import { ChangeDetectionStrategy, Component } from '@angular/core';
5
+ import { DescriptorOutlet } from '@symbiote-native/angular';
6
+ import { SliderBase } from './shared';
7
+ import { SLIDER_IOS_DEFAULT_HEIGHT, SLIDER_STEP_RESOLUTION_IOS } from '../../core';
8
+ import * as i0 from "@angular/core";
9
+ const IOS_STEPS_CONTAINER_TOP = 10;
10
+ export class Slider extends SliderBase {
11
+ platform = {
12
+ defaultStyle: { height: SLIDER_IOS_DEFAULT_HEIGHT },
13
+ stepResolution: SLIDER_STEP_RESOLUTION_IOS,
14
+ stepsContainerTop: IOS_STEPS_CONTAINER_TOP,
15
+ };
16
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: Slider, deps: null, target: i0.ɵɵFactoryTarget.Component });
17
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.4", type: Slider, isStandalone: true, selector: "Slider", usesInheritance: true, ngImport: i0, template: `<symbiote-descriptor-outlet [node]="descriptor" />`, isInline: true, dependencies: [{ kind: "component", type: DescriptorOutlet, selector: "symbiote-descriptor-outlet", inputs: ["node"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
18
+ }
19
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: Slider, decorators: [{
20
+ type: Component,
21
+ args: [{
22
+ selector: 'Slider',
23
+ standalone: true,
24
+ imports: [DescriptorOutlet],
25
+ changeDetection: ChangeDetectionStrategy.OnPush,
26
+ template: `<symbiote-descriptor-outlet [node]="descriptor" />`,
27
+ }]
28
+ }] });
29
+ //# sourceMappingURL=index.ios.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.ios.js","sourceRoot":"","sources":["../../../src/angular/slider/index.ios.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAC7F,iGAAiG;AACjG,0FAA0F;AAE1F,OAAO,EAAE,uBAAuB,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,yBAAyB,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;;AAGnF,MAAM,uBAAuB,GAAG,EAAE,CAAC;AASnC,MAAM,OAAO,MAAO,SAAQ,UAAU;IACjB,QAAQ,GAAG;QAC5B,YAAY,EAAE,EAAE,MAAM,EAAE,yBAAyB,EAAE;QACnD,cAAc,EAAE,0BAA0B;QAC1C,iBAAiB,EAAE,uBAAuB;KAC3C,CAAC;uGALS,MAAM;2FAAN,MAAM,yFAFP,oDAAoD,4DAFpD,gBAAgB;;2FAIf,MAAM;kBAPlB,SAAS;mBAAC;oBACT,QAAQ,EAAE,QAAQ;oBAClB,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,gBAAgB,CAAC;oBAC3B,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,QAAQ,EAAE,oDAAoD;iBAC/D"}
@@ -0,0 +1,4 @@
1
+ // Base entry for headless / tsc: re-exports the iOS variant (Metro picks index.ios / index.android
2
+ // per platform via filename selection; this no-suffix file is what tsx/vitest resolve). ADR 0026.
3
+ export { Slider } from './index.ios';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/angular/slider/index.ts"],"names":[],"mappings":"AAAA,mGAAmG;AACnG,kGAAkG;AAElG,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,87 @@
1
+ import { EventEmitter, type OnChanges } from '@angular/core';
2
+ import type { IAccessibilityProps, IAccessibilityStateValue, IAriaProps, IDescriptor } from '@symbiote-native/components';
3
+ import { type ISymbioteEvent } from '@symbiote-native/engine';
4
+ import { type ISliderPlatform, type ISliderProps as ISliderBaseProps } from '../../core';
5
+ import * as i0 from "@angular/core";
6
+ export type ISliderProps = Omit<ISliderBaseProps, 'onValueChange' | 'onSlidingStart' | 'onSlidingComplete' | 'onAccessibilityAction'>;
7
+ export declare abstract class SliderBase implements ISliderProps, OnChanges {
8
+ value?: number;
9
+ minimumValue?: number;
10
+ maximumValue?: number;
11
+ step?: number;
12
+ lowerLimit?: number;
13
+ upperLimit?: number;
14
+ minimumTrackTintColor?: ISliderProps['minimumTrackTintColor'];
15
+ maximumTrackTintColor?: ISliderProps['maximumTrackTintColor'];
16
+ thumbTintColor?: ISliderProps['thumbTintColor'];
17
+ disabled?: boolean;
18
+ inverted?: boolean;
19
+ tapToSeek?: boolean;
20
+ vertical?: boolean;
21
+ thumbImage?: ISliderProps['thumbImage'];
22
+ minimumTrackImage?: ISliderProps['minimumTrackImage'];
23
+ maximumTrackImage?: ISliderProps['maximumTrackImage'];
24
+ trackImage?: ISliderProps['trackImage'];
25
+ thumbSize?: number;
26
+ accessibilityUnits?: string;
27
+ accessibilityIncrements?: readonly string[];
28
+ renderStepNumber?: boolean;
29
+ testID?: string;
30
+ style?: ISliderProps['style'];
31
+ nativeID?: string;
32
+ accessible?: boolean;
33
+ accessibilityLabel?: string;
34
+ accessibilityHint?: string;
35
+ accessibilityRole?: IAccessibilityProps['accessibilityRole'];
36
+ accessibilityState?: IAccessibilityStateValue;
37
+ accessibilityValue?: IAccessibilityProps['accessibilityValue'];
38
+ accessibilityActions?: IAccessibilityProps['accessibilityActions'];
39
+ accessibilityLabelledBy?: string | string[];
40
+ importantForAccessibility?: IAccessibilityProps['importantForAccessibility'];
41
+ accessibilityLiveRegion?: IAccessibilityProps['accessibilityLiveRegion'];
42
+ screenReaderFocusable?: boolean;
43
+ accessibilityViewIsModal?: boolean;
44
+ accessibilityElementsHidden?: boolean;
45
+ accessibilityIgnoresInvertColors?: boolean;
46
+ accessibilityLanguage?: string;
47
+ accessibilityRespondsToUserInteraction?: boolean;
48
+ accessibilityShowsLargeContentViewer?: boolean;
49
+ accessibilityLargeContentTitle?: string;
50
+ onAccessibilityTap?: (event: ISymbioteEvent) => void;
51
+ onMagicTap?: (event: ISymbioteEvent) => void;
52
+ onAccessibilityEscape?: (event: ISymbioteEvent) => void;
53
+ role?: IAriaProps['role'];
54
+ ariaLabel?: string;
55
+ ariaLabelledBy?: string;
56
+ ariaLive?: IAriaProps['aria-live'];
57
+ ariaHidden?: boolean;
58
+ ariaBusy?: boolean;
59
+ ariaChecked?: boolean | 'mixed';
60
+ ariaDisabled?: boolean;
61
+ ariaExpanded?: boolean;
62
+ ariaSelected?: boolean;
63
+ ariaModal?: boolean;
64
+ ariaValueMax?: number;
65
+ ariaValueMin?: number;
66
+ ariaValueNow?: number;
67
+ ariaValueText?: string;
68
+ readonly valueChange: EventEmitter<number>;
69
+ readonly slidingStart: EventEmitter<number>;
70
+ readonly slidingComplete: EventEmitter<number>;
71
+ readonly accessibilityAction: EventEmitter<ISymbioteEvent>;
72
+ protected abstract readonly platform: ISliderPlatform;
73
+ private readonly changeDetector;
74
+ private readonly elementRef;
75
+ private reportedValue;
76
+ private width;
77
+ ngOnChanges(): void;
78
+ protected readonly handleValueChange: (event: ISymbioteEvent) => void;
79
+ protected readonly handleSlidingStart: (event: ISymbioteEvent) => void;
80
+ protected readonly handleSlidingComplete: (event: ISymbioteEvent) => void;
81
+ protected readonly handleAccessibilityAction: (event: ISymbioteEvent) => void;
82
+ protected readonly handleLayout: (event: ISymbioteEvent) => void;
83
+ private inputProps;
84
+ get descriptor(): IDescriptor;
85
+ static ɵfac: i0.ɵɵFactoryDeclaration<SliderBase, never>;
86
+ static ɵdir: i0.ɵɵDirectiveDeclaration<SliderBase, never, never, { "value": { "alias": "value"; "required": false; }; "minimumValue": { "alias": "minimumValue"; "required": false; }; "maximumValue": { "alias": "maximumValue"; "required": false; }; "step": { "alias": "step"; "required": false; }; "lowerLimit": { "alias": "lowerLimit"; "required": false; }; "upperLimit": { "alias": "upperLimit"; "required": false; }; "minimumTrackTintColor": { "alias": "minimumTrackTintColor"; "required": false; }; "maximumTrackTintColor": { "alias": "maximumTrackTintColor"; "required": false; }; "thumbTintColor": { "alias": "thumbTintColor"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "inverted": { "alias": "inverted"; "required": false; }; "tapToSeek": { "alias": "tapToSeek"; "required": false; }; "vertical": { "alias": "vertical"; "required": false; }; "thumbImage": { "alias": "thumbImage"; "required": false; }; "minimumTrackImage": { "alias": "minimumTrackImage"; "required": false; }; "maximumTrackImage": { "alias": "maximumTrackImage"; "required": false; }; "trackImage": { "alias": "trackImage"; "required": false; }; "thumbSize": { "alias": "thumbSize"; "required": false; }; "accessibilityUnits": { "alias": "accessibilityUnits"; "required": false; }; "accessibilityIncrements": { "alias": "accessibilityIncrements"; "required": false; }; "renderStepNumber": { "alias": "renderStepNumber"; "required": false; }; "testID": { "alias": "testID"; "required": false; }; "style": { "alias": "style"; "required": false; }; "nativeID": { "alias": "nativeID"; "required": false; }; "accessible": { "alias": "accessible"; "required": false; }; "accessibilityLabel": { "alias": "accessibilityLabel"; "required": false; }; "accessibilityHint": { "alias": "accessibilityHint"; "required": false; }; "accessibilityRole": { "alias": "accessibilityRole"; "required": false; }; "accessibilityState": { "alias": "accessibilityState"; "required": false; }; "accessibilityValue": { "alias": "accessibilityValue"; "required": false; }; "accessibilityActions": { "alias": "accessibilityActions"; "required": false; }; "accessibilityLabelledBy": { "alias": "accessibilityLabelledBy"; "required": false; }; "importantForAccessibility": { "alias": "importantForAccessibility"; "required": false; }; "accessibilityLiveRegion": { "alias": "accessibilityLiveRegion"; "required": false; }; "screenReaderFocusable": { "alias": "screenReaderFocusable"; "required": false; }; "accessibilityViewIsModal": { "alias": "accessibilityViewIsModal"; "required": false; }; "accessibilityElementsHidden": { "alias": "accessibilityElementsHidden"; "required": false; }; "accessibilityIgnoresInvertColors": { "alias": "accessibilityIgnoresInvertColors"; "required": false; }; "accessibilityLanguage": { "alias": "accessibilityLanguage"; "required": false; }; "accessibilityRespondsToUserInteraction": { "alias": "accessibilityRespondsToUserInteraction"; "required": false; }; "accessibilityShowsLargeContentViewer": { "alias": "accessibilityShowsLargeContentViewer"; "required": false; }; "accessibilityLargeContentTitle": { "alias": "accessibilityLargeContentTitle"; "required": false; }; "onAccessibilityTap": { "alias": "onAccessibilityTap"; "required": false; }; "onMagicTap": { "alias": "onMagicTap"; "required": false; }; "onAccessibilityEscape": { "alias": "onAccessibilityEscape"; "required": false; }; "role": { "alias": "role"; "required": false; }; "ariaLabel": { "alias": "aria-label"; "required": false; }; "ariaLabelledBy": { "alias": "aria-labelledby"; "required": false; }; "ariaLive": { "alias": "aria-live"; "required": false; }; "ariaHidden": { "alias": "aria-hidden"; "required": false; }; "ariaBusy": { "alias": "aria-busy"; "required": false; }; "ariaChecked": { "alias": "aria-checked"; "required": false; }; "ariaDisabled": { "alias": "aria-disabled"; "required": false; }; "ariaExpanded": { "alias": "aria-expanded"; "required": false; }; "ariaSelected": { "alias": "aria-selected"; "required": false; }; "ariaModal": { "alias": "aria-modal"; "required": false; }; "ariaValueMax": { "alias": "aria-valuemax"; "required": false; }; "ariaValueMin": { "alias": "aria-valuemin"; "required": false; }; "ariaValueNow": { "alias": "aria-valuenow"; "required": false; }; "ariaValueText": { "alias": "aria-valuetext"; "required": false; }; }, { "valueChange": "valueChange"; "slidingStart": "slidingStart"; "slidingComplete": "slidingComplete"; "accessibilityAction": "accessibilityAction"; }, never, never, true, never>;
87
+ }
@@ -0,0 +1,427 @@
1
+ // Slider, the Angular lifecycle half. The logic (value/limit/disabled folds, the step-option
2
+ // layout) and the native render live in @symbiote-native/slider core, shared verbatim with the Vue
3
+ // adapter; here Angular supplies plain class fields (mirroring ActivityIndicatorBase/SwitchBase)
4
+ // plus real @Output() EventEmitters for the four native callbacks, and renders through
5
+ // DescriptorOutlet — the generic descriptorToAngular bridge (angular-adapter skill §6) — since
6
+ // this component has no imperative-ref need the Descriptor prop bag can't carry. The native
7
+ // RNCSlider view carries no symbiote metadata: the engine derives its events and color
8
+ // processors from the library's ViewConfig at runtime, registered by the side-effect import in
9
+ // ../../register (pulled in by the package barrel, NOT here, so this module and its tests stay
10
+ // free of the third-party spec). See CLAUDE.md <third_party_rn_packages_are_react_only> and
11
+ // ADR 0027.
12
+ //
13
+ // KNOWN GAP (deliberate, scoped by the task this module was built for): the custom `StepMarker`
14
+ // render slot (a per-adapter overlay element — a React FC, a Vue scoped slot) has no Angular
15
+ // equivalent yet. The natural analogue is a `@ContentChild(TemplateRef) stepMarker?:
16
+ // TemplateRef<IStepMarkerProps>` projected per step cell via `NgTemplateOutlet`, but wiring an
17
+ // embedded view per cell (constructing it, feeding its context, keeping it in step with
18
+ // DescriptorOutlet's imperative patch model, which has no notion of TemplateRefs) is
19
+ // disproportionate complexity for a path no real caller exercises today (examples/react/App.tsx's
20
+ // Slider usage has no step markers at all). Everything else — value/limits/disabled/colors/
21
+ // thumbImage/style/every event, and the DEFAULT numbered step indicator (`renderStepNumber`) — is
22
+ // fully implemented below; only the custom-marker overlay is unimplemented.
23
+ import { ChangeDetectorRef, Directive, ElementRef, EventEmitter, inject, Input, Output, } from '@angular/core';
24
+ import { anchorHostStyle } from '@symbiote-native/angular';
25
+ import { resolveAccessibilityProps } from '@symbiote-native/components';
26
+ import { dlog } from '@symbiote-native/engine';
27
+ import { sanitizeSliderValue, resolveSliderDisabled, resolveSliderAccessibilityState, resolveSliderLowerLimit, resolveSliderUpperLimit, valueFromSliderEvent, shouldRenderStepsIndicator, resolveThumbTintColor, shouldPassNativeThumbImage, isInvalidLimitConfig, computeStepOptions, renderSlider, renderStepsIndicator, SLIDER_DEFAULT_MINIMUM_VALUE, SLIDER_DEFAULT_MAXIMUM_VALUE, SLIDER_DEFAULT_STEP, SLIDER_ON_CHANGE, SLIDER_ON_VALUE_CHANGE, SLIDER_ON_SLIDING_START, SLIDER_ON_SLIDING_COMPLETE, SLIDER_ON_ACCESSIBILITY_ACTION, } from '../../core';
28
+ import * as i0 from "@angular/core";
29
+ function isRecord(value) {
30
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
31
+ }
32
+ // Narrows anchorHostStyle's `unknown` (it reads an opaque engine prop bag) to the shape
33
+ // ISliderProps['style'] actually declares — the same runtime guard the Angular adapter's
34
+ // ActivityIndicator uses for the identical reason: a style value is structurally opaque at the
35
+ // type level, so this only rules out non-objects, never validates individual style keys.
36
+ function asStyle(value) {
37
+ return typeof value === 'object' && value !== null ? value : undefined;
38
+ }
39
+ export class SliderBase {
40
+ value;
41
+ minimumValue;
42
+ maximumValue;
43
+ step;
44
+ lowerLimit;
45
+ upperLimit;
46
+ minimumTrackTintColor;
47
+ maximumTrackTintColor;
48
+ thumbTintColor;
49
+ disabled;
50
+ inverted;
51
+ tapToSeek;
52
+ vertical;
53
+ thumbImage;
54
+ minimumTrackImage;
55
+ maximumTrackImage;
56
+ trackImage;
57
+ thumbSize;
58
+ accessibilityUnits;
59
+ accessibilityIncrements;
60
+ renderStepNumber;
61
+ testID;
62
+ style;
63
+ nativeID;
64
+ accessible;
65
+ accessibilityLabel;
66
+ accessibilityHint;
67
+ accessibilityRole;
68
+ accessibilityState;
69
+ accessibilityValue;
70
+ accessibilityActions;
71
+ accessibilityLabelledBy;
72
+ importantForAccessibility;
73
+ accessibilityLiveRegion;
74
+ screenReaderFocusable;
75
+ accessibilityViewIsModal;
76
+ accessibilityElementsHidden;
77
+ accessibilityIgnoresInvertColors;
78
+ accessibilityLanguage;
79
+ accessibilityRespondsToUserInteraction;
80
+ accessibilityShowsLargeContentViewer;
81
+ accessibilityLargeContentTitle;
82
+ onAccessibilityTap;
83
+ onMagicTap;
84
+ onAccessibilityEscape;
85
+ role;
86
+ ariaLabel;
87
+ ariaLabelledBy;
88
+ ariaLive;
89
+ ariaHidden;
90
+ ariaBusy;
91
+ ariaChecked;
92
+ ariaDisabled;
93
+ ariaExpanded;
94
+ ariaSelected;
95
+ ariaModal;
96
+ ariaValueMax;
97
+ ariaValueMin;
98
+ ariaValueNow;
99
+ ariaValueText;
100
+ // The four native callbacks, as real EventEmitters — no v-model-style two-way twin (that was
101
+ // Vue-specific v-model sugar; Angular has no equivalent concept here).
102
+ valueChange = new EventEmitter();
103
+ slidingStart = new EventEmitter();
104
+ slidingComplete = new EventEmitter();
105
+ accessibilityAction = new EventEmitter();
106
+ changeDetector = inject(ChangeDetectorRef);
107
+ // This component's OWN host — the non-painting anchor `class="..."` at the use site resolves
108
+ // onto (see anchorHostStyle's doc comment, @symbiote-native/angular) — NOT the descriptor-outlet-
109
+ // rendered wrapper the `descriptor` getter below builds. Merged FIRST so an explicit `style`
110
+ // @Input still wins (flattenStyle's later-wins collapse), mirroring every other composed
111
+ // component's anchor merge.
112
+ elementRef = inject(ElementRef);
113
+ // The value native last reported, kept only to mark the active step in the indicator. Not the
114
+ // controlled value — the slider is uncontrolled during a drag (no snap-back), mirroring the
115
+ // Vue lifecycle's `reportedValue` ref.
116
+ reportedValue;
117
+ // The measured wrapper width the step indicator lays out against; 0 until the first layout.
118
+ width = 0;
119
+ ngOnChanges() {
120
+ // No fold needed here: `descriptor` is a getter re-evaluated on every OnPush check the
121
+ // template's `[node]="descriptor"` binding triggers, so an @Input change already recomputes
122
+ // the render on its own. OnChanges exists so this class satisfies the same lifecycle contract
123
+ // as the rest of the input-driven components in this adapter.
124
+ }
125
+ handleValueChange = (event) => {
126
+ const value = valueFromSliderEvent(event);
127
+ if (value === undefined)
128
+ return;
129
+ this.reportedValue = value;
130
+ this.valueChange.emit(value);
131
+ };
132
+ handleSlidingStart = (event) => {
133
+ const value = valueFromSliderEvent(event);
134
+ if (value !== undefined)
135
+ this.slidingStart.emit(value);
136
+ };
137
+ handleSlidingComplete = (event) => {
138
+ const value = valueFromSliderEvent(event);
139
+ if (value !== undefined)
140
+ this.slidingComplete.emit(value);
141
+ };
142
+ handleAccessibilityAction = (event) => {
143
+ this.accessibilityAction.emit(event);
144
+ };
145
+ // Native onLayout fires through the engine's event dispatch (Renderer2.listen), OUTSIDE
146
+ // Angular's zoneless change-detection notification — the same async-commit-timing shape the
147
+ // angular-adapter skill (§5) documents and the sticky-header component already works around
148
+ // (`ChangeDetectorRef.markForCheck()`). Mutating `width` alone would never repaint the step
149
+ // indicator, since nothing would tell the OnPush view it is dirty.
150
+ handleLayout = (event) => {
151
+ const layout = event.nativeEvent.layout;
152
+ if (isRecord(layout) && typeof layout.width === 'number') {
153
+ this.width = layout.width;
154
+ this.changeDetector.markForCheck();
155
+ }
156
+ };
157
+ inputProps() {
158
+ return {
159
+ value: this.value,
160
+ minimumValue: this.minimumValue,
161
+ maximumValue: this.maximumValue,
162
+ step: this.step,
163
+ lowerLimit: this.lowerLimit,
164
+ upperLimit: this.upperLimit,
165
+ minimumTrackTintColor: this.minimumTrackTintColor,
166
+ maximumTrackTintColor: this.maximumTrackTintColor,
167
+ thumbTintColor: this.thumbTintColor,
168
+ disabled: this.disabled,
169
+ inverted: this.inverted,
170
+ tapToSeek: this.tapToSeek,
171
+ vertical: this.vertical,
172
+ thumbImage: this.thumbImage,
173
+ minimumTrackImage: this.minimumTrackImage,
174
+ maximumTrackImage: this.maximumTrackImage,
175
+ trackImage: this.trackImage,
176
+ thumbSize: this.thumbSize,
177
+ accessibilityUnits: this.accessibilityUnits,
178
+ accessibilityIncrements: this.accessibilityIncrements,
179
+ renderStepNumber: this.renderStepNumber,
180
+ testID: this.testID,
181
+ style: [asStyle(anchorHostStyle(this.elementRef)), this.style],
182
+ nativeID: this.nativeID,
183
+ accessible: this.accessible,
184
+ accessibilityLabel: this.accessibilityLabel,
185
+ accessibilityHint: this.accessibilityHint,
186
+ accessibilityRole: this.accessibilityRole,
187
+ accessibilityState: this.accessibilityState,
188
+ accessibilityValue: this.accessibilityValue,
189
+ accessibilityActions: this.accessibilityActions,
190
+ accessibilityLabelledBy: this.accessibilityLabelledBy,
191
+ importantForAccessibility: this.importantForAccessibility,
192
+ accessibilityLiveRegion: this.accessibilityLiveRegion,
193
+ screenReaderFocusable: this.screenReaderFocusable,
194
+ accessibilityViewIsModal: this.accessibilityViewIsModal,
195
+ accessibilityElementsHidden: this.accessibilityElementsHidden,
196
+ accessibilityIgnoresInvertColors: this.accessibilityIgnoresInvertColors,
197
+ accessibilityLanguage: this.accessibilityLanguage,
198
+ accessibilityRespondsToUserInteraction: this.accessibilityRespondsToUserInteraction,
199
+ accessibilityShowsLargeContentViewer: this.accessibilityShowsLargeContentViewer,
200
+ accessibilityLargeContentTitle: this.accessibilityLargeContentTitle,
201
+ onAccessibilityTap: this.onAccessibilityTap,
202
+ onMagicTap: this.onMagicTap,
203
+ onAccessibilityEscape: this.onAccessibilityEscape,
204
+ role: this.role,
205
+ 'aria-label': this.ariaLabel,
206
+ 'aria-labelledby': this.ariaLabelledBy,
207
+ 'aria-live': this.ariaLive,
208
+ 'aria-hidden': this.ariaHidden,
209
+ 'aria-busy': this.ariaBusy,
210
+ 'aria-checked': this.ariaChecked,
211
+ 'aria-disabled': this.ariaDisabled,
212
+ 'aria-expanded': this.ariaExpanded,
213
+ 'aria-selected': this.ariaSelected,
214
+ 'aria-modal': this.ariaModal,
215
+ 'aria-valuemax': this.ariaValueMax,
216
+ 'aria-valuemin': this.ariaValueMin,
217
+ 'aria-valuenow': this.ariaValueNow,
218
+ 'aria-valuetext': this.ariaValueText,
219
+ };
220
+ }
221
+ get descriptor() {
222
+ const props = resolveAccessibilityProps(this.inputProps());
223
+ const { value, minimumValue: minimumValueInput, maximumValue: maximumValueInput, step: stepInput, lowerLimit: lowerLimitInput, upperLimit: upperLimitInput, disabled, inverted: invertedInput, thumbTintColor, thumbImage, accessibilityState, renderStepNumber, style, ...passthrough } = props;
224
+ const minimumValue = minimumValueInput ?? SLIDER_DEFAULT_MINIMUM_VALUE;
225
+ const maximumValue = maximumValueInput ?? SLIDER_DEFAULT_MAXIMUM_VALUE;
226
+ const step = stepInput ?? SLIDER_DEFAULT_STEP;
227
+ const lowerLimit = resolveSliderLowerLimit(lowerLimitInput);
228
+ const upperLimit = resolveSliderUpperLimit(upperLimitInput);
229
+ if (isInvalidLimitConfig(lowerLimit, upperLimit)) {
230
+ dlog('Slider: lowerLimit must be smaller than upperLimit');
231
+ }
232
+ const inverted = invertedInput ?? false;
233
+ const hasThumbImage = thumbImage !== undefined;
234
+ // No custom-StepMarker slot on Angular yet (see the module doc comment above) — showSteps
235
+ // only ever considers renderStepNumber.
236
+ const showSteps = shouldRenderStepsIndicator(false, renderStepNumber);
237
+ const nativeThumbImage = shouldPassNativeThumbImage(false, hasThumbImage)
238
+ ? thumbImage
239
+ : undefined;
240
+ const view = {
241
+ value: sanitizeSliderValue(value),
242
+ minimumValue,
243
+ maximumValue,
244
+ step,
245
+ lowerLimit,
246
+ upperLimit,
247
+ disabled: resolveSliderDisabled(disabled, accessibilityState),
248
+ inverted,
249
+ thumbTintColor: resolveThumbTintColor(thumbTintColor, false, hasThumbImage),
250
+ thumbImage: nativeThumbImage,
251
+ accessibilityState: resolveSliderAccessibilityState(disabled, accessibilityState),
252
+ width: this.width,
253
+ style,
254
+ passthrough: {
255
+ ...passthrough,
256
+ [SLIDER_ON_CHANGE]: this.handleValueChange,
257
+ [SLIDER_ON_VALUE_CHANGE]: this.handleValueChange,
258
+ [SLIDER_ON_SLIDING_START]: this.handleSlidingStart,
259
+ [SLIDER_ON_SLIDING_COMPLETE]: this.handleSlidingComplete,
260
+ [SLIDER_ON_ACCESSIBILITY_ACTION]: this.handleAccessibilityAction,
261
+ },
262
+ };
263
+ if (!showSteps) {
264
+ return renderSlider(view, this.platform, { onLayout: this.handleLayout });
265
+ }
266
+ const options = computeStepOptions(minimumValue, maximumValue, step, this.platform.stepResolution);
267
+ const currentValue = this.reportedValue ?? view.value ?? minimumValue;
268
+ const steps = renderStepsIndicator({
269
+ options,
270
+ currentValue,
271
+ width: this.width,
272
+ renderStepNumber: renderStepNumber === true,
273
+ thumbImage,
274
+ inverted,
275
+ platform: this.platform,
276
+ });
277
+ return renderSlider(view, this.platform, { steps, onLayout: this.handleLayout });
278
+ }
279
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: SliderBase, deps: [], target: i0.ɵɵFactoryTarget.Directive });
280
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.4", type: SliderBase, isStandalone: true, inputs: { value: "value", minimumValue: "minimumValue", maximumValue: "maximumValue", step: "step", lowerLimit: "lowerLimit", upperLimit: "upperLimit", minimumTrackTintColor: "minimumTrackTintColor", maximumTrackTintColor: "maximumTrackTintColor", thumbTintColor: "thumbTintColor", disabled: "disabled", inverted: "inverted", tapToSeek: "tapToSeek", vertical: "vertical", thumbImage: "thumbImage", minimumTrackImage: "minimumTrackImage", maximumTrackImage: "maximumTrackImage", trackImage: "trackImage", thumbSize: "thumbSize", accessibilityUnits: "accessibilityUnits", accessibilityIncrements: "accessibilityIncrements", renderStepNumber: "renderStepNumber", testID: "testID", style: "style", nativeID: "nativeID", accessible: "accessible", accessibilityLabel: "accessibilityLabel", accessibilityHint: "accessibilityHint", accessibilityRole: "accessibilityRole", accessibilityState: "accessibilityState", accessibilityValue: "accessibilityValue", accessibilityActions: "accessibilityActions", accessibilityLabelledBy: "accessibilityLabelledBy", importantForAccessibility: "importantForAccessibility", accessibilityLiveRegion: "accessibilityLiveRegion", screenReaderFocusable: "screenReaderFocusable", accessibilityViewIsModal: "accessibilityViewIsModal", accessibilityElementsHidden: "accessibilityElementsHidden", accessibilityIgnoresInvertColors: "accessibilityIgnoresInvertColors", accessibilityLanguage: "accessibilityLanguage", accessibilityRespondsToUserInteraction: "accessibilityRespondsToUserInteraction", accessibilityShowsLargeContentViewer: "accessibilityShowsLargeContentViewer", accessibilityLargeContentTitle: "accessibilityLargeContentTitle", onAccessibilityTap: "onAccessibilityTap", onMagicTap: "onMagicTap", onAccessibilityEscape: "onAccessibilityEscape", role: "role", ariaLabel: ["aria-label", "ariaLabel"], ariaLabelledBy: ["aria-labelledby", "ariaLabelledBy"], ariaLive: ["aria-live", "ariaLive"], ariaHidden: ["aria-hidden", "ariaHidden"], ariaBusy: ["aria-busy", "ariaBusy"], ariaChecked: ["aria-checked", "ariaChecked"], ariaDisabled: ["aria-disabled", "ariaDisabled"], ariaExpanded: ["aria-expanded", "ariaExpanded"], ariaSelected: ["aria-selected", "ariaSelected"], ariaModal: ["aria-modal", "ariaModal"], ariaValueMax: ["aria-valuemax", "ariaValueMax"], ariaValueMin: ["aria-valuemin", "ariaValueMin"], ariaValueNow: ["aria-valuenow", "ariaValueNow"], ariaValueText: ["aria-valuetext", "ariaValueText"] }, outputs: { valueChange: "valueChange", slidingStart: "slidingStart", slidingComplete: "slidingComplete", accessibilityAction: "accessibilityAction" }, usesOnChanges: true, ngImport: i0 });
281
+ }
282
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: SliderBase, decorators: [{
283
+ type: Directive
284
+ }], propDecorators: { value: [{
285
+ type: Input
286
+ }], minimumValue: [{
287
+ type: Input
288
+ }], maximumValue: [{
289
+ type: Input
290
+ }], step: [{
291
+ type: Input
292
+ }], lowerLimit: [{
293
+ type: Input
294
+ }], upperLimit: [{
295
+ type: Input
296
+ }], minimumTrackTintColor: [{
297
+ type: Input
298
+ }], maximumTrackTintColor: [{
299
+ type: Input
300
+ }], thumbTintColor: [{
301
+ type: Input
302
+ }], disabled: [{
303
+ type: Input
304
+ }], inverted: [{
305
+ type: Input
306
+ }], tapToSeek: [{
307
+ type: Input
308
+ }], vertical: [{
309
+ type: Input
310
+ }], thumbImage: [{
311
+ type: Input
312
+ }], minimumTrackImage: [{
313
+ type: Input
314
+ }], maximumTrackImage: [{
315
+ type: Input
316
+ }], trackImage: [{
317
+ type: Input
318
+ }], thumbSize: [{
319
+ type: Input
320
+ }], accessibilityUnits: [{
321
+ type: Input
322
+ }], accessibilityIncrements: [{
323
+ type: Input
324
+ }], renderStepNumber: [{
325
+ type: Input
326
+ }], testID: [{
327
+ type: Input
328
+ }], style: [{
329
+ type: Input
330
+ }], nativeID: [{
331
+ type: Input
332
+ }], accessible: [{
333
+ type: Input
334
+ }], accessibilityLabel: [{
335
+ type: Input
336
+ }], accessibilityHint: [{
337
+ type: Input
338
+ }], accessibilityRole: [{
339
+ type: Input
340
+ }], accessibilityState: [{
341
+ type: Input
342
+ }], accessibilityValue: [{
343
+ type: Input
344
+ }], accessibilityActions: [{
345
+ type: Input
346
+ }], accessibilityLabelledBy: [{
347
+ type: Input
348
+ }], importantForAccessibility: [{
349
+ type: Input
350
+ }], accessibilityLiveRegion: [{
351
+ type: Input
352
+ }], screenReaderFocusable: [{
353
+ type: Input
354
+ }], accessibilityViewIsModal: [{
355
+ type: Input
356
+ }], accessibilityElementsHidden: [{
357
+ type: Input
358
+ }], accessibilityIgnoresInvertColors: [{
359
+ type: Input
360
+ }], accessibilityLanguage: [{
361
+ type: Input
362
+ }], accessibilityRespondsToUserInteraction: [{
363
+ type: Input
364
+ }], accessibilityShowsLargeContentViewer: [{
365
+ type: Input
366
+ }], accessibilityLargeContentTitle: [{
367
+ type: Input
368
+ }], onAccessibilityTap: [{
369
+ type: Input
370
+ }], onMagicTap: [{
371
+ type: Input
372
+ }], onAccessibilityEscape: [{
373
+ type: Input
374
+ }], role: [{
375
+ type: Input
376
+ }], ariaLabel: [{
377
+ type: Input,
378
+ args: ['aria-label']
379
+ }], ariaLabelledBy: [{
380
+ type: Input,
381
+ args: ['aria-labelledby']
382
+ }], ariaLive: [{
383
+ type: Input,
384
+ args: ['aria-live']
385
+ }], ariaHidden: [{
386
+ type: Input,
387
+ args: ['aria-hidden']
388
+ }], ariaBusy: [{
389
+ type: Input,
390
+ args: ['aria-busy']
391
+ }], ariaChecked: [{
392
+ type: Input,
393
+ args: ['aria-checked']
394
+ }], ariaDisabled: [{
395
+ type: Input,
396
+ args: ['aria-disabled']
397
+ }], ariaExpanded: [{
398
+ type: Input,
399
+ args: ['aria-expanded']
400
+ }], ariaSelected: [{
401
+ type: Input,
402
+ args: ['aria-selected']
403
+ }], ariaModal: [{
404
+ type: Input,
405
+ args: ['aria-modal']
406
+ }], ariaValueMax: [{
407
+ type: Input,
408
+ args: ['aria-valuemax']
409
+ }], ariaValueMin: [{
410
+ type: Input,
411
+ args: ['aria-valuemin']
412
+ }], ariaValueNow: [{
413
+ type: Input,
414
+ args: ['aria-valuenow']
415
+ }], ariaValueText: [{
416
+ type: Input,
417
+ args: ['aria-valuetext']
418
+ }], valueChange: [{
419
+ type: Output
420
+ }], slidingStart: [{
421
+ type: Output
422
+ }], slidingComplete: [{
423
+ type: Output
424
+ }], accessibilityAction: [{
425
+ type: Output
426
+ }] } });
427
+ //# sourceMappingURL=shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/angular/slider/shared.ts"],"names":[],"mappings":"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"}