Skip to content

Commit e64e386

Browse files
committed
Fix watchOS/tvOS builds
1 parent 88cc5b6 commit e64e386

27 files changed

+789
-70
lines changed
Lines changed: 263 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,263 @@
1+
//
2+
// AppKit.swift
3+
// LiveViewNative
4+
//
5+
// Created by Carson Katri on 2/26/25.
6+
//
7+
8+
#if os(macOS)
9+
import AppKit
10+
import LiveViewNativeCore
11+
import LiveViewNativeStylesheet
12+
13+
extension NSTextContentType {
14+
@ASTDecodable("NSTextContentType")
15+
enum Resolvable: StylesheetResolvable, @preconcurrency Decodable, @preconcurrency AttributeDecodable {
16+
case username
17+
case password
18+
case oneTimeCode
19+
case newPassword
20+
case name
21+
case namePrefix
22+
case givenName
23+
case middleName
24+
case familyName
25+
case nameSuffix
26+
case nickname
27+
case jobTitle
28+
case organizationName
29+
case location
30+
case fullStreetAddress
31+
case streetAddressLine1
32+
case streetAddressLine2
33+
case addressCity
34+
case addressState
35+
case addressCityAndState
36+
case sublocality
37+
case countryName
38+
case postalCode
39+
case telephoneNumber
40+
case emailAddress
41+
case URL
42+
case creditCardNumber
43+
case creditCardName
44+
case creditCardGivenName
45+
case creditCardMiddleName
46+
case creditCardFamilyName
47+
case creditCardSecurityCode
48+
case creditCardExpiration
49+
case creditCardExpirationMonth
50+
case creditCardExpirationYear
51+
case creditCardType
52+
case shipmentTrackingNumber
53+
case flightNumber
54+
case dateTime
55+
case birthdate
56+
case birthdateDay
57+
case birthdateMonth
58+
case birthdateYear
59+
}
60+
}
61+
62+
extension NSTextContentType.Resolvable {
63+
func resolve<R: RootRegistry>(on element: ElementNode, in context: LiveContext<R>) -> NSTextContentType {
64+
switch self {
65+
case .username:
66+
return .username
67+
case .password:
68+
return .password
69+
case .oneTimeCode:
70+
return .oneTimeCode
71+
default:
72+
if #available(macOS 14.0, *) {
73+
switch self {
74+
case .newPassword:
75+
return .newPassword
76+
case .name:
77+
return .name
78+
case .namePrefix:
79+
return .namePrefix
80+
case .givenName:
81+
return .givenName
82+
case .middleName:
83+
return .middleName
84+
case .familyName:
85+
return .familyName
86+
case .nameSuffix:
87+
return .nameSuffix
88+
case .nickname:
89+
return .nickname
90+
case .jobTitle:
91+
return .jobTitle
92+
case .organizationName:
93+
return .organizationName
94+
case .location:
95+
return .location
96+
case .fullStreetAddress:
97+
return .fullStreetAddress
98+
case .streetAddressLine1:
99+
return .streetAddressLine1
100+
case .streetAddressLine2:
101+
return .streetAddressLine2
102+
case .addressCity:
103+
return .addressCity
104+
case .addressState:
105+
return .addressState
106+
case .addressCityAndState:
107+
return .addressCityAndState
108+
case .sublocality:
109+
return .sublocality
110+
case .countryName:
111+
return .countryName
112+
case .postalCode:
113+
return .postalCode
114+
case .telephoneNumber:
115+
return .telephoneNumber
116+
case .emailAddress:
117+
return .emailAddress
118+
case .URL:
119+
return .URL
120+
case .creditCardNumber:
121+
return .creditCardNumber
122+
case .creditCardName:
123+
return .creditCardName
124+
case .creditCardGivenName:
125+
return .creditCardGivenName
126+
case .creditCardMiddleName:
127+
return .creditCardMiddleName
128+
case .creditCardFamilyName:
129+
return .creditCardFamilyName
130+
case .creditCardSecurityCode:
131+
return .creditCardSecurityCode
132+
case .creditCardExpiration:
133+
return .creditCardExpiration
134+
case .creditCardExpirationMonth:
135+
return .creditCardExpirationMonth
136+
case .creditCardExpirationYear:
137+
return .creditCardExpirationYear
138+
case .creditCardType:
139+
return .creditCardType
140+
case .shipmentTrackingNumber:
141+
return .shipmentTrackingNumber
142+
case .flightNumber:
143+
return .flightNumber
144+
case .dateTime:
145+
return .dateTime
146+
case .birthdate:
147+
return .birthdate
148+
case .birthdateDay:
149+
return .birthdateDay
150+
case .birthdateMonth:
151+
return .birthdateMonth
152+
case .birthdateYear:
153+
return .birthdateYear
154+
default:
155+
fatalError()
156+
}
157+
} else {
158+
fatalError("'\(self)' is not supported in this version of macOS")
159+
}
160+
}
161+
}
162+
163+
init(from attribute: Attribute?, on element: ElementNode) throws {
164+
switch attribute?.value {
165+
case "username":
166+
self = .username
167+
case "password":
168+
self = .password
169+
case "oneTimeCode":
170+
self = .oneTimeCode
171+
default:
172+
if #available(macOS 14, *) {
173+
switch attribute?.value {
174+
case "newPassword":
175+
self = .newPassword
176+
case "name":
177+
self = .name
178+
case "namePrefix":
179+
self = .namePrefix
180+
case "givenName":
181+
self = .givenName
182+
case "middleName":
183+
self = .middleName
184+
case "familyName":
185+
self = .familyName
186+
case "nameSuffix":
187+
self = .nameSuffix
188+
case "nickname":
189+
self = .nickname
190+
case "jobTitle":
191+
self = .jobTitle
192+
case "organizationName":
193+
self = .organizationName
194+
case "location":
195+
self = .location
196+
case "fullStreetAddress":
197+
self = .fullStreetAddress
198+
case "streetAddressLine1":
199+
self = .streetAddressLine1
200+
case "streetAddressLine2":
201+
self = .streetAddressLine2
202+
case "addressCity":
203+
self = .addressCity
204+
case "addressState":
205+
self = .addressState
206+
case "addressCityAndState":
207+
self = .addressCityAndState
208+
case "sublocality":
209+
self = .sublocality
210+
case "countryName":
211+
self = .countryName
212+
case "postalCode":
213+
self = .postalCode
214+
case "telephoneNumber":
215+
self = .telephoneNumber
216+
case "emailAddress":
217+
self = .emailAddress
218+
case "URL":
219+
self = .URL
220+
case "creditCardNumber":
221+
self = .creditCardNumber
222+
case "creditCardName":
223+
self = .creditCardName
224+
case "creditCardGivenName":
225+
self = .creditCardGivenName
226+
case "creditCardMiddleName":
227+
self = .creditCardMiddleName
228+
case "creditCardFamilyName":
229+
self = .creditCardFamilyName
230+
case "creditCardSecurityCode":
231+
self = .creditCardSecurityCode
232+
case "creditCardExpiration":
233+
self = .creditCardExpiration
234+
case "creditCardExpirationMonth":
235+
self = .creditCardExpirationMonth
236+
case "creditCardExpirationYear":
237+
self = .creditCardExpirationYear
238+
case "creditCardType":
239+
self = .creditCardType
240+
case "shipmentTrackingNumber":
241+
self = .shipmentTrackingNumber
242+
case "flightNumber":
243+
self = .flightNumber
244+
case "dateTime":
245+
self = .dateTime
246+
case "birthdate":
247+
self = .birthdate
248+
case "birthdateDay":
249+
self = .birthdateDay
250+
case "birthdateMonth":
251+
self = .birthdateMonth
252+
case "birthdateYear":
253+
self = .birthdateYear
254+
default:
255+
throw AttributeDecodingError.badValue(Self.self)
256+
}
257+
} else {
258+
throw AttributeDecodingError.badValue(Self.self)
259+
}
260+
}
261+
}
262+
}
263+
#endif

Sources/LiveViewNative/Stylesheets/ResolvableTypes/QuartzCore.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
// Created by Carson Katri on 1/30/25.
66
//
77

8+
#if os(iOS) || os(macOS) || os(tvOS) || os(visionOS)
89
import QuartzCore
910
import LiveViewNativeStylesheet
1011

@@ -24,3 +25,4 @@ extension CATransform3D.Resolvable {
2425
}
2526
}
2627
}
28+
#endif
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
//
2+
// AccessibilityQuickActionStyle.swift
3+
// LiveViewNative
4+
//
5+
// Created by Carson Katri on 2/25/25.
6+
//
7+
8+
#if os(watchOS)
9+
import SwiftUI
10+
import LiveViewNativeStylesheet
11+
12+
@ASTDecodable("AccessibilityQuickActionStyle")
13+
enum StylesheetResolvableAccessibilityQuickActionStyle: @preconcurrency Decodable, StylesheetResolvable, AttributeDecodable {
14+
case outline
15+
case prompt
16+
}
17+
18+
extension StylesheetResolvableAccessibilityQuickActionStyle {
19+
func resolve<R>(on element: ElementNode, in context: LiveContext<R>) -> Self where R : RootRegistry {
20+
return self
21+
}
22+
}
23+
24+
extension View {
25+
@_disfavoredOverload
26+
@ViewBuilder
27+
func accessibilityQuickAction<Content: View>(
28+
style: StylesheetResolvableAccessibilityQuickActionStyle,
29+
@ViewBuilder content: () -> Content
30+
) -> some View {
31+
switch style {
32+
case .outline:
33+
self.accessibilityQuickAction(style: .outline, content: content)
34+
case .prompt:
35+
self.accessibilityQuickAction(style: .prompt, content: content)
36+
}
37+
}
38+
39+
@_disfavoredOverload
40+
@ViewBuilder
41+
func accessibilityQuickAction<Content: View>(
42+
style: StylesheetResolvableAccessibilityQuickActionStyle,
43+
isActive: Binding<Bool>,
44+
@ViewBuilder content: () -> Content
45+
) -> some View {
46+
switch style {
47+
case .outline:
48+
self.accessibilityQuickAction(style: .outline, isActive: isActive, content: content)
49+
case .prompt:
50+
self.accessibilityQuickAction(style: .prompt, isActive: isActive, content: content)
51+
}
52+
}
53+
}
54+
#endif

0 commit comments

Comments
 (0)