diff --git a/Libraries.txt b/Libraries.txt index 08970e1..32a30a7 100644 --- a/Libraries.txt +++ b/Libraries.txt @@ -1,6 +1,6 @@ -Open Source libraries used in the Scanbot Barcode Scanner SDK for Capacitor version 8.0.0 +Open Source libraries used in the Scanbot Barcode Scanner SDK for Capacitor version 9.0.0 -Open Source libraries used in ScanbotBarcodeScannerSDK for iOS version 8.0.1: +Open Source libraries used in ScanbotBarcodeScannerSDK for iOS version 9.0.0: +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ @@ -1786,12 +1786,12 @@ defined by AIM ITS/04-023 International Technical Standard - Extended Channel In magic-enum -Version v0.8.1 +Version v0.9.7 (https://github.com/Neargye/magic_enum) MIT License -Copyright (c) 2019 - 2022 Daniil Goncharov +Copyright (c) 2019 - 2024 Daniil Goncharov Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -3313,7 +3313,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI ------------------------------------------------------------------------------------------------------------------------ -Open Source libraries used in the Scanbot Barcode Scanner SDK for Android version 8.0.1 +Open Source libraries used in the Scanbot Barcode Scanner SDK for Android version 9.0.0 CWAC-Camera diff --git a/README.md b/README.md index 21dbfd6..cdbc303 100644 --- a/README.md +++ b/README.md @@ -23,16 +23,16 @@ The plugin can be integrated into your app within minutes and comes with Ready-T ## Requirements -* NodeJS 20+ & npm -* [Capacitor CLI](https://www.npmjs.com/package/@capacitor/cli) 7+ +* NodeJS 22+ & npm +* [Capacitor CLI](https://www.npmjs.com/package/@capacitor/cli) 8 * For Android apps: - * Android Studio 2024.2.1+ - * Android SDK (API Level 23+), Platforms and Developer Tools - * Android Gradle Plugin 8.4.0+ or Kotlin Plugin applied + * Android Studio 2025.2.1+ + * Android SDK (API Level 24+), Platforms and Developer Tools + * Android Gradle Plugin 8.9.1+ * For iOS apps: - * iOS 14+ - * macOS with Xcode 16+ + * iOS 15+ + * macOS with Xcode 26.0+ * Xcode Command Line Tools * Homebrew * Cocoapods @@ -72,7 +72,7 @@ npm run ios You can read more about the Capacitor CLI commands at this [link](https://capacitorjs.com/docs/cli). -If you want to develop without Capacitor CLI commands, you can use [VS Code](https://code.visualstudio.com/) together with the [Ionic VS Code Extension](https://marketplace.visualstudio.com/items?itemName=ionic.ionic). Read more about this [here](https://capacitorjs.com/docs/vscode/getting-started). +If you want to develop without Capacitor CLI commands, you can use [VS Code](https://code.visualstudio.com/) together with the [Ionic VS Code Extension](https://marketplace.visualstudio.com/items?itemName=ionic.ionic). Read more about this [here](https://capacitorjs.com/docs/getting-started/vscode-extension). **Note:** Please make sure that you have configured the camera permissions accordingly. @@ -117,13 +117,13 @@ The Scanbot Capacitor barcode scanner library supports all common 1D- or 2D barc | 2D Barcodes | [QR Code](https://scanbot.io/glossary/qr-code/?utm_source=github.com&utm_medium=referral&utm_campaign=dev_sites), [Micro QR Code](https://scanbot.io/barcode-scanner-sdk/micro-qr-code/?utm_source=github.com&utm_medium=referral&utm_campaign=dev_sites), [Aztec Code](https://scanbot.io/barcode-scanner-sdk/aztec-code/?utm_source=github.com&utm_medium=referral&utm_campaign=dev_sites), [PDF417 Code](https://scanbot.io/barcode-scanner-sdk/pdf417/?utm_source=github.com&utm_medium=referral&utm_campaign=dev_sites), [Data Matrix Code,](https://scanbot.io/barcode-scanner-sdk/data-matrix/?utm_source=github.com&utm_medium=referral&utm_campaign=dev_sites) [GiroCode](https://scanbot.io/glossary/giro-code/?utm_source=github.com&utm_medium=referral&utm_campaign=dev_sites), [NTIN Code](https://scanbot.io/glossary/gtin/?utm_source=github.com&utm_medium=referral&utm_campaign=dev_sites), [PPN](https://scanbot.io/glossary/ppn/?utm_source=github.com&utm_medium=referral&utm_campaign=dev_sites), [UDI](https://scanbot.io/glossary/udi/?utm_source=github.com&utm_medium=referral&utm_campaign=dev_sites), [Royal Mail Mailmark](https://scanbot.io/barcode-scanner-sdk/royal-mail/?utm_source=github.com&utm_medium=referral&utm_campaign=dev_sites), MaxiCode | | Postal Symbologies | USPS Intelligent Mail (IMb), Royal Mail RM4SCC Barcode, Australia Post 4-State Customer Code, Japan Post 4-State Customer Code, KIX | -💡 Please visit our [docs](https://docs.scanbot.io/capacitor/barcode-scanner-sdk/supported-barcodes/?utm_source=github.com&utm_medium=referral&utm_campaign=dev_sites) for a complete overview of the supported barcode symbologies. +💡 Please visit our [docs](https://docs.scanbot.io/capacitor/barcode-scanner-sdk/supported-barcode-symbologies/?utm_source=github.com&utm_medium=referral&utm_campaign=dev_sites) for a complete overview of the supported barcode symbologies. ### Data Parsers The Scanbot Barcode Scanner SDK supports a variety of data parsers that extract structured information from 2D barcodes such as QR Codes and Data Matrix. These include parsers for documents such as driving licences (AAMVA), boarding passes, medical certificates, SEPA forms, Swiss QR codes and vCard business cards. -💡 Please refer to our [documentation](https://docs.scanbot.io/capacitor/barcode-scanner-sdk/supported-barcodes/?utm_source=github.com&utm_medium=referral&utm_campaign=dev_sites#supported-barcode-data-parsers) for a full list of supported data parsers. +💡 Please refer to our [documentation](https://docs.scanbot.io/capacitor/barcode-scanner-sdk/supported-barcode-symbologies/#supported-barcode-data-parsers/?utm_source=github.com&utm_medium=referral&utm_campaign=dev_sites#supported-barcode-data-parsers) for a full list of supported data parsers. ## Additional information @@ -135,12 +135,6 @@ Integrating the Scanbot Capacitor Barcode Scanner plugin into your Capacitor app Alternatively, check out our [developer blog](https://scanbot.io/techblog/?utm_source=github.com&utm_medium=referral&utm_campaign=dev_sites) for a collection of in-depth tutorials, use cases, and best practices. -### Free integration support - -Need help integrating or testing our Barcode Scanner SDK? We offer [free developer support](https://docs.scanbot.io/support/?utm_source=github.com&utm_medium=referral&utm_campaign=dev_sites) via Slack, MS Teams, or email. - -As a customer, you also get access to a dedicated support Slack or Microsoft Teams channel to talk directly to your Customer Success Manager and our engineers. - ### Licensing and pricing The barcode scanner example app will run for one minute per session without a license. After that, all functionalities and UI components will stop working. diff --git a/ios/App/App.xcodeproj/project.pbxproj b/ios/App/App.xcodeproj/project.pbxproj index f771516..06caa48 100644 --- a/ios/App/App.xcodeproj/project.pbxproj +++ b/ios/App/App.xcodeproj/project.pbxproj @@ -3,12 +3,12 @@ archiveVersion = 1; classes = { }; - objectVersion = 48; + objectVersion = 60; objects = { /* Begin PBXBuildFile section */ - 1444BBC61C21340EC8703117 /* Pods_App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 72DAA4EC19A97247A0B5141E /* Pods_App.framework */; }; 2FAD9763203C412B000D30F8 /* config.xml in Resources */ = {isa = PBXBuildFile; fileRef = 2FAD9762203C412B000D30F8 /* config.xml */; }; + 4D22ABE92AF431CB00220026 /* CapApp-SPM in Frameworks */ = {isa = PBXBuildFile; productRef = 4D22ABE82AF431CB00220026 /* CapApp-SPM */; }; 50379B232058CBB4000EE86E /* capacitor.config.json in Resources */ = {isa = PBXBuildFile; fileRef = 50379B222058CBB4000EE86E /* capacitor.config.json */; }; 504EC3081FED79650016851F /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 504EC3071FED79650016851F /* AppDelegate.swift */; }; 504EC30D1FED79650016851F /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 504EC30B1FED79650016851F /* Main.storyboard */; }; @@ -18,7 +18,6 @@ /* End PBXBuildFile section */ /* Begin PBXFileReference section */ - 01D5FF8276ACF35F5D6BFA81 /* Pods-App.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-App.release.xcconfig"; path = "Target Support Files/Pods-App/Pods-App.release.xcconfig"; sourceTree = ""; }; 2FAD9762203C412B000D30F8 /* config.xml */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = config.xml; sourceTree = ""; }; 50379B222058CBB4000EE86E /* capacitor.config.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = capacitor.config.json; sourceTree = ""; }; 504EC3041FED79650016851F /* App.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = App.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -28,8 +27,7 @@ 504EC3111FED79650016851F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 504EC3131FED79650016851F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 50B271D01FEDC1A000F3C39B /* public */ = {isa = PBXFileReference; lastKnownFileType = folder; path = public; sourceTree = ""; }; - 72DAA4EC19A97247A0B5141E /* Pods_App.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_App.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D3B27037205608249A279358 /* Pods-App.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-App.debug.xcconfig"; path = "Target Support Files/Pods-App/Pods-App.debug.xcconfig"; sourceTree = ""; }; + 958DCC722DB07C7200EA8C5F /* debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = debug.xcconfig; path = ../debug.xcconfig; sourceTree = SOURCE_ROOT; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -37,7 +35,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 1444BBC61C21340EC8703117 /* Pods_App.framework in Frameworks */, + 4D22ABE92AF431CB00220026 /* CapApp-SPM in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -47,10 +45,9 @@ 504EC2FB1FED79650016851F = { isa = PBXGroup; children = ( + 958DCC722DB07C7200EA8C5F /* debug.xcconfig */, 504EC3061FED79650016851F /* App */, 504EC3051FED79650016851F /* Products */, - 8A339011901E9BAC7DA5C3A4 /* Pods */, - D78AB8A43CDBF7E7F2093381 /* Frameworks */, ); sourceTree = ""; }; @@ -77,24 +74,6 @@ path = App; sourceTree = ""; }; - 8A339011901E9BAC7DA5C3A4 /* Pods */ = { - isa = PBXGroup; - children = ( - D3B27037205608249A279358 /* Pods-App.debug.xcconfig */, - 01D5FF8276ACF35F5D6BFA81 /* Pods-App.release.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; - D78AB8A43CDBF7E7F2093381 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 72DAA4EC19A97247A0B5141E /* Pods_App.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -102,17 +81,18 @@ isa = PBXNativeTarget; buildConfigurationList = 504EC3161FED79650016851F /* Build configuration list for PBXNativeTarget "App" */; buildPhases = ( - 46D5E5AA957517B4CC967408 /* [CP] Check Pods Manifest.lock */, 504EC3001FED79650016851F /* Sources */, 504EC3011FED79650016851F /* Frameworks */, 504EC3021FED79650016851F /* Resources */, - A44EB619CD61BB45F51F662A /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); dependencies = ( ); name = App; + packageProductDependencies = ( + 4D22ABE82AF431CB00220026 /* CapApp-SPM */, + ); productName = App; productReference = 504EC3041FED79650016851F /* App.app */; productType = "com.apple.product-type.application"; @@ -142,6 +122,9 @@ Base, ); mainGroup = 504EC2FB1FED79650016851F; + packageReferences = ( + D4C12C0A2AAA248700AAC8A2 /* XCLocalSwiftPackageReference "CapApp-SPM" */, + ); productRefGroup = 504EC3051FED79650016851F /* Products */; projectDirPath = ""; projectRoot = ""; @@ -167,46 +150,6 @@ }; /* End PBXResourcesBuildPhase section */ -/* Begin PBXShellScriptBuildPhase section */ - 46D5E5AA957517B4CC967408 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-App-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - A44EB619CD61BB45F51F662A /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "[CP] Embed Pods Frameworks"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-App/Pods-App-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; -/* End PBXShellScriptBuildPhase section */ - /* Begin PBXSourcesBuildPhase section */ 504EC3001FED79650016851F /* Sources */ = { isa = PBXSourcesBuildPhase; @@ -240,6 +183,7 @@ /* Begin XCBuildConfiguration section */ 504EC3141FED79650016851F /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 958DCC722DB07C7200EA8C5F /* debug.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; @@ -340,28 +284,30 @@ IPHONEOS_DEPLOYMENT_TARGET = 15.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; VALIDATE_PRODUCT = YES; }; name = Release; }; 504EC3171FED79650016851F /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D3B27037205608249A279358 /* Pods-App.debug.xcconfig */; + baseConfigurationReference = 958DCC722DB07C7200EA8C5F /* debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = FRUPYT6KB3; INFOPLIST_FILE = App/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); MARKETING_VERSION = 1.0; OTHER_SWIFT_FLAGS = "$(inherited) \"-D\" \"COCOAPODS\" \"-DDEBUG\""; PRODUCT_BUNDLE_IDENTIFIER = io.scanbot.example.sdk.barcode.capacitor; PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; @@ -370,20 +316,20 @@ }; 504EC3181FED79650016851F /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 01D5FF8276ACF35F5D6BFA81 /* Pods-App.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = FRUPYT6KB3; INFOPLIST_FILE = App/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = io.scanbot.example.sdk.barcode.capacitor; PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_ACTIVE_COMPILATION_CONDITIONS = ""; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; @@ -412,6 +358,21 @@ defaultConfigurationName = Release; }; /* End XCConfigurationList section */ + +/* Begin XCLocalSwiftPackageReference section */ + D4C12C0A2AAA248700AAC8A2 /* XCLocalSwiftPackageReference "CapApp-SPM" */ = { + isa = XCLocalSwiftPackageReference; + relativePath = "CapApp-SPM"; + }; +/* End XCLocalSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + 4D22ABE82AF431CB00220026 /* CapApp-SPM */ = { + isa = XCSwiftPackageProductDependency; + package = D4C12C0A2AAA248700AAC8A2 /* XCLocalSwiftPackageReference "CapApp-SPM" */; + productName = "CapApp-SPM"; + }; +/* End XCSwiftPackageProductDependency section */ }; rootObject = 504EC2FC1FED79650016851F /* Project object */; } diff --git a/ios/App/App.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/ios/App/App.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist similarity index 100% rename from ios/App/App.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist rename to ios/App/App.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/ios/App/App.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/ios/App/App.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved new file mode 100644 index 0000000..69ad6b3 --- /dev/null +++ b/ios/App/App.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -0,0 +1,33 @@ +{ + "originHash" : "f68ea744ae7e849c1c9a626a66d73849c3593d0d15c286a6985c43ec8cea1717", + "pins" : [ + { + "identity" : "capacitor-swift-pm", + "kind" : "remoteSourceControl", + "location" : "https://github.com/ionic-team/capacitor-swift-pm.git", + "state" : { + "revision" : "596259033e94829dffc552a40e7129262122995e", + "version" : "8.0.0" + } + }, + { + "identity" : "ion-ios-filesystem", + "kind" : "remoteSourceControl", + "location" : "https://github.com/ionic-team/ion-ios-filesystem.git", + "state" : { + "revision" : "0d81e26e828ff9582807e2339112cedf2e0fab85", + "version" : "1.1.2" + } + }, + { + "identity" : "scanbot-barcode-sdk-native-wrapper-spm", + "kind" : "remoteSourceControl", + "location" : "https://github.com/doo/scanbot-barcode-sdk-native-wrapper-spm.git", + "state" : { + "revision" : "f8eaf3c7197956050360ad3a5ffbf877d9c53b38", + "version" : "9.0.3" + } + } + ], + "version" : 3 +} diff --git a/ios/App/App.xcworkspace/contents.xcworkspacedata b/ios/App/App.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index b301e82..0000000 --- a/ios/App/App.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - diff --git a/ios/App/App/Info.plist b/ios/App/App/Info.plist index 8e3b5e6..c518431 100644 --- a/ios/App/App/Info.plist +++ b/ios/App/App/Info.plist @@ -2,6 +2,8 @@ + CAPACITOR_DEBUG + $(CAPACITOR_DEBUG) CFBundleDevelopmentRegion en CFBundleDisplayName diff --git a/ios/App/CapApp-SPM/.gitignore b/ios/App/CapApp-SPM/.gitignore new file mode 100644 index 0000000..3b29812 --- /dev/null +++ b/ios/App/CapApp-SPM/.gitignore @@ -0,0 +1,9 @@ +.DS_Store +/.build +/Packages +/*.xcodeproj +xcuserdata/ +DerivedData/ +.swiftpm/config/registries.json +.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata +.netrc diff --git a/ios/App/CapApp-SPM/Package.swift b/ios/App/CapApp-SPM/Package.swift new file mode 100644 index 0000000..72cf9f7 --- /dev/null +++ b/ios/App/CapApp-SPM/Package.swift @@ -0,0 +1,39 @@ +// swift-tools-version: 5.9 +import PackageDescription + +// DO NOT MODIFY THIS FILE - managed by Capacitor CLI commands +let package = Package( + name: "CapApp-SPM", + platforms: [.iOS(.v15)], + products: [ + .library( + name: "CapApp-SPM", + targets: ["CapApp-SPM"]) + ], + dependencies: [ + .package(url: "https://github.com/ionic-team/capacitor-swift-pm.git", exact: "8.0.0"), + .package(name: "CapacitorApp", path: "../../../node_modules/@capacitor/app"), + .package(name: "CapacitorCamera", path: "../../../node_modules/@capacitor/camera"), + .package(name: "CapacitorFilesystem", path: "../../../node_modules/@capacitor/filesystem"), + .package(name: "CapacitorPreferences", path: "../../../node_modules/@capacitor/preferences"), + .package(name: "CapacitorStatusBar", path: "../../../node_modules/@capacitor/status-bar"), + .package(name: "CapawesomeCapacitorFilePicker", path: "../../../node_modules/@capawesome/capacitor-file-picker"), + .package(name: "CapacitorPluginScanbotBarcodeScannerSdk", path: "../../../node_modules/capacitor-plugin-scanbot-barcode-scanner-sdk") + ], + targets: [ + .target( + name: "CapApp-SPM", + dependencies: [ + .product(name: "Capacitor", package: "capacitor-swift-pm"), + .product(name: "Cordova", package: "capacitor-swift-pm"), + .product(name: "CapacitorApp", package: "CapacitorApp"), + .product(name: "CapacitorCamera", package: "CapacitorCamera"), + .product(name: "CapacitorFilesystem", package: "CapacitorFilesystem"), + .product(name: "CapacitorPreferences", package: "CapacitorPreferences"), + .product(name: "CapacitorStatusBar", package: "CapacitorStatusBar"), + .product(name: "CapawesomeCapacitorFilePicker", package: "CapawesomeCapacitorFilePicker"), + .product(name: "CapacitorPluginScanbotBarcodeScannerSdk", package: "CapacitorPluginScanbotBarcodeScannerSdk") + ] + ) + ] +) diff --git a/ios/App/CapApp-SPM/README.md b/ios/App/CapApp-SPM/README.md new file mode 100644 index 0000000..5e22a2f --- /dev/null +++ b/ios/App/CapApp-SPM/README.md @@ -0,0 +1,5 @@ +# CapApp-SPM + +This SPM is used to host SPM dependencies for you Capacitor project + +Do not modify the contents of it or there may be unintended consequences. diff --git a/ios/App/CapApp-SPM/Sources/CapApp-SPM/CapApp-SPM.swift b/ios/App/CapApp-SPM/Sources/CapApp-SPM/CapApp-SPM.swift new file mode 100644 index 0000000..945afec --- /dev/null +++ b/ios/App/CapApp-SPM/Sources/CapApp-SPM/CapApp-SPM.swift @@ -0,0 +1 @@ +public let isCapacitorApp = true diff --git a/ios/App/Podfile b/ios/App/Podfile deleted file mode 100644 index d82d6d5..0000000 --- a/ios/App/Podfile +++ /dev/null @@ -1,30 +0,0 @@ -require_relative '../../node_modules/@capacitor/ios/scripts/pods_helpers' - -platform :ios, '15.0' -use_frameworks! - -# workaround to avoid Xcode caching of Pods that requires -# Product -> Clean Build Folder after new Cordova plugins installed -# Requires CocoaPods 1.6 or newer -install! 'cocoapods', :disable_input_output_paths => true - -def capacitor_pods - pod 'Capacitor', :path => '../../node_modules/@capacitor/ios' - pod 'CapacitorCordova', :path => '../../node_modules/@capacitor/ios' - pod 'CapacitorApp', :path => '../../node_modules/@capacitor/app' - pod 'CapacitorCamera', :path => '../../node_modules/@capacitor/camera' - pod 'CapacitorFilesystem', :path => '../../node_modules/@capacitor/filesystem' - pod 'CapacitorPreferences', :path => '../../node_modules/@capacitor/preferences' - pod 'CapacitorStatusBar', :path => '../../node_modules/@capacitor/status-bar' - pod 'CapawesomeCapacitorFilePicker', :path => '../../node_modules/@capawesome/capacitor-file-picker' - pod 'CapacitorPluginScanbotBarcodeScannerSdk', :path => '../../node_modules/capacitor-plugin-scanbot-barcode-scanner-sdk' -end - -target 'App' do - capacitor_pods - # Add your Pods here -end - -post_install do |installer| - assertDeploymentTarget(installer) -end diff --git a/ios/App/Podfile.lock b/ios/App/Podfile.lock deleted file mode 100644 index 22b12ea..0000000 --- a/ios/App/Podfile.lock +++ /dev/null @@ -1,79 +0,0 @@ -PODS: - - Capacitor (8.0.0): - - CapacitorCordova - - CapacitorApp (8.0.0): - - Capacitor - - CapacitorCamera (8.0.0): - - Capacitor - - CapacitorCordova (8.0.0) - - CapacitorFilesystem (8.0.0): - - Capacitor - - IONFilesystemLib (~> 1.0.1) - - CapacitorPluginScanbotBarcodeScannerSdk (8.0.0): - - Capacitor - - ScanbotBarcodeSDKNativeWrapper (= 8.0.1.0) - - CapacitorPreferences (8.0.0): - - Capacitor - - CapacitorStatusBar (8.0.0): - - Capacitor - - CapawesomeCapacitorFilePicker (7.0.1): - - Capacitor - - IONFilesystemLib (1.0.1) - - ScanbotBarcodeScannerSDK (8.0.1) - - ScanbotBarcodeSDKNativeWrapper (8.0.1.0): - - ScanbotBarcodeScannerSDK (= 8.0.1) - -DEPENDENCIES: - - "Capacitor (from `../../node_modules/@capacitor/ios`)" - - "CapacitorApp (from `../../node_modules/@capacitor/app`)" - - "CapacitorCamera (from `../../node_modules/@capacitor/camera`)" - - "CapacitorCordova (from `../../node_modules/@capacitor/ios`)" - - "CapacitorFilesystem (from `../../node_modules/@capacitor/filesystem`)" - - CapacitorPluginScanbotBarcodeScannerSdk (from `../../node_modules/capacitor-plugin-scanbot-barcode-scanner-sdk`) - - "CapacitorPreferences (from `../../node_modules/@capacitor/preferences`)" - - "CapacitorStatusBar (from `../../node_modules/@capacitor/status-bar`)" - - "CapawesomeCapacitorFilePicker (from `../../node_modules/@capawesome/capacitor-file-picker`)" - -SPEC REPOS: - trunk: - - IONFilesystemLib - - ScanbotBarcodeScannerSDK - - ScanbotBarcodeSDKNativeWrapper - -EXTERNAL SOURCES: - Capacitor: - :path: "../../node_modules/@capacitor/ios" - CapacitorApp: - :path: "../../node_modules/@capacitor/app" - CapacitorCamera: - :path: "../../node_modules/@capacitor/camera" - CapacitorCordova: - :path: "../../node_modules/@capacitor/ios" - CapacitorFilesystem: - :path: "../../node_modules/@capacitor/filesystem" - CapacitorPluginScanbotBarcodeScannerSdk: - :path: "../../node_modules/capacitor-plugin-scanbot-barcode-scanner-sdk" - CapacitorPreferences: - :path: "../../node_modules/@capacitor/preferences" - CapacitorStatusBar: - :path: "../../node_modules/@capacitor/status-bar" - CapawesomeCapacitorFilePicker: - :path: "../../node_modules/@capawesome/capacitor-file-picker" - -SPEC CHECKSUMS: - Capacitor: 79e40e5e76f852965dce30406c65253fa154e24a - CapacitorApp: cfa0120a1f3a6f69d4d37d3041782aa5c5167d0b - CapacitorCamera: 05ac5bd4499ed4b8cf5358d1b4a874b385de7b4d - CapacitorCordova: 5dc3912d25ef770a3fe0f431bb65c9fbfa2e92f9 - CapacitorFilesystem: 608bca984a5b6b2cba85a2972ea22974a37659d8 - CapacitorPluginScanbotBarcodeScannerSdk: d4218cd1dac0cf1229260e6e9dd9ddba11b84422 - CapacitorPreferences: 83f13cc19660ca9649a4769ec255be93f8c2ff68 - CapacitorStatusBar: c6fa2d404083e41d145ea56698707a6986d4428b - CapawesomeCapacitorFilePicker: 6673764afb8768eba0197876e222adc19fd4c120 - IONFilesystemLib: 89258b8e3e85465da93127d25d7ce37f977e8a6f - ScanbotBarcodeScannerSDK: c0270115558662cc6af89991d79f724848fd480f - ScanbotBarcodeSDKNativeWrapper: 0090b55ae79a0ff1c1a456db6db299e67648d657 - -PODFILE CHECKSUM: 31163f9970abc0558b4792385b8f0c651eb70e19 - -COCOAPODS: 1.14.3 diff --git a/ios/debug.xcconfig b/ios/debug.xcconfig new file mode 100644 index 0000000..53ce18d --- /dev/null +++ b/ios/debug.xcconfig @@ -0,0 +1 @@ +CAPACITOR_DEBUG = true diff --git a/package-lock.json b/package-lock.json index c5ee105..f32d1d1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,21 +1,21 @@ { "name": "scanbot-barcode-scanner-sdk-example", - "version": "8.0.0", + "version": "9.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "scanbot-barcode-scanner-sdk-example", - "version": "8.0.0", + "version": "9.0.0", "dependencies": { - "@angular/animations": "^20.3.16", - "@angular/common": "^20.3.16", - "@angular/compiler": "^20.3.16", - "@angular/core": "^20.3.16", - "@angular/forms": "^20.3.16", - "@angular/platform-browser": "^20.3.16", - "@angular/platform-browser-dynamic": "^20.3.16", - "@angular/router": "^20.3.16", + "@angular/animations": "^20.3.20", + "@angular/common": "^20.3.20", + "@angular/compiler": "^20.3.20", + "@angular/core": "^20.3.20", + "@angular/forms": "^20.3.20", + "@angular/platform-browser": "^20.3.20", + "@angular/platform-browser-dynamic": "^20.3.20", + "@angular/router": "^20.3.20", "@capacitor/android": "^8.0.0", "@capacitor/app": "^8.0.0", "@capacitor/camera": "^8.0.0", @@ -24,19 +24,19 @@ "@capacitor/ios": "^8.0.0", "@capacitor/preferences": "^8.0.0", "@capacitor/status-bar": "^8.0.0", - "@capawesome/capacitor-file-picker": "7.0.1", + "@capawesome/capacitor-file-picker": "8.0.2", "@ionic/angular": "^8.0.0", - "capacitor-plugin-scanbot-barcode-scanner-sdk": "8.0.0", - "ionicons": "^7.0.0", + "capacitor-plugin-scanbot-barcode-scanner-sdk": "9.0.0-rc.2", + "ionicons": "^8.0.13", "rxjs": "~7.8.0", "tslib": "^2.3.0", "zone.js": "~0.15.0" }, "devDependencies": { - "@angular/build": "^20.3.13", - "@angular/cli": "^20.3.13", - "@angular/compiler-cli": "^20.3.16", - "@angular/language-service": "^20.3.16", + "@angular/build": "^20.3.20", + "@angular/cli": "^20.3.20", + "@angular/compiler-cli": "^20.3.20", + "@angular/language-service": "^20.3.20", "@capacitor/cli": "^8.0.0", "@ionic/angular-toolkit": "^12.0.0", "prettier": "^3.5.3", @@ -270,13 +270,13 @@ } }, "node_modules/@angular-devkit/architect": { - "version": "0.2003.13", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.2003.13.tgz", - "integrity": "sha512-JyH6Af6PNC1IHJToColFk1RaXDU87mpPjz7M5sWDfn8bC+KBipw6dSdRkCEuw0D9HY1lZkC9EBV9k9GhpvHjCQ==", + "version": "0.2003.25", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.2003.25.tgz", + "integrity": "sha512-39pTqt4wSmpD1WeCee46oSGXRh6TR1PFd9GZEwyZoMvBTMs8mE2sXGxUgd4Qyi5CkQ1XnCM5XfgJcjUWUQRoGg==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/core": "20.3.13", + "@angular-devkit/core": "20.3.25", "rxjs": "7.8.2" }, "engines": { @@ -286,16 +286,16 @@ } }, "node_modules/@angular-devkit/core": { - "version": "20.3.13", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-20.3.13.tgz", - "integrity": "sha512-/D84T1Caxll3I2sRihPDR9UaWBhF50M+tAX15PdP6uSh/TxwAlLl9p7Rm1bD0mPjPercqaEKA+h9a9qLP16hug==", + "version": "20.3.25", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-20.3.25.tgz", + "integrity": "sha512-pSfeWEoS1y9zxqTOw0Etj2NXkRmp/aU52wdnyq3KqVA9cJtgxtlOHlBBNswTil4dReojEy+0K1xJm+mLuWuLxA==", "dev": true, "license": "MIT", "dependencies": { - "ajv": "8.17.1", + "ajv": "8.18.0", "ajv-formats": "3.0.1", "jsonc-parser": "3.3.1", - "picomatch": "4.0.3", + "picomatch": "4.0.4", "rxjs": "7.8.2", "source-map": "0.7.6" }, @@ -314,13 +314,13 @@ } }, "node_modules/@angular-devkit/schematics": { - "version": "20.3.15", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-20.3.15.tgz", - "integrity": "sha512-xMN1fyuhhP8Y5sNlmQvl4nMiOouHTKPkLR0zlhu5z6fHuwxxlverh31Gpq3eFzPHqmOzzb2TkgYCptCFXsXcrg==", + "version": "20.3.25", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-20.3.25.tgz", + "integrity": "sha512-IB0IHf8ZRqr69hT/XIfHkYLPAYHWQ/WUc6+fKHBwq58jJlm/y5QUeTEuXvJ18IX/+hUIqw+E2Q3T0N9rLDLzXg==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/core": "20.3.15", + "@angular-devkit/core": "20.3.25", "jsonc-parser": "3.3.1", "magic-string": "0.30.17", "ora": "8.2.0", @@ -332,162 +332,618 @@ "yarn": ">= 1.13.0" } }, - "node_modules/@angular-devkit/schematics/node_modules/@angular-devkit/core": { - "version": "20.3.15", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-20.3.15.tgz", - "integrity": "sha512-s7sE4S5Hy62dLrtHwizbZaMcupAE8fPhm6rF+jBkhHZ75zXGhGzXP8WKFztYCAuGnis4pPnGSEKP/xVTc2lw6Q==", + "node_modules/@angular/animations": { + "version": "20.3.20", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-20.3.20.tgz", + "integrity": "sha512-pUb+fhYAzi36htMZRFBj2acrgj1ou/vdlOQ99bGrN16/OtKVhGiOeorONrUVJRAlDALDgE+XBMt+6M4jhL+36g==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "@angular/core": "20.3.20" + } + }, + "node_modules/@angular/build": { + "version": "20.3.25", + "resolved": "https://registry.npmjs.org/@angular/build/-/build-20.3.25.tgz", + "integrity": "sha512-ddWmPzYuzDWz9ql0262u9w3OJHXpSjHVNIDFIYOG2XYyMj/Xve0RkJ8/xvV+Hv7T3iqyyGKtsO+n/d0GCJQCtQ==", "dev": true, "license": "MIT", "dependencies": { - "ajv": "8.17.1", - "ajv-formats": "3.0.1", + "@ampproject/remapping": "2.3.0", + "@angular-devkit/architect": "0.2003.25", + "@babel/core": "7.28.3", + "@babel/helper-annotate-as-pure": "7.27.3", + "@babel/helper-split-export-declaration": "7.24.7", + "@inquirer/confirm": "5.1.14", + "@vitejs/plugin-basic-ssl": "2.1.0", + "beasties": "0.3.5", + "browserslist": "^4.23.0", + "esbuild": "0.28.0", + "https-proxy-agent": "7.0.6", + "istanbul-lib-instrument": "6.0.3", "jsonc-parser": "3.3.1", - "picomatch": "4.0.3", - "rxjs": "7.8.2", - "source-map": "0.7.6" + "listr2": "9.0.1", + "magic-string": "0.30.17", + "mrmime": "2.0.1", + "parse5-html-rewriting-stream": "8.0.0", + "picomatch": "4.0.4", + "piscina": "5.1.3", + "rollup": "4.59.0", + "sass": "1.90.0", + "semver": "7.7.2", + "source-map-support": "0.5.21", + "tinyglobby": "0.2.14", + "vite": "7.3.2", + "watchpack": "2.4.4" }, "engines": { "node": "^20.19.0 || ^22.12.0 || >=24.0.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" }, + "optionalDependencies": { + "lmdb": "3.4.2" + }, "peerDependencies": { - "chokidar": "^4.0.0" + "@angular/compiler": "^20.0.0", + "@angular/compiler-cli": "^20.0.0", + "@angular/core": "^20.0.0", + "@angular/localize": "^20.0.0", + "@angular/platform-browser": "^20.0.0", + "@angular/platform-server": "^20.0.0", + "@angular/service-worker": "^20.0.0", + "@angular/ssr": "^20.3.25", + "karma": "^6.4.0", + "less": "^4.2.0", + "ng-packagr": "^20.0.0", + "postcss": "^8.4.0", + "tailwindcss": "^2.0.0 || ^3.0.0 || ^4.0.0", + "tslib": "^2.3.0", + "typescript": ">=5.8 <6.0", + "vitest": "^3.1.1" }, "peerDependenciesMeta": { - "chokidar": { + "@angular/core": { + "optional": true + }, + "@angular/localize": { + "optional": true + }, + "@angular/platform-browser": { + "optional": true + }, + "@angular/platform-server": { + "optional": true + }, + "@angular/service-worker": { + "optional": true + }, + "@angular/ssr": { + "optional": true + }, + "karma": { + "optional": true + }, + "less": { + "optional": true + }, + "ng-packagr": { + "optional": true + }, + "postcss": { + "optional": true + }, + "tailwindcss": { + "optional": true + }, + "vitest": { "optional": true } } }, - "node_modules/@angular/animations": { - "version": "20.3.16", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-20.3.16.tgz", - "integrity": "sha512-N83/GFY5lKNyWgPV3xHHy2rb3/eP1ZLzSVI+dmMVbf3jbqwY1YPQcMiAG8UDzaILY1Dkus91kWLF8Qdr3nHAzg==", + "node_modules/@angular/build/node_modules/@esbuild/aix-ppc64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.0.tgz", + "integrity": "sha512-lhRUCeuOyJQURhTxl4WkpFTjIsbDayJHih5kZC1giwE+MhIzAb7mEsQMqMf18rHLsrb5qI1tafG20mLxEWcWlA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@angular/build/node_modules/@esbuild/android-arm": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.0.tgz", + "integrity": "sha512-wqh0ByljabXLKHeWXYLqoJ5jKC4XBaw6Hk08OfMrCRd2nP2ZQ5eleDZC41XHyCNgktBGYMbqnrJKq/K/lzPMSQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@angular/build/node_modules/@esbuild/android-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.0.tgz", + "integrity": "sha512-+WzIXQOSaGs33tLEgYPYe/yQHf0WTU0X42Jca3y8NWMbUVhp7rUnw+vAsRC/QiDrdD31IszMrZy+qwPOPjd+rw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@angular/build/node_modules/@esbuild/android-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.0.tgz", + "integrity": "sha512-+VJggoaKhk2VNNqVL7f6S189UzShHC/mR9EE8rDdSkdpN0KflSwWY/gWjDrNxxisg8Fp1ZCD9jLMo4m0OUfeUA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@angular/build/node_modules/@esbuild/darwin-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.0.tgz", + "integrity": "sha512-0T+A9WZm+bZ84nZBtk1ckYsOvyA3x7e2Acj1KdVfV4/2tdG4fzUp91YHx+GArWLtwqp77pBXVCPn2We7Letr0Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@angular/build/node_modules/@esbuild/darwin-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.0.tgz", + "integrity": "sha512-fyzLm/DLDl/84OCfp2f/XQ4flmORsjU7VKt8HLjvIXChJoFFOIL6pLJPH4Yhd1n1gGFF9mPwtlN5Wf82DZs+LQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@angular/build/node_modules/@esbuild/freebsd-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.0.tgz", + "integrity": "sha512-l9GeW5UZBT9k9brBYI+0WDffcRxgHQD8ShN2Ur4xWq/NFzUKm3k5lsH4PdaRgb2w7mI9u61nr2gI2mLI27Nh3Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@angular/build/node_modules/@esbuild/freebsd-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.0.tgz", + "integrity": "sha512-BXoQai/A0wPO6Es3yFJ7APCiKGc1tdAEOgeTNy3SsB491S3aHn4S4r3e976eUnPdU+NbdtmBuLncYir2tMU9Nw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@angular/build/node_modules/@esbuild/linux-arm": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.0.tgz", + "integrity": "sha512-CjaaREJagqJp7iTaNQjjidaNbCKYcd4IDkzbwwxtSvjI7NZm79qiHc8HqciMddQ6CKvJT6aBd8lO9kN/ZudLlw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@angular/build/node_modules/@esbuild/linux-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.0.tgz", + "integrity": "sha512-RVyzfb3FWsGA55n6WY0MEIEPURL1FcbhFE6BffZEMEekfCzCIMtB5yyDcFnVbTnwk+CLAgTujmV/Lgvih56W+A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@angular/build/node_modules/@esbuild/linux-ia32": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.0.tgz", + "integrity": "sha512-KBnSTt1kxl9x70q+ydterVdl+Cn0H18ngRMRCEQfrbqdUuntQQ0LoMZv47uB97NljZFzY6HcfqEZ2SAyIUTQBQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@angular/build/node_modules/@esbuild/linux-loong64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.0.tgz", + "integrity": "sha512-zpSlUce1mnxzgBADvxKXX5sl8aYQHo2ezvMNI8I0lbblJtp8V4odlm3Yzlj7gPyt3T8ReksE6bK+pT3WD+aJRg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@angular/build/node_modules/@esbuild/linux-mips64el": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.0.tgz", + "integrity": "sha512-2jIfP6mmjkdmeTlsX/9vmdmhBmKADrWqN7zcdtHIeNSCH1SqIoNI63cYsjQR8J+wGa4Y5izRcSHSm8K3QWmk3w==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@angular/build/node_modules/@esbuild/linux-ppc64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.0.tgz", + "integrity": "sha512-bc0FE9wWeC0WBm49IQMPSPILRocGTQt3j5KPCA8os6VprfuJ7KD+5PzESSrJ6GmPIPJK965ZJHTUlSA6GNYEhg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@angular/build/node_modules/@esbuild/linux-riscv64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.0.tgz", + "integrity": "sha512-SQPZOwoTTT/HXFXQJG/vBX8sOFagGqvZyXcgLA3NhIqcBv1BJU1d46c0rGcrij2B56Z2rNiSLaZOYW5cUk7yLQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@angular/build/node_modules/@esbuild/linux-s390x": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.0.tgz", + "integrity": "sha512-SCfR0HN8CEEjnYnySJTd2cw0k9OHB/YFzt5zgJEwa+wL/T/raGWYMBqwDNAC6dqFKmJYZoQBRfHjgwLHGSrn3Q==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@angular/build/node_modules/@esbuild/linux-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.0.tgz", + "integrity": "sha512-us0dSb9iFxIi8srnpl931Nvs65it/Jd2a2K3qs7fz2WfGPHqzfzZTfec7oxZJRNPXPnNYZtanmRc4AL/JwVzHQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@angular/build/node_modules/@esbuild/netbsd-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.0.tgz", + "integrity": "sha512-CR/RYotgtCKwtftMwJlUU7xCVNg3lMYZ0RzTmAHSfLCXw3NtZtNpswLEj/Kkf6kEL3Gw+BpOekRX0BYCtklhUw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@angular/build/node_modules/@esbuild/netbsd-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.0.tgz", + "integrity": "sha512-nU1yhmYutL+fQ71Kxnhg8uEOdC0pwEW9entHykTgEbna2pw2dkbFSMeqjjyHZoCmt8SBkOSvV+yNmm94aUrrqw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@angular/build/node_modules/@esbuild/openbsd-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.0.tgz", + "integrity": "sha512-cXb5vApOsRsxsEl4mcZ1XY3D4DzcoMxR/nnc4IyqYs0rTI8ZKmW6kyyg+11Z8yvgMfAEldKzP7AdP64HnSC/6g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@angular/build/node_modules/@esbuild/openbsd-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.0.tgz", + "integrity": "sha512-8wZM2qqtv9UP3mzy7HiGYNH/zjTA355mpeuA+859TyR+e+Tc08IHYpLJuMsfpDJwoLo1ikIJI8jC3GFjnRClzA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@angular/build/node_modules/@esbuild/openharmony-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.0.tgz", + "integrity": "sha512-FLGfyizszcef5C3YtoyQDACyg95+dndv79i2EekILBofh5wpCa1KuBqOWKrEHZg3zrL3t5ouE5jgr94vA+Wb2w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@angular/build/node_modules/@esbuild/sunos-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.0.tgz", + "integrity": "sha512-1ZgjUoEdHZZl/YlV76TSCz9Hqj9h9YmMGAgAPYd+q4SicWNX3G5GCyx9uhQWSLcbvPW8Ni7lj4gDa1T40akdlw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@angular/build/node_modules/@esbuild/win32-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.0.tgz", + "integrity": "sha512-Q9StnDmQ/enxnpxCCLSg0oo4+34B9TdXpuyPeTedN/6+iXBJ4J+zwfQI28u/Jl40nOYAxGoNi7mFP40RUtkmUA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@angular/build/node_modules/@esbuild/win32-ia32": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.0.tgz", + "integrity": "sha512-zF3ag/gfiCe6U2iczcRzSYJKH1DCI+ByzSENHlM2FcDbEeo5Zd2C86Aq0tKUYAJJ1obRP84ymxIAksZUcdztHA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@angular/build/node_modules/@esbuild/win32-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.0.tgz", + "integrity": "sha512-pEl1bO9mfAmIC+tW5btTmrKaujg3zGtUmWNdCw/xs70FBjwAL3o9OEKNHvNmnyylD6ubxUERiEhdsL0xBQ9efw==", + "cpu": [ + "x64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "tslib": "^2.3.0" - }, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": "^20.19.0 || ^22.12.0 || >=24.0.0" - }, - "peerDependencies": { - "@angular/core": "20.3.16" + "node": ">=18" } }, - "node_modules/@angular/build": { - "version": "20.3.13", - "resolved": "https://registry.npmjs.org/@angular/build/-/build-20.3.13.tgz", - "integrity": "sha512-/5pM3ZS+lLkZgA+n6TMmNV8I6t9Ow1C6Vkj6bXqWeOgFDH5LwnIEZFAKzEDBkCGos0m2gPKPcREcDD5tfp9h4g==", + "node_modules/@angular/build/node_modules/esbuild": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.0.tgz", + "integrity": "sha512-sNR9MHpXSUV/XB4zmsFKN+QgVG82Cc7+/aaxJ8Adi8hyOac+EXptIp45QBPaVyX3N70664wRbTcLTOemCAnyqw==", "dev": true, + "hasInstallScript": true, "license": "MIT", - "dependencies": { - "@ampproject/remapping": "2.3.0", - "@angular-devkit/architect": "0.2003.13", - "@babel/core": "7.28.3", - "@babel/helper-annotate-as-pure": "7.27.3", - "@babel/helper-split-export-declaration": "7.24.7", - "@inquirer/confirm": "5.1.14", - "@vitejs/plugin-basic-ssl": "2.1.0", - "beasties": "0.3.5", - "browserslist": "^4.23.0", - "esbuild": "0.25.9", - "https-proxy-agent": "7.0.6", - "istanbul-lib-instrument": "6.0.3", - "jsonc-parser": "3.3.1", - "listr2": "9.0.1", - "magic-string": "0.30.17", - "mrmime": "2.0.1", - "parse5-html-rewriting-stream": "8.0.0", - "picomatch": "4.0.3", - "piscina": "5.1.3", - "rollup": "4.52.3", - "sass": "1.90.0", - "semver": "7.7.2", - "source-map-support": "0.5.21", - "tinyglobby": "0.2.14", - "vite": "7.1.11", - "watchpack": "2.4.4" + "bin": { + "esbuild": "bin/esbuild" }, "engines": { - "node": "^20.19.0 || ^22.12.0 || >=24.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" + "node": ">=18" }, "optionalDependencies": { - "lmdb": "3.4.2" - }, - "peerDependencies": { - "@angular/compiler": "^20.0.0", - "@angular/compiler-cli": "^20.0.0", - "@angular/core": "^20.0.0", - "@angular/localize": "^20.0.0", - "@angular/platform-browser": "^20.0.0", - "@angular/platform-server": "^20.0.0", - "@angular/service-worker": "^20.0.0", - "@angular/ssr": "^20.3.13", - "karma": "^6.4.0", - "less": "^4.2.0", - "ng-packagr": "^20.0.0", - "postcss": "^8.4.0", - "tailwindcss": "^2.0.0 || ^3.0.0 || ^4.0.0", - "tslib": "^2.3.0", - "typescript": ">=5.8 <6.0", - "vitest": "^3.1.1" - }, - "peerDependenciesMeta": { - "@angular/core": { - "optional": true - }, - "@angular/localize": { - "optional": true - }, - "@angular/platform-browser": { - "optional": true - }, - "@angular/platform-server": { - "optional": true - }, - "@angular/service-worker": { - "optional": true - }, - "@angular/ssr": { - "optional": true - }, - "karma": { - "optional": true - }, - "less": { - "optional": true - }, - "ng-packagr": { - "optional": true - }, - "postcss": { - "optional": true - }, - "tailwindcss": { - "optional": true - }, - "vitest": { - "optional": true - } + "@esbuild/aix-ppc64": "0.28.0", + "@esbuild/android-arm": "0.28.0", + "@esbuild/android-arm64": "0.28.0", + "@esbuild/android-x64": "0.28.0", + "@esbuild/darwin-arm64": "0.28.0", + "@esbuild/darwin-x64": "0.28.0", + "@esbuild/freebsd-arm64": "0.28.0", + "@esbuild/freebsd-x64": "0.28.0", + "@esbuild/linux-arm": "0.28.0", + "@esbuild/linux-arm64": "0.28.0", + "@esbuild/linux-ia32": "0.28.0", + "@esbuild/linux-loong64": "0.28.0", + "@esbuild/linux-mips64el": "0.28.0", + "@esbuild/linux-ppc64": "0.28.0", + "@esbuild/linux-riscv64": "0.28.0", + "@esbuild/linux-s390x": "0.28.0", + "@esbuild/linux-x64": "0.28.0", + "@esbuild/netbsd-arm64": "0.28.0", + "@esbuild/netbsd-x64": "0.28.0", + "@esbuild/openbsd-arm64": "0.28.0", + "@esbuild/openbsd-x64": "0.28.0", + "@esbuild/openharmony-arm64": "0.28.0", + "@esbuild/sunos-x64": "0.28.0", + "@esbuild/win32-arm64": "0.28.0", + "@esbuild/win32-ia32": "0.28.0", + "@esbuild/win32-x64": "0.28.0" } }, "node_modules/@angular/cli": { - "version": "20.3.15", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-20.3.15.tgz", - "integrity": "sha512-OgPMhXtNLXds0wIw6YU5/X3dU8TlAZbmPy6LYHs9ifF8K4pXpbm27vWGSZhUevSf66dMvfz8wB/aE2e0s2e5Ng==", + "version": "20.3.25", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-20.3.25.tgz", + "integrity": "sha512-QOSxza45CZY11kqPVpqsU+WGYF99rR/r9A9GykZQWuAHb5SEAxlXHyaaGMu/BMtBHy5HNIlJH25UlzelrbaNyQ==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/architect": "0.2003.15", - "@angular-devkit/core": "20.3.15", - "@angular-devkit/schematics": "20.3.15", + "@angular-devkit/architect": "0.2003.25", + "@angular-devkit/core": "20.3.25", + "@angular-devkit/schematics": "20.3.25", "@inquirer/prompts": "7.8.2", "@listr2/prompt-adapter-inquirer": "3.0.1", - "@modelcontextprotocol/sdk": "1.25.2", - "@schematics/angular": "20.3.15", + "@modelcontextprotocol/sdk": "1.26.0", + "@schematics/angular": "20.3.25", "@yarnpkg/lockfile": "1.1.0", "algoliasearch": "5.35.0", "ini": "5.0.0", @@ -509,54 +965,10 @@ "yarn": ">= 1.13.0" } }, - "node_modules/@angular/cli/node_modules/@angular-devkit/architect": { - "version": "0.2003.15", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.2003.15.tgz", - "integrity": "sha512-HmGnUTLVwpvOFilc3gTP6CL9o+UbkVyu9S4WENkQbInbW3zp54lkzY71uWJIP7QvuXPa+bS4WHEmoGNQtNvv1A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@angular-devkit/core": "20.3.15", - "rxjs": "7.8.2" - }, - "engines": { - "node": "^20.19.0 || ^22.12.0 || >=24.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular/cli/node_modules/@angular-devkit/core": { - "version": "20.3.15", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-20.3.15.tgz", - "integrity": "sha512-s7sE4S5Hy62dLrtHwizbZaMcupAE8fPhm6rF+jBkhHZ75zXGhGzXP8WKFztYCAuGnis4pPnGSEKP/xVTc2lw6Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "8.17.1", - "ajv-formats": "3.0.1", - "jsonc-parser": "3.3.1", - "picomatch": "4.0.3", - "rxjs": "7.8.2", - "source-map": "0.7.6" - }, - "engines": { - "node": "^20.19.0 || ^22.12.0 || >=24.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "chokidar": "^4.0.0" - }, - "peerDependenciesMeta": { - "chokidar": { - "optional": true - } - } - }, "node_modules/@angular/common": { - "version": "20.3.16", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-20.3.16.tgz", - "integrity": "sha512-GRAziNlntwdnJy3F+8zCOvDdy7id0gITjDnM6P9+n2lXvtDuBLGJKU3DWBbvxcCjtD6JK/g/rEX5fbCxbUHkQQ==", + "version": "20.3.20", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-20.3.20.tgz", + "integrity": "sha512-uluZKEHKVYRy30/G59HiUv977swzHZVU6F2zdq88bNo2AkOwodcsaGf3GmnhZhnv5nc4qXOZuZZ3mtxTS7o1xw==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -565,14 +977,14 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/core": "20.3.16", + "@angular/core": "20.3.20", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/compiler": { - "version": "20.3.16", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-20.3.16.tgz", - "integrity": "sha512-Pt9Ms9GwTThgzdxWBwMfN8cH1JEtQ2DK5dc2yxYtPSaD+WKmG9AVL1PrzIYQEbaKcWk2jxASUHpEWSlNiwo8uw==", + "version": "20.3.20", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-20.3.20.tgz", + "integrity": "sha512-wLzXAtBdRH7LsgHSUmeGqFpkiGutr/Y8cpq4rhcX1J/OHQIWgFTW6+3LltMpKSfJn4wqHj8IIWc+TqrPHfkhKg==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -582,9 +994,9 @@ } }, "node_modules/@angular/compiler-cli": { - "version": "20.3.16", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-20.3.16.tgz", - "integrity": "sha512-l3xF/fXfJAl/UrNnH9Ufkr79myjMgXdHq1mmmph2UnpeqilRB1b8lC9sLBV9MipQHVn3dwocxMIvtrcryfOaXw==", + "version": "20.3.20", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-20.3.20.tgz", + "integrity": "sha512-noO6SE2Dw9+wCCnmr5nG/gsvQicsrt+7QuaJR8gnnt+JvrDJ5pKkPLj4Rs+mZU86UAscg6LJ0dc8B+KPLKp9Tw==", "dev": true, "license": "MIT", "dependencies": { @@ -605,7 +1017,7 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/compiler": "20.3.16", + "@angular/compiler": "20.3.20", "typescript": ">=5.8 <6.0" }, "peerDependenciesMeta": { @@ -615,9 +1027,9 @@ } }, "node_modules/@angular/core": { - "version": "20.3.16", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-20.3.16.tgz", - "integrity": "sha512-KSFPKvOmWWLCJBbEO+CuRUXfecX2FRuO0jNi9c54ptXMOPHlK1lIojUnyXmMNzjdHgRug8ci9qDuftvC2B7MKg==", + "version": "20.3.20", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-20.3.20.tgz", + "integrity": "sha512-LwUFAGGlqFiu81Umf+oFmAS+swHR9xumNVradrFkDpmy4zkhveO2N2L4QUIm6ZcV0YBkNyoIa/IrJqyVAmwdWQ==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -626,7 +1038,7 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/compiler": "20.3.16", + "@angular/compiler": "20.3.20", "rxjs": "^6.5.3 || ^7.4.0", "zone.js": "~0.15.0" }, @@ -640,9 +1052,9 @@ } }, "node_modules/@angular/forms": { - "version": "20.3.16", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-20.3.16.tgz", - "integrity": "sha512-1yzbXpExTqATpVcqA3wGrq4ACFIP3mRxA4pbso5KoJU+/4JfzNFwLsDaFXKpm5uxwchVnj8KM2vPaDOkvtp7NA==", + "version": "20.3.20", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-20.3.20.tgz", + "integrity": "sha512-9l5TIniHls7JLjQVvXi18yNgoMY0VCtRgLDutXId9qq1lJJ1pGDg0IEHER1GS8Ukkws8n79jKZ0X27VFDt/xtA==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -651,16 +1063,16 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/common": "20.3.16", - "@angular/core": "20.3.16", - "@angular/platform-browser": "20.3.16", + "@angular/common": "20.3.20", + "@angular/core": "20.3.20", + "@angular/platform-browser": "20.3.20", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/language-service": { - "version": "20.3.16", - "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-20.3.16.tgz", - "integrity": "sha512-0A/tSQPq5geIz2mMcZA5fzzbzT39v+ADQksnfPr8htNxtkYWy+EI5+d0+++k59NuvjLY4uTBqhRTRB9b1PKrjw==", + "version": "20.3.20", + "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-20.3.20.tgz", + "integrity": "sha512-Xx2UEvPJORpNP9wM5oom93Q718spTTFfBohroftotQFlYxoGjQF6IcbcG8LtTPA6eygfMCC1m6KaE9taIKwa/A==", "dev": true, "license": "MIT", "engines": { @@ -668,9 +1080,9 @@ } }, "node_modules/@angular/platform-browser": { - "version": "20.3.16", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-20.3.16.tgz", - "integrity": "sha512-YsrLS6vyS77i4pVHg4gdSBW74qvzHjpQRTVQ5Lv/OxIjJdYYYkMmjNalCNgy1ZuyY6CaLIB11ccxhrNnxfKGOQ==", + "version": "20.3.20", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-20.3.20.tgz", + "integrity": "sha512-FTWEoAmGGNLc9mZ9DfnzIp64p59vhTi9xYWADDWWYWWpXd4jPxifb8w6ZG+A31vUjq4hXPRj0yy72SyxTKCo5A==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -679,9 +1091,9 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/animations": "20.3.16", - "@angular/common": "20.3.16", - "@angular/core": "20.3.16" + "@angular/animations": "20.3.20", + "@angular/common": "20.3.20", + "@angular/core": "20.3.20" }, "peerDependenciesMeta": { "@angular/animations": { @@ -690,9 +1102,9 @@ } }, "node_modules/@angular/platform-browser-dynamic": { - "version": "20.3.16", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-20.3.16.tgz", - "integrity": "sha512-5mECCV9YeKH6ue239GXRTGeDSd/eTbM1j8dDejhm5cGnPBhTxRw4o+GgSrWTYtb6VmIYdwUGBTC+wCBphiaQ2A==", + "version": "20.3.20", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-20.3.20.tgz", + "integrity": "sha512-t4Rfph7P8DemGTkBMi3yQITixulwZCEDB0s4d5froPviNUXr8ogsgQIBTE4KOU1gHskHq/KlPvxstYmFYZJKsQ==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -701,16 +1113,16 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/common": "20.3.16", - "@angular/compiler": "20.3.16", - "@angular/core": "20.3.16", - "@angular/platform-browser": "20.3.16" + "@angular/common": "20.3.20", + "@angular/compiler": "20.3.20", + "@angular/core": "20.3.20", + "@angular/platform-browser": "20.3.20" } }, "node_modules/@angular/router": { - "version": "20.3.16", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-20.3.16.tgz", - "integrity": "sha512-e1LiQFZaajKqc00cY5FboIrWJZSMnZ64GDp5R0UejritYrqorQQQNOqP1W85BMuY2owibMmxVfX+dJg/Mc8PuQ==", + "version": "20.3.20", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-20.3.20.tgz", + "integrity": "sha512-4oIhW6h7zr16S5vvZNwgX+moJddHNpMk622hriygPXApaQWqJ2Mrp6wYYezpN3DZuE5hjB+f9KPZKq18JF58Ww==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -719,9 +1131,9 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/common": "20.3.16", - "@angular/core": "20.3.16", - "@angular/platform-browser": "20.3.16", + "@angular/common": "20.3.20", + "@angular/core": "20.3.20", + "@angular/platform-browser": "20.3.20", "rxjs": "^6.5.3 || ^7.4.0" } }, @@ -1133,9 +1545,9 @@ "license": "ISC" }, "node_modules/@capawesome/capacitor-file-picker": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@capawesome/capacitor-file-picker/-/capacitor-file-picker-7.0.1.tgz", - "integrity": "sha512-b+EBAWul2I0RRp+eQoHiP/ykgc8PNRP9wIMrvnqDZEg7iIl8rAd/AJsZMYzoo/ACcYJofn4bD0CXQDC2fcKw4g==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@capawesome/capacitor-file-picker/-/capacitor-file-picker-8.0.2.tgz", + "integrity": "sha512-TQstOBrynvQP7t1s7egvf0RkiTR29EUbBMEhus8bb4uPFROfACOxR0s68uuOS6uTN3bSF2tpsz2NcVnVV/XvzA==", "funding": [ { "type": "github", @@ -1148,13 +1560,13 @@ ], "license": "MIT", "peerDependencies": { - "@capacitor/core": ">=7.0.0" + "@capacitor/core": ">=8.0.0" } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.9.tgz", - "integrity": "sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.7.tgz", + "integrity": "sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==", "cpu": [ "ppc64" ], @@ -1169,9 +1581,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.9.tgz", - "integrity": "sha512-5WNI1DaMtxQ7t7B6xa572XMXpHAaI/9Hnhk8lcxF4zVN4xstUgTlvuGDorBguKEnZO70qwEcLpfifMLoxiPqHQ==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.7.tgz", + "integrity": "sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==", "cpu": [ "arm" ], @@ -1186,9 +1598,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.9.tgz", - "integrity": "sha512-IDrddSmpSv51ftWslJMvl3Q2ZT98fUSL2/rlUXuVqRXHCs5EUF1/f+jbjF5+NG9UffUDMCiTyh8iec7u8RlTLg==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.7.tgz", + "integrity": "sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==", "cpu": [ "arm64" ], @@ -1203,9 +1615,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.9.tgz", - "integrity": "sha512-I853iMZ1hWZdNllhVZKm34f4wErd4lMyeV7BLzEExGEIZYsOzqDWDf+y082izYUE8gtJnYHdeDpN/6tUdwvfiw==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.7.tgz", + "integrity": "sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==", "cpu": [ "x64" ], @@ -1220,9 +1632,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.9.tgz", - "integrity": "sha512-XIpIDMAjOELi/9PB30vEbVMs3GV1v2zkkPnuyRRURbhqjyzIINwj+nbQATh4H9GxUgH1kFsEyQMxwiLFKUS6Rg==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.7.tgz", + "integrity": "sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==", "cpu": [ "arm64" ], @@ -1237,9 +1649,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.9.tgz", - "integrity": "sha512-jhHfBzjYTA1IQu8VyrjCX4ApJDnH+ez+IYVEoJHeqJm9VhG9Dh2BYaJritkYK3vMaXrf7Ogr/0MQ8/MeIefsPQ==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.7.tgz", + "integrity": "sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==", "cpu": [ "x64" ], @@ -1254,9 +1666,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.9.tgz", - "integrity": "sha512-z93DmbnY6fX9+KdD4Ue/H6sYs+bhFQJNCPZsi4XWJoYblUqT06MQUdBCpcSfuiN72AbqeBFu5LVQTjfXDE2A6Q==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.7.tgz", + "integrity": "sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==", "cpu": [ "arm64" ], @@ -1271,9 +1683,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.9.tgz", - "integrity": "sha512-mrKX6H/vOyo5v71YfXWJxLVxgy1kyt1MQaD8wZJgJfG4gq4DpQGpgTB74e5yBeQdyMTbgxp0YtNj7NuHN0PoZg==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.7.tgz", + "integrity": "sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==", "cpu": [ "x64" ], @@ -1288,9 +1700,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.9.tgz", - "integrity": "sha512-HBU2Xv78SMgaydBmdor38lg8YDnFKSARg1Q6AT0/y2ezUAKiZvc211RDFHlEZRFNRVhcMamiToo7bDx3VEOYQw==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.7.tgz", + "integrity": "sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==", "cpu": [ "arm" ], @@ -1305,9 +1717,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.9.tgz", - "integrity": "sha512-BlB7bIcLT3G26urh5Dmse7fiLmLXnRlopw4s8DalgZ8ef79Jj4aUcYbk90g8iCa2467HX8SAIidbL7gsqXHdRw==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.7.tgz", + "integrity": "sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==", "cpu": [ "arm64" ], @@ -1322,9 +1734,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.9.tgz", - "integrity": "sha512-e7S3MOJPZGp2QW6AK6+Ly81rC7oOSerQ+P8L0ta4FhVi+/j/v2yZzx5CqqDaWjtPFfYz21Vi1S0auHrap3Ma3A==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.7.tgz", + "integrity": "sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==", "cpu": [ "ia32" ], @@ -1339,9 +1751,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.9.tgz", - "integrity": "sha512-Sbe10Bnn0oUAB2AalYztvGcK+o6YFFA/9829PhOCUS9vkJElXGdphz0A3DbMdP8gmKkqPmPcMJmJOrI3VYB1JQ==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.7.tgz", + "integrity": "sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==", "cpu": [ "loong64" ], @@ -1356,9 +1768,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.9.tgz", - "integrity": "sha512-YcM5br0mVyZw2jcQeLIkhWtKPeVfAerES5PvOzaDxVtIyZ2NUBZKNLjC5z3/fUlDgT6w89VsxP2qzNipOaaDyA==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.7.tgz", + "integrity": "sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==", "cpu": [ "mips64el" ], @@ -1373,9 +1785,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.9.tgz", - "integrity": "sha512-++0HQvasdo20JytyDpFvQtNrEsAgNG2CY1CLMwGXfFTKGBGQT3bOeLSYE2l1fYdvML5KUuwn9Z8L1EWe2tzs1w==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.7.tgz", + "integrity": "sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==", "cpu": [ "ppc64" ], @@ -1390,9 +1802,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.9.tgz", - "integrity": "sha512-uNIBa279Y3fkjV+2cUjx36xkx7eSjb8IvnL01eXUKXez/CBHNRw5ekCGMPM0BcmqBxBcdgUWuUXmVWwm4CH9kg==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.7.tgz", + "integrity": "sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==", "cpu": [ "riscv64" ], @@ -1407,9 +1819,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.9.tgz", - "integrity": "sha512-Mfiphvp3MjC/lctb+7D287Xw1DGzqJPb/J2aHHcHxflUo+8tmN/6d4k6I2yFR7BVo5/g7x2Monq4+Yew0EHRIA==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.7.tgz", + "integrity": "sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==", "cpu": [ "s390x" ], @@ -1424,9 +1836,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.9.tgz", - "integrity": "sha512-iSwByxzRe48YVkmpbgoxVzn76BXjlYFXC7NvLYq+b+kDjyyk30J0JY47DIn8z1MO3K0oSl9fZoRmZPQI4Hklzg==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.7.tgz", + "integrity": "sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==", "cpu": [ "x64" ], @@ -1441,9 +1853,9 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.9.tgz", - "integrity": "sha512-9jNJl6FqaUG+COdQMjSCGW4QiMHH88xWbvZ+kRVblZsWrkXlABuGdFJ1E9L7HK+T0Yqd4akKNa/lO0+jDxQD4Q==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.7.tgz", + "integrity": "sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==", "cpu": [ "arm64" ], @@ -1458,9 +1870,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.9.tgz", - "integrity": "sha512-RLLdkflmqRG8KanPGOU7Rpg829ZHu8nFy5Pqdi9U01VYtG9Y0zOG6Vr2z4/S+/3zIyOxiK6cCeYNWOFR9QP87g==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.7.tgz", + "integrity": "sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==", "cpu": [ "x64" ], @@ -1475,9 +1887,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.9.tgz", - "integrity": "sha512-YaFBlPGeDasft5IIM+CQAhJAqS3St3nJzDEgsgFixcfZeyGPCd6eJBWzke5piZuZ7CtL656eOSYKk4Ls2C0FRQ==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.7.tgz", + "integrity": "sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==", "cpu": [ "arm64" ], @@ -1492,9 +1904,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.9.tgz", - "integrity": "sha512-1MkgTCuvMGWuqVtAvkpkXFmtL8XhWy+j4jaSO2wxfJtilVCi0ZE37b8uOdMItIHz4I6z1bWWtEX4CJwcKYLcuA==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.7.tgz", + "integrity": "sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==", "cpu": [ "x64" ], @@ -1509,9 +1921,9 @@ } }, "node_modules/@esbuild/openharmony-arm64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.9.tgz", - "integrity": "sha512-4Xd0xNiMVXKh6Fa7HEJQbrpP3m3DDn43jKxMjxLLRjWnRsfxjORYJlXPO4JNcXtOyfajXorRKY9NkOpTHptErg==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.7.tgz", + "integrity": "sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==", "cpu": [ "arm64" ], @@ -1526,9 +1938,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.9.tgz", - "integrity": "sha512-WjH4s6hzo00nNezhp3wFIAfmGZ8U7KtrJNlFMRKxiI9mxEK1scOMAaa9i4crUtu+tBr+0IN6JCuAcSBJZfnphw==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.7.tgz", + "integrity": "sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==", "cpu": [ "x64" ], @@ -1543,9 +1955,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.9.tgz", - "integrity": "sha512-mGFrVJHmZiRqmP8xFOc6b84/7xa5y5YvR1x8djzXpJBSv/UsNK6aqec+6JDjConTgvvQefdGhFDAs2DLAds6gQ==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.7.tgz", + "integrity": "sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==", "cpu": [ "arm64" ], @@ -1560,9 +1972,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.9.tgz", - "integrity": "sha512-b33gLVU2k11nVx1OhX3C8QQP6UHQK4ZtN56oFWvVXvz2VkDoe6fbG8TOgHFxEvqeqohmRnIHe5A1+HADk4OQww==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.7.tgz", + "integrity": "sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==", "cpu": [ "ia32" ], @@ -1577,9 +1989,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.9.tgz", - "integrity": "sha512-PPOl1mi6lpLNQxnGoyAfschAodRFYXJ+9fs6WHXz7CSWKbOqiMZsubC+BQsVKuul+3vKLuwTHsS2c2y9EoKwxQ==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.7.tgz", + "integrity": "sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==", "cpu": [ "x64" ], @@ -1594,9 +2006,9 @@ } }, "node_modules/@hono/node-server": { - "version": "1.19.9", - "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.9.tgz", - "integrity": "sha512-vHL6w3ecZsky+8P5MD+eFfaGTyCeOHUIFYMGpQGbrBTSmNNoxv0if69rEZ5giu36weC5saFuznL411gRX7bJDw==", + "version": "1.19.14", + "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.14.tgz", + "integrity": "sha512-GwtvgtXxnWsucXvbQXkRgqksiH2Qed37H9xHZocE5sA3N8O8O8/8FA3uclQXxXVzc9XBZuEOMK7+r02FmSpHtw==", "dev": true, "license": "MIT", "engines": { @@ -1987,15 +2399,6 @@ "@schematics/angular": "^20.0.0" } }, - "node_modules/@ionic/angular/node_modules/ionicons": { - "version": "8.0.13", - "resolved": "https://registry.npmjs.org/ionicons/-/ionicons-8.0.13.tgz", - "integrity": "sha512-2QQVyG2P4wszne79jemMjWYLp0DBbDhr4/yFroPCxvPP1wtMxgdIV3l5n+XZ5E9mgoXU79w7yTWpm2XzJsISxQ==", - "license": "MIT", - "dependencies": { - "@stencil/core": "^4.35.3" - } - }, "node_modules/@ionic/cli-framework-output": { "version": "2.2.8", "resolved": "https://registry.npmjs.org/@ionic/cli-framework-output/-/cli-framework-output-2.2.8.tgz", @@ -2025,15 +2428,6 @@ "node": ">= 16" } }, - "node_modules/@ionic/core/node_modules/ionicons": { - "version": "8.0.13", - "resolved": "https://registry.npmjs.org/ionicons/-/ionicons-8.0.13.tgz", - "integrity": "sha512-2QQVyG2P4wszne79jemMjWYLp0DBbDhr4/yFroPCxvPP1wtMxgdIV3l5n+XZ5E9mgoXU79w7yTWpm2XzJsISxQ==", - "license": "MIT", - "dependencies": { - "@stencil/core": "^4.35.3" - } - }, "node_modules/@ionic/utils-array": { "version": "2.1.6", "resolved": "https://registry.npmjs.org/@ionic/utils-array/-/utils-array-2.1.6.tgz", @@ -2199,29 +2593,6 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/@isaacs/balanced-match": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", - "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/@isaacs/brace-expansion": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.1.tgz", - "integrity": "sha512-WMz71T1JS624nWj2n2fnYAuPovhv7EUhk69R6i9dsVyzxt5eM3bjwvgk9L+APE1TRscGysAVMANkB0jh0LQZrQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@isaacs/balanced-match": "^4.0.1" - }, - "engines": { - "node": "20 || >=22" - } - }, "node_modules/@isaacs/fs-minipass": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", @@ -2400,13 +2771,13 @@ ] }, "node_modules/@modelcontextprotocol/sdk": { - "version": "1.25.2", - "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.25.2.tgz", - "integrity": "sha512-LZFeo4F9M5qOhC/Uc1aQSrBHxMrvxett+9KLHt7OhcExtoiRN9DKgbZffMP/nxjutWDQpfMDfP3nkHI4X9ijww==", + "version": "1.26.0", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.26.0.tgz", + "integrity": "sha512-Y5RmPncpiDtTXDbLKswIJzTqu2hyBKxTNsgKqKclDbhIgg1wgtf1fRuvxgTnRfcnxtvvgbIEcqUOzZrJ6iSReg==", "dev": true, "license": "MIT", "dependencies": { - "@hono/node-server": "^1.19.7", + "@hono/node-server": "^1.19.9", "ajv": "^8.17.1", "ajv-formats": "^3.0.1", "content-type": "^1.0.5", @@ -2414,14 +2785,15 @@ "cross-spawn": "^7.0.5", "eventsource": "^3.0.2", "eventsource-parser": "^3.0.0", - "express": "^5.0.1", - "express-rate-limit": "^7.5.0", - "jose": "^6.1.1", + "express": "^5.2.1", + "express-rate-limit": "^8.2.1", + "hono": "^4.11.4", + "jose": "^6.1.3", "json-schema-typed": "^8.0.2", "pkce-challenge": "^5.0.0", "raw-body": "^3.0.0", "zod": "^3.25 || ^4.0", - "zod-to-json-schema": "^3.25.0" + "zod-to-json-schema": "^3.25.1" }, "engines": { "node": ">=18" @@ -3454,9 +3826,9 @@ "optional": true }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.3.tgz", - "integrity": "sha512-h6cqHGZ6VdnwliFG1NXvMPTy/9PS3h8oLh7ImwR+kl+oYnQizgjxsONmmPSb2C66RksfkfIxEVtDSEcJiO0tqw==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.59.0.tgz", + "integrity": "sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==", "cpu": [ "arm" ], @@ -3468,9 +3840,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.52.3.tgz", - "integrity": "sha512-wd+u7SLT/u6knklV/ifG7gr5Qy4GUbH2hMWcDauPFJzmCZUAJ8L2bTkVXC2niOIxp8lk3iH/QX8kSrUxVZrOVw==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.59.0.tgz", + "integrity": "sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==", "cpu": [ "arm64" ], @@ -3508,9 +3880,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.52.3.tgz", - "integrity": "sha512-u9Xg2FavYbD30g3DSfNhxgNrxhi6xVG4Y6i9Ur1C7xUuGDW3banRbXj+qgnIrwRN4KeJ396jchwy9bCIzbyBEQ==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.59.0.tgz", + "integrity": "sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==", "cpu": [ "arm64" ], @@ -3522,9 +3894,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.52.3.tgz", - "integrity": "sha512-5M8kyi/OX96wtD5qJR89a/3x5x8x5inXBZO04JWhkQb2JWavOWfjgkdvUqibGJeNNaz1/Z1PPza5/tAPXICI6A==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.59.0.tgz", + "integrity": "sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==", "cpu": [ "x64" ], @@ -3536,9 +3908,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.52.3.tgz", - "integrity": "sha512-IoerZJ4l1wRMopEHRKOO16e04iXRDyZFZnNZKrWeNquh5d6bucjezgd+OxG03mOMTnS1x7hilzb3uURPkJ0OfA==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.59.0.tgz", + "integrity": "sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==", "cpu": [ "arm" ], @@ -3550,9 +3922,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.52.3.tgz", - "integrity": "sha512-ZYdtqgHTDfvrJHSh3W22TvjWxwOgc3ThK/XjgcNGP2DIwFIPeAPNsQxrJO5XqleSlgDux2VAoWQ5iJrtaC1TbA==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.59.0.tgz", + "integrity": "sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==", "cpu": [ "arm" ], @@ -3590,9 +3962,23 @@ ] }, "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.52.3.tgz", - "integrity": "sha512-3y5GA0JkBuirLqmjwAKwB0keDlI6JfGYduMlJD/Rl7fvb4Ni8iKdQs1eiunMZJhwDWdCvrcqXRY++VEBbvk6Eg==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.59.0.tgz", + "integrity": "sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.59.0.tgz", + "integrity": "sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==", "cpu": [ "loong64" ], @@ -3604,9 +3990,23 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.52.3.tgz", - "integrity": "sha512-AUUH65a0p3Q0Yfm5oD2KVgzTKgwPyp9DSXc3UA7DtxhEb/WSPfbG4wqXeSN62OG5gSo18em4xv6dbfcUGXcagw==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.59.0.tgz", + "integrity": "sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.59.0.tgz", + "integrity": "sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==", "cpu": [ "ppc64" ], @@ -3618,9 +4018,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.52.3.tgz", - "integrity": "sha512-1makPhFFVBqZE+XFg3Dkq+IkQ7JvmUrwwqaYBL2CE+ZpxPaqkGaiWFEWVGyvTwZace6WLJHwjVh/+CXbKDGPmg==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.59.0.tgz", + "integrity": "sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==", "cpu": [ "riscv64" ], @@ -3632,9 +4032,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.52.3.tgz", - "integrity": "sha512-OOFJa28dxfl8kLOPMUOQBCO6z3X2SAfzIE276fwT52uXDWUS178KWq0pL7d6p1kz7pkzA0yQwtqL0dEPoVcRWg==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.59.0.tgz", + "integrity": "sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==", "cpu": [ "riscv64" ], @@ -3646,9 +4046,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.52.3.tgz", - "integrity": "sha512-jMdsML2VI5l+V7cKfZx3ak+SLlJ8fKvLJ0Eoa4b9/vCUrzXKgoKxvHqvJ/mkWhFiyp88nCkM5S2v6nIwRtPcgg==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.59.0.tgz", + "integrity": "sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==", "cpu": [ "s390x" ], @@ -3685,10 +4085,24 @@ "linux" ] }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.59.0.tgz", + "integrity": "sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.52.3.tgz", - "integrity": "sha512-KTD/EqjZF3yvRaWUJdD1cW+IQBk4fbQaHYJUmP8N4XoKFZilVL8cobFSTDnjTtxWJQ3JYaMgF4nObY/+nYkumA==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.59.0.tgz", + "integrity": "sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==", "cpu": [ "arm64" ], @@ -3713,9 +4127,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.52.3.tgz", - "integrity": "sha512-of1iHkTQSo3kr6dTIRX6t81uj/c/b15HXVsPcEElN5sS859qHrOepM5p9G41Hah+CTqSh2r8Bm56dL2z9UQQ7g==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.59.0.tgz", + "integrity": "sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==", "cpu": [ "ia32" ], @@ -3727,9 +4141,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.52.3.tgz", - "integrity": "sha512-s0hybmlHb56mWVZQj8ra9048/WZTPLILKxcvcq+8awSZmyiSUZjjem1AhU3Tf4ZKpYhK4mg36HtHDOe8QJS5PQ==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.59.0.tgz", + "integrity": "sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==", "cpu": [ "x64" ], @@ -3754,14 +4168,14 @@ ] }, "node_modules/@schematics/angular": { - "version": "20.3.15", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-20.3.15.tgz", - "integrity": "sha512-WkhW1HO8pA8JT8e27tvjQHQg8eO5KaOz+WsGkN00RyL5DwHgPSzu4a3eYug+b3rW7OGFub7jadXBuGSrzqgonA==", + "version": "20.3.25", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-20.3.25.tgz", + "integrity": "sha512-ezoJpPKhhjXgE3LxuNcJO/ghSXs8f73xrqGvqouag7IbuliJYbHrt22WH3X75XSbD0+iOdiqA2bARvAO/ezyxQ==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/core": "20.3.15", - "@angular-devkit/schematics": "20.3.15", + "@angular-devkit/core": "20.3.25", + "@angular-devkit/schematics": "20.3.25", "jsonc-parser": "3.3.1" }, "engines": { @@ -3770,34 +4184,6 @@ "yarn": ">= 1.13.0" } }, - "node_modules/@schematics/angular/node_modules/@angular-devkit/core": { - "version": "20.3.15", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-20.3.15.tgz", - "integrity": "sha512-s7sE4S5Hy62dLrtHwizbZaMcupAE8fPhm6rF+jBkhHZ75zXGhGzXP8WKFztYCAuGnis4pPnGSEKP/xVTc2lw6Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "8.17.1", - "ajv-formats": "3.0.1", - "jsonc-parser": "3.3.1", - "picomatch": "4.0.3", - "rxjs": "7.8.2", - "source-map": "0.7.6" - }, - "engines": { - "node": "^20.19.0 || ^22.12.0 || >=24.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "chokidar": "^4.0.0" - }, - "peerDependenciesMeta": { - "chokidar": { - "optional": true - } - } - }, "node_modules/@sigstore/bundle": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-4.0.0.tgz", @@ -3983,9 +4369,9 @@ } }, "node_modules/@xmldom/xmldom": { - "version": "0.8.11", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.11.tgz", - "integrity": "sha512-cQzWCtO6C8TQiYl1ruKNn2U6Ao4o4WBBcbL61yJl84x+j5sOWWFU9X7DpND8XZG3daDppSsigMdfAIl2upQBRw==", + "version": "0.8.13", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.13.tgz", + "integrity": "sha512-KRYzxepc14G/CEpEGc3Yn+JKaAeT63smlDr+vjB8jRfgTBBI9wRj/nkQEO+ucV8p8I9bfKLWp37uHgFrbntPvw==", "dev": true, "license": "MIT", "engines": { @@ -4034,9 +4420,9 @@ } }, "node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", "dev": true, "license": "MIT", "dependencies": { @@ -4156,6 +4542,16 @@ "node": ">= 4.0.0" } }, + "node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -4262,6 +4658,19 @@ "node": ">= 5.10.0" } }, + "node_modules/brace-expansion": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz", + "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, "node_modules/braces": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", @@ -4423,9 +4832,9 @@ "license": "CC-BY-4.0" }, "node_modules/capacitor-plugin-scanbot-barcode-scanner-sdk": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/capacitor-plugin-scanbot-barcode-scanner-sdk/-/capacitor-plugin-scanbot-barcode-scanner-sdk-8.0.0.tgz", - "integrity": "sha512-KdMpnnO8ECmwllJXRmn5LBb/ZcIOnNj3mFElU8DOkTy6fbdsEW6OYKRpA2UGF10eIZAZExf+Xquo9xL4LUuTYg==", + "version": "9.0.0-rc.2", + "resolved": "https://registry.npmjs.org/capacitor-plugin-scanbot-barcode-scanner-sdk/-/capacitor-plugin-scanbot-barcode-scanner-sdk-9.0.0-rc.2.tgz", + "integrity": "sha512-YF52sp52qX6E2t0Z3P+NU+bSzE7q0qxT6VkRf7QvqDm2doBiUBSgq/eUoU5THFhG2NMwdJmQCpJKEwFNSSBurg==", "license": "Commercial", "peerDependencies": { "@capacitor/core": ">=6.0.0" @@ -4768,9 +5177,9 @@ } }, "node_modules/content-disposition": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.1.tgz", - "integrity": "sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.1.0.tgz", + "integrity": "sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g==", "dev": true, "license": "MIT", "engines": { @@ -4819,9 +5228,9 @@ } }, "node_modules/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "version": "2.8.6", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.6.tgz", + "integrity": "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==", "dev": true, "license": "MIT", "dependencies": { @@ -4830,6 +5239,10 @@ }, "engines": { "node": ">= 0.10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/cross-spawn": { @@ -5146,9 +5559,9 @@ } }, "node_modules/esbuild": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.9.tgz", - "integrity": "sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.7.tgz", + "integrity": "sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -5159,32 +5572,32 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.9", - "@esbuild/android-arm": "0.25.9", - "@esbuild/android-arm64": "0.25.9", - "@esbuild/android-x64": "0.25.9", - "@esbuild/darwin-arm64": "0.25.9", - "@esbuild/darwin-x64": "0.25.9", - "@esbuild/freebsd-arm64": "0.25.9", - "@esbuild/freebsd-x64": "0.25.9", - "@esbuild/linux-arm": "0.25.9", - "@esbuild/linux-arm64": "0.25.9", - "@esbuild/linux-ia32": "0.25.9", - "@esbuild/linux-loong64": "0.25.9", - "@esbuild/linux-mips64el": "0.25.9", - "@esbuild/linux-ppc64": "0.25.9", - "@esbuild/linux-riscv64": "0.25.9", - "@esbuild/linux-s390x": "0.25.9", - "@esbuild/linux-x64": "0.25.9", - "@esbuild/netbsd-arm64": "0.25.9", - "@esbuild/netbsd-x64": "0.25.9", - "@esbuild/openbsd-arm64": "0.25.9", - "@esbuild/openbsd-x64": "0.25.9", - "@esbuild/openharmony-arm64": "0.25.9", - "@esbuild/sunos-x64": "0.25.9", - "@esbuild/win32-arm64": "0.25.9", - "@esbuild/win32-ia32": "0.25.9", - "@esbuild/win32-x64": "0.25.9" + "@esbuild/aix-ppc64": "0.27.7", + "@esbuild/android-arm": "0.27.7", + "@esbuild/android-arm64": "0.27.7", + "@esbuild/android-x64": "0.27.7", + "@esbuild/darwin-arm64": "0.27.7", + "@esbuild/darwin-x64": "0.27.7", + "@esbuild/freebsd-arm64": "0.27.7", + "@esbuild/freebsd-x64": "0.27.7", + "@esbuild/linux-arm": "0.27.7", + "@esbuild/linux-arm64": "0.27.7", + "@esbuild/linux-ia32": "0.27.7", + "@esbuild/linux-loong64": "0.27.7", + "@esbuild/linux-mips64el": "0.27.7", + "@esbuild/linux-ppc64": "0.27.7", + "@esbuild/linux-riscv64": "0.27.7", + "@esbuild/linux-s390x": "0.27.7", + "@esbuild/linux-x64": "0.27.7", + "@esbuild/netbsd-arm64": "0.27.7", + "@esbuild/netbsd-x64": "0.27.7", + "@esbuild/openbsd-arm64": "0.27.7", + "@esbuild/openbsd-x64": "0.27.7", + "@esbuild/openharmony-arm64": "0.27.7", + "@esbuild/sunos-x64": "0.27.7", + "@esbuild/win32-arm64": "0.27.7", + "@esbuild/win32-ia32": "0.27.7", + "@esbuild/win32-x64": "0.27.7" } }, "node_modules/escalade": { @@ -5235,9 +5648,9 @@ } }, "node_modules/eventsource-parser": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.6.tgz", - "integrity": "sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.8.tgz", + "integrity": "sha512-70QWGkr4snxr0OXLRWsFLeRBIRPuQOvt4s8QYjmUlmlkyTZkRqS7EDVRZtzU3TiyDbXSzaOeF0XUKy8PchzukQ==", "dev": true, "license": "MIT", "engines": { @@ -5296,11 +5709,14 @@ } }, "node_modules/express-rate-limit": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.5.1.tgz", - "integrity": "sha512-7iN8iPMDzOMHPUYllBEsQdWVB6fPDMPqwjBaFrgr4Jgr/+okjvzAy+UHlYYL/Vs0OsOrMkwS6PJDkFlJwoxUnw==", + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.5.1.tgz", + "integrity": "sha512-5O6KYmyJEpuPJV5hNTXKbAHWRqrzyu+OI3vUnSd2kXFubIVpG7ezpgxQy76Zo5GQZtrQBg86hF+CM/NX+cioiQ==", "dev": true, "license": "MIT", + "dependencies": { + "ip-address": "^10.2.0" + }, "engines": { "node": ">= 16" }, @@ -5319,9 +5735,9 @@ "license": "MIT" }, "node_modules/fast-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", - "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.2.tgz", + "integrity": "sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==", "dev": true, "funding": [ { @@ -5616,12 +6032,11 @@ } }, "node_modules/hono": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/hono/-/hono-4.11.9.tgz", - "integrity": "sha512-Eaw2YTGM6WOxA6CXbckaEvslr2Ne4NFsKrvc0v97JD5awbmeBLO5w9Ho9L9kmKonrwF9RJlW6BxT1PVv/agBHQ==", + "version": "4.12.24", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.24.tgz", + "integrity": "sha512-I36D1s+HgQc55KbhEr4iybfxv/9o1zdpw+XEM6dJa91LqQD0HCoSGdxpRJCZE+aavs87j4V3Ls2OJzq8C/U4iw==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=16.9.0" } @@ -5769,9 +6184,9 @@ } }, "node_modules/immutable": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.4.tgz", - "integrity": "sha512-p6u1bG3YSnINT5RQmx/yRZBpenIl30kVxkTLDyHLIMk0gict704Q9n+thfDI7lTRm9vXdDYutVzXhzcThxTnXA==", + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.5.tgz", + "integrity": "sha512-t7xcm2siw+hlUM68I+UEOK+z84RzmN59as9DZ7P1l0994DKUWV7UXBMQZVxaoMSRQ+PBZbHCOoBt7a2wxOMt+A==", "dev": true, "license": "MIT" }, @@ -5803,18 +6218,18 @@ } }, "node_modules/ionicons": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/ionicons/-/ionicons-7.4.0.tgz", - "integrity": "sha512-ZK94MMqgzMCPPMhmk8Ouu6goyVHFIlw/ACP6oe3FrikcI0N7CX0xcwVaEbUc0G/v3W0shI93vo+9ve/KpvcNhQ==", + "version": "8.0.13", + "resolved": "https://registry.npmjs.org/ionicons/-/ionicons-8.0.13.tgz", + "integrity": "sha512-2QQVyG2P4wszne79jemMjWYLp0DBbDhr4/yFroPCxvPP1wtMxgdIV3l5n+XZ5E9mgoXU79w7yTWpm2XzJsISxQ==", "license": "MIT", "dependencies": { - "@stencil/core": "^4.0.3" + "@stencil/core": "^4.35.3" } }, "node_modules/ip-address": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.1.0.tgz", - "integrity": "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.2.0.tgz", + "integrity": "sha512-/+S6j4E9AHvW9SWMSEY9Xfy66O5PWvVEJ08O0y5JGyEKQpojb0K0GKpz/v5HJ/G0vi3D2sjGK78119oXZeE0qA==", "dev": true, "license": "MIT", "engines": { @@ -5990,9 +6405,9 @@ } }, "node_modules/jose": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/jose/-/jose-6.1.3.tgz", - "integrity": "sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ==", + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/jose/-/jose-6.2.3.tgz", + "integrity": "sha512-YYVDInQKFJfR/xa3ojUTl8c2KoTwiL1R5Wg9YCydwH0x0B9grbzlg5HC7mMjCtUJjbQ/YnGEZIhI5tCgfTb4Hw==", "dev": true, "license": "MIT", "funding": { @@ -6496,9 +6911,9 @@ } }, "node_modules/micromatch/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "dev": true, "license": "MIT", "optional": true, @@ -6550,16 +6965,16 @@ } }, "node_modules/minimatch": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.2.tgz", - "integrity": "sha512-fu656aJ0n2kcXwsnwnv9g24tkU5uSmOlTjd6WyyaKm2Z+h1qmY6bAjrcaIxF/BslFqbZ8UBtbJi7KgQOZD2PTw==", + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { - "@isaacs/brace-expansion": "^5.0.1" + "brace-expansion": "^5.0.5" }, "engines": { - "node": "20 || >=22" + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -7417,9 +7832,9 @@ } }, "node_modules/path-to-regexp": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.3.0.tgz", - "integrity": "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==", + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz", + "integrity": "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==", "dev": true, "license": "MIT", "funding": { @@ -7442,9 +7857,9 @@ "license": "ISC" }, "node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", "dev": true, "license": "MIT", "engines": { @@ -7493,9 +7908,9 @@ } }, "node_modules/postcss": { - "version": "8.5.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", - "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "version": "8.5.13", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.13.tgz", + "integrity": "sha512-qif0+jGGZoLWdHey3UFHHWP0H7Gbmsk8T5VEqyYFbWqPr1XqvLGBbk/sl8V5exGmcYJklJOhOQq1pV9IcsiFag==", "dev": true, "funding": [ { @@ -7607,9 +8022,9 @@ } }, "node_modules/qs": { - "version": "6.14.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz", - "integrity": "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==", + "version": "6.15.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.2.tgz", + "integrity": "sha512-Rzq0KEyX/w/tEybncDgdkZrJgVUsUMk3xjh3t5bv3S1HTAtg+uOYt72+ZfwiQwKdysThkTBdL/rTi6HDmX9Ddw==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -7770,9 +8185,9 @@ } }, "node_modules/rollup": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.52.3.tgz", - "integrity": "sha512-RIDh866U8agLgiIcdpB+COKnlCreHJLfIhWC3LVflku5YHfpnsIKigRZeFfMfCc4dVcqNVfQQ5gO/afOck064A==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.59.0.tgz", + "integrity": "sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==", "dev": true, "license": "MIT", "dependencies": { @@ -7786,35 +8201,38 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.52.3", - "@rollup/rollup-android-arm64": "4.52.3", - "@rollup/rollup-darwin-arm64": "4.52.3", - "@rollup/rollup-darwin-x64": "4.52.3", - "@rollup/rollup-freebsd-arm64": "4.52.3", - "@rollup/rollup-freebsd-x64": "4.52.3", - "@rollup/rollup-linux-arm-gnueabihf": "4.52.3", - "@rollup/rollup-linux-arm-musleabihf": "4.52.3", - "@rollup/rollup-linux-arm64-gnu": "4.52.3", - "@rollup/rollup-linux-arm64-musl": "4.52.3", - "@rollup/rollup-linux-loong64-gnu": "4.52.3", - "@rollup/rollup-linux-ppc64-gnu": "4.52.3", - "@rollup/rollup-linux-riscv64-gnu": "4.52.3", - "@rollup/rollup-linux-riscv64-musl": "4.52.3", - "@rollup/rollup-linux-s390x-gnu": "4.52.3", - "@rollup/rollup-linux-x64-gnu": "4.52.3", - "@rollup/rollup-linux-x64-musl": "4.52.3", - "@rollup/rollup-openharmony-arm64": "4.52.3", - "@rollup/rollup-win32-arm64-msvc": "4.52.3", - "@rollup/rollup-win32-ia32-msvc": "4.52.3", - "@rollup/rollup-win32-x64-gnu": "4.52.3", - "@rollup/rollup-win32-x64-msvc": "4.52.3", + "@rollup/rollup-android-arm-eabi": "4.59.0", + "@rollup/rollup-android-arm64": "4.59.0", + "@rollup/rollup-darwin-arm64": "4.59.0", + "@rollup/rollup-darwin-x64": "4.59.0", + "@rollup/rollup-freebsd-arm64": "4.59.0", + "@rollup/rollup-freebsd-x64": "4.59.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.59.0", + "@rollup/rollup-linux-arm-musleabihf": "4.59.0", + "@rollup/rollup-linux-arm64-gnu": "4.59.0", + "@rollup/rollup-linux-arm64-musl": "4.59.0", + "@rollup/rollup-linux-loong64-gnu": "4.59.0", + "@rollup/rollup-linux-loong64-musl": "4.59.0", + "@rollup/rollup-linux-ppc64-gnu": "4.59.0", + "@rollup/rollup-linux-ppc64-musl": "4.59.0", + "@rollup/rollup-linux-riscv64-gnu": "4.59.0", + "@rollup/rollup-linux-riscv64-musl": "4.59.0", + "@rollup/rollup-linux-s390x-gnu": "4.59.0", + "@rollup/rollup-linux-x64-gnu": "4.59.0", + "@rollup/rollup-linux-x64-musl": "4.59.0", + "@rollup/rollup-openbsd-x64": "4.59.0", + "@rollup/rollup-openharmony-arm64": "4.59.0", + "@rollup/rollup-win32-arm64-msvc": "4.59.0", + "@rollup/rollup-win32-ia32-msvc": "4.59.0", + "@rollup/rollup-win32-x64-gnu": "4.59.0", + "@rollup/rollup-win32-x64-msvc": "4.59.0", "fsevents": "~2.3.2" } }, "node_modules/rollup/node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.3.tgz", - "integrity": "sha512-lj9ViATR1SsqycwFkJCtYfQTheBdvlWJqzqxwc9f2qrcVrQaF/gCuBRTiTolkRWS6KvNxSk4KHZWG7tDktLgjg==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.59.0.tgz", + "integrity": "sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==", "cpu": [ "arm64" ], @@ -7826,9 +8244,9 @@ ] }, "node_modules/rollup/node_modules/@rollup/rollup-darwin-x64": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.52.3.tgz", - "integrity": "sha512-+Dyo7O1KUmIsbzx1l+4V4tvEVnVQqMOIYtrxK7ncLSknl1xnMHLgn7gddJVrYPNZfEB8CIi3hK8gq8bDhb3h5A==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.59.0.tgz", + "integrity": "sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==", "cpu": [ "x64" ], @@ -7840,9 +8258,9 @@ ] }, "node_modules/rollup/node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.52.3.tgz", - "integrity": "sha512-NcViG7A0YtuFDA6xWSgmFb6iPFzHlf5vcqb2p0lGEbT+gjrEEz8nC/EeDHvx6mnGXnGCC1SeVV+8u+smj0CeGQ==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.59.0.tgz", + "integrity": "sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==", "cpu": [ "arm64" ], @@ -7854,9 +8272,9 @@ ] }, "node_modules/rollup/node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.52.3.tgz", - "integrity": "sha512-d3pY7LWno6SYNXRm6Ebsq0DJGoiLXTb83AIPCXl9fmtIQs/rXoS8SJxxUNtFbJ5MiOvs+7y34np77+9l4nfFMw==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.59.0.tgz", + "integrity": "sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==", "cpu": [ "arm64" ], @@ -7868,9 +8286,9 @@ ] }, "node_modules/rollup/node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.3.tgz", - "integrity": "sha512-tPgGd6bY2M2LJTA1uGq8fkSPK8ZLYjDjY+ZLK9WHncCnfIz29LIXIqUgzCR0hIefzy6Hpbe8Th5WOSwTM8E7LA==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.59.0.tgz", + "integrity": "sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==", "cpu": [ "x64" ], @@ -7882,9 +8300,9 @@ ] }, "node_modules/rollup/node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.52.3.tgz", - "integrity": "sha512-BCFkJjgk+WFzP+tcSMXq77ymAPIxsX9lFJWs+2JzuZTLtksJ2o5hvgTdIcZ5+oKzUDMwI0PfWzRBYAydAHF2Mw==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.59.0.tgz", + "integrity": "sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==", "cpu": [ "x64" ], @@ -7896,9 +8314,9 @@ ] }, "node_modules/rollup/node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.52.3.tgz", - "integrity": "sha512-+zteHZdoUYLkyYKObGHieibUFLbttX2r+58l27XZauq0tcWYYuKUwY2wjeCN9oK1Um2YgH2ibd6cnX/wFD7DuA==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.59.0.tgz", + "integrity": "sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==", "cpu": [ "arm64" ], @@ -7910,9 +8328,9 @@ ] }, "node_modules/rollup/node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.52.3.tgz", - "integrity": "sha512-zGIbEVVXVtauFgl3MRwGWEN36P5ZGenHRMgNw88X5wEhEBpq0XrMEZwOn07+ICrwM17XO5xfMZqh0OldCH5VTA==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.59.0.tgz", + "integrity": "sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==", "cpu": [ "x64" ], @@ -8116,14 +8534,14 @@ } }, "node_modules/side-channel-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", + "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" + "object-inspect": "^1.13.4" }, "engines": { "node": ">= 0.4" @@ -8443,9 +8861,9 @@ } }, "node_modules/tar": { - "version": "7.5.7", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.7.tgz", - "integrity": "sha512-fov56fJiRuThVFXD6o6/Q354S7pnWMJIVlDBYijsTNx6jKSE4pvrDTs6lUnmGvNyfJwFQQwWy3owKz1ucIhveQ==", + "version": "7.5.13", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.13.tgz", + "integrity": "sha512-tOG/7GyXpFevhXVh8jOPJrmtRpOTsYqUIkVdVooZYJS/z8WhfQUX8RJILmeuJNinGAMSu1veBr4asSHFt5/hng==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -8713,13 +9131,13 @@ } }, "node_modules/vite": { - "version": "7.1.11", - "resolved": "https://registry.npmjs.org/vite/-/vite-7.1.11.tgz", - "integrity": "sha512-uzcxnSDVjAopEUjljkWh8EIrg6tlzrjFUfMcR1EVsRDGwf/ccef0qQPRyOrROwhrTDaApueq+ja+KLPlzR/zdg==", + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.2.tgz", + "integrity": "sha512-Bby3NOsna2jsjfLVOHKes8sGwgl4TT0E6vvpYgnAYDIF/tie7MRaFthmKuHx1NSXjiTueXH3do80FMQgvEktRg==", "dev": true, "license": "MIT", "dependencies": { - "esbuild": "^0.25.0", + "esbuild": "^0.27.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", @@ -9032,13 +9450,13 @@ } }, "node_modules/zod-to-json-schema": { - "version": "3.25.1", - "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.1.tgz", - "integrity": "sha512-pM/SU9d3YAggzi6MtR4h7ruuQlqKtad8e9S0fmxcMi+ueAK5Korys/aWcV9LIIHTVbj01NdzxcnXSN+O74ZIVA==", + "version": "3.25.2", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.2.tgz", + "integrity": "sha512-O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA==", "dev": true, "license": "ISC", "peerDependencies": { - "zod": "^3.25 || ^4" + "zod": "^3.25.28 || ^4" } }, "node_modules/zone.js": { diff --git a/package.json b/package.json index aabe912..f7574d2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "scanbot-barcode-scanner-sdk-example", - "version": "8.0.0", + "version": "9.0.0", "author": "Scanbot SDK", "homepage": "https://scanbot.io", "description": "Scanbot Barcode Scanner SDK Example App for Capacitor with Angular", @@ -11,21 +11,20 @@ "sync": "npx cap sync", "android": "npx cap run android", "ios": "npx cap run ios", - "install-pods": "cd ios/App && pod install --repo-update", "watch": "ng build --watch --configuration development", "format": "prettier --write \"src/**/*.{ts,html,scss,json}\"", - "clean": "rm -r -f node_modules && rm -f package-lock.json && rm -r -f www && cd ios/App && rm -r -f Pods && rm -f Podfile.lock" + "clean": "rm -r -f node_modules && rm -f package-lock.json && rm -rf www" }, "private": true, "dependencies": { - "@angular/animations": "^20.3.16", - "@angular/common": "^20.3.16", - "@angular/compiler": "^20.3.16", - "@angular/core": "^20.3.16", - "@angular/forms": "^20.3.16", - "@angular/platform-browser": "^20.3.16", - "@angular/platform-browser-dynamic": "^20.3.16", - "@angular/router": "^20.3.16", + "@angular/animations": "^20.3.20", + "@angular/common": "^20.3.20", + "@angular/compiler": "^20.3.20", + "@angular/core": "^20.3.20", + "@angular/forms": "^20.3.20", + "@angular/platform-browser": "^20.3.20", + "@angular/platform-browser-dynamic": "^20.3.20", + "@angular/router": "^20.3.20", "@capacitor/android": "^8.0.0", "@capacitor/app": "^8.0.0", "@capacitor/camera": "^8.0.0", @@ -34,19 +33,19 @@ "@capacitor/ios": "^8.0.0", "@capacitor/preferences": "^8.0.0", "@capacitor/status-bar": "^8.0.0", - "@capawesome/capacitor-file-picker": "7.0.1", + "@capawesome/capacitor-file-picker": "8.0.2", "@ionic/angular": "^8.0.0", - "capacitor-plugin-scanbot-barcode-scanner-sdk": "8.0.0", - "ionicons": "^7.0.0", + "capacitor-plugin-scanbot-barcode-scanner-sdk": "9.0.0-rc.2", + "ionicons": "^8.0.13", "rxjs": "~7.8.0", "tslib": "^2.3.0", "zone.js": "~0.15.0" }, "devDependencies": { - "@angular/build": "^20.3.13", - "@angular/cli": "^20.3.13", - "@angular/compiler-cli": "^20.3.16", - "@angular/language-service": "^20.3.16", + "@angular/build": "^20.3.20", + "@angular/cli": "^20.3.20", + "@angular/compiler-cli": "^20.3.20", + "@angular/language-service": "^20.3.20", "@capacitor/cli": "^8.0.0", "@ionic/angular-toolkit": "^12.0.0", "prettier": "^3.5.3", diff --git a/src/app/barcode-results/barcode-results.page.html b/src/app/barcode-results/barcode-results.page.html index 959d05a..beba5d3 100644 --- a/src/app/barcode-results/barcode-results.page.html +++ b/src/app/barcode-results/barcode-results.page.html @@ -8,54 +8,54 @@ @for (item of listItems; track item) { - - -

Result {{ $index + 1 }}

-
- @if (item.barcode.sourceImage !== null){ - - } - - - Count -

{{ item.count }}

-
-
- - - Format -

{{ item.barcode.format }}

-
-
- - - Text -

{{ item.barcode.text }}

-
-
- - - Extension -

{{ item.barcode.upcEanExtension === '' ? 'N/A' : item.barcode.upcEanExtension }}

-
-
- - - Raw bytes -

{{ item.barcode.rawBytes }}

-
-
- - - Parsed document -

- {{ getExtractedDocument(item.barcode.extractedDocument) }} -

-
-
-
+ + +

Result {{ $index + 1 }}

+
+ @if (item.barcode.sourceImage !== null){ + + } + + + Count +

{{ item.count }}

+
+
+ + + Format +

{{ item.barcode.format }}

+
+
+ + + Text +

{{ item.barcode.text }}

+
+
+ + + Extension +

{{ item.barcode.upcEanExtension === '' ? 'N/A' : item.barcode.upcEanExtension }}

+
+
+ + + Raw bytes +

{{ item.barcode.rawBytes }}

+
+
+ + + Parsed document +

+ {{ getExtractedDocument(item.barcode.extractedDocument) }} +

+
+
+
}
diff --git a/src/app/home/home.page.html b/src/app/home/home.page.html index 99b5de7..fb510de 100644 --- a/src/app/home/home.page.html +++ b/src/app/home/home.page.html @@ -15,6 +15,7 @@

BARCODE SCANNING

+ @@ -53,4 +54,3 @@

OTHER SDK METHODS

- diff --git a/src/app/home/home.page.ts b/src/app/home/home.page.ts index c6dae15..e057a18 100644 --- a/src/app/home/home.page.ts +++ b/src/app/home/home.page.ts @@ -17,6 +17,7 @@ import { RtuSingleScanningFeatureComponent } from '../scanbotsdk-features/rtu-si import { RtuSingleScanningWithImageResultsFeatureComponent } from '../scanbotsdk-features/rtu-single-scanning-with-image-results.component'; import { RtuMultiScanningFeatureComponent } from '../scanbotsdk-features/rtu-multi-scanning-feature.component'; import { RtuMultiArScanningFeatureComponent } from '../scanbotsdk-features/rtu-multi-ar-scanning-feature.component'; +import { RtuScanAndCountFeatureComponent } from '../scanbotsdk-features/rtu-scan-and-count-feature.component'; import { RtuFindAndPickScanningFeatureComponent } from '../scanbotsdk-features/rtu-find-and-pick-scanning-feature.component'; import { ScanBarcodesFromImageFeatureComponent } from '../scanbotsdk-features/scan-barcodes-from-image-feature.component'; import { ScanBarcodesOnPdfFeatureComponent } from '../scanbotsdk-features/scan-barcodes-from-pdf.component'; @@ -37,7 +38,6 @@ import { ScanbotBarcodeSDK } from 'capacitor-plugin-scanbot-barcode-scanner-sdk' IonList, IonItem, IonLabel, - IonFooter, RtuSingleScanningFeatureComponent, RtuSingleScanningWithImageResultsFeatureComponent, RtuMultiScanningFeatureComponent, @@ -47,6 +47,7 @@ import { ScanbotBarcodeSDK } from 'capacitor-plugin-scanbot-barcode-scanner-sdk' ScanBarcodesOnPdfFeatureComponent, LicenseInfoFeatureComponent, StorageCleanupFeatureComponent, + RtuScanAndCountFeatureComponent, ], }) export class HomePage { diff --git a/src/app/scanbotsdk-features/license-info-feature.component.ts b/src/app/scanbotsdk-features/license-info-feature.component.ts index 048fcb2..64a6908 100644 --- a/src/app/scanbotsdk-features/license-info-feature.component.ts +++ b/src/app/scanbotsdk-features/license-info-feature.component.ts @@ -1,7 +1,5 @@ import { Component } from '@angular/core'; import { IonItem, IonLabel } from '@ionic/angular/standalone'; - -import { FeatureId } from 'src/app/utils/scanbot-utils'; import { ScanbotSdkFeatureComponent } from './scanbotsdk-feature/scanbotsdk-feature.component'; import { ScanbotBarcodeSDK } from 'capacitor-plugin-scanbot-barcode-scanner-sdk'; @@ -14,7 +12,6 @@ import { ScanbotBarcodeSDK } from 'capacitor-plugin-scanbot-barcode-scanner-sdk' }) export class LicenseInfoFeatureComponent extends ScanbotSdkFeatureComponent { override feature = { - id: FeatureId.LicenseInfo, title: 'View License Info', }; diff --git a/src/app/scanbotsdk-features/rtu-find-and-pick-scanning-feature.component.ts b/src/app/scanbotsdk-features/rtu-find-and-pick-scanning-feature.component.ts index 5b07425..7a5a225 100644 --- a/src/app/scanbotsdk-features/rtu-find-and-pick-scanning-feature.component.ts +++ b/src/app/scanbotsdk-features/rtu-find-and-pick-scanning-feature.component.ts @@ -2,7 +2,7 @@ import { Component, inject } from '@angular/core'; import { IonItem, IonLabel } from '@ionic/angular/standalone'; import { Router } from '@angular/router'; -import { FeatureId, ScanbotUtils } from 'src/app/utils/scanbot-utils'; +import { ScanbotUtils } from '../utils/scanbot-utils'; import { ScanbotSdkFeatureComponent } from './scanbotsdk-feature/scanbotsdk-feature.component'; import { @@ -21,7 +21,6 @@ import { }) export class RtuFindAndPickScanningFeatureComponent extends ScanbotSdkFeatureComponent { override feature = { - id: FeatureId.RtuFindAndPickScanning, title: 'RTU UI Find And Pick Scanning', }; private scanbotUtils = inject(ScanbotUtils); diff --git a/src/app/scanbotsdk-features/rtu-multi-ar-scanning-feature.component.ts b/src/app/scanbotsdk-features/rtu-multi-ar-scanning-feature.component.ts index 68cccd0..68f1a83 100644 --- a/src/app/scanbotsdk-features/rtu-multi-ar-scanning-feature.component.ts +++ b/src/app/scanbotsdk-features/rtu-multi-ar-scanning-feature.component.ts @@ -2,7 +2,7 @@ import { Component, inject } from '@angular/core'; import { IonItem, IonLabel } from '@ionic/angular/standalone'; import { Router } from '@angular/router'; -import { FeatureId, ScanbotUtils } from 'src/app/utils/scanbot-utils'; +import { ScanbotUtils } from 'src/app/utils/scanbot-utils'; import { ScanbotSdkFeatureComponent } from './scanbotsdk-feature/scanbotsdk-feature.component'; import { @@ -20,7 +20,6 @@ import { }) export class RtuMultiArScanningFeatureComponent extends ScanbotSdkFeatureComponent { override feature = { - id: FeatureId.RtuMultiArScanning, title: 'RTU UI Multi AR Scanning', }; private scanbotUtils = inject(ScanbotUtils); diff --git a/src/app/scanbotsdk-features/rtu-multi-scanning-feature.component.ts b/src/app/scanbotsdk-features/rtu-multi-scanning-feature.component.ts index 8988efc..b5a6c5c 100644 --- a/src/app/scanbotsdk-features/rtu-multi-scanning-feature.component.ts +++ b/src/app/scanbotsdk-features/rtu-multi-scanning-feature.component.ts @@ -2,7 +2,7 @@ import { Component, inject } from '@angular/core'; import { IonItem, IonLabel } from '@ionic/angular/standalone'; import { Router } from '@angular/router'; -import { FeatureId, ScanbotUtils } from 'src/app/utils/scanbot-utils'; +import { ScanbotUtils } from 'src/app/utils/scanbot-utils'; import { ScanbotSdkFeatureComponent } from './scanbotsdk-feature/scanbotsdk-feature.component'; import { @@ -21,7 +21,6 @@ import { }) export class RtuMultiScanningFeatureComponent extends ScanbotSdkFeatureComponent { override feature = { - id: FeatureId.RtuMultiScanning, title: 'RTU UI Multi Scanning', }; private scanbotUtils = inject(ScanbotUtils); diff --git a/src/app/scanbotsdk-features/rtu-scan-and-count-feature.component.ts b/src/app/scanbotsdk-features/rtu-scan-and-count-feature.component.ts new file mode 100644 index 0000000..18e25f4 --- /dev/null +++ b/src/app/scanbotsdk-features/rtu-scan-and-count-feature.component.ts @@ -0,0 +1,116 @@ +import { Component, inject } from '@angular/core'; +import { IonItem, IonLabel } from '@ionic/angular/standalone'; +import { ScanbotSdkFeatureComponent } from './scanbotsdk-feature/scanbotsdk-feature.component'; +import { ScanbotUtils } from '../utils/scanbot-utils'; +import { Router } from '@angular/router'; +import { + BarcodeFormatCommonConfiguration, + BarcodeMappedData, + BarcodeScannerScreenConfiguration, + MultipleScanningMode, + ScanbotBarcode, +} from 'capacitor-plugin-scanbot-barcode-scanner-sdk'; + +@Component({ + selector: 'app-rtu-scan-and-count-feature', + templateUrl: './scanbotsdk-feature/scanbotsdk-feature.component.html', + styleUrls: ['./scanbotsdk-feature/scanbotsdk-feature.component.scss'], + imports: [IonItem, IonLabel], +}) +export class RtuScanAndCountFeatureComponent extends ScanbotSdkFeatureComponent { + override feature = { + title: 'RTU UI Scan And Count', + }; + private scanbotUtils = inject(ScanbotUtils); + private router = inject(Router); + + override async featureClicked() { + // Always make sure you have a valid license on runtime via ScanbotBarcodeSDK.getLicenseInfo() + if (!(await this.isLicenseValid())) { + return; + } + + // Create the default configuration object. + const config = new BarcodeScannerScreenConfiguration(); + + // Initialize the use case for multiple scanning. + config.useCase = new MultipleScanningMode(); + + // Set the counting mode. + config.useCase.mode = 'COUNTING'; + + // Set the sheet mode for the barcodes preview. + config.useCase.sheet.mode = 'COLLAPSED_SHEET'; + + // Set the height for the collapsed sheet. + config.useCase.sheet.collapsedVisibleHeight = 'LARGE'; + + // Enable manual count change. + config.useCase.sheetContent.manualCountChangeEnabled = true; + + // Set the delay before same barcode counting repeat. + config.useCase.countingRepeatDelay = 1000; + + // Configure the submit button. + config.useCase.sheetContent.submitButton.text = 'Submit'; + config.useCase.sheetContent.submitButton.foreground.color = '#000000'; + + // Implement mapping for the barcode item information + config.useCase.barcodeInfoMapping.barcodeItemMapper = (barcodeItem, onResult, onError) => { + /** TODO: process scan result as needed to get your mapped data, + * e.g. query your server to get product image, title and subtitle. + * + * Note: The built-in fetch API won't work properly in this case. + * To request from the server, please use XMLHttpRequest API or another 3rd party library such as axios. + * + * See example below. + */ + const title = `Some product ${barcodeItem.text}`; + const subtitle = barcodeItem.format; + + // If image from URL is used, on Android platform INTERNET permission is required. + const image = 'https://avatars.githubusercontent.com/u/1454920'; + // To show captured barcode image use BarcodeMappedData.barcodeImageKey + // const image = BarcodeMappedData.barcodeImageKey; + + /** Call onError() in case of error during obtaining mapped data. */ + if (barcodeItem.text === 'Error occurred!') { + onError(); + } else { + onResult(new BarcodeMappedData({ title: title, subtitle: subtitle, barcodeImage: image })); + } + }; + + // Configure other parameters, pertaining to multiple-scanning mode as needed. + + // Set an array of accepted barcode types. + config.scannerConfiguration.barcodeFormatConfigurations = [ + new BarcodeFormatCommonConfiguration({ + formats: await this.scanbotUtils.getAcceptedBarcodeFormats(), + }), + ]; + config.scannerConfiguration.extractedDocumentFormats = + await this.scanbotUtils.getAcceptedBarcodeDocumentFormats(); + + // Configure other parameters as needed. + + try { + const result = await ScanbotBarcode.startScanner(config); + + if (result.status === 'OK' && result.data) { + // Handle the scanned barcode from the result + // Get JSON parcelable barcode items + const resultContainer = await Promise.all( + result.data.items.map(async (item) => ({ + ...(await item.barcode.serialize()), + count: item.count, + })), + ); + + await this.router.navigate(['/barcode-results', JSON.stringify(resultContainer)]); + } + } catch (error: any) { + await this.utils.showErrorAlert(error); + } + } +} diff --git a/src/app/scanbotsdk-features/rtu-single-scanning-feature.component.ts b/src/app/scanbotsdk-features/rtu-single-scanning-feature.component.ts index f0fb1da..fe23510 100644 --- a/src/app/scanbotsdk-features/rtu-single-scanning-feature.component.ts +++ b/src/app/scanbotsdk-features/rtu-single-scanning-feature.component.ts @@ -2,7 +2,7 @@ import { Component, inject } from '@angular/core'; import { IonItem, IonLabel } from '@ionic/angular/standalone'; import { Router } from '@angular/router'; -import { FeatureId, ScanbotUtils } from 'src/app/utils/scanbot-utils'; +import { ScanbotUtils } from 'src/app/utils/scanbot-utils'; import { ScanbotSdkFeatureComponent } from './scanbotsdk-feature/scanbotsdk-feature.component'; import { @@ -20,7 +20,6 @@ import { }) export class RtuSingleScanningFeatureComponent extends ScanbotSdkFeatureComponent { override feature = { - id: FeatureId.RtuSingleScanning, title: 'RTU UI Single Scanning', }; private scanbotUtils = inject(ScanbotUtils); diff --git a/src/app/scanbotsdk-features/rtu-single-scanning-with-image-results.component.ts b/src/app/scanbotsdk-features/rtu-single-scanning-with-image-results.component.ts index d167d8b..89dcb57 100644 --- a/src/app/scanbotsdk-features/rtu-single-scanning-with-image-results.component.ts +++ b/src/app/scanbotsdk-features/rtu-single-scanning-with-image-results.component.ts @@ -2,7 +2,7 @@ import { Component, inject } from '@angular/core'; import { IonItem, IonLabel } from '@ionic/angular/standalone'; import { Router } from '@angular/router'; -import { FeatureId, ScanbotUtils } from 'src/app/utils/scanbot-utils'; +import { ScanbotUtils } from 'src/app/utils/scanbot-utils'; import { ScanbotSdkFeatureComponent } from './scanbotsdk-feature/scanbotsdk-feature.component'; import { @@ -22,7 +22,6 @@ import { }) export class RtuSingleScanningWithImageResultsFeatureComponent extends ScanbotSdkFeatureComponent { override feature = { - id: FeatureId.RtuSingleScanning, title: 'RTU UI Single Scanning With Image Results', }; private scanbotUtils = inject(ScanbotUtils); diff --git a/src/app/scanbotsdk-features/scan-barcodes-from-image-feature.component.ts b/src/app/scanbotsdk-features/scan-barcodes-from-image-feature.component.ts index 2ad9fde..eb547f2 100644 --- a/src/app/scanbotsdk-features/scan-barcodes-from-image-feature.component.ts +++ b/src/app/scanbotsdk-features/scan-barcodes-from-image-feature.component.ts @@ -2,7 +2,7 @@ import { Component, inject } from '@angular/core'; import { IonItem, IonLabel } from '@ionic/angular/standalone'; import { Router } from '@angular/router'; -import { FeatureId, ScanbotUtils } from 'src/app/utils/scanbot-utils'; +import { ScanbotUtils } from 'src/app/utils/scanbot-utils'; import { ScanbotSdkFeatureComponent } from './scanbotsdk-feature/scanbotsdk-feature.component'; import { ImageUtils } from '../utils/image-utils'; @@ -21,7 +21,6 @@ import { }) export class ScanBarcodesFromImageFeatureComponent extends ScanbotSdkFeatureComponent { override feature = { - id: FeatureId.ScanBarcodesFromImage, title: 'Import Image & Scan Barcodes', }; private scanbotUtils = inject(ScanbotUtils); diff --git a/src/app/scanbotsdk-features/scan-barcodes-from-pdf.component.ts b/src/app/scanbotsdk-features/scan-barcodes-from-pdf.component.ts index 7fcd9dd..3c53093 100644 --- a/src/app/scanbotsdk-features/scan-barcodes-from-pdf.component.ts +++ b/src/app/scanbotsdk-features/scan-barcodes-from-pdf.component.ts @@ -2,7 +2,7 @@ import { Component, inject } from '@angular/core'; import { IonItem, IonLabel } from '@ionic/angular/standalone'; import { Router } from '@angular/router'; -import { FeatureId, ScanbotUtils } from 'src/app/utils/scanbot-utils'; +import { ScanbotUtils } from 'src/app/utils/scanbot-utils'; import { ScanbotSdkFeatureComponent } from './scanbotsdk-feature/scanbotsdk-feature.component'; import { @@ -21,7 +21,6 @@ import { FileUtils } from '../utils/file-utils'; }) export class ScanBarcodesOnPdfFeatureComponent extends ScanbotSdkFeatureComponent { override feature = { - id: FeatureId.ScanBarcodesFromPDF, title: 'Import PDF & Scan Barcodes', }; private scanbotUtils = inject(ScanbotUtils); diff --git a/src/app/scanbotsdk-features/storage-cleanup-feature.component.ts b/src/app/scanbotsdk-features/storage-cleanup-feature.component.ts index fa29259..0ef8b29 100644 --- a/src/app/scanbotsdk-features/storage-cleanup-feature.component.ts +++ b/src/app/scanbotsdk-features/storage-cleanup-feature.component.ts @@ -1,6 +1,5 @@ import { Component } from '@angular/core'; import { IonItem, IonLabel } from '@ionic/angular/standalone'; -import { FeatureId } from 'src/app/utils/scanbot-utils'; import { ScanbotSdkFeatureComponent } from './scanbotsdk-feature/scanbotsdk-feature.component'; import { ScanbotBarcodeSDK } from 'capacitor-plugin-scanbot-barcode-scanner-sdk'; @@ -13,7 +12,6 @@ import { ScanbotBarcodeSDK } from 'capacitor-plugin-scanbot-barcode-scanner-sdk' }) export class StorageCleanupFeatureComponent extends ScanbotSdkFeatureComponent { override feature = { - id: FeatureId.StorageCleanup, title: 'Cleanup SDK Storage', }; diff --git a/src/app/settings/barcode-document-formats/barcode-document-formats.page.html b/src/app/settings/barcode-document-formats/barcode-document-formats.page.html index 2b3238e..115846d 100644 --- a/src/app/settings/barcode-document-formats/barcode-document-formats.page.html +++ b/src/app/settings/barcode-document-formats/barcode-document-formats.page.html @@ -19,14 +19,14 @@ @for (document of documentSettings; track document.format) { - - - {{ document.format }} - - + + + {{ document.format }} + + } diff --git a/src/app/settings/barcode-formats/barcode-formats.page.html b/src/app/settings/barcode-formats/barcode-formats.page.html index 15686d0..1aed9ea 100644 --- a/src/app/settings/barcode-formats/barcode-formats.page.html +++ b/src/app/settings/barcode-formats/barcode-formats.page.html @@ -10,14 +10,14 @@ @for (barcode of barcodeSettings; track barcode.format) { - - - {{ barcode.format }} - - + + + {{ barcode.format }} + + } diff --git a/src/app/utils/scanbot-utils.ts b/src/app/utils/scanbot-utils.ts index 2894de0..d6f17d3 100644 --- a/src/app/utils/scanbot-utils.ts +++ b/src/app/utils/scanbot-utils.ts @@ -11,22 +11,9 @@ import { } from 'capacitor-plugin-scanbot-barcode-scanner-sdk'; export interface Feature { - id: FeatureId; title: string; } -export enum FeatureId { - RtuSingleScanning, - RtuSingleScanningWithImageResults, - RtuMultiScanning, - RtuMultiArScanning, - RtuFindAndPickScanning, - ScanBarcodesFromImage, - ScanBarcodesFromPDF, - LicenseInfo, - StorageCleanup, -} - type SupportedBarcodeFormat = Exclude; export interface BarcodeSetting { diff --git a/src/codeSnippets/result-handling/image-ref-buffer-serialization.ts b/src/codeSnippets/result-handling/image-ref-buffer-serialization.ts new file mode 100644 index 0000000..b17f1a5 --- /dev/null +++ b/src/codeSnippets/result-handling/image-ref-buffer-serialization.ts @@ -0,0 +1,31 @@ +import { autorelease, ImageRef } from 'capacitor-plugin-scanbot-barcode-scanner-sdk'; + +async function imageRefBufferSerialization(imageFileUri: string) { + await autorelease(async () => { + /* + * An example ref created from an image file URI, an image buffer or, obtained from a previous operation. + * This is just an example, you can create an image reference from various sources as needed. + */ + const exampleRef = await ImageRef.fromImageFileUri(imageFileUri); + if (exampleRef !== null) { + /* + * The `serialize()` method allows you to serialize the image reference. + * - Useful for storing the image reference in a format that can be easily transmitted or saved. + * - The serialized reference can be deserialized later to retrieve the original image reference. + */ + const serializedRef = await exampleRef.serialize('BUFFER'); + /* + * The `buffer` property of the serialized reference contains the actual image data in a base64 string format. + * This buffer can be used to reconstruct the image reference later when needed. + */ + console.log('Encoded buffer', serializedRef?.buffer); + + if (serializedRef !== null) { + /* + * The `ImageRef.from()` method allows you to create an image reference from the serialized data. + */ + const ref = ImageRef.from(serializedRef); + } + } + }); +} diff --git a/src/codeSnippets/result-handling/image-ref-from-buffer.ts b/src/codeSnippets/result-handling/image-ref-from-buffer.ts new file mode 100644 index 0000000..d14ec3a --- /dev/null +++ b/src/codeSnippets/result-handling/image-ref-from-buffer.ts @@ -0,0 +1,28 @@ +import { + autorelease, + BufferImageLoadOptions, + ImageRef, +} from 'capacitor-plugin-scanbot-barcode-scanner-sdk'; + +async function createImageRefFromBuffer(buffer: string) { + /* + * Creates an image reference from the provided buffer. + * + * - The image reference can be used in various Scanbot SDK operations that require an image input. + * - The buffer should contain valid image data in a supported format (e.g., JPEG, PNG). + * - An auto-release pool is used to manage memory efficiently when working with image references. + * - The image reference will be automatically released after the block of code is executed, preventing memory leaks. + */ + await autorelease(async () => { + const ref = await ImageRef.fromEncodedBuffer(buffer, new BufferImageLoadOptions()); + if (ref !== null) { + /* + * Use the image reference for further processing: + * + * - Pass it to Scanbot SDK functions that require an image input. + * - Save the image reference to a file. + * - Perform additional operations as needed. + */ + } + }); +} diff --git a/src/codeSnippets/result-handling/image-ref-from-file.ts b/src/codeSnippets/result-handling/image-ref-from-file.ts new file mode 100644 index 0000000..0050c10 --- /dev/null +++ b/src/codeSnippets/result-handling/image-ref-from-file.ts @@ -0,0 +1,24 @@ +import { autorelease, ImageRef } from 'capacitor-plugin-scanbot-barcode-scanner-sdk'; + +async function createImageRefFromFile(imageFileUri: string) { + /* + * Creates an image reference from the image file URI. + * + * - The image reference can be used in various Scanbot SDK operations that require an image input. + * - The image file URI should point to a valid image file in a supported format (e.g., JPEG, PNG). + * - An auto-release pool is used to manage memory efficiently when working with image references. + * - The image reference will be automatically released after the block of code is executed, preventing memory leaks. + */ + await autorelease(async () => { + const ref = await ImageRef.fromImageFileUri(imageFileUri); + if (ref !== null) { + /* + * Use the image reference for further processing: + * + * - Pass it to Scanbot SDK functions that require an image input. + * - Retrieve a base64 string from the image reference. + * - Perform additional operations as needed. + */ + } + }); +} diff --git a/src/codeSnippets/result-handling/image-ref-reference-serialization.ts b/src/codeSnippets/result-handling/image-ref-reference-serialization.ts new file mode 100644 index 0000000..542de38 --- /dev/null +++ b/src/codeSnippets/result-handling/image-ref-reference-serialization.ts @@ -0,0 +1,31 @@ +import { autorelease, ImageRef } from 'capacitor-plugin-scanbot-barcode-scanner-sdk'; + +async function imageRefReferenceSerialization(imageFileUri: string) { + await autorelease(async () => { + /* + * An example ref created from an image file URI, an image buffer or, obtained from a previous operation. + * This is just an example, you can create an image reference from various sources as needed. + */ + const exampleRef = await ImageRef.fromImageFileUri(imageFileUri); + if (exampleRef !== null) { + /* + * The `serialize()` method allows you to serialize the image reference. + * - Useful for storing the image reference in a format that can be easily transmitted or saved. + * - The serialized reference can be deserialized later to retrieve the original image reference. + */ + const serializedRef = await exampleRef.serialize('REFERENCE'); + /* + * The `uniqueId` property of the serialized reference contains a unique identifier for the image reference. + * This unique ID can be used to reference the image in future operations without needing to handle the actual image data directly. + */ + console.log('Serialized Ref UUID', serializedRef?.uniqueId); + + if (serializedRef !== null) { + /* + * The `ImageRef.from()` method allows you to create an image reference from the serialized data. + */ + const ref = ImageRef.from(serializedRef); + } + } + }); +} diff --git a/src/codeSnippets/result-handling/image-ref-usage.ts b/src/codeSnippets/result-handling/image-ref-usage.ts new file mode 100644 index 0000000..1eb95d6 --- /dev/null +++ b/src/codeSnippets/result-handling/image-ref-usage.ts @@ -0,0 +1,50 @@ +import { Directory, Filesystem } from '@capacitor/filesystem'; + +import { + autorelease, + EncodeImageOptions, + ImageRef, + SaveImageOptions, +} from 'capacitor-plugin-scanbot-barcode-scanner-sdk'; + +export async function imageRefUsage(imageFileUri: string) { + await autorelease(async () => { + const ref = await ImageRef.fromImageFileUri(imageFileUri); + if (ref !== null) { + /* + * The `info()` method retrieves information about the image reference. + * - Returns details such as dimensions, format, and file size. + * - Useful for validating the image or for further processing steps. + */ + const imageInfo = await ref.info(); + console.log('Image size', imageInfo?.maxByteSize); + + const path = await Filesystem.getUri({ path: '/saved_image.jpg', directory: Directory.Data }); + /* + * The `saveImage()` method allows you to save the image reference to a specified file path. + * - Useful for storing the processed image or for sharing it with other applications. + */ + const saveImageRefAtPath = await ref.saveImage( + path.uri, + new SaveImageOptions({ + quality: 80, + }), + ); + console.log('Is image saved successfully?', saveImageRefAtPath); + + /* + * The `encodeImage()` method encodes the image reference into a base64 format. + * - Useful for transmitting the image data over a network. + */ + const encodedBuffer = await ref.encodeImage(new EncodeImageOptions()); + console.log('Encoded buffer', encodedBuffer); + + /* + * The `serialize()` method allows you to serialize the image reference. + * - Useful for storing the image reference in a format that can be easily transmitted or saved. + * - The serialized reference can be deserialized later to retrieve the original image reference. + */ + const serializedRef = await ref.serialize('BUFFER'); + } + }); +} diff --git a/src/codeSnippets/rtuui/tiny-barcodes.ts b/src/codeSnippets/rtuui/tiny-barcodes.ts new file mode 100644 index 0000000..3f3ed6f --- /dev/null +++ b/src/codeSnippets/rtuui/tiny-barcodes.ts @@ -0,0 +1,23 @@ +import { + BarcodeScannerScreenConfiguration, + ScanbotBarcode, +} from 'capacitor-plugin-scanbot-barcode-scanner-sdk'; + +async function scanTinyBarcodes() { + // Create the default configuration object. + const config = new BarcodeScannerScreenConfiguration(); + + // Enable locking the focus at the minimum possible distance. + config.cameraConfiguration.minFocusDistanceLock = true; + + // Set the engine mode to 'NEXT_GEN_FAR_DISTANCE' to optimize for scanning tiny barcodes. + config.scannerConfiguration.engineMode = 'NEXT_GEN_FAR_DISTANCE'; + + // Configure other parameters as needed. + + try { + const barcodeScanningResult = await ScanbotBarcode.startScanner(config); + } catch (e) { + console.error(e); + } +} diff --git a/src/codeSnippets/rtuui/viewfinder.ts b/src/codeSnippets/rtuui/viewfinder.ts new file mode 100644 index 0000000..89a76a7 --- /dev/null +++ b/src/codeSnippets/rtuui/viewfinder.ts @@ -0,0 +1,23 @@ +import { + AspectRatio, + BarcodeScannerScreenConfiguration, + FinderCorneredStyle, +} from 'capacitor-plugin-scanbot-barcode-scanner-sdk'; + +function configureViewfinder() { + // Create the default configuration object. + const config = new BarcodeScannerScreenConfiguration(); + + // Show the view finder + config.viewFinder.visible = true; + // Set the aspect ratio of the view finder + config.viewFinder.aspectRatio = new AspectRatio({ width: 16.0, height: 9.0 }); + config.viewFinder.style = new FinderCorneredStyle({ + // Set the color of the view finder corners + strokeColor: '#ff0005', + // Set the width of the view finder corners + strokeWidth: 10.0, + }); + + // Configure other parameters as needed. +} diff --git a/src/codeSnippets/scanner-configuration/configure-document-parsers.ts b/src/codeSnippets/scanner-configuration/configure-document-parsers.ts new file mode 100644 index 0000000..2218fe4 --- /dev/null +++ b/src/codeSnippets/scanner-configuration/configure-document-parsers.ts @@ -0,0 +1,26 @@ +import { + BarcodeFormatCommonConfiguration, + BarcodeScannerConfiguration, +} from 'capacitor-plugin-scanbot-barcode-scanner-sdk'; + +export function configureDocumentParsers() { + const barcodeScannerConfiguration = new BarcodeScannerConfiguration({ + barcodeFormatConfigurations: [new BarcodeFormatCommonConfiguration({})], + // Example of adding a specific configuration for parsed documents + extractedDocumentFormats: [ + 'AAMVA', + 'BOARDING_PASS', + 'DE_MEDICAL_PLAN', + 'MEDICAL_CERTIFICATE', + 'ID_CARD_PDF_417', + 'SEPA', + 'SWISS_QR', + 'VCARD', + 'GS1', + 'HIBC', + ], + // Set to true if you want to only accept barcode with parsed documents + onlyAcceptDocuments: true, + engineMode: 'NEXT_GEN', + }); +} diff --git a/src/codeSnippets/scanner-configuration/filter-barcodes-regex.ts b/src/codeSnippets/scanner-configuration/filter-barcodes-regex.ts new file mode 100644 index 0000000..a839b4c --- /dev/null +++ b/src/codeSnippets/scanner-configuration/filter-barcodes-regex.ts @@ -0,0 +1,30 @@ +import { + BarcodeFormatCommonConfiguration, + BarcodeFormatConfigurationBase, + BarcodeFormats, + BarcodeScannerConfiguration, +} from 'capacitor-plugin-scanbot-barcode-scanner-sdk'; + +export function filterBarcodesRegex() { + const configs: BarcodeFormatConfigurationBase[] = []; + const baseFormatConfig = new BarcodeFormatCommonConfiguration({ + // You can set a regex filter here to limit the barcodes that will be scanned + // Here is an example of a regex that matches only barcodes that contain numbers from 0 to 5 + regexFilter: '\\b[0-5]+\\b', + minimum1DQuietZoneSize: 10, + stripCheckDigits: false, + minimumTextLength: 0, + maximumTextLength: 0, + gs1Handling: 'PARSE', + strictMode: true, + formats: BarcodeFormats.common, + addAdditionalQuietZone: false, + }); + + configs.push(baseFormatConfig); + + const barcodeScannerConfiguration = new BarcodeScannerConfiguration({ + barcodeFormatConfigurations: configs, + engineMode: 'NEXT_GEN', + }); +} diff --git a/src/codeSnippets/scanner-configuration/filter-group-barcodes.ts b/src/codeSnippets/scanner-configuration/filter-group-barcodes.ts new file mode 100644 index 0000000..7aaa1a9 --- /dev/null +++ b/src/codeSnippets/scanner-configuration/filter-group-barcodes.ts @@ -0,0 +1,18 @@ +import { + BarcodeFormatCommonConfiguration, + BarcodeFormats, +} from 'capacitor-plugin-scanbot-barcode-scanner-sdk'; + +export function filterGroupBarcodes() { + const baseConfig = new BarcodeFormatCommonConfiguration({ + regexFilter: '', + minimum1DQuietZoneSize: 10, + stripCheckDigits: false, + minimumTextLength: 0, + maximumTextLength: 0, + gs1Handling: 'PARSE', + strictMode: true, + formats: BarcodeFormats.common, + addAdditionalQuietZone: false, + }); +} diff --git a/src/codeSnippets/scanner-configuration/filter-individual-barcodes.ts b/src/codeSnippets/scanner-configuration/filter-individual-barcodes.ts new file mode 100644 index 0000000..bdc4b32 --- /dev/null +++ b/src/codeSnippets/scanner-configuration/filter-individual-barcodes.ts @@ -0,0 +1,86 @@ +import { + BarcodeFormatAustraliaPostConfiguration, + BarcodeFormatCode11Configuration, + BarcodeFormatCode2Of5Configuration, + BarcodeFormatCommonConfiguration, + BarcodeFormatConfigurationBase, + BarcodeFormatMsiPlesseyConfiguration, + BarcodeFormats, + BarcodeScannerConfiguration, +} from 'capacitor-plugin-scanbot-barcode-scanner-sdk'; + +export default function filterIndividualBarcodes() { + const configs: BarcodeFormatConfigurationBase[] = []; + const baseConfig = new BarcodeFormatCommonConfiguration({ + regexFilter: '', + minimum1DQuietZoneSize: 10, + stripCheckDigits: false, + minimumTextLength: 0, + maximumTextLength: 0, + gs1Handling: 'PARSE', + strictMode: true, + formats: BarcodeFormats.common, + addAdditionalQuietZone: false, + }); + configs.push(baseConfig); + + // Add individual configurations for specific barcode formats + const australiaPostConfig = new BarcodeFormatAustraliaPostConfiguration({ + regexFilter: '', + australiaPostCustomerFormat: 'ALPHA_NUMERIC', + }); + configs.push(australiaPostConfig); + + const msiPlesseyConfig = new BarcodeFormatMsiPlesseyConfiguration({ + regexFilter: '', + minimum1DQuietZoneSize: 10, + stripCheckDigits: false, + minimumTextLength: 0, + maximumTextLength: 0, + checksumAlgorithms: ['MOD_10'], + }); + configs.push(msiPlesseyConfig); + + const code11Config = new BarcodeFormatCode11Configuration({ + regexFilter: '', + minimum1DQuietZoneSize: 10, + stripCheckDigits: false, + minimumTextLength: 0, + maximumTextLength: 0, + checksum: true, + }); + configs.push(code11Config); + + const code2Of5Config = new BarcodeFormatCode2Of5Configuration({ + regexFilter: '', + minimum1DQuietZoneSize: 10, + stripCheckDigits: false, + minimumTextLength: 0, + maximumTextLength: 0, + iata2of5: true, + code25: false, + industrial2of5: false, + useIATA2OF5Checksum: true, + }); + configs.push(code2Of5Config); + + // Set the configurations to the barcode scanner + const barcodeScannerConfiguration = new BarcodeScannerConfiguration({ + barcodeFormatConfigurations: configs, + extractedDocumentFormats: [ + 'AAMVA', + 'BOARDING_PASS', + 'DE_MEDICAL_PLAN', + 'MEDICAL_CERTIFICATE', + 'ID_CARD_PDF_417', + 'SEPA', + 'SWISS_QR', + 'VCARD', + 'GS1', + 'HIBC', + ], + onlyAcceptDocuments: false, + engineMode: 'NEXT_GEN', + returnBarcodeImage: true, + }); +}