Open
Conversation
Contributor
There was a problem hiding this comment.
Copilot reviewed 65 out of 68 changed files in this pull request and generated no comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Contributor
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 66 out of 69 changed files in this pull request and generated no new comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
4fd6b91 to
b576981
Compare
Use Color(fromString:) from CommonUI to properly parse hex color strings like "#00AA00". The previous code used Color(widget.valuecolor) which doesn't handle hex strings, causing values with custom colors to not display. Signed-off-by: Tim Mueller-Seydlitz <timbms@gmail.com>
- Add fallbackSymbol parameter to IconView for SF Symbol fallback when network icons are unavailable (useful for previews) - Add fallbackSymbol parameter to SegmentedRowView, forwarded to IconView - Create PreviewList helper to reduce boilerplate in previews - Update previews to use List with proper insets matching SitemapPageView - Scale fallback symbol to 75% for better visual match with network icons Signed-off-by: Tim Mueller-Seydlitz <timbms@gmail.com>
Signed-off-by: Tim Mueller-Seydlitz <timbms@gmail.com>
- Fix iOS SliderRowView not reacting to external updates by using debounce pattern (matching watchOS approach) - Merge SliderWithSwitchSupportRow into SliderRow on watchOS - Add fallbackSymbol support to watchOS IconView for previews - Improve slider previews with minValue/maxValue/step support Signed-off-by: Tim Mueller-Seydlitz <timbms@gmail.com>
- Use onEditingChanged for true release-only behavior on iOS - Show current slider value while dragging on iOS and watchOS - Fix external update handling with proper isEditing tracking - Keep pendingValue until server responds to avoid visual jump Signed-off-by: Tim Mueller-Seydlitz <timbms@gmail.com>
- Wrap PreviewConstants in #if DEBUG to exclude from release builds - Fix SegmentedRowView preview detail labels to use numeric values Signed-off-by: Tim Mueller-Seydlitz <timbms@gmail.com>
- Apply consistent styling with rounded background and border - Add pressed indicator on each button - Use equal spacing and minimum width for buttons Signed-off-by: Tim Mueller-Seydlitz <timbms@gmail.com>
- Style singleMappingButton as momentary press button - Match height, width, and indicator styling with segmentedButtons - Set common minWidth on both single and pressRelease containers - Add all widget types to All Scenarios preview Signed-off-by: Tim Mueller-Seydlitz <timbms@gmail.com>
- Use trailing-aligned frame for single mapping button - Use fixedSize with leading padding for pressRelease buttons Signed-off-by: Tim Mueller-Seydlitz <timbms@gmail.com>
- Add isNilOrEmpty computed property on Optional<String> - Replace verbose nil/empty checks in SegmentedRowView Signed-off-by: Tim Mueller-Seydlitz <timbms@gmail.com>
Signed-off-by: Tim Mueller-Seydlitz <timbms@gmail.com>
- Move background/border to each pressRelease button - Add spacing between buttons - Match row height with segmentedButtons - Add two-button pressRelease preview Signed-off-by: Tim Mueller-Seydlitz <timbms@gmail.com>
This reverts commit b92fcb7.
- Add Office Shutter two-button pressRelease preview - Restore consistent Spacer logic for button alignment Signed-off-by: Tim Mueller-Seydlitz <timbms@gmail.com>
Signed-off-by: Tim Mueller-Seydlitz <timbms@gmail.com>
Signed-off-by: Tim Mueller-Seydlitz <timbms@gmail.com>
Align iOS behavior with Android by highlighting the single mapping button when the item's state matches the mapping command. Signed-off-by: Tim Mueller-Seydlitz <timbms@gmail.com>
- Always send slider value on release, not just in releaseOnly mode - Add step parameter to Slider to match watchOS and prevent continuous vs step-adjusted value mismatch - Only clear pendingValue when server confirms the value we sent, preventing jumps from intermediate throttled responses Signed-off-by: Tim Mueller-Seydlitz <timbms@gmail.com>
Simplify the drag gesture to send the command immediately on touch instead of waiting for release, removing the pressed state tracking. Signed-off-by: Tim Mueller-Seydlitz <timbms@gmail.com>
Guard against repeated sends in onChanged by tracking singlePressed state. Add press/release visual feedback and selection animation. Signed-off-by: Tim Mueller-Seydlitz <timbms@gmail.com>
Add OTHER_LDFLAGS = -undefined dynamic_lookup to the test target so the linker defers resolution of dynamic framework symbols (SDWebImageSVGCoder, etc.) to runtime, where they are already loaded by the host app. Also remove the redundant SDImageSVGCoder registration in OpenHABSVGTests setUpWithError — AppDelegate already registers the coder before tests run. Signed-off-by: Tim Mueller-Seydlitz <timbms@gmail.com>
Replace 'import SDWebImageSVGCoder' with ObjC runtime lookup via
NSClassFromString("SDImageSVGCoder"). This eliminates the hard link-time
dependency on SDWebImage data symbols (_SDImageCoderDecodePreserveAspectRatio
etc.) that BUNDLE_LOADER and -undefined dynamic_lookup cannot reliably resolve.
The coder is already registered by AppDelegate before any tests run,
so runtime lookup is sufficient. Also revert the -undefined dynamic_lookup
OTHER_LDFLAGS added in the previous commit.
Signed-off-by: Tim Mueller-Seydlitz <timbms@gmail.com>
- Add OpenAPIErrorInspector utility to OpenHABCore, centralising all ClientError unwrapping so callers don't need to import OpenAPIRuntime - Remove OpenAPIRuntime imports from SitemapPageViewModel and SingleConnectionSettingsView; replace ClientError casts with inspector - Add SDWebImage as explicit Package.swift dependency (required now that OpenHABCore uses SDWebImage APIs directly) - Add process(data:) convenience on OpenHABImageProcessor for test use - Migrate OpenHABSVGTests from XCTest to Swift Testing (@Suite/@Test/#expect) and replace fragile ObjC-runtime SDImageSVGCoder lookup with direct OpenHABImageProcessor call via @testable import OpenHABCore - Add dedicated openHABTestsSwift.xctestplan; point openHABTestsSwift scheme at it; remove ASAN config from openHABTests plan Signed-off-by: Tim Mueller-Seydlitz <timbms@gmail.com>
Signed-off-by: Tim Mueller-Seydlitz <timbms@gmail.com>
The Main UI script editor height does not account for the bottom toolbar's safe area padding on iPhone, causing the last 2-3 lines to be hidden behind the toolbar and unreachable by scrolling. Inject a JavaScript fix via WKWebView that adds bottom padding to the page content and CodeMirror scroll container equal to the native safe area inset plus any FAB button height. A MutationObserver re-applies the fix on SPA navigation back to the script editor page. Signed-off-by: Tim Mueller-Seydlitz <timbms@gmail.com>
CI uses testplan: 'openHABTests' in the Fastfile unittests lane, but the scheme only had openHABTestsSwift.xctestplan associated, causing xcodebuild to error with 'Scheme does not have an associated test plan named openHABTests'. Signed-off-by: Tim Mueller-Seydlitz <timbms@gmail.com>
ASan instrumentation causes undefined symbol errors (___asan_alloca_poison) when Swift Package Manager dependencies are not recompiled with ASan support. Signed-off-by: Tim Mueller-Seydlitz <timbms@gmail.com>
Signed-off-by: openhab-bot <info@openhabfoundation.org>
…1102) * Fix empty string commands and switch sendItemCommand to JSON payload Text input items can now be cleared by submitting an empty string. Previously, empty commands were silently dropped in both InputCommandFormatter and WidgetCommandDispatcher. The guard order in InputCommandFormatter.command() is corrected so that only number hints reject empty input; text hints pass through an empty string as a valid "clear" command. Also fixes the openapi.json schema for sendItemCommand, which incorrectly declared the application/json body as type:string. It is now type:object with a required "value" field, matching the actual server contract. Types.swift and OpenAPIService are regenerated/updated accordingly. --------- Signed-off-by: Tim Mueller-Seydlitz <timbms@gmail.com>
Signed-off-by: openhab-bot <info@openhabfoundation.org>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> Signed-off-by: Tassilo Karge <tassilo.karge@web.de>
* Localisation transition to String Catalog Signed-off-by: DigiH <17110652+DigiH@users.noreply.github.com> * Correction for build failure and functionality with missing .xcodeproj Signed-off-by: DigiH <17110652+DigiH@users.noreply.github.com> * Make Colour Temperatures localisable Signed-off-by: DigiH <17110652+DigiH@users.noreply.github.com> * Update Intents.intentdefinition Signed-off-by: DigiH <17110652+DigiH@users.noreply.github.com> * Update Ruby and lockfile Signed-off-by: DigiH <17110652+DigiH@users.noreply.github.com> * Add missing localisations for Debug strings and French Bonjour strings Propagate "Debug" (untranslated) to es, fi, fr, it, nb, nl, ru for two existing keys; add French translations for "Discovering openHAB servers" and "No servers found". Signed-off-by: Tim Mueller-Seydlitz <timbms@gmail.com> * German typo fixes Signed-off-by: DigiH <17110652+DigiH@users.noreply.github.com> * Additional German translations Signed-off-by: DigiH <17110652+DigiH@users.noreply.github.com> * More German translations Signed-off-by: DigiH <17110652+DigiH@users.noreply.github.com> * Further localisation adjustments Signed-off-by: DigiH <17110652+DigiH@users.noreply.github.com> * Add missing 'Loading…' translations for es, fi, fr, it, nb, nl, ru Signed-off-by: Tim Mueller-Seydlitz <timbms@gmail.com> * Port LocalizationTests to Swift Testing, drop tests superseded by String Catalog Signed-off-by: Tim Mueller-Seydlitz <timbms@gmail.com> * Localisation and test adjustments Signed-off-by: DigiH <17110652+DigiH@users.noreply.github.com> * Make Settings popups localisable Signed-off-by: DigiH <17110652+DigiH@users.noreply.github.com> * String adjustment Signed-off-by: DigiH <17110652+DigiH@users.noreply.github.com> * Splitting up localisable string "empty" for gender specific translations Signed-off-by: DigiH <17110652+DigiH@users.noreply.github.com> * Add missing localised string and minor string fixes - Add `invalid_connection_configuration` key used in OpenHABCore with translations for all supported languages - Fix German hyphenation for certificate-related strings - Add Dutch translations for notifications and off strings Signed-off-by: Tim Mueller-Seydlitz <timbms@gmail.com> * German correction for empty.value translation Signed-off-by: DigiH <17110652+DigiH@users.noreply.github.com> * Additional watchOS 'empty' string made localisable Signed-off-by: DigiH <17110652+DigiH@users.noreply.github.com> * Fixed German quotation marks Signed-off-by: DigiH <17110652+DigiH@users.noreply.github.com> * Certificates dialogs buttons stringa adjustments Signed-off-by: DigiH <17110652+DigiH@users.noreply.github.com> --------- Signed-off-by: DigiH <17110652+DigiH@users.noreply.github.com> Signed-off-by: Tim Mueller-Seydlitz <timbms@gmail.com> Co-authored-by: Tim Mueller-Seydlitz <timbms@gmail.com>
Conflict resolution strategy: - DU (deleted in HEAD): accept all files from openapigen-swiftui - openapi/Types.swift: take openapigen-swiftui (adds JSON body type) - OpenAPIService.swift: take openapigen-swiftui (JSON payload send) - OpenHABImageProcessor.swift: take openapigen-swiftui (svgMaxSize, empty SVG, macOS) - StringExtension.swift: take openapigen-swiftui (FormatStyle API migration) - StringExtensionTests.swift: take openapigen-swiftui (adds tests) - NumberStateTests.swift: take openapigen-swiftui (Swift Testing migration) - openapi.json: take openapigen-swiftui (adds JSON body + source param) - OpenHABRootViewController.swift: take openapigen-swiftui (adds HostingSitemapViewController) - ScreenSaverView.swift: take openapigen-swiftui (FormatStyle, anchor-based positioning) - UserData.swift: merge both (add openapigen-swiftui extra properties, keep HEAD append logic) - RollershutterRow.swift: keep HEAD (chevron icons, direct widget.sendCommand) - SetpointRow.swift: keep HEAD (ObservedObject, chevron icons, consistent structure) - SitemapPageView.swift: keep HEAD (explicit row switch statement) - SwitchRow.swift: take openapigen-swiftui for preview (needs previewRootURL) Signed-off-by: Tim Mueller-Seydlitz <timbms@gmail.com>
… files CommonUI/Package.swift and source files were missing from the working tree (untracked, not in git). Restore them from openapigen-swiftui and add CommonUI to the Xcode workspace so it appears in the File Navigator. Also adds Version.xcconfig reference to workspace per openapigen-swiftui. Signed-off-by: Tim Mueller-Seydlitz <timbms@gmail.com>
…ol signature OpenAPIServiceProtocol now requires sourcePrefix and deviceId parameters. Pass nil at all existing call sites that don't have a source context. Update the NetworkTrackerTests mock to match the new protocol. Signed-off-by: Tim Mueller-Seydlitz <timbms@gmail.com>
Defines WidgetCommandPolicy, WidgetCommandPhase, and WidgetCommandDefaults which WidgetCommandDispatcher depends on. The file was not tracked in git and was not restored during the merge. Signed-off-by: Tim Mueller-Seydlitz <timbms@gmail.com>
commandString was added in openapigen-swiftui and used by WidgetCommandDispatcher. The merge revert dropped it from NumberState. Signed-off-by: Tim Mueller-Seydlitz <timbms@gmail.com>
The revert dropped the .json body case and source header/query setup from sendItemCommand in Client.swift, causing an exhaustiveness error. Restore the full generated client from openapigen-swiftui. Signed-off-by: Tim Mueller-Seydlitz <timbms@gmail.com>
- Add Rows group definition to project.pbxproj with all PBXFileReference and PBXBuildFile entries for SwiftUI row views - Add IconView.swift (IconInputView) to main app Sources phase - Create FrameRowView.swift for the frame widget row type - Restore OpenHABViewable protocol to OpenHABViewController.swift and add conformance to OpenHABViewController - Fix .datetime -> .dateTime InputHint enum case in WidgetCellProvider, DatePickerUITableViewCell, and OpenHABSitemapViewController - Add colortemperaturepicker/buttongrid/button cases to WidgetCellProvider switch to make it exhaustive - Remove deviceId parameter from NetworkTracker.send call site - InputRowView and MediaRowView typealiases for TextInputRowView/ImageRowView Signed-off-by: Tim Mueller-Seydlitz <timbms@gmail.com>
…em-display Merge commits: - aa37a05: improve TextInputRowView legibility and corresponding tests - 32525a8: Localisation transition to String Catalog (#1101) Conflict resolutions: - ScreenSaverSettingsView.swift: take openapigen-swiftui (new @ViewBuilder refactor) - SitemapSettingsView.swift: take openapigen-swiftui (clean @ViewBuilder refactor) - openHABWatch/Views/SitemapPageView.swift: take openapigen-swiftui ellipsis + watchTextStyle - openHABIntents/*IntentHandler.swift: keep HEAD deletions (files removed intentionally) Add WatchTypography.swift (new file from openapigen-swiftui) to project Signed-off-by: Tim Mueller-Seydlitz <timbms@gmail.com>
Add new string keys for widget actions, item types, and commands. Mark stale entries from refactored code. Signed-off-by: Tim Mueller-Seydlitz <timbms@gmail.com>
1f242b5 to
166a59c
Compare
Guard against NaN propagation when min/max temperature values produce a zero-span range. Extract math into testable ColorTemperatureRowMath and replace stride-based gradient generation with an integer-step approach that is safe when the span is zero. Signed-off-by: Tim Mueller-Seydlitz <timbms@gmail.com>
Signed-off-by: Tim Mueller-Seydlitz <timbms@gmail.com>
Signed-off-by: Tim Bert <5411131+timbms@users.noreply.github.com>
The widget extension uses SFSafeSymbols in OpenHABWidgetHelpers, OpenHABWidgetEntryView, SwitchWidgetEntryView and SensorWidgetEntryView but the package dependency was never added to the target, causing undefined symbol linker errors. Signed-off-by: Tim Mueller-Seydlitz <timbms@gmail.com>
…ation tests The openHABIntents extension target was removed in favour of AppIntents embedded in the main app. Remove the leftover source files, project references, and the two test methods that relied on the now-absent openHABIntents.appex bundle. Signed-off-by: Tim Mueller-Seydlitz <timbms@gmail.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Depends on #892