@capgo/capacitor-native-navigation 8.0.9
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/CapgoNativeNavigation.podspec +17 -0
- package/LICENSE +373 -0
- package/Package.swift +28 -0
- package/README.md +858 -0
- package/android/build.gradle +61 -0
- package/android/src/main/AndroidManifest.xml +2 -0
- package/android/src/main/java/app/capgo/nativenavigation/NativeNavigation.java +8 -0
- package/android/src/main/java/app/capgo/nativenavigation/NativeNavigationPlugin.java +1322 -0
- package/android/src/main/res/.gitkeep +0 -0
- package/dist/docs.json +1369 -0
- package/dist/esm/components.d.ts +1 -0
- package/dist/esm/components.js +159 -0
- package/dist/esm/components.js.map +1 -0
- package/dist/esm/definitions.d.ts +470 -0
- package/dist/esm/definitions.js +2 -0
- package/dist/esm/definitions.js.map +1 -0
- package/dist/esm/index.d.ts +19 -0
- package/dist/esm/index.js +40 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/plugin.d.ts +2 -0
- package/dist/esm/plugin.js +2 -0
- package/dist/esm/plugin.js.map +1 -0
- package/dist/esm/web.d.ts +17 -0
- package/dist/esm/web.js +90 -0
- package/dist/esm/web.js.map +1 -0
- package/dist/plugin.cjs.js +310 -0
- package/dist/plugin.cjs.js.map +1 -0
- package/dist/plugin.js +313 -0
- package/dist/plugin.js.map +1 -0
- package/docs/demo-navigation.webp +0 -0
- package/docs/demo-options.webp +0 -0
- package/docs/demo-svg-icons.webp +0 -0
- package/ios/Sources/NativeNavigationPlugin/NativeNavigation.swift +7 -0
- package/ios/Sources/NativeNavigationPlugin/NativeNavigationPlugin.swift +1580 -0
- package/ios/Tests/NativeNavigationPluginTests/NativeNavigationTests.swift +19 -0
- package/package.json +91 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/definitions.ts"],"names":[],"mappings":"","sourcesContent":["import type { PluginListenerHandle } from '@capacitor/core';\n\n/**\n * Platform rendering preference for the native bars.\n */\nexport type NativeNavigationPlatformStyle = 'auto' | 'ios' | 'android';\n\n/**\n * How the plugin exposes native bar sizes to web content.\n */\nexport type NativeNavigationContentInsetMode = 'css' | 'none';\n\n/**\n * Navigation animation direction.\n */\nexport type NativeNavigationTransitionDirection = 'forward' | 'back' | 'root' | 'tab' | 'zoom' | 'none';\n\n/**\n * Native material/blur effect preference.\n */\nexport type NativeNavigationBlurEffect =\n | 'none'\n | 'systemDefault'\n | 'extraLight'\n | 'light'\n | 'dark'\n | 'regular'\n | 'prominent'\n | 'systemUltraThinMaterial'\n | 'systemThinMaterial'\n | 'systemMaterial'\n | 'systemThickMaterial'\n | 'systemChromeMaterial'\n | 'systemUltraThinMaterialLight'\n | 'systemThinMaterialLight'\n | 'systemMaterialLight'\n | 'systemThickMaterialLight'\n | 'systemChromeMaterialLight'\n | 'systemUltraThinMaterialDark'\n | 'systemThinMaterialDark'\n | 'systemMaterialDark'\n | 'systemThickMaterialDark'\n | 'systemChromeMaterialDark';\n\n/**\n * Native tab label visibility behavior.\n */\nexport type NativeNavigationTabLabelVisibilityMode = 'auto' | 'selected' | 'labeled' | 'unlabeled';\n\n/**\n * A rectangle in WebView viewport coordinates, expressed in native points/dp.\n */\nexport interface NativeNavigationRect {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\n/**\n * A serializable icon descriptor. Framework nodes are intentionally not accepted\n * because icons are rendered by native UI.\n */\nexport interface NativeNavigationIcon {\n /**\n * Cross-platform asset path or URL fallback.\n */\n src?: string;\n\n /**\n * Cross-platform inline SVG markup. The native renderers support common icon\n * shapes such as path, line, polyline, polygon, circle, and rect. SVG icons\n * are rendered as template images by default so native tint colors still\n * apply.\n */\n svg?: string;\n\n /**\n * Preferred rendered icon width in native points/dp. Defaults to `24`.\n */\n width?: number;\n\n /**\n * Preferred rendered icon height in native points/dp. Defaults to `24`.\n */\n height?: number;\n\n /**\n * When `true`, native tint colors are applied to the rendered SVG/image.\n * Defaults to `true`.\n */\n template?: boolean;\n\n /**\n * iOS-specific SF Symbol, bundled image name, or inline SVG.\n */\n ios?: {\n /**\n * SF Symbol name, for example `house.fill`.\n */\n sfSymbol?: string;\n\n /**\n * Bundled image name from the app asset catalog.\n */\n image?: string;\n\n /**\n * iOS-specific inline SVG markup.\n */\n svg?: string;\n };\n\n /**\n * Android-specific drawable resource, asset name, or inline SVG.\n */\n android?: {\n /**\n * Drawable resource name without the `R.drawable.` prefix.\n */\n resource?: string;\n\n /**\n * Bundled image asset name.\n */\n image?: string;\n\n /**\n * Android-specific inline SVG markup.\n */\n svg?: string;\n };\n}\n\n/**\n * Native bar colors. Use CSS-style hex strings (`#RRGGBB` or `#AARRGGBB`).\n */\nexport interface NativeNavigationColors {\n /**\n * When `true`, Android 12+ derives unspecified bar colors from Material You\n * system palettes. Explicit color fields still win.\n */\n dynamic?: boolean;\n\n /**\n * Tint color for active buttons/items.\n */\n tint?: string;\n\n /**\n * Color for inactive tab items.\n */\n inactiveTint?: string;\n\n /**\n * Optional background tint. Ignored on iOS 26+ so UIKit can preserve the\n * system Liquid Glass navigation appearance.\n */\n background?: string;\n\n /**\n * Title and label text color where the native platform supports it.\n */\n foreground?: string;\n\n /**\n * Badge background color for native tab badges.\n */\n badgeBackground?: string;\n\n /**\n * Badge text color for native tab badges.\n */\n badgeText?: string;\n\n /**\n * Active tab indicator color on Android.\n */\n indicator?: string;\n\n /**\n * Tab press ripple color on Android.\n */\n ripple?: string;\n}\n\n/**\n * Global plugin configuration.\n */\nexport interface NativeNavigationConfigureOptions {\n /**\n * Enables or disables the native chrome host.\n */\n enabled?: boolean;\n\n /**\n * Native style preference. `auto` uses the current platform.\n */\n platformStyle?: NativeNavigationPlatformStyle;\n\n /**\n * When `css`, the plugin writes CSS variables on `document.documentElement`.\n */\n contentInsetMode?: NativeNavigationContentInsetMode;\n\n /**\n * Default native transition duration in milliseconds.\n */\n animationDuration?: number;\n\n /**\n * Shared color hints for native bars.\n */\n colors?: NativeNavigationColors;\n}\n\n/**\n * A button shown in the native navbar.\n */\nexport interface NativeNavigationBarButton {\n /**\n * Stable id returned in `navbarItemTap`.\n */\n id: string;\n\n /**\n * Visible text label.\n */\n title?: string;\n\n /**\n * Native icon descriptor.\n */\n icon?: NativeNavigationIcon;\n\n /**\n * Whether the action is enabled. Defaults to `true`.\n */\n enabled?: boolean;\n}\n\n/**\n * Native back button configuration.\n */\nexport interface NativeNavigationBackButton {\n /**\n * Show the native back affordance.\n */\n visible?: boolean;\n\n /**\n * Optional back title.\n */\n title?: string;\n}\n\n/**\n * Native navbar state.\n */\nexport interface NativeNavigationNavbarOptions {\n /**\n * Hide the native navbar.\n */\n hidden?: boolean;\n\n /**\n * Main title.\n */\n title?: string;\n\n /**\n * Secondary title where supported by the platform.\n */\n subtitle?: string;\n\n /**\n * Prefer a large iOS title style.\n */\n large?: boolean;\n\n /**\n * Prefer transparent/scroll-edge style.\n */\n transparent?: boolean;\n\n /**\n * iOS blur/material effect for the navbar background when glass is not\n * available. Defaults to `systemChromeMaterial` for transparent bars.\n */\n blurEffect?: NativeNavigationBlurEffect;\n\n /**\n * Back button state.\n */\n backButton?: NativeNavigationBackButton;\n\n /**\n * Left-side action buttons.\n */\n leftItems?: NativeNavigationBarButton[];\n\n /**\n * Right-side action buttons.\n */\n rightItems?: NativeNavigationBarButton[];\n\n /**\n * Navbar color hints.\n */\n colors?: NativeNavigationColors;\n\n /**\n * Animate native navbar changes.\n */\n animated?: boolean;\n}\n\n/**\n * A native tab item.\n */\nexport interface NativeNavigationTab {\n /**\n * Stable tab id returned in `tabSelect`.\n */\n id: string;\n\n /**\n * Visible tab label.\n */\n title?: string;\n\n /**\n * Native icon descriptor.\n */\n icon?: NativeNavigationIcon;\n\n /**\n * Optional selected-state icon.\n */\n selectedIcon?: NativeNavigationIcon;\n\n /**\n * Optional badge. Numeric badges are supported on both platforms; text badge\n * support depends on platform capabilities.\n */\n badge?: string | number;\n\n /**\n * Whether the tab is enabled. Defaults to `true`.\n */\n enabled?: boolean;\n}\n\n/**\n * Native tabbar state.\n */\nexport interface NativeNavigationTabbarOptions {\n /**\n * Hide the native tabbar.\n */\n hidden?: boolean;\n\n /**\n * Tab definitions.\n */\n tabs?: NativeNavigationTab[];\n\n /**\n * Currently selected tab id.\n */\n selectedId?: string;\n\n /**\n * Show text labels. Defaults to `true`.\n */\n labels?: boolean;\n\n /**\n * Native label visibility mode. Overrides `labels` when provided.\n */\n labelVisibilityMode?: NativeNavigationTabLabelVisibilityMode;\n\n /**\n * Show icons. Defaults to `true`.\n */\n icons?: boolean;\n\n /**\n * Tabbar color hints.\n */\n colors?: NativeNavigationColors;\n\n /**\n * iOS blur/material effect for the tabbar background when glass is not\n * available.\n */\n blurEffect?: NativeNavigationBlurEffect;\n\n /**\n * Disable the Android active tab indicator.\n */\n disableIndicator?: boolean;\n\n /**\n * Active tab indicator color on Android. `colors.indicator` is also\n * supported.\n */\n indicatorColor?: string;\n\n /**\n * Tab press ripple color on Android. `colors.ripple` is also supported.\n */\n rippleColor?: string;\n\n /**\n * Badge background color. `colors.badgeBackground` is also supported.\n */\n badgeBackgroundColor?: string;\n\n /**\n * Badge text color. `colors.badgeText` is also supported.\n */\n badgeTextColor?: string;\n\n /**\n * Animate native tabbar changes.\n */\n animated?: boolean;\n}\n\n/**\n * Insets exposed to web content.\n */\nexport interface NativeNavigationInsets {\n top: number;\n right: number;\n bottom: number;\n left: number;\n navbarHeight: number;\n tabbarHeight: number;\n}\n\n/**\n * Returned by methods that may change safe content bounds.\n */\nexport interface NativeNavigationInsetsResult {\n insets: NativeNavigationInsets;\n}\n\n/**\n * Begin a native transition transaction before JS changes route content.\n */\nexport interface NativeNavigationBeginTransitionOptions {\n id?: string;\n direction?: NativeNavigationTransitionDirection;\n duration?: number;\n /**\n * Source rectangle for `zoom` transitions. Use viewport coordinates such as\n * those returned by `Element.getBoundingClientRect()`.\n */\n sourceRect?: NativeNavigationRect;\n /**\n * Destination rectangle for shared-element-style `zoom` transitions.\n */\n targetRect?: NativeNavigationRect;\n /**\n * Corner radius used while animating a `zoom` transition.\n */\n cornerRadius?: number;\n}\n\n/**\n * Finish a native transition transaction after JS has changed route content.\n */\nexport interface NativeNavigationFinishTransitionOptions {\n id?: string;\n direction?: NativeNavigationTransitionDirection;\n duration?: number;\n /**\n * Source rectangle for `zoom` transitions when no active source was recorded.\n */\n sourceRect?: NativeNavigationRect;\n /**\n * Destination rectangle for shared-element-style `zoom` transitions.\n */\n targetRect?: NativeNavigationRect;\n /**\n * Corner radius used while animating a `zoom` transition.\n */\n cornerRadius?: number;\n}\n\n/**\n * Native transition result.\n */\nexport interface NativeNavigationTransitionResult {\n id: string;\n direction: NativeNavigationTransitionDirection;\n duration: number;\n}\n\n/**\n * Plugin version payload.\n */\nexport interface PluginVersionResult {\n /**\n * Version identifier returned by the platform implementation.\n */\n version: string;\n}\n\nexport interface NativeNavigationBackEvent {\n source: 'navbar';\n}\n\nexport interface NativeNavigationBarItemTapEvent {\n id: string;\n title?: string;\n placement: 'left' | 'right';\n}\n\nexport interface NativeNavigationTabSelectEvent {\n id: string;\n index: number;\n title?: string;\n}\n\nexport interface NativeNavigationSafeAreaChangedEvent {\n insets: NativeNavigationInsets;\n}\n\nexport interface NativeNavigationTransitionEvent {\n id: string;\n direction: NativeNavigationTransitionDirection;\n duration: number;\n}\n\n/**\n * Framework-agnostic native navigation chrome API.\n */\nexport interface NativeNavigationPlugin {\n /**\n * Configure the native chrome host and content inset behavior.\n */\n configure(options?: NativeNavigationConfigureOptions): Promise<NativeNavigationInsetsResult>;\n\n /**\n * Render or update the native navbar.\n */\n setNavbar(options: NativeNavigationNavbarOptions): Promise<NativeNavigationInsetsResult>;\n\n /**\n * Render or update the native tabbar.\n */\n setTabbar(options: NativeNavigationTabbarOptions): Promise<NativeNavigationInsetsResult>;\n\n /**\n * Capture the current WebView and prepare a native transition.\n */\n beginTransition(options?: NativeNavigationBeginTransitionOptions): Promise<NativeNavigationTransitionResult>;\n\n /**\n * Animate from the captured WebView snapshot to the current live WebView.\n */\n finishTransition(options?: NativeNavigationFinishTransitionOptions): Promise<NativeNavigationTransitionResult>;\n\n /**\n * Returns the platform implementation version marker.\n */\n getPluginVersion(): Promise<PluginVersionResult>;\n\n addListener(\n eventName: 'navbarBack',\n listenerFunc: (event: NativeNavigationBackEvent) => void,\n ): Promise<PluginListenerHandle>;\n\n addListener(\n eventName: 'navbarItemTap',\n listenerFunc: (event: NativeNavigationBarItemTapEvent) => void,\n ): Promise<PluginListenerHandle>;\n\n addListener(\n eventName: 'tabSelect',\n listenerFunc: (event: NativeNavigationTabSelectEvent) => void,\n ): Promise<PluginListenerHandle>;\n\n addListener(\n eventName: 'safeAreaChanged',\n listenerFunc: (event: NativeNavigationSafeAreaChangedEvent) => void,\n ): Promise<PluginListenerHandle>;\n\n addListener(\n eventName: 'transitionStart',\n listenerFunc: (event: NativeNavigationTransitionEvent) => void,\n ): Promise<PluginListenerHandle>;\n\n addListener(\n eventName: 'transitionEnd',\n listenerFunc: (event: NativeNavigationTransitionEvent) => void,\n ): Promise<PluginListenerHandle>;\n}\n"]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { NativeNavigationBeginTransitionOptions, NativeNavigationFinishTransitionOptions, NativeNavigationPlugin, NativeNavigationRect, NativeNavigationTransitionResult } from './definitions';
|
|
2
|
+
export declare const NativeNavigation: NativeNavigationPlugin;
|
|
3
|
+
export * from './definitions';
|
|
4
|
+
export { defineNativeNavigationElements } from './components';
|
|
5
|
+
type NativeNavigationRectTarget = Element | DOMRect | NativeNavigationRect;
|
|
6
|
+
/**
|
|
7
|
+
* Convert an element or DOMRect into viewport coordinates accepted by native
|
|
8
|
+
* zoom transitions.
|
|
9
|
+
*/
|
|
10
|
+
export declare const getNativeNavigationRect: (target: NativeNavigationRectTarget) => NativeNavigationRect;
|
|
11
|
+
/**
|
|
12
|
+
* Begin an Apple-Zoom-style native transition from a DOM element or rect.
|
|
13
|
+
*/
|
|
14
|
+
export declare const beginZoomTransition: (target: NativeNavigationRectTarget, options?: Omit<NativeNavigationBeginTransitionOptions, "direction" | "sourceRect">) => Promise<NativeNavigationTransitionResult>;
|
|
15
|
+
/**
|
|
16
|
+
* Finish an Apple-Zoom-style native transition into an optional DOM element or
|
|
17
|
+
* rect on the destination route.
|
|
18
|
+
*/
|
|
19
|
+
export declare const finishZoomTransition: (target?: NativeNavigationRectTarget, options?: Omit<NativeNavigationFinishTransitionOptions, "direction" | "targetRect">) => Promise<NativeNavigationTransitionResult>;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { registerPlugin } from '@capacitor/core';
|
|
2
|
+
import { createNativeNavigationWeb } from './plugin';
|
|
3
|
+
export const NativeNavigation = registerPlugin('NativeNavigation', {
|
|
4
|
+
web: createNativeNavigationWeb,
|
|
5
|
+
});
|
|
6
|
+
export * from './definitions';
|
|
7
|
+
export { defineNativeNavigationElements } from './components';
|
|
8
|
+
const isElement = (target) => typeof Element !== 'undefined' && target instanceof Element;
|
|
9
|
+
const isDomRect = (target) => typeof DOMRect !== 'undefined' && target instanceof DOMRect;
|
|
10
|
+
/**
|
|
11
|
+
* Convert an element or DOMRect into viewport coordinates accepted by native
|
|
12
|
+
* zoom transitions.
|
|
13
|
+
*/
|
|
14
|
+
export const getNativeNavigationRect = (target) => {
|
|
15
|
+
const rect = isElement(target) ? target.getBoundingClientRect() : target;
|
|
16
|
+
if (isDomRect(rect)) {
|
|
17
|
+
return {
|
|
18
|
+
x: rect.x,
|
|
19
|
+
y: rect.y,
|
|
20
|
+
width: rect.width,
|
|
21
|
+
height: rect.height,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
return {
|
|
25
|
+
x: rect.x,
|
|
26
|
+
y: rect.y,
|
|
27
|
+
width: rect.width,
|
|
28
|
+
height: rect.height,
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Begin an Apple-Zoom-style native transition from a DOM element or rect.
|
|
33
|
+
*/
|
|
34
|
+
export const beginZoomTransition = (target, options = {}) => NativeNavigation.beginTransition(Object.assign(Object.assign({}, options), { direction: 'zoom', sourceRect: getNativeNavigationRect(target) }));
|
|
35
|
+
/**
|
|
36
|
+
* Finish an Apple-Zoom-style native transition into an optional DOM element or
|
|
37
|
+
* rect on the destination route.
|
|
38
|
+
*/
|
|
39
|
+
export const finishZoomTransition = (target, options = {}) => NativeNavigation.finishTransition(Object.assign(Object.assign({}, options), { direction: 'zoom', targetRect: target ? getNativeNavigationRect(target) : undefined }));
|
|
40
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AASjD,OAAO,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAC;AAErD,MAAM,CAAC,MAAM,gBAAgB,GAAG,cAAc,CAAyB,kBAAkB,EAAE;IACzF,GAAG,EAAE,yBAAyB;CAC/B,CAAC,CAAC;AAEH,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,8BAA8B,EAAE,MAAM,cAAc,CAAC;AAI9D,MAAM,SAAS,GAAG,CAAC,MAAkC,EAAqB,EAAE,CAC1E,OAAO,OAAO,KAAK,WAAW,IAAI,MAAM,YAAY,OAAO,CAAC;AAE9D,MAAM,SAAS,GAAG,CAAC,MAAkC,EAAqB,EAAE,CAC1E,OAAO,OAAO,KAAK,WAAW,IAAI,MAAM,YAAY,OAAO,CAAC;AAE9D;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,MAAkC,EAAwB,EAAE;IAClG,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;IACzE,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;QACpB,OAAO;YACL,CAAC,EAAE,IAAI,CAAC,CAAC;YACT,CAAC,EAAE,IAAI,CAAC,CAAC;YACT,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC;IACJ,CAAC;IACD,OAAO;QACL,CAAC,EAAE,IAAI,CAAC,CAAC;QACT,CAAC,EAAE,IAAI,CAAC,CAAC;QACT,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,MAAM,EAAE,IAAI,CAAC,MAAM;KACpB,CAAC;AACJ,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,MAAkC,EAClC,UAAoF,EAAE,EAC3C,EAAE,CAC7C,gBAAgB,CAAC,eAAe,iCAC3B,OAAO,KACV,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,uBAAuB,CAAC,MAAM,CAAC,IAC3C,CAAC;AAEL;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,MAAmC,EACnC,UAAqF,EAAE,EAC5C,EAAE,CAC7C,gBAAgB,CAAC,gBAAgB,iCAC5B,OAAO,KACV,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,IAChE,CAAC","sourcesContent":["import { registerPlugin } from '@capacitor/core';\n\nimport type {\n NativeNavigationBeginTransitionOptions,\n NativeNavigationFinishTransitionOptions,\n NativeNavigationPlugin,\n NativeNavigationRect,\n NativeNavigationTransitionResult,\n} from './definitions';\nimport { createNativeNavigationWeb } from './plugin';\n\nexport const NativeNavigation = registerPlugin<NativeNavigationPlugin>('NativeNavigation', {\n web: createNativeNavigationWeb,\n});\n\nexport * from './definitions';\nexport { defineNativeNavigationElements } from './components';\n\ntype NativeNavigationRectTarget = Element | DOMRect | NativeNavigationRect;\n\nconst isElement = (target: NativeNavigationRectTarget): target is Element =>\n typeof Element !== 'undefined' && target instanceof Element;\n\nconst isDomRect = (target: NativeNavigationRectTarget): target is DOMRect =>\n typeof DOMRect !== 'undefined' && target instanceof DOMRect;\n\n/**\n * Convert an element or DOMRect into viewport coordinates accepted by native\n * zoom transitions.\n */\nexport const getNativeNavigationRect = (target: NativeNavigationRectTarget): NativeNavigationRect => {\n const rect = isElement(target) ? target.getBoundingClientRect() : target;\n if (isDomRect(rect)) {\n return {\n x: rect.x,\n y: rect.y,\n width: rect.width,\n height: rect.height,\n };\n }\n return {\n x: rect.x,\n y: rect.y,\n width: rect.width,\n height: rect.height,\n };\n};\n\n/**\n * Begin an Apple-Zoom-style native transition from a DOM element or rect.\n */\nexport const beginZoomTransition = (\n target: NativeNavigationRectTarget,\n options: Omit<NativeNavigationBeginTransitionOptions, 'direction' | 'sourceRect'> = {},\n): Promise<NativeNavigationTransitionResult> =>\n NativeNavigation.beginTransition({\n ...options,\n direction: 'zoom',\n sourceRect: getNativeNavigationRect(target),\n });\n\n/**\n * Finish an Apple-Zoom-style native transition into an optional DOM element or\n * rect on the destination route.\n */\nexport const finishZoomTransition = (\n target?: NativeNavigationRectTarget,\n options: Omit<NativeNavigationFinishTransitionOptions, 'direction' | 'targetRect'> = {},\n): Promise<NativeNavigationTransitionResult> =>\n NativeNavigation.finishTransition({\n ...options,\n direction: 'zoom',\n targetRect: target ? getNativeNavigationRect(target) : undefined,\n });\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/plugin.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,yBAAyB,GAAG,GAAoC,EAAE,CAC7E,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,mBAAmB,EAAE,CAAC,CAAC","sourcesContent":["import type { NativeNavigationPlugin } from './definitions';\n\nexport const createNativeNavigationWeb = (): Promise<NativeNavigationPlugin> =>\n import('./web').then((m) => new m.NativeNavigationWeb());\n"]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { WebPlugin } from '@capacitor/core';
|
|
2
|
+
import type { NativeNavigationBeginTransitionOptions, NativeNavigationConfigureOptions, NativeNavigationFinishTransitionOptions, NativeNavigationInsetsResult, NativeNavigationNavbarOptions, NativeNavigationPlugin, NativeNavigationTabbarOptions, NativeNavigationTransitionResult, PluginVersionResult } from './definitions';
|
|
3
|
+
export declare class NativeNavigationWeb extends WebPlugin implements NativeNavigationPlugin {
|
|
4
|
+
private config;
|
|
5
|
+
private navbar;
|
|
6
|
+
private tabbar;
|
|
7
|
+
private activeTransition;
|
|
8
|
+
configure(options?: NativeNavigationConfigureOptions): Promise<NativeNavigationInsetsResult>;
|
|
9
|
+
setNavbar(options: NativeNavigationNavbarOptions): Promise<NativeNavigationInsetsResult>;
|
|
10
|
+
setTabbar(options: NativeNavigationTabbarOptions): Promise<NativeNavigationInsetsResult>;
|
|
11
|
+
beginTransition(options?: NativeNavigationBeginTransitionOptions): Promise<NativeNavigationTransitionResult>;
|
|
12
|
+
finishTransition(options?: NativeNavigationFinishTransitionOptions): Promise<NativeNavigationTransitionResult>;
|
|
13
|
+
getPluginVersion(): Promise<PluginVersionResult>;
|
|
14
|
+
private createTransition;
|
|
15
|
+
private applyInsets;
|
|
16
|
+
private dispatchWindowEvent;
|
|
17
|
+
}
|
package/dist/esm/web.js
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { WebPlugin } from '@capacitor/core';
|
|
2
|
+
const DEFAULT_NAVBAR_HEIGHT = 44;
|
|
3
|
+
const DEFAULT_TABBAR_HEIGHT = 49;
|
|
4
|
+
const DEFAULT_TRANSITION_DURATION = 350;
|
|
5
|
+
export class NativeNavigationWeb extends WebPlugin {
|
|
6
|
+
constructor() {
|
|
7
|
+
super(...arguments);
|
|
8
|
+
this.config = {
|
|
9
|
+
contentInsetMode: 'css',
|
|
10
|
+
enabled: true,
|
|
11
|
+
platformStyle: 'auto',
|
|
12
|
+
};
|
|
13
|
+
this.navbar = { hidden: true };
|
|
14
|
+
this.tabbar = { hidden: true };
|
|
15
|
+
this.activeTransition = null;
|
|
16
|
+
}
|
|
17
|
+
async configure(options = {}) {
|
|
18
|
+
this.config = Object.assign(Object.assign(Object.assign({}, this.config), options), { colors: Object.assign(Object.assign({}, this.config.colors), options.colors) });
|
|
19
|
+
return this.applyInsets();
|
|
20
|
+
}
|
|
21
|
+
async setNavbar(options) {
|
|
22
|
+
this.navbar = Object.assign(Object.assign(Object.assign({}, this.navbar), options), { colors: Object.assign(Object.assign({}, this.navbar.colors), options.colors) });
|
|
23
|
+
return this.applyInsets();
|
|
24
|
+
}
|
|
25
|
+
async setTabbar(options) {
|
|
26
|
+
this.tabbar = Object.assign(Object.assign(Object.assign({}, this.tabbar), options), { colors: Object.assign(Object.assign({}, this.tabbar.colors), options.colors) });
|
|
27
|
+
return this.applyInsets();
|
|
28
|
+
}
|
|
29
|
+
async beginTransition(options = {}) {
|
|
30
|
+
const transition = this.createTransition(options.id, options.direction, options.duration);
|
|
31
|
+
this.activeTransition = transition;
|
|
32
|
+
this.notifyListeners('transitionStart', transition);
|
|
33
|
+
this.dispatchWindowEvent('transitionStart', transition);
|
|
34
|
+
return transition;
|
|
35
|
+
}
|
|
36
|
+
async finishTransition(options = {}) {
|
|
37
|
+
var _a, _b;
|
|
38
|
+
const transition = this.activeTransition && (!options.id || options.id === this.activeTransition.id)
|
|
39
|
+
? Object.assign(Object.assign({}, this.activeTransition), { direction: (_a = options.direction) !== null && _a !== void 0 ? _a : this.activeTransition.direction, duration: (_b = options.duration) !== null && _b !== void 0 ? _b : this.activeTransition.duration }) : this.createTransition(options.id, options.direction, options.duration);
|
|
40
|
+
this.activeTransition = null;
|
|
41
|
+
this.notifyListeners('transitionEnd', transition);
|
|
42
|
+
this.dispatchWindowEvent('transitionEnd', transition);
|
|
43
|
+
return transition;
|
|
44
|
+
}
|
|
45
|
+
async getPluginVersion() {
|
|
46
|
+
return {
|
|
47
|
+
version: 'web',
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
createTransition(id, direction, duration) {
|
|
51
|
+
var _a;
|
|
52
|
+
if (id === void 0) { id = `transition-${Date.now()}`; }
|
|
53
|
+
if (direction === void 0) { direction = 'forward'; }
|
|
54
|
+
if (duration === void 0) { duration = (_a = this.config.animationDuration) !== null && _a !== void 0 ? _a : DEFAULT_TRANSITION_DURATION; }
|
|
55
|
+
return { id, direction, duration };
|
|
56
|
+
}
|
|
57
|
+
applyInsets() {
|
|
58
|
+
const enabled = this.config.enabled !== false;
|
|
59
|
+
const navbarVisible = enabled && this.navbar.hidden !== true;
|
|
60
|
+
const tabbarVisible = enabled && this.tabbar.hidden !== true;
|
|
61
|
+
const insets = {
|
|
62
|
+
top: navbarVisible ? DEFAULT_NAVBAR_HEIGHT : 0,
|
|
63
|
+
right: 0,
|
|
64
|
+
bottom: tabbarVisible ? DEFAULT_TABBAR_HEIGHT : 0,
|
|
65
|
+
left: 0,
|
|
66
|
+
navbarHeight: navbarVisible ? DEFAULT_NAVBAR_HEIGHT : 0,
|
|
67
|
+
tabbarHeight: tabbarVisible ? DEFAULT_TABBAR_HEIGHT : 0,
|
|
68
|
+
};
|
|
69
|
+
if (this.config.contentInsetMode !== 'none' && typeof document !== 'undefined') {
|
|
70
|
+
const root = document.documentElement;
|
|
71
|
+
root.style.setProperty('--cap-native-navigation-top', `${insets.top}px`);
|
|
72
|
+
root.style.setProperty('--cap-native-navigation-right', `${insets.right}px`);
|
|
73
|
+
root.style.setProperty('--cap-native-navigation-bottom', `${insets.bottom}px`);
|
|
74
|
+
root.style.setProperty('--cap-native-navigation-left', `${insets.left}px`);
|
|
75
|
+
root.style.setProperty('--cap-native-navbar-height', `${insets.navbarHeight}px`);
|
|
76
|
+
root.style.setProperty('--cap-native-tabbar-height', `${insets.tabbarHeight}px`);
|
|
77
|
+
}
|
|
78
|
+
const event = { insets };
|
|
79
|
+
this.notifyListeners('safeAreaChanged', event);
|
|
80
|
+
this.dispatchWindowEvent('safeAreaChanged', event);
|
|
81
|
+
return { insets };
|
|
82
|
+
}
|
|
83
|
+
dispatchWindowEvent(name, detail) {
|
|
84
|
+
if (typeof window === 'undefined') {
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
window.dispatchEvent(new CustomEvent(`capNativeNavigation:${name}`, { detail }));
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=web.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web.js","sourceRoot":"","sources":["../../src/web.ts"],"names":[],"mappings":"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","sourcesContent":["import { WebPlugin } from '@capacitor/core';\n\nimport type {\n NativeNavigationBeginTransitionOptions,\n NativeNavigationConfigureOptions,\n NativeNavigationFinishTransitionOptions,\n NativeNavigationInsets,\n NativeNavigationInsetsResult,\n NativeNavigationNavbarOptions,\n NativeNavigationPlugin,\n NativeNavigationTabbarOptions,\n NativeNavigationTransitionDirection,\n NativeNavigationTransitionResult,\n PluginVersionResult,\n} from './definitions';\n\nconst DEFAULT_NAVBAR_HEIGHT = 44;\nconst DEFAULT_TABBAR_HEIGHT = 49;\nconst DEFAULT_TRANSITION_DURATION = 350;\n\nexport class NativeNavigationWeb extends WebPlugin implements NativeNavigationPlugin {\n private config: NativeNavigationConfigureOptions = {\n contentInsetMode: 'css',\n enabled: true,\n platformStyle: 'auto',\n };\n private navbar: NativeNavigationNavbarOptions = { hidden: true };\n private tabbar: NativeNavigationTabbarOptions = { hidden: true };\n private activeTransition: NativeNavigationTransitionResult | null = null;\n\n async configure(options: NativeNavigationConfigureOptions = {}): Promise<NativeNavigationInsetsResult> {\n this.config = {\n ...this.config,\n ...options,\n colors: {\n ...this.config.colors,\n ...options.colors,\n },\n };\n return this.applyInsets();\n }\n\n async setNavbar(options: NativeNavigationNavbarOptions): Promise<NativeNavigationInsetsResult> {\n this.navbar = {\n ...this.navbar,\n ...options,\n colors: {\n ...this.navbar.colors,\n ...options.colors,\n },\n };\n return this.applyInsets();\n }\n\n async setTabbar(options: NativeNavigationTabbarOptions): Promise<NativeNavigationInsetsResult> {\n this.tabbar = {\n ...this.tabbar,\n ...options,\n colors: {\n ...this.tabbar.colors,\n ...options.colors,\n },\n };\n return this.applyInsets();\n }\n\n async beginTransition(\n options: NativeNavigationBeginTransitionOptions = {},\n ): Promise<NativeNavigationTransitionResult> {\n const transition = this.createTransition(options.id, options.direction, options.duration);\n this.activeTransition = transition;\n this.notifyListeners('transitionStart', transition);\n this.dispatchWindowEvent('transitionStart', transition);\n return transition;\n }\n\n async finishTransition(\n options: NativeNavigationFinishTransitionOptions = {},\n ): Promise<NativeNavigationTransitionResult> {\n const transition =\n this.activeTransition && (!options.id || options.id === this.activeTransition.id)\n ? {\n ...this.activeTransition,\n direction: options.direction ?? this.activeTransition.direction,\n duration: options.duration ?? this.activeTransition.duration,\n }\n : this.createTransition(options.id, options.direction, options.duration);\n\n this.activeTransition = null;\n this.notifyListeners('transitionEnd', transition);\n this.dispatchWindowEvent('transitionEnd', transition);\n return transition;\n }\n\n async getPluginVersion(): Promise<PluginVersionResult> {\n return {\n version: 'web',\n };\n }\n\n private createTransition(\n id = `transition-${Date.now()}`,\n direction: NativeNavigationTransitionDirection = 'forward',\n duration = this.config.animationDuration ?? DEFAULT_TRANSITION_DURATION,\n ): NativeNavigationTransitionResult {\n return { id, direction, duration };\n }\n\n private applyInsets(): NativeNavigationInsetsResult {\n const enabled = this.config.enabled !== false;\n const navbarVisible = enabled && this.navbar.hidden !== true;\n const tabbarVisible = enabled && this.tabbar.hidden !== true;\n const insets: NativeNavigationInsets = {\n top: navbarVisible ? DEFAULT_NAVBAR_HEIGHT : 0,\n right: 0,\n bottom: tabbarVisible ? DEFAULT_TABBAR_HEIGHT : 0,\n left: 0,\n navbarHeight: navbarVisible ? DEFAULT_NAVBAR_HEIGHT : 0,\n tabbarHeight: tabbarVisible ? DEFAULT_TABBAR_HEIGHT : 0,\n };\n\n if (this.config.contentInsetMode !== 'none' && typeof document !== 'undefined') {\n const root = document.documentElement;\n root.style.setProperty('--cap-native-navigation-top', `${insets.top}px`);\n root.style.setProperty('--cap-native-navigation-right', `${insets.right}px`);\n root.style.setProperty('--cap-native-navigation-bottom', `${insets.bottom}px`);\n root.style.setProperty('--cap-native-navigation-left', `${insets.left}px`);\n root.style.setProperty('--cap-native-navbar-height', `${insets.navbarHeight}px`);\n root.style.setProperty('--cap-native-tabbar-height', `${insets.tabbarHeight}px`);\n }\n\n const event = { insets };\n this.notifyListeners('safeAreaChanged', event);\n this.dispatchWindowEvent('safeAreaChanged', event);\n return { insets };\n }\n\n private dispatchWindowEvent(name: string, detail: unknown): void {\n if (typeof window === 'undefined') {\n return;\n }\n window.dispatchEvent(new CustomEvent(`capNativeNavigation:${name}`, { detail }));\n }\n}\n"]}
|
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var core = require('@capacitor/core');
|
|
4
|
+
|
|
5
|
+
const createNativeNavigationWeb = () => Promise.resolve().then(function () { return web; }).then((m) => new m.NativeNavigationWeb());
|
|
6
|
+
|
|
7
|
+
const parseBoolean = (value, defaultValue = false) => {
|
|
8
|
+
if (value === null) {
|
|
9
|
+
return defaultValue;
|
|
10
|
+
}
|
|
11
|
+
return value === '' || value === 'true' || value === '1';
|
|
12
|
+
};
|
|
13
|
+
const normalizeAttribute = (value) => (value ? value : undefined);
|
|
14
|
+
const typedAttribute = (element, name) => normalizeAttribute(element.getAttribute(name));
|
|
15
|
+
const parseJsonAttribute = (element, name, fallback) => {
|
|
16
|
+
const value = element.getAttribute(name);
|
|
17
|
+
if (!value) {
|
|
18
|
+
return fallback;
|
|
19
|
+
}
|
|
20
|
+
try {
|
|
21
|
+
return JSON.parse(value);
|
|
22
|
+
}
|
|
23
|
+
catch (_a) {
|
|
24
|
+
return fallback;
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
const getNativeNavigation = async () => (await Promise.resolve().then(function () { return index; })).NativeNavigation;
|
|
28
|
+
function defineNativeNavigationElements() {
|
|
29
|
+
if (typeof customElements === 'undefined' || typeof HTMLElement === 'undefined') {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
class CapNativeNavigationProvider extends HTMLElement {
|
|
33
|
+
static get observedAttributes() {
|
|
34
|
+
return ['enabled', 'platform-style', 'content-inset-mode', 'animation-duration', 'colors'];
|
|
35
|
+
}
|
|
36
|
+
connectedCallback() {
|
|
37
|
+
void this.sync();
|
|
38
|
+
}
|
|
39
|
+
attributeChangedCallback() {
|
|
40
|
+
if (this.isConnected) {
|
|
41
|
+
void this.sync();
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
async sync() {
|
|
45
|
+
var _a, _b;
|
|
46
|
+
const duration = this.getAttribute('animation-duration');
|
|
47
|
+
const options = {
|
|
48
|
+
enabled: parseBoolean(this.getAttribute('enabled'), true),
|
|
49
|
+
platformStyle: (_a = typedAttribute(this, 'platform-style')) !== null && _a !== void 0 ? _a : 'auto',
|
|
50
|
+
contentInsetMode: (_b = typedAttribute(this, 'content-inset-mode')) !== null && _b !== void 0 ? _b : 'css',
|
|
51
|
+
colors: parseJsonAttribute(this, 'colors', undefined),
|
|
52
|
+
};
|
|
53
|
+
if (duration) {
|
|
54
|
+
options.animationDuration = Number(duration);
|
|
55
|
+
}
|
|
56
|
+
const NativeNavigation = await getNativeNavigation();
|
|
57
|
+
await NativeNavigation.configure(options);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
class CapNativeNavbar extends HTMLElement {
|
|
61
|
+
static get observedAttributes() {
|
|
62
|
+
return [
|
|
63
|
+
'hidden',
|
|
64
|
+
'title',
|
|
65
|
+
'subtitle',
|
|
66
|
+
'large',
|
|
67
|
+
'transparent',
|
|
68
|
+
'blur-effect',
|
|
69
|
+
'back-button',
|
|
70
|
+
'back-title',
|
|
71
|
+
'left-items',
|
|
72
|
+
'right-items',
|
|
73
|
+
'colors',
|
|
74
|
+
'animated',
|
|
75
|
+
];
|
|
76
|
+
}
|
|
77
|
+
connectedCallback() {
|
|
78
|
+
void this.sync();
|
|
79
|
+
}
|
|
80
|
+
attributeChangedCallback() {
|
|
81
|
+
if (this.isConnected) {
|
|
82
|
+
void this.sync();
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
async sync() {
|
|
86
|
+
var _a, _b;
|
|
87
|
+
const options = {
|
|
88
|
+
hidden: parseBoolean(this.getAttribute('hidden')),
|
|
89
|
+
title: (_a = this.getAttribute('title')) !== null && _a !== void 0 ? _a : undefined,
|
|
90
|
+
subtitle: (_b = this.getAttribute('subtitle')) !== null && _b !== void 0 ? _b : undefined,
|
|
91
|
+
large: parseBoolean(this.getAttribute('large')),
|
|
92
|
+
transparent: parseBoolean(this.getAttribute('transparent')),
|
|
93
|
+
blurEffect: typedAttribute(this, 'blur-effect'),
|
|
94
|
+
backButton: {
|
|
95
|
+
visible: parseBoolean(this.getAttribute('back-button')),
|
|
96
|
+
title: normalizeAttribute(this.getAttribute('back-title')),
|
|
97
|
+
},
|
|
98
|
+
leftItems: parseJsonAttribute(this, 'left-items', []),
|
|
99
|
+
rightItems: parseJsonAttribute(this, 'right-items', []),
|
|
100
|
+
colors: parseJsonAttribute(this, 'colors', undefined),
|
|
101
|
+
animated: parseBoolean(this.getAttribute('animated')),
|
|
102
|
+
};
|
|
103
|
+
const NativeNavigation = await getNativeNavigation();
|
|
104
|
+
await NativeNavigation.setNavbar(options);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
class CapNativeTabbar extends HTMLElement {
|
|
108
|
+
static get observedAttributes() {
|
|
109
|
+
return [
|
|
110
|
+
'hidden',
|
|
111
|
+
'tabs',
|
|
112
|
+
'selected-id',
|
|
113
|
+
'labels',
|
|
114
|
+
'label-visibility-mode',
|
|
115
|
+
'icons',
|
|
116
|
+
'colors',
|
|
117
|
+
'blur-effect',
|
|
118
|
+
'disable-indicator',
|
|
119
|
+
'indicator-color',
|
|
120
|
+
'ripple-color',
|
|
121
|
+
'badge-background-color',
|
|
122
|
+
'badge-text-color',
|
|
123
|
+
'animated',
|
|
124
|
+
];
|
|
125
|
+
}
|
|
126
|
+
connectedCallback() {
|
|
127
|
+
void this.sync();
|
|
128
|
+
}
|
|
129
|
+
attributeChangedCallback() {
|
|
130
|
+
if (this.isConnected) {
|
|
131
|
+
void this.sync();
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
async sync() {
|
|
135
|
+
const options = {
|
|
136
|
+
hidden: parseBoolean(this.getAttribute('hidden')),
|
|
137
|
+
tabs: parseJsonAttribute(this, 'tabs', []),
|
|
138
|
+
selectedId: normalizeAttribute(this.getAttribute('selected-id')),
|
|
139
|
+
labels: parseBoolean(this.getAttribute('labels'), true),
|
|
140
|
+
labelVisibilityMode: typedAttribute(this, 'label-visibility-mode'),
|
|
141
|
+
icons: parseBoolean(this.getAttribute('icons'), true),
|
|
142
|
+
colors: parseJsonAttribute(this, 'colors', undefined),
|
|
143
|
+
blurEffect: typedAttribute(this, 'blur-effect'),
|
|
144
|
+
disableIndicator: parseBoolean(this.getAttribute('disable-indicator')),
|
|
145
|
+
indicatorColor: normalizeAttribute(this.getAttribute('indicator-color')),
|
|
146
|
+
rippleColor: normalizeAttribute(this.getAttribute('ripple-color')),
|
|
147
|
+
badgeBackgroundColor: normalizeAttribute(this.getAttribute('badge-background-color')),
|
|
148
|
+
badgeTextColor: normalizeAttribute(this.getAttribute('badge-text-color')),
|
|
149
|
+
animated: parseBoolean(this.getAttribute('animated')),
|
|
150
|
+
};
|
|
151
|
+
const NativeNavigation = await getNativeNavigation();
|
|
152
|
+
await NativeNavigation.setTabbar(options);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
if (!customElements.get('cap-native-navigation-provider')) {
|
|
156
|
+
customElements.define('cap-native-navigation-provider', CapNativeNavigationProvider);
|
|
157
|
+
}
|
|
158
|
+
if (!customElements.get('cap-native-navbar')) {
|
|
159
|
+
customElements.define('cap-native-navbar', CapNativeNavbar);
|
|
160
|
+
}
|
|
161
|
+
if (!customElements.get('cap-native-tabbar')) {
|
|
162
|
+
customElements.define('cap-native-tabbar', CapNativeTabbar);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
const NativeNavigation = core.registerPlugin('NativeNavigation', {
|
|
167
|
+
web: createNativeNavigationWeb,
|
|
168
|
+
});
|
|
169
|
+
const isElement = (target) => typeof Element !== 'undefined' && target instanceof Element;
|
|
170
|
+
const isDomRect = (target) => typeof DOMRect !== 'undefined' && target instanceof DOMRect;
|
|
171
|
+
/**
|
|
172
|
+
* Convert an element or DOMRect into viewport coordinates accepted by native
|
|
173
|
+
* zoom transitions.
|
|
174
|
+
*/
|
|
175
|
+
const getNativeNavigationRect = (target) => {
|
|
176
|
+
const rect = isElement(target) ? target.getBoundingClientRect() : target;
|
|
177
|
+
if (isDomRect(rect)) {
|
|
178
|
+
return {
|
|
179
|
+
x: rect.x,
|
|
180
|
+
y: rect.y,
|
|
181
|
+
width: rect.width,
|
|
182
|
+
height: rect.height,
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
return {
|
|
186
|
+
x: rect.x,
|
|
187
|
+
y: rect.y,
|
|
188
|
+
width: rect.width,
|
|
189
|
+
height: rect.height,
|
|
190
|
+
};
|
|
191
|
+
};
|
|
192
|
+
/**
|
|
193
|
+
* Begin an Apple-Zoom-style native transition from a DOM element or rect.
|
|
194
|
+
*/
|
|
195
|
+
const beginZoomTransition = (target, options = {}) => NativeNavigation.beginTransition(Object.assign(Object.assign({}, options), { direction: 'zoom', sourceRect: getNativeNavigationRect(target) }));
|
|
196
|
+
/**
|
|
197
|
+
* Finish an Apple-Zoom-style native transition into an optional DOM element or
|
|
198
|
+
* rect on the destination route.
|
|
199
|
+
*/
|
|
200
|
+
const finishZoomTransition = (target, options = {}) => NativeNavigation.finishTransition(Object.assign(Object.assign({}, options), { direction: 'zoom', targetRect: target ? getNativeNavigationRect(target) : undefined }));
|
|
201
|
+
|
|
202
|
+
var index = /*#__PURE__*/Object.freeze({
|
|
203
|
+
__proto__: null,
|
|
204
|
+
NativeNavigation: NativeNavigation,
|
|
205
|
+
beginZoomTransition: beginZoomTransition,
|
|
206
|
+
defineNativeNavigationElements: defineNativeNavigationElements,
|
|
207
|
+
finishZoomTransition: finishZoomTransition,
|
|
208
|
+
getNativeNavigationRect: getNativeNavigationRect
|
|
209
|
+
});
|
|
210
|
+
|
|
211
|
+
const DEFAULT_NAVBAR_HEIGHT = 44;
|
|
212
|
+
const DEFAULT_TABBAR_HEIGHT = 49;
|
|
213
|
+
const DEFAULT_TRANSITION_DURATION = 350;
|
|
214
|
+
class NativeNavigationWeb extends core.WebPlugin {
|
|
215
|
+
constructor() {
|
|
216
|
+
super(...arguments);
|
|
217
|
+
this.config = {
|
|
218
|
+
contentInsetMode: 'css',
|
|
219
|
+
enabled: true,
|
|
220
|
+
platformStyle: 'auto',
|
|
221
|
+
};
|
|
222
|
+
this.navbar = { hidden: true };
|
|
223
|
+
this.tabbar = { hidden: true };
|
|
224
|
+
this.activeTransition = null;
|
|
225
|
+
}
|
|
226
|
+
async configure(options = {}) {
|
|
227
|
+
this.config = Object.assign(Object.assign(Object.assign({}, this.config), options), { colors: Object.assign(Object.assign({}, this.config.colors), options.colors) });
|
|
228
|
+
return this.applyInsets();
|
|
229
|
+
}
|
|
230
|
+
async setNavbar(options) {
|
|
231
|
+
this.navbar = Object.assign(Object.assign(Object.assign({}, this.navbar), options), { colors: Object.assign(Object.assign({}, this.navbar.colors), options.colors) });
|
|
232
|
+
return this.applyInsets();
|
|
233
|
+
}
|
|
234
|
+
async setTabbar(options) {
|
|
235
|
+
this.tabbar = Object.assign(Object.assign(Object.assign({}, this.tabbar), options), { colors: Object.assign(Object.assign({}, this.tabbar.colors), options.colors) });
|
|
236
|
+
return this.applyInsets();
|
|
237
|
+
}
|
|
238
|
+
async beginTransition(options = {}) {
|
|
239
|
+
const transition = this.createTransition(options.id, options.direction, options.duration);
|
|
240
|
+
this.activeTransition = transition;
|
|
241
|
+
this.notifyListeners('transitionStart', transition);
|
|
242
|
+
this.dispatchWindowEvent('transitionStart', transition);
|
|
243
|
+
return transition;
|
|
244
|
+
}
|
|
245
|
+
async finishTransition(options = {}) {
|
|
246
|
+
var _a, _b;
|
|
247
|
+
const transition = this.activeTransition && (!options.id || options.id === this.activeTransition.id)
|
|
248
|
+
? Object.assign(Object.assign({}, this.activeTransition), { direction: (_a = options.direction) !== null && _a !== void 0 ? _a : this.activeTransition.direction, duration: (_b = options.duration) !== null && _b !== void 0 ? _b : this.activeTransition.duration }) : this.createTransition(options.id, options.direction, options.duration);
|
|
249
|
+
this.activeTransition = null;
|
|
250
|
+
this.notifyListeners('transitionEnd', transition);
|
|
251
|
+
this.dispatchWindowEvent('transitionEnd', transition);
|
|
252
|
+
return transition;
|
|
253
|
+
}
|
|
254
|
+
async getPluginVersion() {
|
|
255
|
+
return {
|
|
256
|
+
version: 'web',
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
createTransition(id, direction, duration) {
|
|
260
|
+
var _a;
|
|
261
|
+
if (id === void 0) { id = `transition-${Date.now()}`; }
|
|
262
|
+
if (direction === void 0) { direction = 'forward'; }
|
|
263
|
+
if (duration === void 0) { duration = (_a = this.config.animationDuration) !== null && _a !== void 0 ? _a : DEFAULT_TRANSITION_DURATION; }
|
|
264
|
+
return { id, direction, duration };
|
|
265
|
+
}
|
|
266
|
+
applyInsets() {
|
|
267
|
+
const enabled = this.config.enabled !== false;
|
|
268
|
+
const navbarVisible = enabled && this.navbar.hidden !== true;
|
|
269
|
+
const tabbarVisible = enabled && this.tabbar.hidden !== true;
|
|
270
|
+
const insets = {
|
|
271
|
+
top: navbarVisible ? DEFAULT_NAVBAR_HEIGHT : 0,
|
|
272
|
+
right: 0,
|
|
273
|
+
bottom: tabbarVisible ? DEFAULT_TABBAR_HEIGHT : 0,
|
|
274
|
+
left: 0,
|
|
275
|
+
navbarHeight: navbarVisible ? DEFAULT_NAVBAR_HEIGHT : 0,
|
|
276
|
+
tabbarHeight: tabbarVisible ? DEFAULT_TABBAR_HEIGHT : 0,
|
|
277
|
+
};
|
|
278
|
+
if (this.config.contentInsetMode !== 'none' && typeof document !== 'undefined') {
|
|
279
|
+
const root = document.documentElement;
|
|
280
|
+
root.style.setProperty('--cap-native-navigation-top', `${insets.top}px`);
|
|
281
|
+
root.style.setProperty('--cap-native-navigation-right', `${insets.right}px`);
|
|
282
|
+
root.style.setProperty('--cap-native-navigation-bottom', `${insets.bottom}px`);
|
|
283
|
+
root.style.setProperty('--cap-native-navigation-left', `${insets.left}px`);
|
|
284
|
+
root.style.setProperty('--cap-native-navbar-height', `${insets.navbarHeight}px`);
|
|
285
|
+
root.style.setProperty('--cap-native-tabbar-height', `${insets.tabbarHeight}px`);
|
|
286
|
+
}
|
|
287
|
+
const event = { insets };
|
|
288
|
+
this.notifyListeners('safeAreaChanged', event);
|
|
289
|
+
this.dispatchWindowEvent('safeAreaChanged', event);
|
|
290
|
+
return { insets };
|
|
291
|
+
}
|
|
292
|
+
dispatchWindowEvent(name, detail) {
|
|
293
|
+
if (typeof window === 'undefined') {
|
|
294
|
+
return;
|
|
295
|
+
}
|
|
296
|
+
window.dispatchEvent(new CustomEvent(`capNativeNavigation:${name}`, { detail }));
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
var web = /*#__PURE__*/Object.freeze({
|
|
301
|
+
__proto__: null,
|
|
302
|
+
NativeNavigationWeb: NativeNavigationWeb
|
|
303
|
+
});
|
|
304
|
+
|
|
305
|
+
exports.NativeNavigation = NativeNavigation;
|
|
306
|
+
exports.beginZoomTransition = beginZoomTransition;
|
|
307
|
+
exports.defineNativeNavigationElements = defineNativeNavigationElements;
|
|
308
|
+
exports.finishZoomTransition = finishZoomTransition;
|
|
309
|
+
exports.getNativeNavigationRect = getNativeNavigationRect;
|
|
310
|
+
//# sourceMappingURL=plugin.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.cjs.js","sources":["esm/plugin.js","esm/components.js","esm/index.js","esm/web.js"],"sourcesContent":["export const createNativeNavigationWeb = () => import('./web').then((m) => new m.NativeNavigationWeb());\n//# sourceMappingURL=plugin.js.map","const parseBoolean = (value, defaultValue = false) => {\n if (value === null) {\n return defaultValue;\n }\n return value === '' || value === 'true' || value === '1';\n};\nconst normalizeAttribute = (value) => (value ? value : undefined);\nconst typedAttribute = (element, name) => normalizeAttribute(element.getAttribute(name));\nconst parseJsonAttribute = (element, name, fallback) => {\n const value = element.getAttribute(name);\n if (!value) {\n return fallback;\n }\n try {\n return JSON.parse(value);\n }\n catch (_a) {\n return fallback;\n }\n};\nconst getNativeNavigation = async () => (await import('./index')).NativeNavigation;\nexport function defineNativeNavigationElements() {\n if (typeof customElements === 'undefined' || typeof HTMLElement === 'undefined') {\n return;\n }\n class CapNativeNavigationProvider extends HTMLElement {\n static get observedAttributes() {\n return ['enabled', 'platform-style', 'content-inset-mode', 'animation-duration', 'colors'];\n }\n connectedCallback() {\n void this.sync();\n }\n attributeChangedCallback() {\n if (this.isConnected) {\n void this.sync();\n }\n }\n async sync() {\n var _a, _b;\n const duration = this.getAttribute('animation-duration');\n const options = {\n enabled: parseBoolean(this.getAttribute('enabled'), true),\n platformStyle: (_a = typedAttribute(this, 'platform-style')) !== null && _a !== void 0 ? _a : 'auto',\n contentInsetMode: (_b = typedAttribute(this, 'content-inset-mode')) !== null && _b !== void 0 ? _b : 'css',\n colors: parseJsonAttribute(this, 'colors', undefined),\n };\n if (duration) {\n options.animationDuration = Number(duration);\n }\n const NativeNavigation = await getNativeNavigation();\n await NativeNavigation.configure(options);\n }\n }\n class CapNativeNavbar extends HTMLElement {\n static get observedAttributes() {\n return [\n 'hidden',\n 'title',\n 'subtitle',\n 'large',\n 'transparent',\n 'blur-effect',\n 'back-button',\n 'back-title',\n 'left-items',\n 'right-items',\n 'colors',\n 'animated',\n ];\n }\n connectedCallback() {\n void this.sync();\n }\n attributeChangedCallback() {\n if (this.isConnected) {\n void this.sync();\n }\n }\n async sync() {\n var _a, _b;\n const options = {\n hidden: parseBoolean(this.getAttribute('hidden')),\n title: (_a = this.getAttribute('title')) !== null && _a !== void 0 ? _a : undefined,\n subtitle: (_b = this.getAttribute('subtitle')) !== null && _b !== void 0 ? _b : undefined,\n large: parseBoolean(this.getAttribute('large')),\n transparent: parseBoolean(this.getAttribute('transparent')),\n blurEffect: typedAttribute(this, 'blur-effect'),\n backButton: {\n visible: parseBoolean(this.getAttribute('back-button')),\n title: normalizeAttribute(this.getAttribute('back-title')),\n },\n leftItems: parseJsonAttribute(this, 'left-items', []),\n rightItems: parseJsonAttribute(this, 'right-items', []),\n colors: parseJsonAttribute(this, 'colors', undefined),\n animated: parseBoolean(this.getAttribute('animated')),\n };\n const NativeNavigation = await getNativeNavigation();\n await NativeNavigation.setNavbar(options);\n }\n }\n class CapNativeTabbar extends HTMLElement {\n static get observedAttributes() {\n return [\n 'hidden',\n 'tabs',\n 'selected-id',\n 'labels',\n 'label-visibility-mode',\n 'icons',\n 'colors',\n 'blur-effect',\n 'disable-indicator',\n 'indicator-color',\n 'ripple-color',\n 'badge-background-color',\n 'badge-text-color',\n 'animated',\n ];\n }\n connectedCallback() {\n void this.sync();\n }\n attributeChangedCallback() {\n if (this.isConnected) {\n void this.sync();\n }\n }\n async sync() {\n const options = {\n hidden: parseBoolean(this.getAttribute('hidden')),\n tabs: parseJsonAttribute(this, 'tabs', []),\n selectedId: normalizeAttribute(this.getAttribute('selected-id')),\n labels: parseBoolean(this.getAttribute('labels'), true),\n labelVisibilityMode: typedAttribute(this, 'label-visibility-mode'),\n icons: parseBoolean(this.getAttribute('icons'), true),\n colors: parseJsonAttribute(this, 'colors', undefined),\n blurEffect: typedAttribute(this, 'blur-effect'),\n disableIndicator: parseBoolean(this.getAttribute('disable-indicator')),\n indicatorColor: normalizeAttribute(this.getAttribute('indicator-color')),\n rippleColor: normalizeAttribute(this.getAttribute('ripple-color')),\n badgeBackgroundColor: normalizeAttribute(this.getAttribute('badge-background-color')),\n badgeTextColor: normalizeAttribute(this.getAttribute('badge-text-color')),\n animated: parseBoolean(this.getAttribute('animated')),\n };\n const NativeNavigation = await getNativeNavigation();\n await NativeNavigation.setTabbar(options);\n }\n }\n if (!customElements.get('cap-native-navigation-provider')) {\n customElements.define('cap-native-navigation-provider', CapNativeNavigationProvider);\n }\n if (!customElements.get('cap-native-navbar')) {\n customElements.define('cap-native-navbar', CapNativeNavbar);\n }\n if (!customElements.get('cap-native-tabbar')) {\n customElements.define('cap-native-tabbar', CapNativeTabbar);\n }\n}\n//# sourceMappingURL=components.js.map","import { registerPlugin } from '@capacitor/core';\nimport { createNativeNavigationWeb } from './plugin';\nexport const NativeNavigation = registerPlugin('NativeNavigation', {\n web: createNativeNavigationWeb,\n});\nexport * from './definitions';\nexport { defineNativeNavigationElements } from './components';\nconst isElement = (target) => typeof Element !== 'undefined' && target instanceof Element;\nconst isDomRect = (target) => typeof DOMRect !== 'undefined' && target instanceof DOMRect;\n/**\n * Convert an element or DOMRect into viewport coordinates accepted by native\n * zoom transitions.\n */\nexport const getNativeNavigationRect = (target) => {\n const rect = isElement(target) ? target.getBoundingClientRect() : target;\n if (isDomRect(rect)) {\n return {\n x: rect.x,\n y: rect.y,\n width: rect.width,\n height: rect.height,\n };\n }\n return {\n x: rect.x,\n y: rect.y,\n width: rect.width,\n height: rect.height,\n };\n};\n/**\n * Begin an Apple-Zoom-style native transition from a DOM element or rect.\n */\nexport const beginZoomTransition = (target, options = {}) => NativeNavigation.beginTransition(Object.assign(Object.assign({}, options), { direction: 'zoom', sourceRect: getNativeNavigationRect(target) }));\n/**\n * Finish an Apple-Zoom-style native transition into an optional DOM element or\n * rect on the destination route.\n */\nexport const finishZoomTransition = (target, options = {}) => NativeNavigation.finishTransition(Object.assign(Object.assign({}, options), { direction: 'zoom', targetRect: target ? getNativeNavigationRect(target) : undefined }));\n//# sourceMappingURL=index.js.map","import { WebPlugin } from '@capacitor/core';\nconst DEFAULT_NAVBAR_HEIGHT = 44;\nconst DEFAULT_TABBAR_HEIGHT = 49;\nconst DEFAULT_TRANSITION_DURATION = 350;\nexport class NativeNavigationWeb extends WebPlugin {\n constructor() {\n super(...arguments);\n this.config = {\n contentInsetMode: 'css',\n enabled: true,\n platformStyle: 'auto',\n };\n this.navbar = { hidden: true };\n this.tabbar = { hidden: true };\n this.activeTransition = null;\n }\n async configure(options = {}) {\n this.config = Object.assign(Object.assign(Object.assign({}, this.config), options), { colors: Object.assign(Object.assign({}, this.config.colors), options.colors) });\n return this.applyInsets();\n }\n async setNavbar(options) {\n this.navbar = Object.assign(Object.assign(Object.assign({}, this.navbar), options), { colors: Object.assign(Object.assign({}, this.navbar.colors), options.colors) });\n return this.applyInsets();\n }\n async setTabbar(options) {\n this.tabbar = Object.assign(Object.assign(Object.assign({}, this.tabbar), options), { colors: Object.assign(Object.assign({}, this.tabbar.colors), options.colors) });\n return this.applyInsets();\n }\n async beginTransition(options = {}) {\n const transition = this.createTransition(options.id, options.direction, options.duration);\n this.activeTransition = transition;\n this.notifyListeners('transitionStart', transition);\n this.dispatchWindowEvent('transitionStart', transition);\n return transition;\n }\n async finishTransition(options = {}) {\n var _a, _b;\n const transition = this.activeTransition && (!options.id || options.id === this.activeTransition.id)\n ? Object.assign(Object.assign({}, this.activeTransition), { direction: (_a = options.direction) !== null && _a !== void 0 ? _a : this.activeTransition.direction, duration: (_b = options.duration) !== null && _b !== void 0 ? _b : this.activeTransition.duration }) : this.createTransition(options.id, options.direction, options.duration);\n this.activeTransition = null;\n this.notifyListeners('transitionEnd', transition);\n this.dispatchWindowEvent('transitionEnd', transition);\n return transition;\n }\n async getPluginVersion() {\n return {\n version: 'web',\n };\n }\n createTransition(id, direction, duration) {\n var _a;\n if (id === void 0) { id = `transition-${Date.now()}`; }\n if (direction === void 0) { direction = 'forward'; }\n if (duration === void 0) { duration = (_a = this.config.animationDuration) !== null && _a !== void 0 ? _a : DEFAULT_TRANSITION_DURATION; }\n return { id, direction, duration };\n }\n applyInsets() {\n const enabled = this.config.enabled !== false;\n const navbarVisible = enabled && this.navbar.hidden !== true;\n const tabbarVisible = enabled && this.tabbar.hidden !== true;\n const insets = {\n top: navbarVisible ? DEFAULT_NAVBAR_HEIGHT : 0,\n right: 0,\n bottom: tabbarVisible ? DEFAULT_TABBAR_HEIGHT : 0,\n left: 0,\n navbarHeight: navbarVisible ? DEFAULT_NAVBAR_HEIGHT : 0,\n tabbarHeight: tabbarVisible ? DEFAULT_TABBAR_HEIGHT : 0,\n };\n if (this.config.contentInsetMode !== 'none' && typeof document !== 'undefined') {\n const root = document.documentElement;\n root.style.setProperty('--cap-native-navigation-top', `${insets.top}px`);\n root.style.setProperty('--cap-native-navigation-right', `${insets.right}px`);\n root.style.setProperty('--cap-native-navigation-bottom', `${insets.bottom}px`);\n root.style.setProperty('--cap-native-navigation-left', `${insets.left}px`);\n root.style.setProperty('--cap-native-navbar-height', `${insets.navbarHeight}px`);\n root.style.setProperty('--cap-native-tabbar-height', `${insets.tabbarHeight}px`);\n }\n const event = { insets };\n this.notifyListeners('safeAreaChanged', event);\n this.dispatchWindowEvent('safeAreaChanged', event);\n return { insets };\n }\n dispatchWindowEvent(name, detail) {\n if (typeof window === 'undefined') {\n return;\n }\n window.dispatchEvent(new CustomEvent(`capNativeNavigation:${name}`, { detail }));\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["registerPlugin","WebPlugin"],"mappings":"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"}
|