@symbiote-native/angular 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.
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @symbiote-native/angular
2
2
 
3
- The **Angular adapter** for [SymbioteJS](../../README.md) — render real native iOS/Android views
3
+ The **Angular adapter** for [SymbioteNative](../../README.md) — render real native iOS/Android views
4
4
  from Angular, on the *same* untouched core as React and Vue, with React Native's own renderer
5
5
  never in the path. It is a `Renderer2`/`RendererFactory2` whose calls map onto the engine's
6
6
  four-call mutation API; `@symbiote-native/engine` does the clone-on-write commit into Fabric.
@@ -11,11 +11,24 @@ already-validated engine with zero changes to it.
11
11
 
12
12
  <div align="center">
13
13
 
14
- ![Angular driving real native iOS views through SymbioteJS](../../assets/angular-demo.gif)
14
+ ![Angular driving real native iOS views through SymbioteNative](../../assets/angular-demo.gif)
15
15
 
16
16
  </div>
17
17
 
18
- > New to SymbioteJS? The [root README](../../README.md) has the architecture.
18
+ > New to SymbioteNative? The [root README](../../README.md) has the architecture.
19
+
20
+ ---
21
+
22
+ ## Install
23
+
24
+ ```bash
25
+ npm install @symbiote-native/angular react-native @angular/core
26
+ ```
27
+
28
+ `react-native` and `@angular/core` (**>=20**, for stable zoneless change detection) stay your app's
29
+ own top-level dependencies. There's no `create-symbiote` scaffolder yet, so the AOT pipeline
30
+ (`ngc --watch` alongside Metro — see [Run it](#run-it)) and the Metro config come from
31
+ [`examples/angular`](../../examples/angular) rather than a generator.
19
32
 
20
33
  ---
21
34
 
@@ -143,5 +156,5 @@ pnpm e2e:test:ios # run the canary journeys on the iOS simulator
143
156
  # …or the android equivalents: e2e:build:android / e2e:test:android
144
157
  ```
145
158
 
146
- Why these come for free — a SymbioteJS app is a stock RN app underneath, so RN's whole testing
159
+ Why these come for free — a SymbioteNative app is a stock RN app underneath, so RN's whole testing
147
160
  ecosystem applies unchanged. See [Testing](../../README.md#testing).
@@ -0,0 +1,7 @@
1
+ import type { Type } from '@angular/core';
2
+ import { type IBootstrapHostOptions } from '@symbiote-native/components/bootstrap';
3
+ export type { IBootstrapHostOptions } from '@symbiote-native/components/bootstrap';
4
+ export type IBootstrapApplicationOptions = IBootstrapHostOptions & {
5
+ appName: string;
6
+ };
7
+ export declare function bootstrapApplication(AppComponent: Type<unknown>, options: IBootstrapApplicationOptions): void;
@@ -0,0 +1,15 @@
1
+ // Zero-config app entry, the Angular twin of adapters/react/src/bootstrap.ts. Lives OUTSIDE the
2
+ // package's main barrel — see that file's header for why anything importing react-native must
3
+ // stay there. No @Component/@Directive decorators here, so unlike the package's main "." entry
4
+ // this needs no ngc/AOT build step and can stay a plain source reference.
5
+ import { AppRegistry as RNAppRegistry } from 'react-native';
6
+ import { bootstrapHost } from '@symbiote-native/components/bootstrap';
7
+ import { AppRegistry, setHostRegistrar } from './modules/app-registry';
8
+ // Mirrors real Angular's bootstrapApplication(RootComponent, config) idiom.
9
+ export function bootstrapApplication(AppComponent, options) {
10
+ const { appName, ...bootstrapOptions } = options;
11
+ bootstrapHost(bootstrapOptions);
12
+ setHostRegistrar(RNAppRegistry);
13
+ AppRegistry.registerComponent(appName, () => AppComponent);
14
+ }
15
+ //# sourceMappingURL=bootstrap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/bootstrap.ts"],"names":[],"mappings":"AAAA,gGAAgG;AAChG,8FAA8F;AAC9F,+FAA+F;AAC/F,0EAA0E;AAE1E,OAAO,EAAE,WAAW,IAAI,aAAa,EAAE,MAAM,cAAc,CAAC;AAE5D,OAAO,EAAE,aAAa,EAA8B,MAAM,uCAAuC,CAAC;AAClG,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAQvE,4EAA4E;AAC5E,MAAM,UAAU,oBAAoB,CAClC,YAA2B,EAC3B,OAAqC;IAErC,MAAM,EAAE,OAAO,EAAE,GAAG,gBAAgB,EAAE,GAAG,OAAO,CAAC;IACjD,aAAa,CAAC,gBAAgB,CAAC,CAAC;IAChC,gBAAgB,CAAC,aAAa,CAAC,CAAC;IAChC,WAAW,CAAC,iBAAiB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC;AAC7D,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { Type } from '@angular/core';
2
+ import { type IBootstrapHostOptions } from '@symbiote-native/components/bootstrap';
3
+ export type { IBootstrapHostOptions } from '@symbiote-native/components/bootstrap';
4
+ export type IBootstrapApplicationOptions = IBootstrapHostOptions & {
5
+ appName: string;
6
+ };
7
+ export declare function bootstrapApplication(AppComponent: Type<unknown>, options: IBootstrapApplicationOptions): void;
@@ -0,0 +1,14 @@
1
+ // Zero-config app entry, the Angular twin of adapters/react/src/bootstrap.ts. Lives OUTSIDE the
2
+ // package's main barrel — see that file's header for why anything importing react-native must
3
+ // stay there. No @Component/@Directive decorators here, so unlike the package's main "." entry
4
+ // this needs no ngc/AOT build step and can stay a plain source reference.
5
+ import { AppRegistry as RNAppRegistry } from 'react-native';
6
+ import { bootstrapHost } from '@symbiote-native/components/bootstrap';
7
+ import { AppRegistry, setHostRegistrar } from './modules/app-registry';
8
+ // Mirrors real Angular's bootstrapApplication(RootComponent, config) idiom.
9
+ export function bootstrapApplication(AppComponent, options) {
10
+ const { appName, ...bootstrapOptions } = options;
11
+ bootstrapHost(bootstrapOptions);
12
+ setHostRegistrar(RNAppRegistry);
13
+ AppRegistry.registerComponent(appName, () => AppComponent);
14
+ }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@symbiote-native/angular",
3
- "version": "0.1.0",
4
- "description": "SymbioteJS's Angular adapter — a Renderer2/RendererFactory2 with DOM-less bootstrap driving real native iOS/Android views through the same engine as the other adapters.",
3
+ "version": "0.2.0",
4
+ "description": "SymbioteNative's Angular adapter — a Renderer2/RendererFactory2 with DOM-less bootstrap driving real native iOS/Android views through the same engine as the other adapters.",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "git+https://github.com/OneEyed1366/symbiote-native.git",
@@ -22,6 +22,11 @@
22
22
  "react-native": "./build/angular/index.js",
23
23
  "default": "./src/index.ts"
24
24
  },
25
+ "./bootstrap": {
26
+ "types": "./build/angular/bootstrap.d.ts",
27
+ "react-native": "./build/angular/bootstrap.js",
28
+ "default": "./src/bootstrap.ts"
29
+ },
25
30
  "./metro-css-parser": "./metro-css-parser.cjs"
26
31
  },
27
32
  "files": [
@@ -33,9 +38,9 @@
33
38
  "access": "public"
34
39
  },
35
40
  "dependencies": {
36
- "@symbiote-native/components": "0.1.0",
37
- "@symbiote-native/engine": "0.1.0",
38
- "@symbiote-native/css-parser": "0.1.0"
41
+ "@symbiote-native/engine": "0.1.1",
42
+ "@symbiote-native/css-parser": "0.1.1",
43
+ "@symbiote-native/components": "0.2.0"
39
44
  },
40
45
  "peerDependencies": {
41
46
  "@angular/core": ">=20",
@@ -47,7 +52,7 @@
47
52
  "@angular/core": "^22",
48
53
  "@types/node": "^26.0.0",
49
54
  "typescript": "~6.0.0",
50
- "@symbiote-native/test-utils": "0.0.0"
55
+ "@symbiote-native/test-utils": "0.1.1"
51
56
  },
52
57
  "scripts": {
53
58
  "ng:build": "ngc -p tsconfig.angular.json",
@@ -0,0 +1,26 @@
1
+ // Zero-config app entry, the Angular twin of adapters/react/src/bootstrap.ts. Lives OUTSIDE the
2
+ // package's main barrel — see that file's header for why anything importing react-native must
3
+ // stay there. No @Component/@Directive decorators here, so unlike the package's main "." entry
4
+ // this needs no ngc/AOT build step and can stay a plain source reference.
5
+
6
+ import { AppRegistry as RNAppRegistry } from 'react-native';
7
+ import type { Type } from '@angular/core';
8
+ import { bootstrapHost, type IBootstrapHostOptions } from '@symbiote-native/components/bootstrap';
9
+ import { AppRegistry, setHostRegistrar } from './modules/app-registry';
10
+
11
+ export type { IBootstrapHostOptions } from '@symbiote-native/components/bootstrap';
12
+
13
+ export type IBootstrapApplicationOptions = IBootstrapHostOptions & {
14
+ appName: string;
15
+ };
16
+
17
+ // Mirrors real Angular's bootstrapApplication(RootComponent, config) idiom.
18
+ export function bootstrapApplication(
19
+ AppComponent: Type<unknown>,
20
+ options: IBootstrapApplicationOptions,
21
+ ): void {
22
+ const { appName, ...bootstrapOptions } = options;
23
+ bootstrapHost(bootstrapOptions);
24
+ setHostRegistrar(RNAppRegistry);
25
+ AppRegistry.registerComponent(appName, () => AppComponent);
26
+ }
@@ -1,34 +0,0 @@
1
- import { EventEmitter } from '@angular/core';
2
- import { type IDrawerLayoutAndroidHandle } from '@symbiote/components';
3
- import { type ISymbioteEvent, type IViewStyle } from '@symbiote/engine';
4
- import { DrawerLayoutAndroidBase } from './shared';
5
- import * as i0 from "@angular/core";
6
- export type { IDrawerPosition, IDrawerLockMode, IKeyboardDismissMode, IDrawerState, IDrawerSlideEvent, IDrawerLayoutAndroidHandle, } from './shared';
7
- export type { IAngularDrawerLayoutAndroidProps } from './shared';
8
- export declare class AndroidDrawerLayoutHost {
9
- static ɵfac: i0.ɵɵFactoryDeclaration<AndroidDrawerLayoutHost, never>;
10
- static ɵcmp: i0.ɵɵComponentDeclaration<AndroidDrawerLayoutHost, "AndroidDrawerLayout", never, {}, {}, never, ["*"], true, never>;
11
- }
12
- export declare class DrawerLayoutAndroid extends DrawerLayoutAndroidBase implements IDrawerLayoutAndroidHandle {
13
- private hostElement?;
14
- private drawerOpened;
15
- private readonly changeDetector;
16
- private cachedResolved;
17
- private cachedResolvedKey;
18
- private get resolved();
19
- get hostProps(): Record<string, unknown>;
20
- get contentWrapperStyle(): Readonly<IViewStyle>;
21
- get navigationWrapperStyle(): IViewStyle;
22
- get navigationPointerEvents(): 'auto' | 'none';
23
- handleDrawerOpen(): void;
24
- handleDrawerClose(): void;
25
- handleDrawerSlide(event: unknown): void;
26
- handleDrawerStateChanged(event: unknown): void;
27
- emit(emitter: EventEmitter<ISymbioteEvent>, event: unknown): void;
28
- openDrawer(): void;
29
- closeDrawer(): void;
30
- private dispatchDrawer;
31
- private get hostNode();
32
- static ɵfac: i0.ɵɵFactoryDeclaration<DrawerLayoutAndroid, never>;
33
- static ɵcmp: i0.ɵɵComponentDeclaration<DrawerLayoutAndroid, "DrawerLayoutAndroid", never, { "drawerWidth": { "alias": "drawerWidth"; "required": false; }; "drawerPosition": { "alias": "drawerPosition"; "required": false; }; "drawerLockMode": { "alias": "drawerLockMode"; "required": false; }; "keyboardDismissMode": { "alias": "keyboardDismissMode"; "required": false; }; "drawerBackgroundColor": { "alias": "drawerBackgroundColor"; "required": false; }; "statusBarBackgroundColor": { "alias": "statusBarBackgroundColor"; "required": false; }; "style": { "alias": "style"; "required": false; }; "nativeID": { "alias": "nativeID"; "required": false; }; "testID": { "alias": "testID"; "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; }; "accessibilityElementsHidden": { "alias": "accessibilityElementsHidden"; "required": false; }; "accessibilityViewIsModal": { "alias": "accessibilityViewIsModal"; "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; }; "role": { "alias": "role"; "required": false; }; "aria-label": { "alias": "aria-label"; "required": false; }; "aria-labelledby": { "alias": "aria-labelledby"; "required": false; }; "aria-live": { "alias": "aria-live"; "required": false; }; "aria-hidden": { "alias": "aria-hidden"; "required": false; }; "aria-busy": { "alias": "aria-busy"; "required": false; }; "aria-checked": { "alias": "aria-checked"; "required": false; }; "aria-disabled": { "alias": "aria-disabled"; "required": false; }; "aria-expanded": { "alias": "aria-expanded"; "required": false; }; "aria-selected": { "alias": "aria-selected"; "required": false; }; "aria-modal": { "alias": "aria-modal"; "required": false; }; "aria-valuemax": { "alias": "aria-valuemax"; "required": false; }; "aria-valuemin": { "alias": "aria-valuemin"; "required": false; }; "aria-valuenow": { "alias": "aria-valuenow"; "required": false; }; "aria-valuetext": { "alias": "aria-valuetext"; "required": false; }; }, { "drawerOpen": "drawerOpen"; "drawerClose": "drawerClose"; "drawerSlide": "drawerSlide"; "drawerStateChanged": "drawerStateChanged"; "accessibilityAction": "accessibilityAction"; "accessibilityTap": "accessibilityTap"; "magicTap": "magicTap"; "accessibilityEscape": "accessibilityEscape"; }, never, ["*", "[drawerNavigationView]"], true, never>;
34
- }
@@ -1,291 +0,0 @@
1
- // DrawerLayoutAndroid on Android: the real build, the Angular twin of the React/Vue
2
- // index.android.ts. AndroidDrawerLayout is an ordinary Fabric host node committing through the
3
- // same childSet as the rest of the tree (no per-library glue; the engine derives its events from
4
- // the ViewConfig, so we render the RAW Fabric name 'AndroidDrawerLayout'). The platform-invariant
5
- // math — the host prop bag + the content/navigation wrapper styles, the slide/state event
6
- // normalization, the imperative open/close command NAMES — lives in @symbiote/components, shared
7
- // verbatim with React/Vue; here Angular supplies only the lifecycle: a `drawerOpened` flag gates
8
- // the navigation wrapper's pointerEvents, the host node is read by IDENTITY through a #host
9
- // ViewChild for the imperative commands, and the four (drawer*) events fold into the typed
10
- // callbacks.
11
- //
12
- // Child order matches RN exactly: content FIRST, navigation SECOND. Content is the DEFAULT
13
- // <ng-content>; the drawer panel is the `[drawerNavigationView]` slot (the Angular twin of React's
14
- // renderNavigationView / Vue's navigationView slot). Metro picks this file on an Android host; no
15
- // Platform.OS read. device-verify-pending: the AndroidDrawerLayout name + openDrawer/closeDrawer
16
- // commands are RN-source-confirmed, not yet exercised on a real Android host.
17
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, CUSTOM_ELEMENTS_SCHEMA, ElementRef, EventEmitter, inject, ViewChild, } from '@angular/core';
18
- import { CLOSE_DRAWER_COMMAND, OPEN_DRAWER_COMMAND, offsetFromSlide, resolveAccessibilityProps, resolveDrawerLayout, stateFromChange, } from '@symbiote/components';
19
- import { dispatchViewCommand, dlog, isSymbioteNode, whenCommitted, } from '@symbiote/engine';
20
- import { DrawerLayoutAndroidBase } from './shared';
21
- import { SymbioteHostPropsDirective, ViewHost } from '../../primitives';
22
- import * as i0 from "@angular/core";
23
- // Angular infers an `(event)` binding's $event as the DOM Event for a custom-schema element,
24
- // so each handler enters as `unknown` and is narrowed here before reaching a typed callback.
25
- function isSymbioteEvent(value) {
26
- return typeof value === 'object' && value !== null && 'nativeEvent' in value;
27
- }
28
- // Element-wise reference comparison for the `resolved` memoization key (below). Primitives
29
- // compare by value here; style/accessibility objects compare by reference, matching how the
30
- // rest of this codebase treats prop identity (a caller passing a fresh-but-equal style object
31
- // every render already looks "changed" everywhere else, so this is not a new assumption).
32
- function sameShallowKey(a, b) {
33
- if (b === undefined || a.length !== b.length)
34
- return false;
35
- for (let i = 0; i < a.length; i += 1) {
36
- if (a[i] !== b[i])
37
- return false;
38
- }
39
- return true;
40
- }
41
- // The raw Fabric host element. Its selector MUST equal DRAWER_VIEW_NAME ('AndroidDrawerLayout',
42
- // core/components/src/state/drawer-layout-android.ts). A no-hyphen UNKNOWN tag fails Angular's
43
- // CUSTOM_ELEMENTS_SCHEMA check (the schema only permits hyphenated custom elements); declaring it
44
- // as a matched standalone component lifts that restriction, and the renderer still hands the
45
- // literal tag name to the engine — descriptorFor passes any non-`symbiote-*` name through
46
- // untouched, so it lands as the AndroidDrawerLayout Fabric view. The main component must be added
47
- // to the engine's ANCHOR_HOST_COMPONENTS (its own bookkeeping host must not paint); this real host
48
- // must NOT be in that set.
49
- export class AndroidDrawerLayoutHost {
50
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: AndroidDrawerLayoutHost, deps: [], target: i0.ɵɵFactoryTarget.Component });
51
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.4", type: AndroidDrawerLayoutHost, isStandalone: true, selector: "AndroidDrawerLayout", ngImport: i0, template: '<ng-content></ng-content>', isInline: true });
52
- }
53
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: AndroidDrawerLayoutHost, decorators: [{
54
- type: Component,
55
- args: [{
56
- selector: 'AndroidDrawerLayout',
57
- standalone: true,
58
- template: '<ng-content></ng-content>',
59
- }]
60
- }] });
61
- export class DrawerLayoutAndroid extends DrawerLayoutAndroidBase {
62
- // {read: ElementRef} hands back the host element (the engine node), NOT the host component
63
- // instance, so the imperative commands resolve it by IDENTITY against the engine mirror.
64
- hostElement;
65
- // Gates the navigation wrapper's pointerEvents (RN _onDrawerOpen/_onDrawerClose setState):
66
- // closed -> 'none' so the off-screen drawer never intercepts touches; open -> 'auto'.
67
- drawerOpened = false;
68
- changeDetector = inject(ChangeDetectorRef);
69
- // Memoized against the last-seen inputs: AndroidDrawerLayout's native ViewManager
70
- // (ReactDrawerLayoutManager) enforces a hard 2-child cap with no re-add tolerance — unlike
71
- // ordinary Fabric views. `resolved` is read FOUR times per template evaluation (once per
72
- // getter below), and without memoization each read rebuilds fresh hostProps/navigationWrapper-
73
- // Style objects even when nothing actually changed, so an UNRELATED markForCheck (e.g. the
74
- // native `(drawerOpen)`/`(drawerClose)` events calling it in handleDrawerOpen/handleDrawerClose)
75
- // forces the engine to reclone this subtree on every CD pass. Caching on the actual input
76
- // values (not just drawerOpened) keeps the returned prop/style objects referentially STABLE
77
- // across a CD pass that touches this component but changes none of its inputs, which is the
78
- // one thing on the JS side we control to reduce how often this subtree gets re-committed.
79
- cachedResolved;
80
- cachedResolvedKey;
81
- // resolveDrawerLayout owns the host prop bag + the two wrapper styles + the pointerEvents gate
82
- // (shared with React/Vue); the four getters below read the resolved tree it returns.
83
- get resolved() {
84
- const passthrough = resolveAccessibilityProps(this.accessibilityInputs());
85
- const key = [
86
- this.drawerWidth,
87
- this.drawerPosition,
88
- this.drawerLockMode,
89
- this.keyboardDismissMode,
90
- this.drawerBackgroundColor,
91
- this.statusBarBackgroundColor,
92
- this.drawerOpened,
93
- this.style,
94
- ...Object.values(passthrough),
95
- ];
96
- if (this.cachedResolved !== undefined && sameShallowKey(key, this.cachedResolvedKey)) {
97
- return this.cachedResolved;
98
- }
99
- const resolved = resolveDrawerLayout({
100
- drawerWidth: this.drawerWidth,
101
- drawerPosition: this.drawerPosition,
102
- drawerLockMode: this.drawerLockMode,
103
- keyboardDismissMode: this.keyboardDismissMode,
104
- drawerBackgroundColor: this.drawerBackgroundColor,
105
- statusBarBackgroundColor: this.statusBarBackgroundColor,
106
- drawerOpened: this.drawerOpened,
107
- style: this.style,
108
- // The drawer renders a raw host node (not the View FC), so nothing else folds aria-*/role —
109
- // resolve them into accessibility* here before passing through.
110
- passthrough,
111
- });
112
- this.cachedResolved = resolved;
113
- this.cachedResolvedKey = key;
114
- return resolved;
115
- }
116
- get hostProps() {
117
- return this.resolved.hostProps;
118
- }
119
- get contentWrapperStyle() {
120
- return this.resolved.contentWrapperStyle;
121
- }
122
- get navigationWrapperStyle() {
123
- return this.resolved.navigationWrapperStyle;
124
- }
125
- get navigationPointerEvents() {
126
- return this.resolved.navigationPointerEvents;
127
- }
128
- handleDrawerOpen() {
129
- dlog('Angular DrawerLayoutAndroid onDrawerOpen');
130
- this.drawerOpened = true;
131
- this.drawerOpen.emit();
132
- this.changeDetector.markForCheck();
133
- }
134
- handleDrawerClose() {
135
- dlog('Angular DrawerLayoutAndroid onDrawerClose');
136
- this.drawerOpened = false;
137
- this.drawerClose.emit();
138
- this.changeDetector.markForCheck();
139
- }
140
- handleDrawerSlide(event) {
141
- if (!isSymbioteEvent(event))
142
- return;
143
- this.drawerSlide.emit({ offset: offsetFromSlide(event) });
144
- }
145
- handleDrawerStateChanged(event) {
146
- if (!isSymbioteEvent(event))
147
- return;
148
- this.drawerStateChanged.emit(stateFromChange(event));
149
- }
150
- emit(emitter, event) {
151
- if (isSymbioteEvent(event))
152
- emitter.emit(event);
153
- }
154
- // The component instance IS the imperative handle (RN's DrawerLayoutAndroidMethods): a parent
155
- // calls @ViewChild(DrawerLayoutAndroid).openDrawer().
156
- openDrawer() {
157
- this.dispatchDrawer(OPEN_DRAWER_COMMAND);
158
- }
159
- closeDrawer() {
160
- this.dispatchDrawer(CLOSE_DRAWER_COMMAND);
161
- }
162
- dispatchDrawer(command) {
163
- const node = this.hostNode;
164
- if (node === null) {
165
- dlog(`Angular DrawerLayoutAndroid ${command} no-op: no committed host node`);
166
- return;
167
- }
168
- // whenCommitted defers until the node has a Fabric tag. Angular coalesces commits on a
169
- // microtask (renderer.requestCommit), so an imperative call right after creation can precede
170
- // the commit and otherwise no-op — the same async-commit gotcha as Switch's snap-back.
171
- whenCommitted(node, () => dispatchViewCommand(node, command, []));
172
- }
173
- get hostNode() {
174
- const native = this.hostElement?.nativeElement;
175
- return isSymbioteNode(native) ? native : null;
176
- }
177
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: DrawerLayoutAndroid, deps: null, target: i0.ɵɵFactoryTarget.Component });
178
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.4", type: DrawerLayoutAndroid, isStandalone: true, selector: "DrawerLayoutAndroid", inputs: { drawerWidth: "drawerWidth", drawerPosition: "drawerPosition", drawerLockMode: "drawerLockMode", keyboardDismissMode: "keyboardDismissMode", drawerBackgroundColor: "drawerBackgroundColor", statusBarBackgroundColor: "statusBarBackgroundColor", style: "style", nativeID: "nativeID", testID: "testID", accessible: "accessible", accessibilityLabel: "accessibilityLabel", accessibilityHint: "accessibilityHint", accessibilityRole: "accessibilityRole", accessibilityState: "accessibilityState", accessibilityValue: "accessibilityValue", accessibilityActions: "accessibilityActions", accessibilityLabelledBy: "accessibilityLabelledBy", importantForAccessibility: "importantForAccessibility", accessibilityLiveRegion: "accessibilityLiveRegion", screenReaderFocusable: "screenReaderFocusable", accessibilityElementsHidden: "accessibilityElementsHidden", accessibilityViewIsModal: "accessibilityViewIsModal", accessibilityIgnoresInvertColors: "accessibilityIgnoresInvertColors", accessibilityLanguage: "accessibilityLanguage", accessibilityRespondsToUserInteraction: "accessibilityRespondsToUserInteraction", accessibilityShowsLargeContentViewer: "accessibilityShowsLargeContentViewer", accessibilityLargeContentTitle: "accessibilityLargeContentTitle", role: "role", "aria-label": "aria-label", "aria-labelledby": "aria-labelledby", "aria-live": "aria-live", "aria-hidden": "aria-hidden", "aria-busy": "aria-busy", "aria-checked": "aria-checked", "aria-disabled": "aria-disabled", "aria-expanded": "aria-expanded", "aria-selected": "aria-selected", "aria-modal": "aria-modal", "aria-valuemax": "aria-valuemax", "aria-valuemin": "aria-valuemin", "aria-valuenow": "aria-valuenow", "aria-valuetext": "aria-valuetext" }, outputs: { drawerOpen: "drawerOpen", drawerClose: "drawerClose", drawerSlide: "drawerSlide", drawerStateChanged: "drawerStateChanged", accessibilityAction: "accessibilityAction", accessibilityTap: "accessibilityTap", magicTap: "magicTap", accessibilityEscape: "accessibilityEscape" }, viewQueries: [{ propertyName: "hostElement", first: true, predicate: ["host"], descendants: true, read: ElementRef }], usesInheritance: true, ngImport: i0, template: `
179
- <AndroidDrawerLayout
180
- #host
181
- [symbioteHostProps]="hostProps"
182
- (drawerOpen)="handleDrawerOpen()"
183
- (drawerClose)="handleDrawerClose()"
184
- (drawerSlide)="handleDrawerSlide($event)"
185
- (drawerStateChanged)="handleDrawerStateChanged($event)"
186
- (accessibilityAction)="emit(accessibilityAction, $event)"
187
- (accessibilityTap)="emit(accessibilityTap, $event)"
188
- (magicTap)="emit(magicTap, $event)"
189
- (accessibilityEscape)="emit(accessibilityEscape, $event)"
190
- >
191
- <symbiote-view [style]="contentWrapperStyle">
192
- <ng-content></ng-content>
193
- </symbiote-view>
194
- <symbiote-view [style]="navigationWrapperStyle" [pointerEvents]="navigationPointerEvents">
195
- <ng-content select="[drawerNavigationView]"></ng-content>
196
- </symbiote-view>
197
- </AndroidDrawerLayout>
198
- `, isInline: true, dependencies: [{ kind: "component", type: AndroidDrawerLayoutHost, selector: "AndroidDrawerLayout" }, { kind: "directive", type: SymbioteHostPropsDirective, selector: "[symbioteHostProps]", inputs: ["symbioteHostProps"], exportAs: ["symbioteHost"] }, { kind: "component", type: ViewHost, selector: "symbiote-view, View" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
199
- }
200
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: DrawerLayoutAndroid, decorators: [{
201
- type: Component,
202
- args: [{
203
- selector: 'DrawerLayoutAndroid',
204
- standalone: true,
205
- schemas: [CUSTOM_ELEMENTS_SCHEMA],
206
- imports: [AndroidDrawerLayoutHost, SymbioteHostPropsDirective, ViewHost],
207
- changeDetection: ChangeDetectionStrategy.OnPush,
208
- inputs: [
209
- 'drawerWidth',
210
- 'drawerPosition',
211
- 'drawerLockMode',
212
- 'keyboardDismissMode',
213
- 'drawerBackgroundColor',
214
- 'statusBarBackgroundColor',
215
- 'style',
216
- 'nativeID',
217
- 'testID',
218
- 'accessible',
219
- 'accessibilityLabel',
220
- 'accessibilityHint',
221
- 'accessibilityRole',
222
- 'accessibilityState',
223
- 'accessibilityValue',
224
- 'accessibilityActions',
225
- 'accessibilityLabelledBy',
226
- 'importantForAccessibility',
227
- 'accessibilityLiveRegion',
228
- 'screenReaderFocusable',
229
- 'accessibilityElementsHidden',
230
- 'accessibilityViewIsModal',
231
- 'accessibilityIgnoresInvertColors',
232
- 'accessibilityLanguage',
233
- 'accessibilityRespondsToUserInteraction',
234
- 'accessibilityShowsLargeContentViewer',
235
- 'accessibilityLargeContentTitle',
236
- 'role',
237
- 'aria-label',
238
- 'aria-labelledby',
239
- 'aria-live',
240
- 'aria-hidden',
241
- 'aria-busy',
242
- 'aria-checked',
243
- 'aria-disabled',
244
- 'aria-expanded',
245
- 'aria-selected',
246
- 'aria-modal',
247
- 'aria-valuemax',
248
- 'aria-valuemin',
249
- 'aria-valuenow',
250
- 'aria-valuetext',
251
- ],
252
- // The Switch precedent: fields decorated with @Output() on the shared base class
253
- // (DrawerLayoutAndroidBase) still need their names re-declared here for Angular's
254
- // component metadata to expose them as outputs of THIS concrete class.
255
- outputs: [
256
- 'drawerOpen',
257
- 'drawerClose',
258
- 'drawerSlide',
259
- 'drawerStateChanged',
260
- 'accessibilityAction',
261
- 'accessibilityTap',
262
- 'magicTap',
263
- 'accessibilityEscape',
264
- ],
265
- template: `
266
- <AndroidDrawerLayout
267
- #host
268
- [symbioteHostProps]="hostProps"
269
- (drawerOpen)="handleDrawerOpen()"
270
- (drawerClose)="handleDrawerClose()"
271
- (drawerSlide)="handleDrawerSlide($event)"
272
- (drawerStateChanged)="handleDrawerStateChanged($event)"
273
- (accessibilityAction)="emit(accessibilityAction, $event)"
274
- (accessibilityTap)="emit(accessibilityTap, $event)"
275
- (magicTap)="emit(magicTap, $event)"
276
- (accessibilityEscape)="emit(accessibilityEscape, $event)"
277
- >
278
- <symbiote-view [style]="contentWrapperStyle">
279
- <ng-content></ng-content>
280
- </symbiote-view>
281
- <symbiote-view [style]="navigationWrapperStyle" [pointerEvents]="navigationPointerEvents">
282
- <ng-content select="[drawerNavigationView]"></ng-content>
283
- </symbiote-view>
284
- </AndroidDrawerLayout>
285
- `,
286
- }]
287
- }], propDecorators: { hostElement: [{
288
- type: ViewChild,
289
- args: ['host', { read: ElementRef }]
290
- }] } });
291
- //# sourceMappingURL=index.android.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.android.js","sourceRoot":"","sources":["../../../../src/components/drawer-layout-android/index.android.ts"],"names":[],"mappings":"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"}
@@ -1,11 +0,0 @@
1
- import type { IDrawerLayoutAndroidHandle } from '@symbiote/components';
2
- import { DrawerLayoutAndroidBase } from './shared';
3
- import * as i0 from "@angular/core";
4
- export type { IDrawerPosition, IDrawerLockMode, IKeyboardDismissMode, IDrawerState, IDrawerSlideEvent, IDrawerLayoutAndroidHandle, } from './shared';
5
- export type { IAngularDrawerLayoutAndroidProps } from './shared';
6
- export declare class DrawerLayoutAndroid extends DrawerLayoutAndroidBase implements IDrawerLayoutAndroidHandle {
7
- openDrawer(): void;
8
- closeDrawer(): void;
9
- static ɵfac: i0.ɵɵFactoryDeclaration<DrawerLayoutAndroid, never>;
10
- static ɵcmp: i0.ɵɵComponentDeclaration<DrawerLayoutAndroid, "DrawerLayoutAndroid", never, { "drawerWidth": { "alias": "drawerWidth"; "required": false; }; "drawerPosition": { "alias": "drawerPosition"; "required": false; }; "drawerLockMode": { "alias": "drawerLockMode"; "required": false; }; "keyboardDismissMode": { "alias": "keyboardDismissMode"; "required": false; }; "drawerBackgroundColor": { "alias": "drawerBackgroundColor"; "required": false; }; "statusBarBackgroundColor": { "alias": "statusBarBackgroundColor"; "required": false; }; "style": { "alias": "style"; "required": false; }; "nativeID": { "alias": "nativeID"; "required": false; }; "testID": { "alias": "testID"; "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; }; "accessibilityElementsHidden": { "alias": "accessibilityElementsHidden"; "required": false; }; "accessibilityViewIsModal": { "alias": "accessibilityViewIsModal"; "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; }; "role": { "alias": "role"; "required": false; }; "aria-label": { "alias": "aria-label"; "required": false; }; "aria-labelledby": { "alias": "aria-labelledby"; "required": false; }; "aria-live": { "alias": "aria-live"; "required": false; }; "aria-hidden": { "alias": "aria-hidden"; "required": false; }; "aria-busy": { "alias": "aria-busy"; "required": false; }; "aria-checked": { "alias": "aria-checked"; "required": false; }; "aria-disabled": { "alias": "aria-disabled"; "required": false; }; "aria-expanded": { "alias": "aria-expanded"; "required": false; }; "aria-selected": { "alias": "aria-selected"; "required": false; }; "aria-modal": { "alias": "aria-modal"; "required": false; }; "aria-valuemax": { "alias": "aria-valuemax"; "required": false; }; "aria-valuemin": { "alias": "aria-valuemin"; "required": false; }; "aria-valuenow": { "alias": "aria-valuenow"; "required": false; }; "aria-valuetext": { "alias": "aria-valuetext"; "required": false; }; }, { "drawerOpen": "drawerOpen"; "drawerClose": "drawerClose"; "drawerSlide": "drawerSlide"; "drawerStateChanged": "drawerStateChanged"; "accessibilityAction": "accessibilityAction"; "accessibilityTap": "accessibilityTap"; "magicTap": "magicTap"; "accessibilityEscape": "accessibilityEscape"; }, never, ["*", "[drawerNavigationView]"], true, never>;
11
- }