Skip to content

Apply Butil improvements (#12393)#12419

Open
msynk wants to merge 2 commits into
bitfoundation:developfrom
msynk:12393-butil-improvements
Open

Apply Butil improvements (#12393)#12419
msynk wants to merge 2 commits into
bitfoundation:developfrom
msynk:12393-butil-improvements

Conversation

@msynk
Copy link
Copy Markdown
Member

@msynk msynk commented May 31, 2026

closes #12393

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 31, 2026

Important

Review skipped

Too many files!

This PR contains 225 files, which is 75 over the limit of 150.

To get a review, narrow the scope:
• coderabbit review --type committed # exclude uncommitted changes
• coderabbit review --dir # limit to a subdirectory
• coderabbit review --base # compare against a closer base

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: e6ee0261-3e9a-4715-83b6-7a0b44747842

📥 Commits

Reviewing files that changed from the base of the PR and between 046d116 and 452dfc7.

📒 Files selected for processing (225)
  • src/Butil/Bit.Butil/BitButil.cs
  • src/Butil/Bit.Butil/Extensions/InternalJSRuntimeExtensions.cs
  • src/Butil/Bit.Butil/Extensions/JSRuntimeExtensions.cs
  • src/Butil/Bit.Butil/Internals/BroadcastChannel/BroadcastChannelListenersManager.cs
  • src/Butil/Bit.Butil/Internals/Events/DomClipboardEventListenersManager.cs
  • src/Butil/Bit.Butil/Internals/Events/DomCompositionEventListenersManager.cs
  • src/Butil/Bit.Butil/Internals/Events/DomDragEventListenersManager.cs
  • src/Butil/Bit.Butil/Internals/Events/DomEventArgs.cs
  • src/Butil/Bit.Butil/Internals/Events/DomEventDispatcher.cs
  • src/Butil/Bit.Butil/Internals/Events/DomEventListenersManager.cs
  • src/Butil/Bit.Butil/Internals/Events/DomFocusEventListenersManager.cs
  • src/Butil/Bit.Butil/Internals/Events/DomInputEventListenersManager.cs
  • src/Butil/Bit.Butil/Internals/Events/DomKeyboardEventListenersManager.cs
  • src/Butil/Bit.Butil/Internals/Events/DomMouseEventListenersManager.cs
  • src/Butil/Bit.Butil/Internals/Events/DomPointerEventListenersManager.cs
  • src/Butil/Bit.Butil/Internals/Events/DomTouchEventListenersManager.cs
  • src/Butil/Bit.Butil/Internals/Events/DomWheelEventListenersManager.cs
  • src/Butil/Bit.Butil/Internals/Fetch/FetchProgressListenersManager.cs
  • src/Butil/Bit.Butil/Internals/Geolocation/GeolocationListenersManager.cs
  • src/Butil/Bit.Butil/Internals/IdleDetector/IdleDetectorListenersManager.cs
  • src/Butil/Bit.Butil/Internals/IntersectionObserver/IntersectionObserverListenersManager.cs
  • src/Butil/Bit.Butil/Internals/MutationObserver/MutationObserverListenersManager.cs
  • src/Butil/Bit.Butil/Internals/Nfc/NdefListenersManager.cs
  • src/Butil/Bit.Butil/Internals/Notification/NotificationListenersManager.cs
  • src/Butil/Bit.Butil/Internals/Performance/PerformanceObserverListenersManager.cs
  • src/Butil/Bit.Butil/Internals/Reporting/ReportingListenersManager.cs
  • src/Butil/Bit.Butil/Internals/ResizeObserver/ResizeObserverListenersManager.cs
  • src/Butil/Bit.Butil/Internals/ServiceWorker/ServiceWorkerListenersManager.cs
  • src/Butil/Bit.Butil/Internals/SpeechRecognition/SpeechRecognitionListenersManager.cs
  • src/Butil/Bit.Butil/Internals/Storage/StorageListenersManager.cs
  • src/Butil/Bit.Butil/Internals/Window/MediaQueryListenersManager.cs
  • src/Butil/Bit.Butil/Publics/Animation/AnimationHandle.cs
  • src/Butil/Bit.Butil/Publics/Animation/AnimationKeyframes.cs
  • src/Butil/Bit.Butil/Publics/Animation/AnimationOptions.cs
  • src/Butil/Bit.Butil/Publics/Animation/ElementReferenceAnimationExtensions.cs
  • src/Butil/Bit.Butil/Publics/BackgroundSync.cs
  • src/Butil/Bit.Butil/Publics/Battery.cs
  • src/Butil/Bit.Butil/Publics/Battery/BatteryStatus.cs
  • src/Butil/Bit.Butil/Publics/BroadcastChannel.cs
  • src/Butil/Bit.Butil/Publics/CacheStorage.cs
  • src/Butil/Bit.Butil/Publics/CacheStorage/CachedResponse.cs
  • src/Butil/Bit.Butil/Publics/ContactPicker.cs
  • src/Butil/Bit.Butil/Publics/Contacts/ContactInfo.cs
  • src/Butil/Bit.Butil/Publics/Cookie.cs
  • src/Butil/Bit.Butil/Publics/Cookie/ButilCookie.cs
  • src/Butil/Bit.Butil/Publics/Cookie/CookieStoreItem.cs
  • src/Butil/Bit.Butil/Publics/CookieStore.cs
  • src/Butil/Bit.Butil/Publics/Crypto.cs
  • src/Butil/Bit.Butil/Publics/Crypto/EcKeyPair.cs
  • src/Butil/Bit.Butil/Publics/Crypto/RsaKeyPair.cs
  • src/Butil/Bit.Butil/Publics/Document.cs
  • src/Butil/Bit.Butil/Publics/Document/VisibilityState.cs
  • src/Butil/Bit.Butil/Publics/Element/ElementReferenceEventExtensions.cs
  • src/Butil/Bit.Butil/Publics/Events/ButilClipboardEventArgs.cs
  • src/Butil/Bit.Butil/Publics/Events/ButilCompositionEventArgs.cs
  • src/Butil/Bit.Butil/Publics/Events/ButilDragEventArgs.cs
  • src/Butil/Bit.Butil/Publics/Events/ButilEvents.cs
  • src/Butil/Bit.Butil/Publics/Events/ButilFocusEventArgs.cs
  • src/Butil/Bit.Butil/Publics/Events/ButilInputEventArgs.cs
  • src/Butil/Bit.Butil/Publics/Events/ButilPointerEventArgs.cs
  • src/Butil/Bit.Butil/Publics/Events/ButilSubscription.cs
  • src/Butil/Bit.Butil/Publics/Events/ButilTouchEventArgs.cs
  • src/Butil/Bit.Butil/Publics/Events/ButilWheelEventArgs.cs
  • src/Butil/Bit.Butil/Publics/EyeDropper.cs
  • src/Butil/Bit.Butil/Publics/Fetch.cs
  • src/Butil/Bit.Butil/Publics/Fetch/AbortableFetch.cs
  • src/Butil/Bit.Butil/Publics/Fetch/FetchProgress.cs
  • src/Butil/Bit.Butil/Publics/Fetch/FetchRequest.cs
  • src/Butil/Bit.Butil/Publics/Fetch/FetchResponse.cs
  • src/Butil/Bit.Butil/Publics/File/BlobInfo.cs
  • src/Butil/Bit.Butil/Publics/FileReader.cs
  • src/Butil/Bit.Butil/Publics/Geolocation.cs
  • src/Butil/Bit.Butil/Publics/Geolocation/GeolocationCoordinates.cs
  • src/Butil/Bit.Butil/Publics/Geolocation/GeolocationError.cs
  • src/Butil/Bit.Butil/Publics/Geolocation/GeolocationOptions.cs
  • src/Butil/Bit.Butil/Publics/Geolocation/GeolocationPosition.cs
  • src/Butil/Bit.Butil/Publics/History.cs
  • src/Butil/Bit.Butil/Publics/IdleDetector.cs
  • src/Butil/Bit.Butil/Publics/IdleDetector/IdleState.cs
  • src/Butil/Bit.Butil/Publics/IndexedDb.cs
  • src/Butil/Bit.Butil/Publics/IndexedDb/IndexedDbHandle.cs
  • src/Butil/Bit.Butil/Publics/IndexedDb/IndexedDbStoreSchema.cs
  • src/Butil/Bit.Butil/Publics/IntersectionObserver/IntersectionObserverEntry.cs
  • src/Butil/Bit.Butil/Publics/IntersectionObserver/IntersectionObserverExtensions.cs
  • src/Butil/Bit.Butil/Publics/IntersectionObserver/IntersectionObserverOptions.cs
  • src/Butil/Bit.Butil/Publics/Keyboard.cs
  • src/Butil/Bit.Butil/Publics/Locks/WebLockMode.cs
  • src/Butil/Bit.Butil/Publics/Locks/WebLockSnapshot.cs
  • src/Butil/Bit.Butil/Publics/MediaDevices.cs
  • src/Butil/Bit.Butil/Publics/MediaDevices/MediaDeviceInfo.cs
  • src/Butil/Bit.Butil/Publics/MediaDevices/MediaStreamHandle.cs
  • src/Butil/Bit.Butil/Publics/MutationObserver/MutationObserverExtensions.cs
  • src/Butil/Bit.Butil/Publics/MutationObserver/MutationObserverOptions.cs
  • src/Butil/Bit.Butil/Publics/MutationObserver/MutationRecord.cs
  • src/Butil/Bit.Butil/Publics/Navigator.cs
  • src/Butil/Bit.Butil/Publics/Navigator/ShareFile.cs
  • src/Butil/Bit.Butil/Publics/NetworkInformation.cs
  • src/Butil/Bit.Butil/Publics/NetworkInformation/NetworkConnectionStatus.cs
  • src/Butil/Bit.Butil/Publics/Nfc.cs
  • src/Butil/Bit.Butil/Publics/Nfc/NdefRecord.cs
  • src/Butil/Bit.Butil/Publics/Notification.cs
  • src/Butil/Bit.Butil/Publics/Notification/NotificationHandle.cs
  • src/Butil/Bit.Butil/Publics/ObjectUrls.cs
  • src/Butil/Bit.Butil/Publics/Performance.cs
  • src/Butil/Bit.Butil/Publics/Performance/PerformanceMemory.cs
  • src/Butil/Bit.Butil/Publics/Permissions.cs
  • src/Butil/Bit.Butil/Publics/Permissions/PermissionState.cs
  • src/Butil/Bit.Butil/Publics/Push.cs
  • src/Butil/Bit.Butil/Publics/Push/PushSubscriptionInfo.cs
  • src/Butil/Bit.Butil/Publics/Reporting.cs
  • src/Butil/Bit.Butil/Publics/Reporting/BrowserReport.cs
  • src/Butil/Bit.Butil/Publics/ResizeObserver/ResizeObserverBox.cs
  • src/Butil/Bit.Butil/Publics/ResizeObserver/ResizeObserverEntry.cs
  • src/Butil/Bit.Butil/Publics/ResizeObserver/ResizeObserverExtensions.cs
  • src/Butil/Bit.Butil/Publics/Screen.cs
  • src/Butil/Bit.Butil/Publics/ScreenOrientation.cs
  • src/Butil/Bit.Butil/Publics/ServiceWorker.cs
  • src/Butil/Bit.Butil/Publics/ServiceWorker/ServiceWorkerRegistrationInfo.cs
  • src/Butil/Bit.Butil/Publics/Speech/SpeechUtterance.cs
  • src/Butil/Bit.Butil/Publics/Speech/SpeechVoice.cs
  • src/Butil/Bit.Butil/Publics/SpeechRecognition.cs
  • src/Butil/Bit.Butil/Publics/SpeechRecognition/SpeechRecognitionOptions.cs
  • src/Butil/Bit.Butil/Publics/SpeechRecognition/SpeechRecognitionResult.cs
  • src/Butil/Bit.Butil/Publics/SpeechSynthesis.cs
  • src/Butil/Bit.Butil/Publics/Storage/ButilStorage.cs
  • src/Butil/Bit.Butil/Publics/Storage/StorageEvent.cs
  • src/Butil/Bit.Butil/Publics/StorageManager.cs
  • src/Butil/Bit.Butil/Publics/StorageManager/StorageEstimate.cs
  • src/Butil/Bit.Butil/Publics/UserAgent.cs
  • src/Butil/Bit.Butil/Publics/UserAgent/HighEntropyUserAgent.cs
  • src/Butil/Bit.Butil/Publics/UserAgent/UserAgentBrand.cs
  • src/Butil/Bit.Butil/Publics/VisualViewport.cs
  • src/Butil/Bit.Butil/Publics/WakeLock.cs
  • src/Butil/Bit.Butil/Publics/WebAudio.cs
  • src/Butil/Bit.Butil/Publics/WebAudio/AudioPlaybackHandle.cs
  • src/Butil/Bit.Butil/Publics/WebLocks.cs
  • src/Butil/Bit.Butil/Publics/Window.cs
  • src/Butil/Bit.Butil/Publics/Window/WindowSelection.cs
  • src/Butil/Bit.Butil/Scripts/animation.ts
  • src/Butil/Bit.Butil/Scripts/backgroundSync.ts
  • src/Butil/Bit.Butil/Scripts/battery.ts
  • src/Butil/Bit.Butil/Scripts/broadcastChannel.ts
  • src/Butil/Bit.Butil/Scripts/cacheStorage.ts
  • src/Butil/Bit.Butil/Scripts/contactPicker.ts
  • src/Butil/Bit.Butil/Scripts/cookieStore.ts
  • src/Butil/Bit.Butil/Scripts/crypto.ts
  • src/Butil/Bit.Butil/Scripts/document.ts
  • src/Butil/Bit.Butil/Scripts/element.ts
  • src/Butil/Bit.Butil/Scripts/events.ts
  • src/Butil/Bit.Butil/Scripts/eyeDropper.ts
  • src/Butil/Bit.Butil/Scripts/fetch.ts
  • src/Butil/Bit.Butil/Scripts/fileReader.ts
  • src/Butil/Bit.Butil/Scripts/geolocation.ts
  • src/Butil/Bit.Butil/Scripts/idleDetector.ts
  • src/Butil/Bit.Butil/Scripts/indexedDb.ts
  • src/Butil/Bit.Butil/Scripts/intersectionObserver.ts
  • src/Butil/Bit.Butil/Scripts/keyboard.ts
  • src/Butil/Bit.Butil/Scripts/mediaDevices.ts
  • src/Butil/Bit.Butil/Scripts/mutationObserver.ts
  • src/Butil/Bit.Butil/Scripts/navigator.ts
  • src/Butil/Bit.Butil/Scripts/networkInformation.ts
  • src/Butil/Bit.Butil/Scripts/nfc.ts
  • src/Butil/Bit.Butil/Scripts/notification.ts
  • src/Butil/Bit.Butil/Scripts/objectUrls.ts
  • src/Butil/Bit.Butil/Scripts/performance.ts
  • src/Butil/Bit.Butil/Scripts/permissions.ts
  • src/Butil/Bit.Butil/Scripts/push.ts
  • src/Butil/Bit.Butil/Scripts/reporting.ts
  • src/Butil/Bit.Butil/Scripts/resizeObserver.ts
  • src/Butil/Bit.Butil/Scripts/serviceWorker.ts
  • src/Butil/Bit.Butil/Scripts/speech.ts
  • src/Butil/Bit.Butil/Scripts/speechRecognition.ts
  • src/Butil/Bit.Butil/Scripts/storage.ts
  • src/Butil/Bit.Butil/Scripts/storageManager.ts
  • src/Butil/Bit.Butil/Scripts/userAgent.ts
  • src/Butil/Bit.Butil/Scripts/utils.ts
  • src/Butil/Bit.Butil/Scripts/wakeLock.ts
  • src/Butil/Bit.Butil/Scripts/webAudio.ts
  • src/Butil/Bit.Butil/Scripts/webLocks.ts
  • src/Butil/Bit.Butil/Scripts/window.ts
  • src/Butil/Demo/Bit.Butil.Demo.Core/Pages/ClipboardPage.razor
  • src/Butil/Demo/Bit.Butil.Demo.Core/Pages/ConsolePage.razor
  • src/Butil/Demo/Bit.Butil.Demo.Core/Pages/CookiePage.razor
  • src/Butil/Demo/Bit.Butil.Demo.Core/Pages/CryptoPage.razor
  • src/Butil/Demo/Bit.Butil.Demo.Core/Pages/DocumentPage.razor
  • src/Butil/Demo/Bit.Butil.Demo.Core/Pages/E2EObserversPage.razor
  • src/Butil/Demo/Bit.Butil.Demo.Core/Pages/E2EPage.razor
  • src/Butil/Demo/Bit.Butil.Demo.Core/Pages/ElementPage.razor
  • src/Butil/Demo/Bit.Butil.Demo.Core/Pages/HistoryPage.razor
  • src/Butil/Demo/Bit.Butil.Demo.Core/Pages/Index.razor
  • src/Butil/Demo/Bit.Butil.Demo.Core/Pages/KeyboardPage.razor
  • src/Butil/Demo/Bit.Butil.Demo.Core/Pages/LocationPage.razor
  • src/Butil/Demo/Bit.Butil.Demo.Core/Pages/NavigatorPage.razor
  • src/Butil/Demo/Bit.Butil.Demo.Core/Pages/NotificationPage.razor
  • src/Butil/Demo/Bit.Butil.Demo.Core/Pages/ScreenOrientationPage.razor
  • src/Butil/Demo/Bit.Butil.Demo.Core/Pages/ScreenPage.razor
  • src/Butil/Demo/Bit.Butil.Demo.Core/Pages/StoragePage.razor
  • src/Butil/Demo/Bit.Butil.Demo.Core/Pages/UserAgentPage.razor
  • src/Butil/Demo/Bit.Butil.Demo.Core/Pages/VisualViewportPage.razor
  • src/Butil/Demo/Bit.Butil.Demo.Core/Pages/WebAuthnPage.razor
  • src/Butil/Demo/Bit.Butil.Demo.Core/Pages/WindowPage.razor
  • src/Butil/Demo/Bit.Butil.Demo.Core/Shared/DemoCard.razor
  • src/Butil/Demo/Bit.Butil.Demo.Core/Shared/DemoConsole.razor
  • src/Butil/Demo/Bit.Butil.Demo.Core/Shared/Header.razor
  • src/Butil/Demo/Bit.Butil.Demo.Core/Shared/Header.razor.css
  • src/Butil/Demo/Bit.Butil.Demo.Core/Shared/MainLayout.razor
  • src/Butil/Demo/Bit.Butil.Demo.Core/Shared/NavMenu.razor
  • src/Butil/Demo/Bit.Butil.Demo.Core/Shared/PageHeader.razor
  • src/Butil/Demo/Bit.Butil.Demo.Core/wwwroot/app.css
  • src/Butil/Demo/Bit.Butil.Demo.Maui/wwwroot/index.html
  • src/Butil/Demo/Bit.Butil.Demo.Web/wwwroot/index.html
  • src/Butil/tests/Bit.Butil.E2ETests/Bit.Butil.E2ETests.csproj
  • src/Butil/tests/Bit.Butil.E2ETests/BroadcastAndIndexedDbTests.cs
  • src/Butil/tests/Bit.Butil.E2ETests/CookieTests.cs
  • src/Butil/tests/Bit.Butil.E2ETests/CryptoTests.cs
  • src/Butil/tests/Bit.Butil.E2ETests/Infrastructure/ButilHarnessTestBase.cs
  • src/Butil/tests/Bit.Butil.E2ETests/Infrastructure/ButilObserversPageTest.cs
  • src/Butil/tests/Bit.Butil.E2ETests/Infrastructure/ButilPageTest.cs
  • src/Butil/tests/Bit.Butil.E2ETests/Infrastructure/DemoServerFixture.cs
  • src/Butil/tests/Bit.Butil.E2ETests/ObserverTests.cs
  • src/Butil/tests/Bit.Butil.E2ETests/PerformanceAndPlatformTests.cs
  • src/Butil/tests/Bit.Butil.E2ETests/README.md
  • src/Butil/tests/Bit.Butil.E2ETests/StorageTests.cs
  • src/Butil/tests/Bit.Butil.E2ETests/WindowDocumentHistoryTests.cs
  • src/Butil/tests/Bit.Butil.E2ETests/ci/bit.ci.Butil.e2e.yml

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@msynk
Copy link
Copy Markdown
Member Author

msynk commented Jun 1, 2026

@coderabbitai re-review

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Jun 1, 2026

@msynk Sure, I'll re-review the changes now!

✅ Actions performed

Full review triggered.

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR delivers a large set of "Butil improvements" (closes #12393). It expands the Bit.Butil JS-interop surface with many new Web-API wrappers (Battery, BroadcastChannel, ContactPicker, EyeDropper, Fetch, FileReader, Geolocation, IdleDetector, IndexedDb, MediaDevices, Mutation/Resize/Intersection Observers, NetworkInformation, Nfc, ObjectUrls, Performance, Permissions, Push, Reporting, SpeechRecognition/Synthesis, StorageManager, WakeLock, WebAudio, WebLocks, CookieStore, etc.), refactors the demo project (new MainLayout/NavMenu, DemoCard/DemoConsole/PageHeader shared components, redesigned Index/Keyboard/UserAgent pages), and adds a new end-to-end test project plus a CI workflow.

Changes:

  • Adds ~40 new public service classes plus matching listener managers, DTOs, and TypeScript modules implementing the wrappers.
  • Reworks the Butil demo UI shell and several pages, drops the old Header.razor/CSS, and swaps _content/Bit.Butil.Demo.Core/app.css into the host HTML.
  • Adds Bit.Butil.E2ETests Playwright/NUnit suite (and CI workflow) plus tweaks JSRuntimeExtensions / BitButil.cs (service lifetime change to Scoped, simplified runtime-validity check, no longer swallowing JsonException).

Reviewed changes

Copilot reviewed 225 out of 225 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
src/Butil/Bit.Butil/BitButil.cs Switches all service registrations from Transient to Scoped and registers the many new services.
src/Butil/Bit.Butil/Extensions/{InternalJSRuntimeExtensions,JSRuntimeExtensions}.cs Simplifies runtime-validity detection and stops swallowing JsonException in FastInvoke*.
src/Butil/Bit.Butil/Publics/**/*.cs Adds wrapper classes (Fetch, Push, Permissions, WakeLock, MediaDevices, Nfc, …) and DTOs/handles.
src/Butil/Bit.Butil/Internals/**/*ListenersManager.cs New static managers for the corresponding listener types, with [JSInvokable] callbacks.
src/Butil/Bit.Butil/Scripts/*.ts New TS modules implementing every JS-side counterpart, plus tweaks to existing events.ts, keyboard.ts, navigator.ts, storage.ts, userAgent.ts, utils.ts, document.ts.
src/Butil/Bit.Butil/Publics/{History,Screen,ScreenOrientation,VisualViewport,Keyboard,Notification}.cs Adds Subscribe* variants returning ButilSubscription, plus tracked-notification and element-scoped keyboard.
src/Butil/Bit.Butil/Publics/Cookie.cs Hardens parsing of empty / malformed cookie strings.
src/Butil/Demo/Bit.Butil.Demo.Core/Shared/* Replaces Header.razor with new MainLayout/NavMenu and adds DemoCard/DemoConsole/PageHeader.
src/Butil/Demo/Bit.Butil.Demo.Core/Pages/{Index,Keyboard,UserAgent}.razor Redesigns landing and a couple of demo pages around the new shared components.
src/Butil/Demo/Bit.Butil.Demo.{Web,Maui}/wwwroot/index.html Pulls in the new shared app.css.
src/Butil/tests/Bit.Butil.E2ETests/** New Playwright/NUnit test project, infrastructure, page-scoped bases, README, CI workflow.

Comment thread src/Butil/Bit.Butil/Publics/MutationObserver/MutationRecord.cs Outdated
Comment thread src/Butil/Demo/Bit.Butil.Demo.Core/Pages/UserAgentPage.razor
Comment thread src/Butil/Bit.Butil/BitButil.cs
Comment thread src/Butil/Bit.Butil/Publics/Fetch.cs
Comment thread src/Butil/Bit.Butil/Publics/Navigator/ShareFile.cs
@msynk msynk requested a review from Copilot June 2, 2026 19:40
@msynk
Copy link
Copy Markdown
Member Author

msynk commented Jun 2, 2026

@coderabbitai re-review

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Jun 2, 2026

@msynk Sure, I'll re-review the changes now!

✅ Actions performed

Full review triggered.

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 225 out of 225 changed files in this pull request and generated 7 comments.

Comment on lines +39 to +44
async function readAsBytes(input: HTMLInputElement, index: number) {
const f = file(input, index);
if (!f) return null;
const buf = await f.arrayBuffer();
return new Uint8Array(buf);
}
Comment on lines +6 to +17
async getStatus() {
const nav = window.navigator as any;
if (typeof nav.getBattery !== 'function') {
return { charging: true, chargingTime: 0, dischargingTime: Infinity, level: 1 };
}
const b = await nav.getBattery();
return {
charging: !!b.charging,
chargingTime: b.chargingTime,
dischargingTime: b.dischargingTime,
level: b.level
};
Comment on lines +11 to +15
/// <summary>Seconds remaining until fully charged. <see cref="double.PositiveInfinity"/> when unknown.</summary>
public double ChargingTime { get; set; }

/// <summary>Seconds remaining until discharged. <see cref="double.PositiveInfinity"/> when unknown.</summary>
public double DischargingTime { get; set; }
Comment on lines +12 to +15
/// Object URLs leak memory if not revoked. The instance tracks every URL it creates so
/// disposal automatically revokes outstanding ones. Use <see cref="Create"/> when you want
/// the URL to outlive disposal and call <see cref="Revoke"/> yourself.
/// </remarks>
Comment on lines +57 to +61
/// <summary>
/// Starts the request and immediately returns an <see cref="AbortableFetch"/>. Await
/// <see cref="AbortableFetch"/> won't give you the response — use this when you only
/// need fire-and-forget abort control. For typical use prefer <see cref="Send"/>.
/// </summary>

<div class="app-content">
<div class="topbar">
<button class="menu-btn" @onclick="ToggleNav">☰</button>
}
@if (!string.IsNullOrWhiteSpace(MdnUrl))
{
<a class="mdn-link" href="@MdnUrl" target="_blank" rel="noopener">
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

bit Butil improvements

2 participants