├── .eslintrc.js ├── .gitattributes ├── .gitignore ├── .prettierrc ├── .vscode ├── settings.json └── snippets │ └── typescript.json ├── Evoker.podspec ├── LICENSE ├── README.md ├── iOS ├── Evoker │ └── Sources │ │ ├── Bridge │ │ ├── API │ │ │ ├── AuthAPI.swift │ │ │ ├── CanvasAPI.swift │ │ │ ├── CryptoAPI.swift │ │ │ ├── Device │ │ │ │ ├── BatteryAPI.swift │ │ │ │ ├── ClipboardAPI.swift │ │ │ │ ├── NetworkAPI.swift │ │ │ │ ├── PhoneAPI.swift │ │ │ │ ├── ScanAPI.swift │ │ │ │ ├── ScreenAPI.swift │ │ │ │ ├── SoundAPI.swift │ │ │ │ ├── VibrateAPI.swift │ │ │ │ └── VolumeAPI.swift │ │ │ ├── FileAPI.swift │ │ │ ├── LifeCycleAPI.swift │ │ │ ├── MediaAPI.swift │ │ │ ├── NavigateAPI.swift │ │ │ ├── OpenAPI.swift │ │ │ ├── RequestAPI.swift │ │ │ ├── RouteAPI.swift │ │ │ ├── ShareAPI.swift │ │ │ ├── StorageAPI.swift │ │ │ ├── TongCengAPI.swift │ │ │ └── UI │ │ │ │ ├── InteractionAPI.swift │ │ │ │ ├── NavigationAPI.swift │ │ │ │ ├── PickerAPI.swift │ │ │ │ ├── PullDownRefreshAPI.swift │ │ │ │ ├── ScrollAPI.swift │ │ │ │ └── TabBarAPI.swift │ │ ├── Global │ │ │ ├── AppServiceNativeSDK.swift │ │ │ ├── ArrayBufferRegister.swift │ │ │ ├── Base64Object.swift │ │ │ ├── FileSystemManager.swift │ │ │ ├── MessageChannel.swift │ │ │ ├── NativeTimer.swift │ │ │ ├── StorageSyncObject.swift │ │ │ └── SystemObject.swift │ │ └── JSBridge.swift │ │ ├── Common │ │ ├── Cache │ │ │ ├── CircularLinkedList.swift │ │ │ └── LRUCache.swift │ │ ├── Control │ │ │ ├── AppMoreActionSheet.swift │ │ │ ├── AppUIControl.swift │ │ │ └── CapsuleView.swift │ │ ├── ImagePreview │ │ │ └── ImagePreview.swift │ │ ├── Interaction │ │ │ ├── ActionSheet.swift │ │ │ ├── Alert.swift │ │ │ ├── AuthorizationView.swift │ │ │ ├── CoverView.swift │ │ │ ├── LoadingView.swift │ │ │ ├── Notify.swift │ │ │ ├── Toast.swift │ │ │ └── TransitionView.swift │ │ ├── Navigation │ │ │ ├── NavigationBar.swift │ │ │ └── NavigationController.swift │ │ ├── Picker │ │ │ ├── DatePickerView.swift │ │ │ ├── MultiPickerView.swift │ │ │ ├── PickerContainerView.swift │ │ │ └── PickerView.swift │ │ ├── Player │ │ │ └── Player.swift │ │ ├── ScanCode │ │ │ ├── ScanCodeView.swift │ │ │ ├── ScanCodeViewController.swift │ │ │ └── ScanCodeViewModel.swift │ │ ├── Setting │ │ │ ├── LocationSettingViewController.swift │ │ │ ├── LocationSettingViewModel.swift │ │ │ ├── SettingViewController.swift │ │ │ └── SettingViewModel.swift │ │ ├── StaticTableView │ │ │ ├── StaticTableViewCellInfo.swift │ │ │ ├── StaticTableViewInfo.swift │ │ │ └── StaticTableViewSectionInfo.swift │ │ ├── TabBar │ │ │ ├── TabBarItem.swift │ │ │ └── TabBarView.swift │ │ ├── WebP │ │ │ └── WebPSchemeHandler.swift │ │ └── WebSocket │ │ │ └── WebSocket.swift │ │ ├── Database │ │ └── AppStorage.swift │ │ ├── Dev │ │ └── DevServer.swift │ │ ├── Engine │ │ ├── Engine.swift │ │ └── EngineConfig.swift │ │ ├── Extension │ │ ├── Array+Extension.swift │ │ ├── CGRect+Extension.swift │ │ ├── CLLocationCoordinate2D+Extension.swift │ │ ├── Codable+Any.swift │ │ ├── JSON+Extension.swift │ │ ├── JSValue+Extension.swift │ │ ├── NSAttributedString+Extension.swift │ │ ├── Number+Extension.swift │ │ ├── String+Extension.swift │ │ ├── TimeInterval+Extension.swift │ │ ├── UIColor+Hex.swift │ │ ├── UIColor+Theme.swift │ │ ├── UIImage+Extension.swift │ │ ├── UIScrollView+Tongceng.swift │ │ ├── UITableView+Extension.swift │ │ ├── UIView+Animation.swift │ │ ├── UIView+Tongceng.swift │ │ ├── UIWindow+ViewController.swift │ │ └── URL+Extension.swift │ │ ├── Module │ │ ├── Audio │ │ │ ├── AudioAPI.swift │ │ │ ├── AudioModule.swift │ │ │ └── AudioPlayer.swift │ │ ├── Camera │ │ │ ├── CameraAPI.swift │ │ │ ├── CameraModule.swift │ │ │ ├── Core │ │ │ │ └── CameraCapture.swift │ │ │ └── Engine │ │ │ │ ├── CameraEngine.swift │ │ │ │ └── UICameraEngine.swift │ │ ├── Canvas │ │ │ ├── Canvas2DMethod.swift │ │ │ ├── Canvas2DView.swift │ │ │ └── CanvasModule.swift │ │ ├── Input │ │ │ ├── InputAPI.swift │ │ │ ├── InputModule.swift │ │ │ └── View │ │ │ │ ├── TextFieldView.swift │ │ │ │ ├── TextInput.swift │ │ │ │ ├── TextInputCompleteView.swift │ │ │ │ └── TextView.swift │ │ ├── Location │ │ │ ├── LocationAPI.swift │ │ │ ├── LocationManager.swift │ │ │ └── LocationModule.swift │ │ ├── Module.swift │ │ ├── Recorder │ │ │ ├── AudioRecorder.swift │ │ │ ├── AudioRecorderAPI.swift │ │ │ └── AudioRecorderModule.swift │ │ ├── Video │ │ │ ├── VideoAPI.swift │ │ │ ├── VideoModule.swift │ │ │ ├── VideoPlayer.swift │ │ │ └── VideoPlayerView.swift │ │ └── WebSocket │ │ │ ├── WebSocketAPI.swift │ │ │ ├── WebSocketModule.swift │ │ │ └── WebSocketTask.swift │ │ ├── Page │ │ ├── Base │ │ │ ├── Page.swift │ │ │ └── PageViewController.swift │ │ ├── Browser │ │ │ ├── BrowserPage.swift │ │ │ └── BrowserPageViewController.swift │ │ └── Web │ │ │ ├── View │ │ │ ├── NativelyContainerView.swift │ │ │ └── WebView.swift │ │ │ ├── ViewController │ │ │ └── WebPageViewController.swift │ │ │ └── WebPage.swift │ │ ├── Resources │ │ ├── Image.xcassets │ │ │ ├── Contents.json │ │ │ ├── album-icon.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── album-icon@3x.png │ │ │ ├── back-arrow-icon-circle-dark.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── back-arrow-icon-circle-dark@3x.png │ │ │ ├── back-arrow-icon-dark.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── back-arrow-icon-dark@2x.png │ │ │ │ └── back-arrow-icon-dark@3x.png │ │ │ ├── back-arrow-icon.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── back-arrow-icon@2x.png │ │ │ │ └── back-arrow-icon@3x.png │ │ │ ├── close-icon.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── close-icon@2x.png │ │ │ │ └── close-icon@3x.png │ │ │ ├── down-arrow-icon.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── down-arrow-icon@2x.png │ │ │ │ └── down-arrow-icon@3x.png │ │ │ ├── hud-error-icon.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── hud-error-icon@2x.png │ │ │ │ └── hud-error-icon@3x.png │ │ │ ├── hud-loading-icon.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── hud-loading-icon@3x.png │ │ │ ├── hud-success-icon.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── hud-success-icon@2x.png │ │ │ │ └── hud-success-icon@3x.png │ │ │ ├── mini-program-close-icon-dark.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── mini-program-close-icon-dark@3x.png │ │ │ ├── mini-program-close-icon.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── mini-program-close-icon@2x.png │ │ │ ├── mini-program-home-icon.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── mini-program-home-icon@2x.png │ │ │ ├── mini-program-more-icon-dark.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── mini-program-more-icon-dark@3x.png │ │ │ ├── mini-program-more-icon.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── mini-program-more-icon@2x.png │ │ │ ├── mp-action-sheet-button-bg-dark.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── mp-action-sheet-button-bg-dark@3x.png │ │ │ ├── mp-action-sheet-button-bg-hl-dark.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── mp-action-sheet-button-bg-hl-dark@3x.png │ │ │ ├── mp-action-sheet-button-bg-hl.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── mp-action-sheet-button-bg-hl@3x.png │ │ │ ├── mp-action-sheet-button-bg.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── mp-action-sheet-button-bg@3x.png │ │ │ ├── mp-action-sheet-reload-icon-dark.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── mp-action-sheet-reload-icon-dark@3x.png │ │ │ ├── mp-action-sheet-reload-icon.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── mp-action-sheet-reload-icon@3x.png │ │ │ ├── mp-action-sheet-setting-icon-dark.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── mp-action-sheet-setting-icon-dark@3x.png │ │ │ ├── mp-action-sheet-setting-icon.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── mp-action-sheet-setting-icon@3x.png │ │ │ ├── mp-action-sheet-share-icon-dark.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── mp-action-sheet-share-icon-dark@2x.png │ │ │ │ └── mp-action-sheet-share-icon-dark@3x.png │ │ │ ├── mp-action-sheet-share-icon.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── mp-action-sheet-share-icon@2x.png │ │ │ │ └── mp-action-sheet-share-icon@3x.png │ │ │ ├── navigation-loading.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── navigation-loading@3x.png │ │ │ ├── scan-effect-img.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── scan-effect-img@2x.png │ │ │ │ └── scan-effect-img@3x.png │ │ │ ├── tab-bar-item-badge.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── tab-bar-item-badge@3x.png │ │ │ └── tab-bar-item-red-dot.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── tab-bar-item-red-dot@3x.png │ │ ├── SDK │ │ │ └── evoker-sdk.evpkg │ │ └── Sound │ │ │ └── scan-code.wav │ │ ├── Service │ │ ├── AppConfig.swift │ │ ├── AppInfo.swift │ │ ├── AppLaunchOptions.swift │ │ ├── AppService.swift │ │ ├── JSContext.swift │ │ └── PackageManager.swift │ │ └── Util │ │ ├── Constant.swift │ │ ├── EKError.swift │ │ ├── FilePath.swift │ │ ├── JavaScriptGenerator.swift │ │ ├── KeyboardManager.swift │ │ ├── Lock.swift │ │ ├── Logger.swift │ │ ├── Network.swift │ │ ├── Pool.swift │ │ ├── PrivacyPermission.swift │ │ ├── Queue.swift │ │ ├── Uitls.swift │ │ └── VideoUtil.swift └── EvokerMap │ └── Sources │ ├── MapAPI.swift │ ├── MapModule.swift │ └── MapView.swift ├── package.json ├── packages ├── bridge │ ├── global.d.ts │ ├── package.json │ ├── src │ │ ├── api │ │ │ ├── auth.ts │ │ │ ├── const.ts │ │ │ ├── crypto.ts │ │ │ ├── device │ │ │ │ ├── battery.ts │ │ │ │ ├── clipboard.ts │ │ │ │ ├── keyboard.ts │ │ │ │ ├── network.ts │ │ │ │ ├── phone.ts │ │ │ │ ├── scan.ts │ │ │ │ ├── screen.ts │ │ │ │ ├── vibrate.ts │ │ │ │ └── volume.ts │ │ │ ├── file.ts │ │ │ ├── fs.ts │ │ │ ├── location.ts │ │ │ ├── media │ │ │ │ ├── album.ts │ │ │ │ ├── audio │ │ │ │ │ └── innerAudio.ts │ │ │ │ ├── camera.ts │ │ │ │ ├── image.ts │ │ │ │ ├── record.ts │ │ │ │ └── video.ts │ │ │ ├── open.ts │ │ │ ├── storage.ts │ │ │ └── ui │ │ │ │ ├── interaction.ts │ │ │ │ ├── navigation.ts │ │ │ │ ├── pullDownRefresh.ts │ │ │ │ └── tabBar.ts │ │ ├── async.ts │ │ ├── bridge.ts │ │ ├── errors.ts │ │ ├── index.ts │ │ ├── pipeline.ts │ │ └── utils.ts │ └── vite.config.ts ├── cli │ ├── bin │ │ └── evoker.js │ ├── package.json │ ├── src │ │ ├── build.ts │ │ ├── index.ts │ │ ├── plugins │ │ │ ├── app.ts │ │ │ ├── css.ts │ │ │ ├── dev.ts │ │ │ ├── pack.ts │ │ │ └── router.ts │ │ ├── utils.ts │ │ ├── vue.ts │ │ └── webSocket.ts │ └── vite.config.ts ├── create-evoker │ ├── README.md │ ├── _README.md │ ├── _gitignore │ ├── index.js │ ├── package.json │ ├── template-blank │ │ ├── package.json │ │ ├── src │ │ │ ├── App.vue │ │ │ ├── app.json │ │ │ ├── assets │ │ │ │ └── github.svg │ │ │ ├── components │ │ │ │ └── HelloWorld.vue │ │ │ ├── env.d.ts │ │ │ └── main.ts │ │ ├── tsconfig.json │ │ ├── tsconfig.node.json │ │ └── vite.config.ts │ └── template-iOS │ │ ├── Launcher.xcodeproj │ │ ├── project.pbxproj │ │ ├── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ │ └── IDEWorkspaceChecks.plist │ │ └── xcshareddata │ │ │ └── xcschemes │ │ │ └── Launcher.xcscheme │ │ ├── Launcher.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ │ ├── Launcher │ │ ├── AppDelegate.swift │ │ ├── Assets.xcassets │ │ │ ├── AccentColor.colorset │ │ │ │ └── Contents.json │ │ │ ├── AppIcon.appiconset │ │ │ │ ├── Contents.json │ │ │ │ └── LOGO.png │ │ │ └── Contents.json │ │ ├── Base.lproj │ │ │ └── LaunchScreen.storyboard │ │ ├── Codable+Extension.swift │ │ ├── Info.plist │ │ ├── Launcher.swift │ │ ├── LauncherAPI.swift │ │ └── app-service.evpkg │ │ └── Podfile ├── devtools │ ├── package.json │ ├── src │ │ ├── index.ts │ │ └── webSocket.ts │ └── vite.config.ts ├── evoker │ ├── global.d.ts │ ├── package.json │ ├── src │ │ └── index.ts │ └── vite.config.ts ├── example │ ├── package.json │ ├── postcss.config.js │ ├── src │ │ ├── App.vue │ │ ├── app.json │ │ ├── assets │ │ │ ├── car.png │ │ │ ├── icon_API.png │ │ │ ├── icon_API_HL.png │ │ │ ├── icon_component.png │ │ │ ├── icon_component_HL.png │ │ │ └── kind │ │ │ │ ├── api.png │ │ │ │ ├── api_dark.png │ │ │ │ ├── canvas.png │ │ │ │ ├── canvas_dark.png │ │ │ │ ├── content.png │ │ │ │ ├── content_dark.png │ │ │ │ ├── daytime.png │ │ │ │ ├── device.png │ │ │ │ ├── device_dark.png │ │ │ │ ├── feedback.png │ │ │ │ ├── feedback_dark.png │ │ │ │ ├── form.png │ │ │ │ ├── form_dark.png │ │ │ │ ├── framework.png │ │ │ │ ├── framework_dark.png │ │ │ │ ├── location.png │ │ │ │ ├── location_dark.png │ │ │ │ ├── logo.png │ │ │ │ ├── map.png │ │ │ │ ├── map_dark.png │ │ │ │ ├── media.png │ │ │ │ ├── media_dark.png │ │ │ │ ├── nav.png │ │ │ │ ├── nav_dark.png │ │ │ │ ├── network.png │ │ │ │ ├── network_dark.png │ │ │ │ ├── night.png │ │ │ │ ├── obstacle-free.png │ │ │ │ ├── obstacle-free_dark.png │ │ │ │ ├── open.png │ │ │ │ ├── open_dark.png │ │ │ │ ├── page.png │ │ │ │ ├── page_dark.png │ │ │ │ ├── performance.png │ │ │ │ ├── performance_dark.png │ │ │ │ ├── storage.png │ │ │ │ ├── storage_dark.png │ │ │ │ ├── view.png │ │ │ │ ├── view_dark.png │ │ │ │ ├── worker.png │ │ │ │ └── worker_dark.png │ │ ├── components │ │ │ ├── NCell.vue │ │ │ ├── NCellGroup.vue │ │ │ ├── NObject.vue │ │ │ ├── NPageIndex.vue │ │ │ ├── NTopic.vue │ │ │ └── VModelTest.vue │ │ ├── env.d.ts │ │ ├── main.ts │ │ ├── pages │ │ │ ├── API │ │ │ │ ├── ActionSheet.vue │ │ │ │ ├── Animation.vue │ │ │ │ ├── Audio.vue │ │ │ │ ├── CaptureScreen.vue │ │ │ │ ├── Clipboard.vue │ │ │ │ ├── DownloadFile.vue │ │ │ │ ├── File.vue │ │ │ │ ├── GetBatteryInfo.vue │ │ │ │ ├── GetLocation.vue │ │ │ │ ├── GetNetworkType.vue │ │ │ │ ├── GetSystemInfo.vue │ │ │ │ ├── GetUserInfo.vue │ │ │ │ ├── HTML.vue │ │ │ │ ├── Image.vue │ │ │ │ ├── Index.vue │ │ │ │ ├── IntersectionObserver.vue │ │ │ │ ├── LoadFontFace.vue │ │ │ │ ├── Login.vue │ │ │ │ ├── MakePhoneCall.vue │ │ │ │ ├── Modal.vue │ │ │ │ ├── NavigationBarLoading.vue │ │ │ │ ├── Navigator.vue │ │ │ │ ├── OnNetworkStatusChange.vue │ │ │ │ ├── PageScroll.vue │ │ │ │ ├── PullDownRefresh.vue │ │ │ │ ├── Request.vue │ │ │ │ ├── ScanCode.vue │ │ │ │ ├── ScreenBrightness.vue │ │ │ │ ├── SetTabBar.vue │ │ │ │ ├── SetTitle.vue │ │ │ │ ├── Setting.vue │ │ │ │ ├── Storage.vue │ │ │ │ ├── Toast.vue │ │ │ │ ├── UploadFile.vue │ │ │ │ ├── VModel.vue │ │ │ │ ├── Vibrate.vue │ │ │ │ ├── Video.vue │ │ │ │ ├── Voice.vue │ │ │ │ └── WebSocket.vue │ │ │ └── Component │ │ │ │ ├── Button.vue │ │ │ │ ├── Camera.vue │ │ │ │ ├── Canvas.vue │ │ │ │ ├── Checkbox.vue │ │ │ │ ├── Form.vue │ │ │ │ ├── Icon.vue │ │ │ │ ├── Image.vue │ │ │ │ ├── Index.vue │ │ │ │ ├── Input.vue │ │ │ │ ├── Label.vue │ │ │ │ ├── Map.vue │ │ │ │ ├── Movable.vue │ │ │ │ ├── Navigator.vue │ │ │ │ ├── Picker.vue │ │ │ │ ├── PickerView.vue │ │ │ │ ├── Progress.vue │ │ │ │ ├── Radio.vue │ │ │ │ ├── ScrollView.vue │ │ │ │ ├── Slider.vue │ │ │ │ ├── Swiper.vue │ │ │ │ ├── Switch.vue │ │ │ │ ├── Text.vue │ │ │ │ ├── Textarea.vue │ │ │ │ ├── Video.vue │ │ │ │ └── View.vue │ │ ├── store.ts │ │ ├── tailwind.css │ │ └── utils.ts │ ├── tailwind.config.js │ ├── tsconfig.json │ ├── tsconfig.node.json │ └── vite.config.ts ├── launcher │ ├── README.md │ ├── iOS │ │ ├── Launcher.xcodeproj │ │ │ ├── project.pbxproj │ │ │ ├── project.xcworkspace │ │ │ │ ├── contents.xcworkspacedata │ │ │ │ └── xcshareddata │ │ │ │ │ └── IDEWorkspaceChecks.plist │ │ │ └── xcshareddata │ │ │ │ └── xcschemes │ │ │ │ └── Launcher.xcscheme │ │ ├── Launcher.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ │ └── IDEWorkspaceChecks.plist │ │ ├── Launcher │ │ │ ├── AppDelegate.swift │ │ │ ├── Assets.xcassets │ │ │ │ ├── AccentColor.colorset │ │ │ │ │ └── Contents.json │ │ │ │ ├── AppIcon.appiconset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── LOGO.png │ │ │ │ └── Contents.json │ │ │ ├── Base.lproj │ │ │ │ └── LaunchScreen.storyboard │ │ │ ├── Codable+Extension.swift │ │ │ ├── Info.plist │ │ │ ├── Launcher.swift │ │ │ ├── LauncherAPI.swift │ │ │ └── app-service.evpkg │ │ └── Podfile │ ├── package.json │ ├── postcss.config.js │ ├── src │ │ ├── App.vue │ │ ├── apis │ │ │ └── index.ts │ │ ├── app.json │ │ ├── bridge │ │ │ └── index.ts │ │ ├── components │ │ │ ├── AppCell.vue │ │ │ ├── NavigationBar.vue │ │ │ ├── TableViewCell.vue │ │ │ └── TableViewSeciton.vue │ │ ├── env.d.ts │ │ ├── main.ts │ │ ├── pages │ │ │ ├── Config.vue │ │ │ └── Index.vue │ │ ├── storage.ts │ │ ├── tailwind.css │ │ └── utils.ts │ ├── tailwind.config.js │ ├── tsconfig.json │ ├── tsconfig.node.json │ └── vite.config.ts ├── service │ ├── package.json │ ├── src │ │ ├── app.ts │ │ ├── bridge │ │ │ ├── api │ │ │ │ ├── auth.ts │ │ │ │ ├── base │ │ │ │ │ ├── base64.ts │ │ │ │ │ └── system.ts │ │ │ │ ├── html │ │ │ │ │ ├── canvas │ │ │ │ │ │ ├── context.ts │ │ │ │ │ │ ├── image.ts │ │ │ │ │ │ ├── node.ts │ │ │ │ │ │ └── utils.ts │ │ │ │ │ ├── intersection.ts │ │ │ │ │ └── selector.ts │ │ │ │ ├── media │ │ │ │ │ ├── camera.ts │ │ │ │ │ └── video.ts │ │ │ │ ├── navigate.ts │ │ │ │ ├── open.ts │ │ │ │ ├── request │ │ │ │ │ ├── download.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── request.ts │ │ │ │ │ ├── task.ts │ │ │ │ │ ├── upload.ts │ │ │ │ │ ├── util.ts │ │ │ │ │ └── ws.ts │ │ │ │ ├── route.ts │ │ │ │ ├── share.ts │ │ │ │ └── ui │ │ │ │ │ ├── animation.ts │ │ │ │ │ ├── font.ts │ │ │ │ │ ├── scroll.ts │ │ │ │ │ └── tabBar.ts │ │ │ ├── bridge.ts │ │ │ ├── fromWebView.ts │ │ │ └── index.ts │ │ ├── dom │ │ │ ├── comment.ts │ │ │ ├── element.ts │ │ │ ├── eventTarget.ts │ │ │ ├── html.ts │ │ │ ├── node.ts │ │ │ ├── page.ts │ │ │ ├── style.ts │ │ │ ├── svg.ts │ │ │ ├── text.ts │ │ │ └── utils.ts │ │ ├── index.ts │ │ ├── lifecycle │ │ │ ├── global.ts │ │ │ ├── hooks.ts │ │ │ ├── useApp.ts │ │ │ └── usePage.ts │ │ ├── native.ts │ │ ├── router.ts │ │ ├── runtime-jscore │ │ │ ├── modules │ │ │ │ ├── attrs.ts │ │ │ │ ├── class.ts │ │ │ │ ├── events.ts │ │ │ │ ├── props.ts │ │ │ │ └── style.ts │ │ │ ├── patchProp.ts │ │ │ ├── patchUnmount.ts │ │ │ └── renderer.ts │ │ └── utils.ts │ └── vite.config.ts ├── shared │ ├── package.json │ ├── src │ │ ├── canvas.ts │ │ ├── devtools.ts │ │ ├── event.ts │ │ ├── index.ts │ │ └── syncFlags.ts │ └── vite.config.ts ├── test │ ├── README.md │ ├── iOS │ │ ├── Podfile │ │ ├── Podfile.lock │ │ ├── Test.xcodeproj │ │ │ ├── project.pbxproj │ │ │ ├── project.xcworkspace │ │ │ │ ├── contents.xcworkspacedata │ │ │ │ └── xcshareddata │ │ │ │ │ └── IDEWorkspaceChecks.plist │ │ │ └── xcshareddata │ │ │ │ └── xcschemes │ │ │ │ └── Runner.xcscheme │ │ ├── Test.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ │ └── IDEWorkspaceChecks.plist │ │ └── Test │ │ │ ├── AppDelegate.swift │ │ │ ├── Assets.xcassets │ │ │ ├── AccentColor.colorset │ │ │ │ └── Contents.json │ │ │ ├── AppIcon.appiconset │ │ │ │ └── Contents.json │ │ │ └── Contents.json │ │ │ ├── Base.lproj │ │ │ └── LaunchScreen.storyboard │ │ │ ├── Info.plist │ │ │ ├── LaunchpadViewController.swift │ │ │ └── TestUtils.swift │ ├── package.json │ ├── src │ │ ├── App.vue │ │ ├── app.json │ │ ├── components │ │ │ ├── StateIcon.vue │ │ │ └── TaskBoard.vue │ │ ├── env.d.ts │ │ ├── global.d.ts │ │ ├── main.ts │ │ ├── pages │ │ │ ├── Base.vue │ │ │ ├── Index.vue │ │ │ ├── Interaction.vue │ │ │ ├── Navigation.vue │ │ │ ├── Network.vue │ │ │ ├── Storage.vue │ │ │ ├── System.vue │ │ │ └── WebSocket.vue │ │ ├── test │ │ │ └── index.ts │ │ └── utils.ts │ ├── tsconfig.json │ ├── tsconfig.node.json │ └── vite.config.ts ├── vue │ ├── dist │ │ ├── vue.d.ts │ │ └── vue.runtime.global.js │ └── package.json └── webview │ ├── __tests__ │ ├── button.spec.ts │ └── progress.spec.ts │ ├── global.d.ts │ ├── package.json │ ├── postcss.config.js │ ├── src │ ├── bridge │ │ ├── api │ │ │ ├── canvas.ts │ │ │ ├── context.ts │ │ │ ├── font.ts │ │ │ ├── image.ts │ │ │ ├── navigator.ts │ │ │ ├── open.ts │ │ │ └── scroll.ts │ │ ├── bridge.ts │ │ ├── fromService.ts │ │ └── index.ts │ ├── dom │ │ ├── element.ts │ │ ├── event.ts │ │ ├── intersection.ts │ │ ├── render.ts │ │ ├── selector.ts │ │ ├── vdSync.ts │ │ └── vnode.ts │ ├── element │ │ ├── components │ │ │ ├── Button │ │ │ │ ├── Button.less │ │ │ │ ├── Button.tsx │ │ │ │ └── index.ts │ │ │ ├── Checkbox │ │ │ │ └── constant.ts │ │ │ ├── Icon │ │ │ │ ├── Icon.less │ │ │ │ ├── Icon.tsx │ │ │ │ └── index.ts │ │ │ ├── Image │ │ │ │ ├── Image.less │ │ │ │ ├── Image.tsx │ │ │ │ └── index.ts │ │ │ ├── Radio │ │ │ │ └── constant.ts │ │ │ ├── Swiper │ │ │ │ └── constant.ts │ │ │ ├── camera │ │ │ │ ├── Camera.less │ │ │ │ ├── Camera.tsx │ │ │ │ └── index.ts │ │ │ ├── canvas │ │ │ │ ├── Canvas.less │ │ │ │ ├── Canvas.tsx │ │ │ │ └── index.ts │ │ │ ├── checkbox-group │ │ │ │ ├── CheckboxGroup.less │ │ │ │ ├── CheckboxGroup.tsx │ │ │ │ └── index.ts │ │ │ ├── checkbox │ │ │ │ ├── Checkbox.less │ │ │ │ ├── Checkbox.tsx │ │ │ │ └── index.ts │ │ │ ├── form │ │ │ │ ├── Form.less │ │ │ │ ├── Form.tsx │ │ │ │ └── index.ts │ │ │ ├── input-html │ │ │ │ ├── InputHTML.less │ │ │ │ ├── InputHTML.tsx │ │ │ │ └── index.ts │ │ │ ├── input │ │ │ │ ├── Input.less │ │ │ │ ├── Input.tsx │ │ │ │ └── index.ts │ │ │ ├── label │ │ │ │ ├── Label.tsx │ │ │ │ └── index.ts │ │ │ ├── loading │ │ │ │ ├── Loading.less │ │ │ │ ├── Loading.tsx │ │ │ │ └── index.ts │ │ │ ├── map │ │ │ │ ├── Map.less │ │ │ │ ├── Map.tsx │ │ │ │ └── index.ts │ │ │ ├── movable-area │ │ │ │ ├── MovableArea.less │ │ │ │ ├── MovableArea.tsx │ │ │ │ ├── constant.ts │ │ │ │ └── index.ts │ │ │ ├── movable-view │ │ │ │ ├── MovableView.less │ │ │ │ ├── MovableView.tsx │ │ │ │ └── index.ts │ │ │ ├── navigator │ │ │ │ ├── Navigator.less │ │ │ │ ├── Navigator.tsx │ │ │ │ └── index.ts │ │ │ ├── picker-view-column │ │ │ │ ├── PickerViewColumn.less │ │ │ │ ├── PickerViewColumn.tsx │ │ │ │ └── index.ts │ │ │ ├── picker-view │ │ │ │ ├── PickerView.less │ │ │ │ ├── PickerView.tsx │ │ │ │ ├── define.ts │ │ │ │ └── index.ts │ │ │ ├── picker │ │ │ │ ├── Picker.less │ │ │ │ ├── Picker.tsx │ │ │ │ └── index.ts │ │ │ ├── progress │ │ │ │ ├── Progress.less │ │ │ │ ├── Progress.tsx │ │ │ │ └── index.ts │ │ │ ├── radio-group │ │ │ │ ├── RadioGroup.less │ │ │ │ ├── RadioGroup.tsx │ │ │ │ └── index.ts │ │ │ ├── radio │ │ │ │ ├── Radio.less │ │ │ │ ├── Radio.tsx │ │ │ │ └── index.ts │ │ │ ├── scroll-view │ │ │ │ ├── ScrollView.less │ │ │ │ ├── ScrollView.tsx │ │ │ │ └── index.ts │ │ │ ├── slider │ │ │ │ ├── Slider.less │ │ │ │ ├── Slider.tsx │ │ │ │ └── index.ts │ │ │ ├── swiper-item │ │ │ │ ├── SwiperItem.less │ │ │ │ ├── SwiperItem.tsx │ │ │ │ └── index.ts │ │ │ ├── swiper │ │ │ │ ├── Swiper.less │ │ │ │ ├── Swiper.tsx │ │ │ │ └── index.ts │ │ │ ├── switch │ │ │ │ ├── Switch.less │ │ │ │ ├── Switch.tsx │ │ │ │ └── index.ts │ │ │ ├── text │ │ │ │ ├── Text.less │ │ │ │ ├── Text.tsx │ │ │ │ └── index.ts │ │ │ ├── textarea │ │ │ │ ├── Textarea.less │ │ │ │ ├── Textarea.tsx │ │ │ │ └── index.ts │ │ │ ├── video │ │ │ │ ├── Video.less │ │ │ │ ├── Video.tsx │ │ │ │ ├── VideoButton │ │ │ │ │ ├── VideoButton.less │ │ │ │ │ ├── VideoButton.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── VideoProgress │ │ │ │ │ ├── VideoProgress.less │ │ │ │ │ ├── VideoProgress.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── VideoScreenBrightness │ │ │ │ │ ├── VideoScreenBrightness.less │ │ │ │ │ ├── VideoScreenBrightness.tsx │ │ │ │ │ └── index.ts │ │ │ │ └── index.ts │ │ │ └── view │ │ │ │ ├── View.less │ │ │ │ ├── View.tsx │ │ │ │ └── index.ts │ │ ├── composables │ │ │ ├── useCSSAnimation.ts │ │ │ ├── useCamera.ts │ │ │ ├── useCanvas2D.ts │ │ │ ├── useHover.ts │ │ │ ├── useJSAnimation.ts │ │ │ ├── useKeyboard.ts │ │ │ ├── useMap.ts │ │ │ ├── useRelation.ts │ │ │ ├── useResize.ts │ │ │ ├── useTextarea.ts │ │ │ ├── useTongceng.ts │ │ │ ├── useTouch.ts │ │ │ └── useVideo.ts │ │ ├── directive │ │ │ └── tap.ts │ │ ├── index.less │ │ ├── index.ts │ │ ├── lazy │ │ │ ├── loader.ts │ │ │ └── observer.ts │ │ └── utils │ │ │ ├── format.ts │ │ │ ├── index.ts │ │ │ └── style.ts │ ├── env.d.ts │ ├── index.html │ └── index.ts │ └── vite.config.ts ├── pnpm-lock.yaml ├── pnpm-workspace.yaml ├── rollup.config.js ├── scripts ├── build.js ├── dev.js ├── pack.js ├── release.js ├── test.js └── utils.js └── tsconfig.json /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | semi: false 2 | singleQuote: false 3 | printWidth: 100 4 | trailingComma: 'none' 5 | arrowParens: 'avoid' 6 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "typescript.tsdk": "node_modules/typescript/lib", 3 | "cSpell.enabledLanguageIds": [ 4 | "markdown", 5 | "plaintext", 6 | "text", 7 | "yml" 8 | ], 9 | "[typescript]": { 10 | "editor.defaultFormatter": "esbenp.prettier-vscode" 11 | }, 12 | "[javascript]": { 13 | "editor.defaultFormatter": "esbenp.prettier-vscode" 14 | }, 15 | "[json]": { 16 | "editor.defaultFormatter": "esbenp.prettier-vscode" 17 | }, 18 | "[vue]": { 19 | "editor.defaultFormatter": "esbenp.prettier-vscode" 20 | }, 21 | "files.exclude": { 22 | "**/.git": true, 23 | "**/.svn": true, 24 | "**/.hg": true, 25 | "**/CVS": true, 26 | "**/.DS_Store": true, 27 | "**/Thumbs.db": true, 28 | "**/node_modules": false 29 | } 30 | } -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 yizhi996 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Bridge/API/CanvasAPI.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CanvasAPI.swift 3 | // 4 | // Copyright (c) Evoker. All rights reserved. (https://evokerdev.com) 5 | // 6 | // This source code is licensed under The MIT license. 7 | // 8 | 9 | import Foundation 10 | 11 | enum CanvasAPI: String, CaseIterableAPI { 12 | 13 | case drawCanvas 14 | 15 | func onInvoke(appService: AppService, bridge: JSBridge, args: JSBridge.InvokeArgs) { 16 | switch self { 17 | case .drawCanvas: 18 | drawCanvas(appService: appService, bridge: bridge, args: args) 19 | } 20 | } 21 | 22 | private func drawCanvas(appService: AppService, bridge: JSBridge, args: JSBridge.InvokeArgs) { 23 | 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Bridge/API/Device/BatteryAPI.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BatteryAPI.swift 3 | // 4 | // Copyright (c) Evoker. All rights reserved. (https://evokerdev.com) 5 | // 6 | // This source code is licensed under The MIT license. 7 | // 8 | 9 | import Foundation 10 | import UIKit 11 | 12 | enum BatteryAPI: String, CaseIterableAPI { 13 | 14 | case getBatteryInfo 15 | 16 | func onInvoke(appService: AppService, bridge: JSBridge, args: JSBridge.InvokeArgs) { 17 | DispatchQueue.main.async { 18 | switch self { 19 | case .getBatteryInfo: 20 | getBatteryInfo(appService: appService, bridge: bridge, args: args) 21 | } 22 | } 23 | } 24 | 25 | private func getBatteryInfo(appService: AppService, bridge: JSBridge, args: JSBridge.InvokeArgs) { 26 | UIDevice.current.isBatteryMonitoringEnabled = true 27 | let level = Int(UIDevice.current.batteryLevel * 100) 28 | let isCharging = UIDevice.current.batteryState == .charging 29 | UIDevice.current.isBatteryMonitoringEnabled = false 30 | let result: [String: Any] = ["level": level, "isCharging": isCharging] 31 | bridge.invokeCallbackSuccess(args: args, result: result) 32 | } 33 | 34 | } 35 | -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Common/Interaction/TransitionView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TransitionView.swift 3 | // 4 | // Copyright (c) Evoker. All rights reserved. (https://evokerdev.com) 5 | // 6 | // This source code is licensed under The MIT license. 7 | // 8 | 9 | import Foundation 10 | import UIKit 11 | 12 | protocol TransitionView: UIView { 13 | 14 | func show(to view: UIView) 15 | 16 | func hide() 17 | } 18 | -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Extension/Array+Extension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Array+Extension.swift 3 | // 4 | // Copyright (c) Evoker. All rights reserved. (https://evokerdev.com) 5 | // 6 | // This source code is licensed under The MIT license. 7 | // 8 | 9 | import Foundation 10 | 11 | extension Array { 12 | 13 | func first(ofType: T.Type) -> T? { 14 | return first { $0 as? T != nil } as? T 15 | } 16 | 17 | func filter(ofType: T.Type) -> [T] { 18 | return compactMap { $0 as? T } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Extension/CGRect+Extension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CGRect+Extension.swift 3 | // 4 | // Copyright (c) Evoker. All rights reserved. (https://evokerdev.com) 5 | // 6 | // This source code is licensed under The MIT license. 7 | // 8 | 9 | import Foundation 10 | import UIKit 11 | 12 | extension CGRect { 13 | 14 | func toDict() -> [String: CGFloat] { 15 | return ["x": origin.x, "y": origin.y, "width": size.width, "height": size.height] 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Extension/NSAttributedString+Extension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NSAttributedString+Extension.swift 3 | // 4 | // Copyright (c) Evoker. All rights reserved. (https://evokerdev.com) 5 | // 6 | // This source code is licensed under The MIT license. 7 | // 8 | 9 | import Foundation 10 | import UIKit 11 | 12 | extension NSAttributedString { 13 | 14 | var rangeOfAll: NSRange { 15 | return NSRange(location: 0, length: string.count) 16 | } 17 | 18 | func calcHeight(width: CGFloat) -> CGFloat { 19 | let rect = boundingRect(with: CGSize(width: width, height: .greatestFiniteMagnitude), options: [.usesLineFragmentOrigin, .usesFontLeading], context: nil) 20 | return rect.height 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Extension/Number+Extension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Number+Extension.swift 3 | // 4 | // Copyright (c) Evoker. All rights reserved. (https://evokerdev.com) 5 | // 6 | // This source code is licensed under The MIT license. 7 | // 8 | 9 | import Foundation 10 | 11 | extension UInt64 { 12 | 13 | var mb: Double { 14 | return Double(self) / 1024.0 / 1024.0 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Extension/TimeInterval+Extension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TimeInterval+Extension.swift 3 | // 4 | // Copyright (c) Evoker. All rights reserved. (https://evokerdev.com) 5 | // 6 | // This source code is licensed under The MIT license. 7 | // 8 | 9 | import Foundation 10 | 11 | extension TimeInterval { 12 | 13 | func secondsToHoursMinutesSeconds () -> (Int, Int, Int) { 14 | let seconds = Int(self) 15 | return (seconds / 3600, (seconds % 3600) / 60, (seconds % 3600) % 60) 16 | } 17 | 18 | func secondsToHoursMinutesSecondsDisplay () -> String { 19 | let (h, m, s) = secondsToHoursMinutesSeconds() 20 | var result = String(format: "%02d:%02d", m, s) 21 | if h > 0 { 22 | result = String(format: "%02d:", h) + result 23 | } 24 | return result 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Extension/UIColor+Theme.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UIColor+Extension.swift 3 | // 4 | // Copyright (c) Evoker. All rights reserved. (https://evokerdev.com) 5 | // 6 | // This source code is licensed under The MIT license. 7 | // 8 | 9 | import Foundation 10 | import UIKit 11 | 12 | extension UIColor { 13 | 14 | class var evWhite: UIColor { 15 | return UIColor.color(.white, dark: .black) 16 | } 17 | 18 | class var evBlack: UIColor { 19 | return UIColor.color(.black, dark: .white) 20 | } 21 | 22 | class var evTextBlack: UIColor { 23 | return UIColor.color("#1d1d1f".hexColor(), dark: "#f5f5f7".hexColor()) 24 | } 25 | 26 | class func color(_ light: UIColor, dark: UIColor) -> UIColor { 27 | if #available(iOS 13.0, *) { 28 | return UIColor { (traits) -> UIColor in 29 | return traits.userInterfaceStyle == .dark ? dark : light 30 | } 31 | } else { 32 | return light 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Extension/UIScrollView+Tongceng.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UIScrollView+Tongceng.swift 3 | // 4 | // Copyright (c) Evoker. All rights reserved. (https://evokerdev.com) 5 | // 6 | // This source code is licensed under The MIT license. 7 | // 8 | 9 | import Foundation 10 | import UIKit 11 | 12 | 13 | extension UIScrollView { 14 | 15 | private static var tongcengIdKey = "WK_SCROLL_VIEW_TONGCENG_ID" 16 | 17 | var tongcengId: String? { 18 | get { 19 | objc_getAssociatedObject(self, &UIScrollView.tongcengIdKey) as! String? 20 | } set { 21 | objc_setAssociatedObject(self, &UIScrollView.tongcengIdKey, newValue, .OBJC_ASSOCIATION_COPY_NONATOMIC) 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Extension/URL+Extension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // URL+Extension.swift 3 | // 4 | // Copyright (c) Evoker. All rights reserved. (https://evokerdev.com) 5 | // 6 | // This source code is licensed under The MIT license. 7 | // 8 | 9 | import Foundation 10 | 11 | extension URL { 12 | 13 | var fileSize: Int { 14 | guard isFileURL else { return 0 } 15 | let resourceValues = try? resourceValues(forKeys: [.fileSizeKey]) 16 | return resourceValues?.fileSize ?? 0 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Page/Browser/BrowserPage.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BrowserPage.swift 3 | // 4 | // Copyright (c) Evoker. All rights reserved. (https://evokerdev.com) 5 | // 6 | // This source code is licensed under The MIT license. 7 | // 8 | 9 | import Foundation 10 | import UIKit 11 | 12 | open class BrowserPage: Page { 13 | 14 | public let pageId: Int 15 | 16 | public let url: String 17 | 18 | public weak var appService: AppService? 19 | 20 | public weak var viewController: PageViewController? 21 | 22 | public var style: AppConfig.Style? 23 | 24 | public var isTabBarPage = false 25 | 26 | public var isShowTabBar = true 27 | 28 | public var tabIndex: UInt8 = 0 29 | 30 | public var isVisibled: Bool = false 31 | 32 | public required init(appService: AppService, url: String) { 33 | self.appService = appService 34 | self.url = url 35 | pageId = appService.genPageId() 36 | } 37 | 38 | open func generateViewController() -> PageViewController { 39 | return BrowserPageViewController(page: self) 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Page/Web/View/NativelyContainerView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NativelyContainerView.swift 3 | // 4 | // Copyright (c) Evoker. All rights reserved. (https://evokerdev.com) 5 | // 6 | // This source code is licensed under The MIT license. 7 | // 8 | 9 | import Foundation 10 | import UIKit 11 | 12 | public final class NativelyContainerView: UIView { 13 | 14 | public override func conforms(to aProtocol: Protocol) -> Bool { 15 | if NSStringFromProtocol(aProtocol) == "WKNativelyInteractible" { 16 | return true 17 | } 18 | return super.conforms(to: aProtocol) 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Resources/Image.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Resources/Image.xcassets/album-icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "scale" : "2x" 10 | }, 11 | { 12 | "filename" : "album-icon@3x.png", 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Resources/Image.xcassets/album-icon.imageset/album-icon@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/iOS/Evoker/Sources/Resources/Image.xcassets/album-icon.imageset/album-icon@3x.png -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Resources/Image.xcassets/back-arrow-icon-circle-dark.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "scale" : "2x" 10 | }, 11 | { 12 | "filename" : "back-arrow-icon-circle-dark@3x.png", 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Resources/Image.xcassets/back-arrow-icon-circle-dark.imageset/back-arrow-icon-circle-dark@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/iOS/Evoker/Sources/Resources/Image.xcassets/back-arrow-icon-circle-dark.imageset/back-arrow-icon-circle-dark@3x.png -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Resources/Image.xcassets/back-arrow-icon-dark.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "back-arrow-icon-dark@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "back-arrow-icon-dark@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Resources/Image.xcassets/back-arrow-icon-dark.imageset/back-arrow-icon-dark@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/iOS/Evoker/Sources/Resources/Image.xcassets/back-arrow-icon-dark.imageset/back-arrow-icon-dark@2x.png -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Resources/Image.xcassets/back-arrow-icon-dark.imageset/back-arrow-icon-dark@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/iOS/Evoker/Sources/Resources/Image.xcassets/back-arrow-icon-dark.imageset/back-arrow-icon-dark@3x.png -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Resources/Image.xcassets/back-arrow-icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "back-arrow-icon@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "back-arrow-icon@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Resources/Image.xcassets/back-arrow-icon.imageset/back-arrow-icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/iOS/Evoker/Sources/Resources/Image.xcassets/back-arrow-icon.imageset/back-arrow-icon@2x.png -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Resources/Image.xcassets/back-arrow-icon.imageset/back-arrow-icon@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/iOS/Evoker/Sources/Resources/Image.xcassets/back-arrow-icon.imageset/back-arrow-icon@3x.png -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Resources/Image.xcassets/close-icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "close-icon@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "close-icon@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Resources/Image.xcassets/close-icon.imageset/close-icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/iOS/Evoker/Sources/Resources/Image.xcassets/close-icon.imageset/close-icon@2x.png -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Resources/Image.xcassets/close-icon.imageset/close-icon@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/iOS/Evoker/Sources/Resources/Image.xcassets/close-icon.imageset/close-icon@3x.png -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Resources/Image.xcassets/down-arrow-icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "down-arrow-icon@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "down-arrow-icon@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Resources/Image.xcassets/down-arrow-icon.imageset/down-arrow-icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/iOS/Evoker/Sources/Resources/Image.xcassets/down-arrow-icon.imageset/down-arrow-icon@2x.png -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Resources/Image.xcassets/down-arrow-icon.imageset/down-arrow-icon@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/iOS/Evoker/Sources/Resources/Image.xcassets/down-arrow-icon.imageset/down-arrow-icon@3x.png -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Resources/Image.xcassets/hud-error-icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "hud-error-icon@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "hud-error-icon@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Resources/Image.xcassets/hud-error-icon.imageset/hud-error-icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/iOS/Evoker/Sources/Resources/Image.xcassets/hud-error-icon.imageset/hud-error-icon@2x.png -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Resources/Image.xcassets/hud-error-icon.imageset/hud-error-icon@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/iOS/Evoker/Sources/Resources/Image.xcassets/hud-error-icon.imageset/hud-error-icon@3x.png -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Resources/Image.xcassets/hud-loading-icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "scale" : "2x" 10 | }, 11 | { 12 | "filename" : "hud-loading-icon@3x.png", 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Resources/Image.xcassets/hud-loading-icon.imageset/hud-loading-icon@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/iOS/Evoker/Sources/Resources/Image.xcassets/hud-loading-icon.imageset/hud-loading-icon@3x.png -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Resources/Image.xcassets/hud-success-icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "hud-success-icon@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "hud-success-icon@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Resources/Image.xcassets/hud-success-icon.imageset/hud-success-icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/iOS/Evoker/Sources/Resources/Image.xcassets/hud-success-icon.imageset/hud-success-icon@2x.png -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Resources/Image.xcassets/hud-success-icon.imageset/hud-success-icon@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/iOS/Evoker/Sources/Resources/Image.xcassets/hud-success-icon.imageset/hud-success-icon@3x.png -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Resources/Image.xcassets/mini-program-close-icon-dark.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "scale" : "2x" 10 | }, 11 | { 12 | "filename" : "mini-program-close-icon-dark@3x.png", 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Resources/Image.xcassets/mini-program-close-icon-dark.imageset/mini-program-close-icon-dark@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/iOS/Evoker/Sources/Resources/Image.xcassets/mini-program-close-icon-dark.imageset/mini-program-close-icon-dark@3x.png -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Resources/Image.xcassets/mini-program-close-icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "scale" : "2x" 10 | }, 11 | { 12 | "filename" : "mini-program-close-icon@2x.png", 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Resources/Image.xcassets/mini-program-close-icon.imageset/mini-program-close-icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/iOS/Evoker/Sources/Resources/Image.xcassets/mini-program-close-icon.imageset/mini-program-close-icon@2x.png -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Resources/Image.xcassets/mini-program-home-icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "scale" : "2x" 10 | }, 11 | { 12 | "filename" : "mini-program-home-icon@2x.png", 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Resources/Image.xcassets/mini-program-home-icon.imageset/mini-program-home-icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/iOS/Evoker/Sources/Resources/Image.xcassets/mini-program-home-icon.imageset/mini-program-home-icon@2x.png -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Resources/Image.xcassets/mini-program-more-icon-dark.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "scale" : "2x" 10 | }, 11 | { 12 | "filename" : "mini-program-more-icon-dark@3x.png", 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Resources/Image.xcassets/mini-program-more-icon-dark.imageset/mini-program-more-icon-dark@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/iOS/Evoker/Sources/Resources/Image.xcassets/mini-program-more-icon-dark.imageset/mini-program-more-icon-dark@3x.png -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Resources/Image.xcassets/mini-program-more-icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "scale" : "2x" 10 | }, 11 | { 12 | "filename" : "mini-program-more-icon@2x.png", 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Resources/Image.xcassets/mini-program-more-icon.imageset/mini-program-more-icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/iOS/Evoker/Sources/Resources/Image.xcassets/mini-program-more-icon.imageset/mini-program-more-icon@2x.png -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Resources/Image.xcassets/mp-action-sheet-button-bg-dark.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "scale" : "2x" 10 | }, 11 | { 12 | "filename" : "mp-action-sheet-button-bg-dark@3x.png", 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Resources/Image.xcassets/mp-action-sheet-button-bg-dark.imageset/mp-action-sheet-button-bg-dark@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/iOS/Evoker/Sources/Resources/Image.xcassets/mp-action-sheet-button-bg-dark.imageset/mp-action-sheet-button-bg-dark@3x.png -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Resources/Image.xcassets/mp-action-sheet-button-bg-hl-dark.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "scale" : "2x" 10 | }, 11 | { 12 | "filename" : "mp-action-sheet-button-bg-hl-dark@3x.png", 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Resources/Image.xcassets/mp-action-sheet-button-bg-hl-dark.imageset/mp-action-sheet-button-bg-hl-dark@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/iOS/Evoker/Sources/Resources/Image.xcassets/mp-action-sheet-button-bg-hl-dark.imageset/mp-action-sheet-button-bg-hl-dark@3x.png -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Resources/Image.xcassets/mp-action-sheet-button-bg-hl.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "scale" : "2x" 10 | }, 11 | { 12 | "filename" : "mp-action-sheet-button-bg-hl@3x.png", 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Resources/Image.xcassets/mp-action-sheet-button-bg-hl.imageset/mp-action-sheet-button-bg-hl@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/iOS/Evoker/Sources/Resources/Image.xcassets/mp-action-sheet-button-bg-hl.imageset/mp-action-sheet-button-bg-hl@3x.png -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Resources/Image.xcassets/mp-action-sheet-button-bg.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "scale" : "2x" 10 | }, 11 | { 12 | "filename" : "mp-action-sheet-button-bg@3x.png", 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Resources/Image.xcassets/mp-action-sheet-button-bg.imageset/mp-action-sheet-button-bg@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/iOS/Evoker/Sources/Resources/Image.xcassets/mp-action-sheet-button-bg.imageset/mp-action-sheet-button-bg@3x.png -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Resources/Image.xcassets/mp-action-sheet-reload-icon-dark.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "scale" : "2x" 10 | }, 11 | { 12 | "filename" : "mp-action-sheet-reload-icon-dark@3x.png", 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Resources/Image.xcassets/mp-action-sheet-reload-icon-dark.imageset/mp-action-sheet-reload-icon-dark@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/iOS/Evoker/Sources/Resources/Image.xcassets/mp-action-sheet-reload-icon-dark.imageset/mp-action-sheet-reload-icon-dark@3x.png -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Resources/Image.xcassets/mp-action-sheet-reload-icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "scale" : "2x" 10 | }, 11 | { 12 | "filename" : "mp-action-sheet-reload-icon@3x.png", 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Resources/Image.xcassets/mp-action-sheet-reload-icon.imageset/mp-action-sheet-reload-icon@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/iOS/Evoker/Sources/Resources/Image.xcassets/mp-action-sheet-reload-icon.imageset/mp-action-sheet-reload-icon@3x.png -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Resources/Image.xcassets/mp-action-sheet-setting-icon-dark.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "scale" : "2x" 10 | }, 11 | { 12 | "filename" : "mp-action-sheet-setting-icon-dark@3x.png", 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Resources/Image.xcassets/mp-action-sheet-setting-icon-dark.imageset/mp-action-sheet-setting-icon-dark@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/iOS/Evoker/Sources/Resources/Image.xcassets/mp-action-sheet-setting-icon-dark.imageset/mp-action-sheet-setting-icon-dark@3x.png -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Resources/Image.xcassets/mp-action-sheet-setting-icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "scale" : "2x" 10 | }, 11 | { 12 | "filename" : "mp-action-sheet-setting-icon@3x.png", 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Resources/Image.xcassets/mp-action-sheet-setting-icon.imageset/mp-action-sheet-setting-icon@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/iOS/Evoker/Sources/Resources/Image.xcassets/mp-action-sheet-setting-icon.imageset/mp-action-sheet-setting-icon@3x.png -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Resources/Image.xcassets/mp-action-sheet-share-icon-dark.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "mp-action-sheet-share-icon-dark@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "mp-action-sheet-share-icon-dark@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Resources/Image.xcassets/mp-action-sheet-share-icon-dark.imageset/mp-action-sheet-share-icon-dark@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/iOS/Evoker/Sources/Resources/Image.xcassets/mp-action-sheet-share-icon-dark.imageset/mp-action-sheet-share-icon-dark@2x.png -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Resources/Image.xcassets/mp-action-sheet-share-icon-dark.imageset/mp-action-sheet-share-icon-dark@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/iOS/Evoker/Sources/Resources/Image.xcassets/mp-action-sheet-share-icon-dark.imageset/mp-action-sheet-share-icon-dark@3x.png -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Resources/Image.xcassets/mp-action-sheet-share-icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "mp-action-sheet-share-icon@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "mp-action-sheet-share-icon@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Resources/Image.xcassets/mp-action-sheet-share-icon.imageset/mp-action-sheet-share-icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/iOS/Evoker/Sources/Resources/Image.xcassets/mp-action-sheet-share-icon.imageset/mp-action-sheet-share-icon@2x.png -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Resources/Image.xcassets/mp-action-sheet-share-icon.imageset/mp-action-sheet-share-icon@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/iOS/Evoker/Sources/Resources/Image.xcassets/mp-action-sheet-share-icon.imageset/mp-action-sheet-share-icon@3x.png -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Resources/Image.xcassets/navigation-loading.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "scale" : "2x" 10 | }, 11 | { 12 | "filename" : "navigation-loading@3x.png", 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Resources/Image.xcassets/navigation-loading.imageset/navigation-loading@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/iOS/Evoker/Sources/Resources/Image.xcassets/navigation-loading.imageset/navigation-loading@3x.png -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Resources/Image.xcassets/scan-effect-img.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "scan-effect-img@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "scan-effect-img@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Resources/Image.xcassets/scan-effect-img.imageset/scan-effect-img@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/iOS/Evoker/Sources/Resources/Image.xcassets/scan-effect-img.imageset/scan-effect-img@2x.png -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Resources/Image.xcassets/scan-effect-img.imageset/scan-effect-img@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/iOS/Evoker/Sources/Resources/Image.xcassets/scan-effect-img.imageset/scan-effect-img@3x.png -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Resources/Image.xcassets/tab-bar-item-badge.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "scale" : "2x" 10 | }, 11 | { 12 | "filename" : "tab-bar-item-badge@3x.png", 13 | "idiom" : "universal", 14 | "resizing" : { 15 | "cap-insets" : { 16 | "bottom" : 45, 17 | "left" : 44, 18 | "right" : 45, 19 | "top" : 44 20 | }, 21 | "center" : { 22 | "height" : 1, 23 | "mode" : "tile", 24 | "width" : 1 25 | }, 26 | "mode" : "9-part" 27 | }, 28 | "scale" : "3x" 29 | } 30 | ], 31 | "info" : { 32 | "author" : "xcode", 33 | "version" : 1 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Resources/Image.xcassets/tab-bar-item-badge.imageset/tab-bar-item-badge@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/iOS/Evoker/Sources/Resources/Image.xcassets/tab-bar-item-badge.imageset/tab-bar-item-badge@3x.png -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Resources/Image.xcassets/tab-bar-item-red-dot.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "scale" : "2x" 10 | }, 11 | { 12 | "filename" : "tab-bar-item-red-dot@3x.png", 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Resources/Image.xcassets/tab-bar-item-red-dot.imageset/tab-bar-item-red-dot@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/iOS/Evoker/Sources/Resources/Image.xcassets/tab-bar-item-red-dot.imageset/tab-bar-item-red-dot@3x.png -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Resources/SDK/evoker-sdk.evpkg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/iOS/Evoker/Sources/Resources/SDK/evoker-sdk.evpkg -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Resources/Sound/scan-code.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/iOS/Evoker/Sources/Resources/Sound/scan-code.wav -------------------------------------------------------------------------------- /iOS/Evoker/Sources/Service/AppInfo.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppInfo.swift 3 | // 4 | // Copyright (c) Evoker. All rights reserved. (https://evokerdev.com) 5 | // 6 | // This source code is licensed under The MIT license. 7 | // 8 | 9 | import Foundation 10 | 11 | public struct AppInfo { 12 | 13 | public var appName: String = "" 14 | 15 | public var appIconURL: String = "" 16 | 17 | public var userInfo: [String: Any] = [:] 18 | 19 | public init(appName: String, appIconURL: String, userInfo: [String: Any] = [:]) { 20 | self.appName = appName 21 | self.appIconURL = appIconURL 22 | self.userInfo = userInfo 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /iOS/EvokerMap/Sources/MapModule.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MapModule.swift 3 | // 4 | // Copyright (c) Evoker. All rights reserved. (https://evokerdev.com) 5 | // 6 | // This source code is licensed under The MIT license. 7 | // 8 | 9 | import Foundation 10 | 11 | public class MapModule: Module { 12 | 13 | public static var name: String { 14 | return "com.evokerdev.module.map" 15 | } 16 | 17 | public static var apis: [String : API] { 18 | var result: [String : API] = [:] 19 | MapAPI.allCases.forEach { result[$0.rawValue] = $0 } 20 | return result 21 | } 22 | 23 | var mapViews: [Int: MapView] = [:] 24 | 25 | public required init(appService: AppService) { 26 | 27 | } 28 | 29 | public func onUnload(_ page: Page) { 30 | mapViews[page.pageId] = nil 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /packages/bridge/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@evoker/bridge", 3 | "version": "0.13.0", 4 | "type": "module", 5 | "description": "evoker js bridge", 6 | "author": "yizhi996", 7 | "homepage": "https://github.com/yizhi996/evoker/tree/main/packages/bridge", 8 | "repository": { 9 | "type": "git", 10 | "url": "git+https://github.com/yizhi996/evoker.git" 11 | }, 12 | "license": "MIT", 13 | "main": "dist/bridge.js", 14 | "module": "dist/bridge.js", 15 | "types": "dist/bridge.d.ts", 16 | "buildOptions": { 17 | "formats": [ 18 | "es" 19 | ] 20 | }, 21 | "sideEffects": false, 22 | "files": [ 23 | "dist" 24 | ], 25 | "dependencies": { 26 | "@evoker/shared": "0.13.0", 27 | "vue": "^3.2.39", 28 | "@vue/shared": "^3.2.39" 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /packages/bridge/src/api/const.ts: -------------------------------------------------------------------------------- 1 | export const EKFILE_SCHEME = "ekfile://" 2 | 3 | export const EKFILE_TMP = EKFILE_SCHEME + "tmp_" 4 | 5 | export const EKFILE_STORE = EKFILE_SCHEME + "store_" 6 | 7 | export const USER_DATA_PATH = EKFILE_SCHEME + "usr" 8 | 9 | /** 环境变量 */ 10 | export const env = { 11 | /** 文件系统中的用户目录路径 (本地路径) */ 12 | USER_DATA_PATH 13 | } 14 | -------------------------------------------------------------------------------- /packages/bridge/src/errors.ts: -------------------------------------------------------------------------------- 1 | import { isString } from "@vue/shared" 2 | 3 | const getNameType = (name: string) => (name.includes(".") ? "property" : "argument") 4 | 5 | export const ERR_INVALID_ARG_TYPE = (name: string, types: string | string[], actual: unknown) => 6 | `The "${name}" ${getNameType(name)} must be of type ${ 7 | isString(types) ? types : types.join(" or") 8 | }. Received ${actual}` 9 | 10 | export const ERR_CANNOT_EMPTY = "cannot be empty" 11 | 12 | export const ERR_INVALID = (name: string) => `${name} invalid` 13 | 14 | export const ERR_INVALID_ARG_VALUE = ( 15 | name: string, 16 | value: unknown, 17 | reason: string = "is invalid" 18 | ) => `The "${name}" ${getNameType(name)} ${reason}, Received ${value}` 19 | 20 | export const ERR_OUT_OF_RANGE = (name: string, input: unknown, range: string) => 21 | `The value of "${name}" is out of range. It must be ${range}. Received ${input}` 22 | -------------------------------------------------------------------------------- /packages/bridge/src/pipeline.ts: -------------------------------------------------------------------------------- 1 | import { publish, subscribe } from "./bridge" 2 | import { queuePostFlushCb } from "vue" 3 | 4 | const Method = "vdSync" 5 | 6 | const queues = new Map() 7 | 8 | const jobs = new Map() 9 | 10 | function flush(pageId: number) { 11 | const messages = queues.get(pageId) 12 | publish(Method, messages, pageId) 13 | queues.delete(pageId) 14 | jobs.delete(pageId) 15 | } 16 | 17 | export function sync(message: any, pageId: number) { 18 | const messages = queues.get(pageId) 19 | if (messages) { 20 | messages.push(message) 21 | } else { 22 | queues.set(pageId, [message]) 23 | } 24 | 25 | let job = jobs.get(pageId) 26 | if (!job) { 27 | job = flush.bind(null, pageId) 28 | jobs.set(pageId, job) 29 | } 30 | queuePostFlushCb(job) 31 | } 32 | 33 | export function onSync(callback: (messages: any[]) => void) { 34 | subscribe(Method, callback) 35 | } 36 | -------------------------------------------------------------------------------- /packages/bridge/src/utils.ts: -------------------------------------------------------------------------------- 1 | import { isPlainObject } from "@vue/shared" 2 | 3 | export function combineOptions, U = Record>( 4 | options: T, 5 | preset: U 6 | ): T & U { 7 | const res: Record = preset 8 | for (const key in options) { 9 | const value = options[key] 10 | if (value != null) { 11 | res[key] = isPlainObject(value) 12 | ? combineOptions(value, (preset as Record)[key]) 13 | : value 14 | } else { 15 | res[key] = (preset as Record)[key] 16 | } 17 | } 18 | return res as T & U 19 | } 20 | 21 | export function fetchArrayBuffer(data: any, key: string) { 22 | const { __arrayBuffer__ } = data 23 | if (__arrayBuffer__) { 24 | delete data.__arrayBuffer__ 25 | 26 | const arrayBuffer = globalThis.__ArrayBufferRegister.get(__arrayBuffer__) 27 | data[key] = arrayBuffer 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /packages/bridge/vite.config.ts: -------------------------------------------------------------------------------- 1 | import { createViteConfig } from "../../scripts/utils" 2 | 3 | // https://vitejs.dev/config/ 4 | export default createViteConfig({ target: "bridge" }) 5 | -------------------------------------------------------------------------------- /packages/cli/bin/evoker.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | "use strict" 3 | 4 | require("../dist/cli.cjs") 5 | -------------------------------------------------------------------------------- /packages/cli/src/index.ts: -------------------------------------------------------------------------------- 1 | import minimist from "minimist" 2 | import { build } from "./build" 3 | 4 | const args = minimist(process.argv.slice(2)) 5 | 6 | const command = args._[0] 7 | 8 | const enum Commands { 9 | DEV = "dev", 10 | BUILD = "build", 11 | PACK = "pack" 12 | } 13 | 14 | async function main() { 15 | switch (command) { 16 | case Commands.DEV: 17 | await build() 18 | break 19 | case Commands.BUILD: 20 | await build("production") 21 | break 22 | default: 23 | console.error("command is invalid.") 24 | break 25 | } 26 | } 27 | 28 | main() 29 | -------------------------------------------------------------------------------- /packages/cli/src/plugins/app.ts: -------------------------------------------------------------------------------- 1 | import type { Plugin, ResolvedConfig } from "vite" 2 | import fs from "fs" 3 | import { resolve } from "path" 4 | 5 | let outputAppConfig: { 6 | [x: string]: any 7 | } = {} 8 | 9 | export { outputAppConfig } 10 | 11 | export function resetOutputAppConfig() { 12 | outputAppConfig = {} 13 | } 14 | 15 | export default function vitePluginEvokerConfig(): Plugin { 16 | let config: ResolvedConfig 17 | 18 | return { 19 | name: "vite:evoker-app", 20 | 21 | enforce: "pre", 22 | 23 | configResolved: _config => { 24 | config = _config 25 | if (!config.build.lib || !config.build.lib.entry) { 26 | throw new Error("lib entry cannot be empty.") 27 | } 28 | }, 29 | 30 | transform() { 31 | this.addWatchFile(resolve("src/app.json")) 32 | }, 33 | 34 | writeBundle() { 35 | const cfg = JSON.stringify(outputAppConfig) 36 | fs.writeFileSync(resolve(config.build.outDir, "app.json"), cfg, "utf-8") 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /packages/cli/vite.config.ts: -------------------------------------------------------------------------------- 1 | import { resolve } from "path" 2 | import { createViteConfig } from "../../scripts/utils" 3 | import builtinModules from "builtin-modules" 4 | 5 | const pkg = require(resolve(__dirname, `package.json`)) 6 | 7 | export default createViteConfig({ 8 | target: "cli", 9 | vite: { 10 | build: { 11 | rollupOptions: { 12 | external: [...Object.keys(pkg.dependencies), ...builtinModules] 13 | } 14 | } 15 | } 16 | }) 17 | -------------------------------------------------------------------------------- /packages/create-evoker/README.md: -------------------------------------------------------------------------------- 1 | # create-evoker 2 | 3 | 快速创建 Evoker 应用脚手架。 4 | 5 | ### 创建空白脚手架 6 | 7 | ``` 8 | // use npm 9 | npm create evoker my-app --template blank --platform iOS 10 | 11 | // use yarn 12 | yarn create evoker my-app --template blank --platform iOS 13 | 14 | // use pnpm 15 | pnpm create evoker my-app --template blank --platform iOS 16 | ``` 17 | 18 | ### 其他模板 `--template` 19 | 20 | * example 包含所有内置组件和大部分 API 的示例 21 | 22 | ### 启动应用 23 | 24 | 1. 启动 Node 项目 25 | ``` 26 | cd my-app 27 | 28 | // 安装依赖 29 | npm / yarn /pnpm install 30 | 31 | // 启动 dev server 32 | npm / yarn /pnpm run dev 33 | ``` 34 | 35 | 2. 启动 iOS 36 | ``` 37 | cd my-app/iOS 38 | 39 | // 安装 iOS 依赖 40 | pod install 41 | ``` 42 | 43 | 3. 打开 `iOS/${projectName}.xcworkspace` 运行在指定设备或者模拟器 44 | 45 | * 如果要在真机运行,请设置 Bundle Identifier 和 签名证书 -------------------------------------------------------------------------------- /packages/create-evoker/_README.md: -------------------------------------------------------------------------------- 1 | # Evoker 2 | 3 | ### 启动应用 4 | 5 | 1. 启动 Node 项目 6 | ``` 7 | // 安装依赖 8 | npm / yarn /pnpm install 9 | 10 | // 启动 dev server 11 | npm / yarn /pnpm run dev 12 | ``` 13 | 14 | 2. 启动 iOS 15 | ``` 16 | cd iOS 17 | 18 | // 安装 iOS 依赖 19 | pod install 20 | ``` 21 | 22 | 3. 打开 `iOS/${projectName}.xcworkspace` 运行在指定设备或者模拟器 23 | 24 | * 如果要在真机运行,请设置 Bundle Identifier 和 签名证书 -------------------------------------------------------------------------------- /packages/create-evoker/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "create-evoker", 3 | "version": "0.5.0", 4 | "description": "evoker creator", 5 | "author": "yizhi996", 6 | "homepage": "https://github.com/yizhi996/evoker/tree/main/packages/create-evoker", 7 | "repository": { 8 | "type": "git", 9 | "url": "git+https://github.com/yizhi996/evoker.git" 10 | }, 11 | "license": "MIT", 12 | "main": "index.js", 13 | "type": "module", 14 | "bin": { 15 | "create-evoker": "index.js" 16 | }, 17 | "dependencies": { 18 | "execa": "^6.1.0", 19 | "inquirer": "^9.0.0", 20 | "minimist": "^1.2.6", 21 | "which-pm-runs": "^1.1.0" 22 | }, 23 | "files": [ 24 | "index.js", 25 | "_gitignore", 26 | "_README.md", 27 | "template-*" 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /packages/create-evoker/template-blank/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "", 3 | "private": true, 4 | "version": "0.0.0", 5 | "scripts": { 6 | "dev": "evoker dev", 7 | "build": "evoker build" 8 | }, 9 | "dependencies": { 10 | "evoker": "^0.13.0", 11 | "vue": "^3.2.39" 12 | }, 13 | "devDependencies": { 14 | "@evoker/cli": "^0.13.0", 15 | "@vitejs/plugin-vue": "^3.1.0", 16 | "typescript": "^4.7.4", 17 | "vite": "^3.1.3", 18 | "vue-tsc": "^0.34.17" 19 | }, 20 | "browserslist": [ 21 | "iOS >= 11", 22 | "Android >= 7.0" 23 | ] 24 | } 25 | -------------------------------------------------------------------------------- /packages/create-evoker/template-blank/src/App.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 10 | -------------------------------------------------------------------------------- /packages/create-evoker/template-blank/src/app.json: -------------------------------------------------------------------------------- 1 | { 2 | "appId": "com.evokerdev.blank", 3 | "version": "1.0.0", 4 | "window": { 5 | "navigationBarBackgroundColor": "#ffffff", 6 | "navigationBarTextStyle": "black", 7 | "navigationBarTitleText": "Evoker", 8 | "navigationStyle": "default", 9 | "backgroundColor": "#ffffff" 10 | }, 11 | "pages": [ 12 | { 13 | "path": "components/HelloWorld" 14 | } 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /packages/create-evoker/template-blank/src/assets/github.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /packages/create-evoker/template-blank/src/components/HelloWorld.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 14 | 15 | 33 | -------------------------------------------------------------------------------- /packages/create-evoker/template-blank/src/env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | 3 | declare module '*.vue' { 4 | import type { DefineComponent } from 'vue' 5 | // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/ban-types 6 | const component: DefineComponent<{}, {}, any> 7 | export default component 8 | } 9 | -------------------------------------------------------------------------------- /packages/create-evoker/template-blank/src/main.ts: -------------------------------------------------------------------------------- 1 | import { createApp } from 'evoker' 2 | import App from './App.vue' 3 | 4 | createApp(App).mount('#app') 5 | -------------------------------------------------------------------------------- /packages/create-evoker/template-blank/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "esnext", 4 | "useDefineForClassFields": true, 5 | "module": "esnext", 6 | "moduleResolution": "node", 7 | "strict": true, 8 | "jsx": "preserve", 9 | "sourceMap": true, 10 | "resolveJsonModule": true, 11 | "isolatedModules": true, 12 | "esModuleInterop": true, 13 | "lib": ["esnext", "dom"], 14 | "skipLibCheck": true 15 | }, 16 | "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"], 17 | "references": [{ "path": "./tsconfig.node.json" }] 18 | } 19 | -------------------------------------------------------------------------------- /packages/create-evoker/template-blank/tsconfig.node.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "composite": true, 4 | "module": "esnext", 5 | "moduleResolution": "node" 6 | }, 7 | "include": ["vite.config.ts"] 8 | } 9 | -------------------------------------------------------------------------------- /packages/create-evoker/template-blank/vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from "vite" 2 | 3 | // https://vitejs.dev/config/ 4 | export default defineConfig(({ mode }) => { 5 | return { 6 | define: { 7 | "process.env.NODE_ENV": JSON.stringify(mode) 8 | }, 9 | server: { 10 | host: true 11 | } 12 | } 13 | }) 14 | -------------------------------------------------------------------------------- /packages/create-evoker/template-iOS/Launcher.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /packages/create-evoker/template-iOS/Launcher.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /packages/create-evoker/template-iOS/Launcher.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /packages/create-evoker/template-iOS/Launcher.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /packages/create-evoker/template-iOS/Launcher/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // Launcher 4 | // 5 | 6 | import UIKit 7 | @main 8 | 9 | class AppDelegate: UIResponder, UIApplicationDelegate { 10 | 11 | var window: UIWindow? 12 | 13 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { 14 | 15 | window = UIWindow(frame: UIScreen.main.bounds) 16 | window!.makeKeyAndVisible() 17 | 18 | window!.rootViewController = UIStoryboard(name: "LaunchScreen", bundle: nil).instantiateInitialViewController() 19 | 20 | DispatchQueue.main.async { 21 | Launcher.shared.setupEvoker() 22 | } 23 | 24 | return true 25 | } 26 | 27 | func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask { 28 | return .all 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /packages/create-evoker/template-iOS/Launcher/Assets.xcassets/AccentColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "idiom" : "universal" 5 | } 6 | ], 7 | "info" : { 8 | "author" : "xcode", 9 | "version" : 1 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /packages/create-evoker/template-iOS/Launcher/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "LOGO.png", 5 | "idiom" : "universal", 6 | "platform" : "ios", 7 | "size" : "1024x1024" 8 | } 9 | ], 10 | "info" : { 11 | "author" : "xcode", 12 | "version" : 1 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /packages/create-evoker/template-iOS/Launcher/Assets.xcassets/AppIcon.appiconset/LOGO.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/packages/create-evoker/template-iOS/Launcher/Assets.xcassets/AppIcon.appiconset/LOGO.png -------------------------------------------------------------------------------- /packages/create-evoker/template-iOS/Launcher/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /packages/create-evoker/template-iOS/Launcher/Codable+Extension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Codable+Extension.swift 3 | // Launcher 4 | // 5 | 6 | import Foundation 7 | 8 | extension Encodable { 9 | 10 | var dictionary: [String: Any]? { 11 | guard let data = try? JSONEncoder().encode(self) else { return nil } 12 | return (try? JSONSerialization.jsonObject(with: data, options: .allowFragments)).flatMap { $0 as? [String: Any] } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /packages/create-evoker/template-iOS/Launcher/app-service.evpkg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/packages/create-evoker/template-iOS/Launcher/app-service.evpkg -------------------------------------------------------------------------------- /packages/create-evoker/template-iOS/Podfile: -------------------------------------------------------------------------------- 1 | platform :ios, '11.0' 2 | 3 | use_frameworks! 4 | 5 | target 'Launcher' do 6 | 7 | pod 'Evoker', '~> 0.13.0' 8 | pod 'Evoker/Map', '~> 0.13.0' 9 | 10 | end 11 | 12 | post_install do |installer| 13 | installer.pods_project.targets.each do |target| 14 | target.build_configurations.each do |config| 15 | config.build_settings['ENABLE_BITCODE'] = 'YES' 16 | end 17 | if target.respond_to?(:product_type) and target.product_type == "com.apple.product-type.bundle" 18 | target.build_configurations.each do |config| 19 | config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO' 20 | end 21 | end 22 | end 23 | end 24 | -------------------------------------------------------------------------------- /packages/devtools/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@evoker/devtools", 3 | "version": "0.13.0", 4 | "description": "evoker devtools", 5 | "author": "yizhi996", 6 | "homepage": "https://github.com/yizhi996/evoker/tree/main/packages/devtools", 7 | "repository": { 8 | "type": "git", 9 | "url": "git+https://github.com/yizhi996/evoker.git" 10 | }, 11 | "license": "MIT", 12 | "main": "dist/devtools.js", 13 | "module": "dist/devtools.js", 14 | "types": "dist/devtools.d.ts", 15 | "buildOptions": { 16 | "name": "__Devtools", 17 | "formats": [ 18 | "iife" 19 | ] 20 | }, 21 | "dependencies": { 22 | "@evoker/bridge": "0.13.0", 23 | "@evoker/shared": "0.13.0", 24 | "@vue/shared": "^3.2.39", 25 | "hammer-touchemulator": "^0.0.2", 26 | "ws": "^8.8.0" 27 | }, 28 | "devDependencies": { 29 | "@types/ws": "^8.5.3" 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /packages/devtools/src/index.ts: -------------------------------------------------------------------------------- 1 | import { invokeHandler, publishHandler } from "./webSocket" 2 | import TouchEmulator from "hammer-touchemulator" 3 | 4 | export { invokeHandler, publishHandler } 5 | 6 | if (globalThis.__Config.env === "webview") { 7 | TouchEmulator() 8 | TouchEmulator.ignoreTags = [] 9 | } 10 | -------------------------------------------------------------------------------- /packages/devtools/vite.config.ts: -------------------------------------------------------------------------------- 1 | import { createViteConfig } from "../../scripts/utils" 2 | 3 | export default createViteConfig({ 4 | target: "devtools", 5 | vite: { build: { rollupOptions: { external: [] } } } 6 | }) 7 | -------------------------------------------------------------------------------- /packages/evoker/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "evoker", 3 | "version": "0.13.0", 4 | "type": "module", 5 | "description": "The Vue mini program engine", 6 | "author": "yizhi996", 7 | "homepage": "https://github.com/yizhi996/evoker", 8 | "repository": { 9 | "type": "git", 10 | "url": "git+https://github.com/yizhi996/evoker.git" 11 | }, 12 | "license": "MIT", 13 | "main": "dist/evoker.js", 14 | "module": "dist/evoker.js", 15 | "types": "dist/global.d.ts", 16 | "sideEffects": false, 17 | "keywords": [ 18 | "evoker", 19 | "vue", 20 | "mini-program", 21 | "mini-app" 22 | ], 23 | "buildOptions": { 24 | "name": "Evoker", 25 | "formats": [ 26 | "iife", 27 | "es" 28 | ] 29 | }, 30 | "dependencies": { 31 | "vue": "^3.2.39", 32 | "@evoker/service": "0.13.0", 33 | "@evoker/webview": "0.13.0" 34 | }, 35 | "devDependencies": { 36 | "vite": "^3.1.3" 37 | }, 38 | "files": [ 39 | "dist" 40 | ] 41 | } 42 | -------------------------------------------------------------------------------- /packages/evoker/src/index.ts: -------------------------------------------------------------------------------- 1 | import { global } from "@evoker/service" 2 | import { getApp, getCurrentPages } from "@evoker/service" 3 | 4 | export * from "@evoker/service" 5 | 6 | globalThis.ek = global 7 | 8 | globalThis.getApp = getApp 9 | 10 | globalThis.getCurrentPages = getCurrentPages 11 | -------------------------------------------------------------------------------- /packages/evoker/vite.config.ts: -------------------------------------------------------------------------------- 1 | import { createViteConfig } from "../../scripts/utils" 2 | 3 | export default createViteConfig({ 4 | target: "evoker", 5 | vite: { 6 | build: { 7 | rollupOptions: { 8 | external: ["vue"], 9 | output: { 10 | globals: { 11 | vue: "Vue" 12 | } 13 | } 14 | } 15 | } 16 | } 17 | }) 18 | -------------------------------------------------------------------------------- /packages/example/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "example", 3 | "private": true, 4 | "version": "0.0.0", 5 | "scripts": { 6 | "dev": "evoker dev", 7 | "build": "evoker build" 8 | }, 9 | "dependencies": { 10 | "evoker": "^0.12.0", 11 | "vue": "^3.2.39", 12 | "pinia": "^2.0.14", 13 | "tailwindcss": "^3.0.15" 14 | }, 15 | "devDependencies": { 16 | "@evoker/cli": "^0.12.0", 17 | "@vitejs/plugin-vue": "^3.1.0", 18 | "autoprefixer": "^10.4.2", 19 | "postcss": "^8.4.5", 20 | "typescript": "^4.7.4", 21 | "vite": "^3.1.3", 22 | "vue-tsc": "^0.34.17" 23 | }, 24 | "browserslist": [ 25 | "iOS >= 11", 26 | "Android >= 7.0" 27 | ] 28 | } 29 | -------------------------------------------------------------------------------- /packages/example/postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {} 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /packages/example/src/assets/car.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/packages/example/src/assets/car.png -------------------------------------------------------------------------------- /packages/example/src/assets/icon_API.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/packages/example/src/assets/icon_API.png -------------------------------------------------------------------------------- /packages/example/src/assets/icon_API_HL.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/packages/example/src/assets/icon_API_HL.png -------------------------------------------------------------------------------- /packages/example/src/assets/icon_component.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/packages/example/src/assets/icon_component.png -------------------------------------------------------------------------------- /packages/example/src/assets/icon_component_HL.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/packages/example/src/assets/icon_component_HL.png -------------------------------------------------------------------------------- /packages/example/src/assets/kind/api.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/packages/example/src/assets/kind/api.png -------------------------------------------------------------------------------- /packages/example/src/assets/kind/api_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/packages/example/src/assets/kind/api_dark.png -------------------------------------------------------------------------------- /packages/example/src/assets/kind/canvas.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/packages/example/src/assets/kind/canvas.png -------------------------------------------------------------------------------- /packages/example/src/assets/kind/canvas_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/packages/example/src/assets/kind/canvas_dark.png -------------------------------------------------------------------------------- /packages/example/src/assets/kind/content.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/packages/example/src/assets/kind/content.png -------------------------------------------------------------------------------- /packages/example/src/assets/kind/content_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/packages/example/src/assets/kind/content_dark.png -------------------------------------------------------------------------------- /packages/example/src/assets/kind/daytime.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/packages/example/src/assets/kind/daytime.png -------------------------------------------------------------------------------- /packages/example/src/assets/kind/device.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/packages/example/src/assets/kind/device.png -------------------------------------------------------------------------------- /packages/example/src/assets/kind/device_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/packages/example/src/assets/kind/device_dark.png -------------------------------------------------------------------------------- /packages/example/src/assets/kind/feedback.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/packages/example/src/assets/kind/feedback.png -------------------------------------------------------------------------------- /packages/example/src/assets/kind/feedback_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/packages/example/src/assets/kind/feedback_dark.png -------------------------------------------------------------------------------- /packages/example/src/assets/kind/form.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/packages/example/src/assets/kind/form.png -------------------------------------------------------------------------------- /packages/example/src/assets/kind/form_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/packages/example/src/assets/kind/form_dark.png -------------------------------------------------------------------------------- /packages/example/src/assets/kind/framework.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/packages/example/src/assets/kind/framework.png -------------------------------------------------------------------------------- /packages/example/src/assets/kind/framework_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/packages/example/src/assets/kind/framework_dark.png -------------------------------------------------------------------------------- /packages/example/src/assets/kind/location.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/packages/example/src/assets/kind/location.png -------------------------------------------------------------------------------- /packages/example/src/assets/kind/location_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/packages/example/src/assets/kind/location_dark.png -------------------------------------------------------------------------------- /packages/example/src/assets/kind/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/packages/example/src/assets/kind/logo.png -------------------------------------------------------------------------------- /packages/example/src/assets/kind/map.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/packages/example/src/assets/kind/map.png -------------------------------------------------------------------------------- /packages/example/src/assets/kind/map_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/packages/example/src/assets/kind/map_dark.png -------------------------------------------------------------------------------- /packages/example/src/assets/kind/media.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/packages/example/src/assets/kind/media.png -------------------------------------------------------------------------------- /packages/example/src/assets/kind/media_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/packages/example/src/assets/kind/media_dark.png -------------------------------------------------------------------------------- /packages/example/src/assets/kind/nav.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/packages/example/src/assets/kind/nav.png -------------------------------------------------------------------------------- /packages/example/src/assets/kind/nav_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/packages/example/src/assets/kind/nav_dark.png -------------------------------------------------------------------------------- /packages/example/src/assets/kind/network.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/packages/example/src/assets/kind/network.png -------------------------------------------------------------------------------- /packages/example/src/assets/kind/network_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/packages/example/src/assets/kind/network_dark.png -------------------------------------------------------------------------------- /packages/example/src/assets/kind/night.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/packages/example/src/assets/kind/night.png -------------------------------------------------------------------------------- /packages/example/src/assets/kind/obstacle-free.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/packages/example/src/assets/kind/obstacle-free.png -------------------------------------------------------------------------------- /packages/example/src/assets/kind/obstacle-free_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/packages/example/src/assets/kind/obstacle-free_dark.png -------------------------------------------------------------------------------- /packages/example/src/assets/kind/open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/packages/example/src/assets/kind/open.png -------------------------------------------------------------------------------- /packages/example/src/assets/kind/open_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/packages/example/src/assets/kind/open_dark.png -------------------------------------------------------------------------------- /packages/example/src/assets/kind/page.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/packages/example/src/assets/kind/page.png -------------------------------------------------------------------------------- /packages/example/src/assets/kind/page_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/packages/example/src/assets/kind/page_dark.png -------------------------------------------------------------------------------- /packages/example/src/assets/kind/performance.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/packages/example/src/assets/kind/performance.png -------------------------------------------------------------------------------- /packages/example/src/assets/kind/performance_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/packages/example/src/assets/kind/performance_dark.png -------------------------------------------------------------------------------- /packages/example/src/assets/kind/storage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/packages/example/src/assets/kind/storage.png -------------------------------------------------------------------------------- /packages/example/src/assets/kind/storage_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/packages/example/src/assets/kind/storage_dark.png -------------------------------------------------------------------------------- /packages/example/src/assets/kind/view.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/packages/example/src/assets/kind/view.png -------------------------------------------------------------------------------- /packages/example/src/assets/kind/view_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/packages/example/src/assets/kind/view_dark.png -------------------------------------------------------------------------------- /packages/example/src/assets/kind/worker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/packages/example/src/assets/kind/worker.png -------------------------------------------------------------------------------- /packages/example/src/assets/kind/worker_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhi996/evoker/936e0b39b4a4fdb353cbaea83117ee626774f2d3/packages/example/src/assets/kind/worker_dark.png -------------------------------------------------------------------------------- /packages/example/src/components/NCell.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 13 | -------------------------------------------------------------------------------- /packages/example/src/components/NCellGroup.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /packages/example/src/components/NObject.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | 39 | -------------------------------------------------------------------------------- /packages/example/src/components/NTopic.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /packages/example/src/components/VModelTest.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 20 | -------------------------------------------------------------------------------- /packages/example/src/env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | 3 | declare module "*.vue" { 4 | import { DefineComponent } from "vue" 5 | // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/ban-types 6 | const component: DefineComponent<{}, {}, any> 7 | export default component 8 | } 9 | -------------------------------------------------------------------------------- /packages/example/src/main.ts: -------------------------------------------------------------------------------- 1 | import { createApp } from "evoker" 2 | import { createPinia } from "pinia" 3 | import App from "./App.vue" 4 | import NTopic from "./components/NTopic.vue" 5 | import NCellGroup from "./components/NCellGroup.vue" 6 | import NCell from "./components/NCell.vue" 7 | import NObject from "./components/NObject.vue" 8 | 9 | import "./tailwind.css" 10 | 11 | const app = createApp(App) 12 | 13 | app.config.errorHandler = err => { 14 | console.log(err) 15 | } 16 | 17 | const pinia = createPinia() 18 | app.use(pinia) 19 | 20 | app.component("n-topic", NTopic) 21 | app.component("n-cell", NCell) 22 | app.component("n-cell-group", NCellGroup) 23 | app.component("n-object", NObject) 24 | 25 | app.mount("#app") 26 | -------------------------------------------------------------------------------- /packages/example/src/pages/API/ActionSheet.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 24 | -------------------------------------------------------------------------------- /packages/example/src/pages/API/Animation.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 24 | -------------------------------------------------------------------------------- /packages/example/src/pages/API/CaptureScreen.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 25 | -------------------------------------------------------------------------------- /packages/example/src/pages/API/Clipboard.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 30 | -------------------------------------------------------------------------------- /packages/example/src/pages/API/DownloadFile.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 36 | -------------------------------------------------------------------------------- /packages/example/src/pages/API/GetBatteryInfo.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 23 | -------------------------------------------------------------------------------- /packages/example/src/pages/API/GetLocation.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 38 | -------------------------------------------------------------------------------- /packages/example/src/pages/API/GetNetworkType.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 17 | -------------------------------------------------------------------------------- /packages/example/src/pages/API/GetSystemInfo.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 24 | -------------------------------------------------------------------------------- /packages/example/src/pages/API/IntersectionObserver.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | 28 | -------------------------------------------------------------------------------- /packages/example/src/pages/API/LoadFontFace.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 28 | 29 | 34 | -------------------------------------------------------------------------------- /packages/example/src/pages/API/Login.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 20 | -------------------------------------------------------------------------------- /packages/example/src/pages/API/MakePhoneCall.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | 24 | -------------------------------------------------------------------------------- /packages/example/src/pages/API/Modal.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 24 | -------------------------------------------------------------------------------- /packages/example/src/pages/API/NavigationBarLoading.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 17 | -------------------------------------------------------------------------------- /packages/example/src/pages/API/Navigator.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 30 | -------------------------------------------------------------------------------- /packages/example/src/pages/API/OnNetworkStatusChange.vue: -------------------------------------------------------------------------------- 1 | 5 | 6 | 25 | -------------------------------------------------------------------------------- /packages/example/src/pages/API/PageScroll.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 20 | -------------------------------------------------------------------------------- /packages/example/src/pages/API/PullDownRefresh.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 21 | -------------------------------------------------------------------------------- /packages/example/src/pages/API/ScanCode.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 19 | -------------------------------------------------------------------------------- /packages/example/src/pages/API/ScreenBrightness.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 35 | -------------------------------------------------------------------------------- /packages/example/src/pages/API/SetTitle.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 18 | -------------------------------------------------------------------------------- /packages/example/src/pages/API/Setting.vue: -------------------------------------------------------------------------------- 1 | 22 | 23 | 38 | -------------------------------------------------------------------------------- /packages/example/src/pages/API/Toast.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 34 | -------------------------------------------------------------------------------- /packages/example/src/pages/API/VModel.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 25 | -------------------------------------------------------------------------------- /packages/example/src/pages/API/Vibrate.vue: -------------------------------------------------------------------------------- 1 | 5 | 6 | 15 | -------------------------------------------------------------------------------- /packages/example/src/pages/Component/Checkbox.vue: -------------------------------------------------------------------------------- 1 | 15 | 16 | 41 | -------------------------------------------------------------------------------- /packages/example/src/pages/Component/Image.vue: -------------------------------------------------------------------------------- 1 | 18 | 19 | 33 | -------------------------------------------------------------------------------- /packages/example/src/pages/Component/Navigator.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /packages/example/src/pages/Component/Progress.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | 37 | -------------------------------------------------------------------------------- /packages/example/src/pages/Component/Radio.vue: -------------------------------------------------------------------------------- 1 | 15 | 16 | 34 | -------------------------------------------------------------------------------- /packages/example/src/pages/Component/Slider.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 19 | -------------------------------------------------------------------------------- /packages/example/src/pages/Component/Switch.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 34 | -------------------------------------------------------------------------------- /packages/example/src/pages/Component/Text.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 38 | -------------------------------------------------------------------------------- /packages/example/src/pages/Component/Textarea.vue: -------------------------------------------------------------------------------- 1 |