git.iko.soy/rowtype-yoga/purescript-yoga-react-native
on main help sign in
Fix video URL: old BigBuckBunny link returns 403
commit20f37b61e35d1133cecebc54cdab3617e39a75aa authorMark <mark.eibes@gmail.com> dateSun 15 Feb 2026, 10:46 (8 months ago) parentb3ca771
13 files changed+238−37
example-macos/macos/YogaReactExample-macOS/RCTMacOSControlsManager.m+11 example-macos/src/Main.purs+24−23 src/Yoga/React/Native/MacOS/Alert.purs+3−2 src/Yoga/React/Native/MacOS/Button.purs+2−1 src/Yoga/React/Native/MacOS/FilePicker.purs+2−1 src/Yoga/React/Native/MacOS/Image.purs+2−1 src/Yoga/React/Native/MacOS/Popover.purs+3−2 src/Yoga/React/Native/MacOS/Rive.purs+2−1 src/Yoga/React/Native/MacOS/Sidebar.purs+3−2 src/Yoga/React/Native/MacOS/Toolbar.purs+2−1 src/Yoga/React/Native/MacOS/Types.purs+178 src/Yoga/React/Native/MacOS/VideoPlayer.purs+2 src/Yoga/React/Native/MacOS/VisualEffect.purs+4−3
example-macos/macos/YogaReactExample-macOS/RCTMacOSControlsManager.m+11
@@ -1488,6 +1488,7 @@ RCT_EXPORT_VIEW_PROPERTY(onCancel, RCTBubblingEventBlock)
14881488@property (nonatomic, assign) BOOL looping;
14891489@property (nonatomic, assign) BOOL muted;
14901490@property (nonatomic, assign) CGFloat cornerRadius;
1491+@property (nonatomic, copy) NSString *controlsStyle;
14911492@end
14921493
14931494@implementation RCTVideoPlayerView
@@ -1547,6 +1548,15 @@ RCT_EXPORT_VIEW_PROPERTY(onCancel, RCTBubblingEventBlock)
15471548 self.layer.cornerRadius = cornerRadius;
15481549}
15491550
1551+- (void)setControlsStyle:(NSString *)controlsStyle {
1552+ _controlsStyle = controlsStyle;
1553+ if ([controlsStyle isEqualToString:@"none"]) _playerView.controlsStyle = AVPlayerViewControlsStyleNone;
1554+ else if ([controlsStyle isEqualToString:@"inline"]) _playerView.controlsStyle = AVPlayerViewControlsStyleInline;
1555+ else if ([controlsStyle isEqualToString:@"minimal"]) _playerView.controlsStyle = AVPlayerViewControlsStyleMinimal;
1556+ else if ([controlsStyle isEqualToString:@"floating"]) _playerView.controlsStyle = AVPlayerViewControlsStyleFloating;
1557+ else _playerView.controlsStyle = AVPlayerViewControlsStyleDefault;
1558+}
1559+
15501560- (void)playerDidFinish:(NSNotification *)note {
15511561 if (_looping && note.object == _player.currentItem) {
15521562 [_player seekToTime:kCMTimeZero];
@@ -1570,6 +1580,7 @@ RCT_EXPORT_VIEW_PROPERTY(playing, BOOL)
15701580RCT_EXPORT_VIEW_PROPERTY(looping, BOOL)
15711581RCT_EXPORT_VIEW_PROPERTY(muted, BOOL)
15721582RCT_EXPORT_VIEW_PROPERTY(cornerRadius, CGFloat)
1583+RCT_EXPORT_VIEW_PROPERTY(controlsStyle, NSString)
15731584@end
15741585
15751586// ===========================================================================
example-macos/src/Main.purs+24−23
@@ -49,6 +49,7 @@ import Yoga.React.Native.MacOS.Box (nativeBox)
4949import Yoga.React.Native.MacOS.Popover (nativePopover)
5050import Yoga.React.Native.MacOS.Image (nativeImage)
5151import Yoga.React.Native.MacOS.Alert (macosAlert)
52+import Yoga.React.Native.MacOS.Types as T
5253import Yoga.React.Native.Matrix as Matrix
5354import Yoga.React.Native.Style as Style
5455
@@ -76,7 +77,7 @@ app = component "App" \_ -> React.do
7677 let bg = if isDark then "#1E1E1E" else "#FFFFFF"
7778 pure do
7879 nativeVisualEffect
79− { materialName: "windowBackground"
80+ { materialName: T.windowBackground
8081 , style: tw "flex-1"
8182 }
8283 ( safeAreaView { style: tw "flex-1" <> Style.style { backgroundColor: "transparent" } }
@@ -91,7 +92,7 @@ app = component "App" \_ -> React.do
9192 , { id: "chat", label: "Chat", sfSymbol: "bubble.left.and.bubble.right" }
9293 ]
9394 , selectedItem: activeTab
94− , toolbarStyle: "unified"
95+ , toolbarStyle: T.unified
9596 , windowTitle: "PureScript React Native"
9697 , onSelectItem: extractString "itemId" setActiveTab
9798 , style: Style.style { height: 0.0, width: 0.0 }
@@ -181,7 +182,7 @@ sidebarItem _ sfSymbolName title selected setCategory =
181182 nativeButton
182183 { title
183184 , sfSymbol: sfSymbolName
184− , bezelStyle: "toolbar"
185+ , bezelStyle: T.toolbar
185186 , primary: selected
186187 , onPress: handler_ (setCategory title)
187188 , style: Style.style { height: 28.0, marginHorizontal: 8.0, marginVertical: 1.0 }
@@ -203,7 +204,7 @@ controlsTab = component "ControlsTab" \p -> React.do
203204 [ nativeButton
204205 { title: "Say Hello"
205206 , sfSymbol: "hand.wave"
206− , bezelStyle: "rounded"
207+ , bezelStyle: T.push
207208 , primary: true
208209 , onPress: handler_ (p.setButtonStatus "Hello from PureScript!")
209210 , style: Style.style { height: 24.0, width: 140.0 }
@@ -211,7 +212,7 @@ controlsTab = component "ControlsTab" \p -> React.do
211212 , nativeButton
212213 { title: "Reset"
213214 , sfSymbol: "arrow.counterclockwise"
214− , bezelStyle: "rounded"
215+ , bezelStyle: T.push
215216 , onPress: handler_ (p.setButtonStatus "Ready")
216217 , style: Style.style { height: 24.0, width: 100.0, marginLeft: 8.0 }
217218 }
@@ -407,7 +408,7 @@ riveTab = component "RiveTab" \p -> React.do
407408 , nativeRiveView_
408409 { resourceName: "cat_following_mouse"
409410 , stateMachineName: "State Machine 1"
410− , fit: "contain"
411+ , fit: T.contain
411412 , autoplay: true
412413 , style: Style.style { height: 300.0 }
413414 }
@@ -417,7 +418,7 @@ riveTab = component "RiveTab" \p -> React.do
417418 , nativeRiveView_
418419 { resourceName: "cursor_tracking"
419420 , stateMachineName: "State Machine 1"
420− , fit: "contain"
421+ , fit: T.contain
421422 , autoplay: true
422423 , style: Style.style { height: 300.0 }
423424 }
@@ -427,7 +428,7 @@ riveTab = component "RiveTab" \p -> React.do
427428 , nativeRiveView_
428429 { resourceName: "rating_animation"
429430 , stateMachineName: "State Machine 1"
430− , fit: "contain"
431+ , fit: T.contain
431432 , autoplay: true
432433 , style: Style.style { height: 200.0 }
433434 }
@@ -437,14 +438,14 @@ riveTab = component "RiveTab" \p -> React.do
437438 , nativeRiveView_
438439 { resourceName: "switch_event_example"
439440 , stateMachineName: "State Machine 1"
440− , fit: "contain"
441+ , fit: T.contain
441442 , autoplay: true
442443 , style: Style.style { height: 200.0 }
443444 }
444445 , sectionTitle p.fg "Windy Tree"
445446 , nativeRiveView_
446447 { resourceName: "windy_tree"
447− , fit: "cover"
448+ , fit: T.cover
448449 , autoplay: true
449450 , style: tw "flex-1" <> Style.style { minHeight: 300.0, backgroundColor: p.bg }
450451 }
@@ -536,7 +537,7 @@ systemTab = component "SystemTab" \p -> React.do
536537 , card p.cardBg
537538 [ view { style: tw "flex-row items-center" }
538539 [ nativeFilePicker
539− { mode: "open"
540+ { mode: T.openFile
540541 , title: "Open Files"
541542 , sfSymbol: "doc.badge.plus"
542543 , allowMultiple: true
@@ -549,7 +550,7 @@ systemTab = component "SystemTab" \p -> React.do
549550 , style: Style.style { height: 24.0, width: 120.0 }
550551 }
551552 , nativeFilePicker
552− { mode: "open"
553+ { mode: T.openFile
553554 , title: "Choose Folder"
554555 , sfSymbol: "folder"
555556 , canChooseDirectories: true
@@ -561,7 +562,7 @@ systemTab = component "SystemTab" \p -> React.do
561562 , style: Style.style { height: 24.0, width: 140.0, marginLeft: 8.0 }
562563 }
563564 , nativeFilePicker
564− { mode: "save"
565+ { mode: T.saveFile
565566 , title: "Save As..."
566567 , sfSymbol: "square.and.arrow.down"
567568 , defaultName: "Untitled.txt"
@@ -591,7 +592,7 @@ systemTab = component "SystemTab" \p -> React.do
591592 [ nativeButton
592593 { title: if videoPlaying then "Pause" else "Play"
593594 , sfSymbol: if videoPlaying then "pause.fill" else "play.fill"
594− , bezelStyle: "rounded"
595+ , bezelStyle: T.push
595596 , onPress: handler_ (setVideoPlaying (not videoPlaying))
596597 , style: Style.style { height: 24.0, width: 100.0 }
597598 }
@@ -692,14 +693,14 @@ systemTab = component "SystemTab" \p -> React.do
692693 "Click button to toggle a popover"
693694 , nativePopover
694695 { visible: popoverVisible
695− , preferredEdge: "bottom"
696− , behavior: "transient"
696+ , preferredEdge: T.bottom
697+ , behavior: T.transient
697698 , onClose: handler_ (setPopoverVisible false)
698699 , style: tw "mb-2"
699700 }
700701 [ nativeButton
701702 { title: if popoverVisible then "Hide Popover" else "Show Popover"
702− , bezelStyle: "rounded"
703+ , bezelStyle: T.push
703704 , onPress: handler_ (setPopoverVisible (not popoverVisible))
704705 , style: Style.style { height: 24.0, width: 140.0 }
705706 }
@@ -714,7 +715,7 @@ systemTab = component "SystemTab" \p -> React.do
714715 "Native NSImageView with URL loading and corner radius"
715716 , nativeImage
716717 { source: "https://placedog.net/640/400"
717− , contentMode: "scaleProportionally"
718+ , contentMode: T.scaleProportionally
718719 , cornerRadius: 12.0
719720 , style: Style.style { height: 200.0 } <> tw "mb-2"
720721 }
@@ -725,8 +726,8 @@ systemTab = component "SystemTab" \p -> React.do
725726 , nativeButton
726727 { title: "Show Alert"
727728 , sfSymbol: "exclamationmark.triangle"
728− , bezelStyle: "rounded"
729− , onPress: handler_ (macosAlert "warning" "Are you sure?" "This action cannot be undone." [ "Cancel", "OK" ])
729+ , bezelStyle: T.push
730+ , onPress: handler_ (macosAlert T.warning "Are you sure?" "This action cannot be undone." [ "Cancel", "OK" ])
730731 , style: Style.style { height: 24.0, width: 120.0 } <> tw "mb-4"
731732 }
732733 ]
@@ -931,7 +932,7 @@ chatTab = component "ChatTab" \p -> React.do
931932 else text { style: Style.style { height: 0.0 } } ""
932933 , nativeButton
933934 { title: "Sign In"
934− , bezelStyle: "rounded"
935+ , bezelStyle: T.push
935936 , sfSymbol: "arrow.right.circle.fill"
936937 , onPress: handler_ doLogin
937938 , style: Style.style { height: 32.0 }
@@ -965,7 +966,7 @@ chatTab = component "ChatTab" \p -> React.do
965966 ]
966967 , nativeButton
967968 { title: ""
968− , bezelStyle: "toolbar"
969+ , bezelStyle: T.toolbar
969970 , sfSymbol: ""
970971 , onPress: handler_ (selectRoom sess r.roomId)
971972 , style: Style.style { position: "absolute", top: 0.0, left: 0.0, right: 0.0, bottom: 0.0, opacity: 0.0 }
@@ -1058,7 +1059,7 @@ chatTab = component "ChatTab" \p -> React.do
10581059 , nativeButton
10591060 { title: ""
10601061 , sfSymbol: "paperplane.fill"
1061− , bezelStyle: "toolbar"
1062+ , bezelStyle: T.toolbar
10621063 , onPress: handler_ (sendMessage sess rid inputText)
10631064 , style: Style.style { height: 28.0, width: 36.0, marginLeft: 8.0 }
10641065 }
src/Yoga/React/Native/MacOS/Alert.purs+3−2
@@ -6,8 +6,9 @@ import Prelude
66
77import Effect (Effect)
88import Effect.Uncurried (EffectFn4, runEffectFn4)
9+import Yoga.React.Native.MacOS.Types (AlertStyle)
910
10−foreign import alertImpl :: EffectFn4 String String String (Array String) Unit
11+foreign import alertImpl :: EffectFn4 AlertStyle String String (Array String) Unit
1112
12−macosAlert :: String -> String -> String -> Array String -> Effect Unit
13+macosAlert :: AlertStyle -> String -> String -> Array String -> Effect Unit
1314macosAlert = runEffectFn4 alertImpl
src/Yoga/React/Native/MacOS/Button.purs+2−1
@@ -4,6 +4,7 @@ import React.Basic (ReactComponent)
44import React.Basic.Events (EventHandler)
55import Yoga.React.Native.Attributes (BaseAttributes)
66import Yoga.React.Native.Internal (FFINativeComponent_, createNativeElement_)
7+import Yoga.React.Native.MacOS.Types (BezelStyle)
78
89foreign import _buttonImpl :: forall props. ReactComponent props
910
@@ -13,7 +14,7 @@ nativeButton = createNativeElement_ _buttonImpl
1314type NativeButtonAttributes = BaseAttributes
1415 ( title :: String
1516 , sfSymbol :: String
16− , bezelStyle :: String
17+ , bezelStyle :: BezelStyle
1718 , destructive :: Boolean
1819 , primary :: Boolean
1920 , buttonEnabled :: Boolean
src/Yoga/React/Native/MacOS/FilePicker.purs+2−1
@@ -4,6 +4,7 @@ import React.Basic (ReactComponent)
44import React.Basic.Events (EventHandler)
55import Yoga.React.Native.Attributes (BaseAttributes)
66import Yoga.React.Native.Internal (FFINativeComponent_, createNativeElement_)
7+import Yoga.React.Native.MacOS.Types (FilePickerMode)
78
89foreign import _filePickerImpl :: forall props. ReactComponent props
910
@@ -11,7 +12,7 @@ nativeFilePicker :: FFINativeComponent_ NativeFilePickerAttributes
1112nativeFilePicker = createNativeElement_ _filePickerImpl
1213
1314type NativeFilePickerAttributes = BaseAttributes
14− ( mode :: String
15+ ( mode :: FilePickerMode
1516 , title :: String
1617 , sfSymbol :: String
1718 , message :: String
src/Yoga/React/Native/MacOS/Image.purs+2−1
@@ -6,6 +6,7 @@ module Yoga.React.Native.MacOS.Image
66import React.Basic (ReactComponent)
77import Yoga.React.Native.Attributes (BaseAttributes)
88import Yoga.React.Native.Internal (FFINativeComponent_, createNativeElement_)
9+import Yoga.React.Native.MacOS.Types (ImageContentMode)
910
1011foreign import _imageImpl :: forall props. ReactComponent props
1112
@@ -14,6 +15,6 @@ nativeImage = createNativeElement_ _imageImpl
1415
1516type NativeImageAttributes = BaseAttributes
1617 ( source :: String
17− , contentMode :: String
18+ , contentMode :: ImageContentMode
1819 , cornerRadius :: Number
1920 )
src/Yoga/React/Native/MacOS/Popover.purs+3−2
@@ -7,6 +7,7 @@ import React.Basic (ReactComponent)
77import React.Basic.Events (EventHandler)
88import Yoga.React.Native.Attributes (BaseAttributes)
99import Yoga.React.Native.Internal (FFINativeComponent, createNativeElement)
10+import Yoga.React.Native.MacOS.Types (PopoverEdge, PopoverBehavior)
1011
1112foreign import _popoverImpl :: forall props. ReactComponent props
1213
@@ -15,7 +16,7 @@ nativePopover = createNativeElement _popoverImpl
1516
1617type NativePopoverAttributes = BaseAttributes
1718 ( visible :: Boolean
18− , preferredEdge :: String
19− , behavior :: String
19+ , preferredEdge :: PopoverEdge
20+ , behavior :: PopoverBehavior
2021 , onClose :: EventHandler
2122 )
src/Yoga/React/Native/MacOS/Rive.purs+2−1
@@ -3,6 +3,7 @@ module Yoga.React.Native.MacOS.Rive (nativeRiveView, nativeRiveView_, NativeRive
33import React.Basic (ReactComponent)
44import Yoga.React.Native.Attributes (BaseAttributes)
55import Yoga.React.Native.Internal (FFINativeComponent, FFINativeComponent_, createNativeElement, createNativeElement_)
6+import Yoga.React.Native.MacOS.Types (RiveFit)
67
78foreign import _nativeRiveViewImpl :: forall props. ReactComponent props
89
@@ -17,6 +18,6 @@ type NativeRiveViewAttributes = BaseAttributes
1718 , url :: String
1819 , artboardName :: String
1920 , stateMachineName :: String
20− , fit :: String
21+ , fit :: RiveFit
2122 , autoplay :: Boolean
2223 )
src/Yoga/React/Native/MacOS/Sidebar.purs+3−2
@@ -3,6 +3,7 @@ module Yoga.React.Native.MacOS.Sidebar (sidebarLayout) where
33import Prelude
44import React.Basic (JSX)
55import Yoga.React.Native (tw, view)
6+import Yoga.React.Native.MacOS.Types as T
67import Yoga.React.Native.MacOS.VisualEffect (nativeVisualEffect)
78import Yoga.React.Native.Style as Style
89
@@ -10,8 +11,8 @@ sidebarLayout :: { sidebar :: JSX, content :: JSX, sidebarWidth :: Number } -> J
1011sidebarLayout { sidebar, content, sidebarWidth } = do
1112 view { style: tw "flex-1 flex-row" <> Style.style { backgroundColor: "transparent" } }
1213 [ nativeVisualEffect
13− { materialName: "sidebar"
14− , blendingModeName: "behindWindow"
14+ { materialName: T.sidebar
15+ , blendingModeName: T.behindWindow
1516 , style: Style.style { width: sidebarWidth } <> tw "h-full"
1617 }
1718 sidebar
src/Yoga/React/Native/MacOS/Toolbar.purs+2−1
@@ -4,6 +4,7 @@ import React.Basic (ReactComponent)
44import React.Basic.Events (EventHandler)
55import Yoga.React.Native.Attributes (BaseAttributes)
66import Yoga.React.Native.Internal (FFINativeComponent_, createNativeElement_)
7+import Yoga.React.Native.MacOS.Types (ToolbarStyle)
78
89foreign import _toolbarImpl :: forall props. ReactComponent props
910
@@ -19,7 +20,7 @@ type ToolbarItem =
1920type NativeToolbarAttributes = BaseAttributes
2021 ( items :: Array ToolbarItem
2122 , selectedItem :: String
22− , toolbarStyle :: String
23+ , toolbarStyle :: ToolbarStyle
2324 , windowTitle :: String
2425 , onSelectItem :: EventHandler
2526 )
src/Yoga/React/Native/MacOS/Types.pursnew file+178
@@ -0,0 +1,178 @@
1+module Yoga.React.Native.MacOS.Types where
2+
3+-- All enum types are newtypes over String for zero-overhead FFI compatibility.
4+-- Use the provided smart constructors; the newtype is not exported.
5+
6+newtype BezelStyle = BezelStyle String
7+
8+push :: BezelStyle
9+push = BezelStyle "push"
10+
11+toolbar :: BezelStyle
12+toolbar = BezelStyle "toolbar"
13+
14+texturedSquare :: BezelStyle
15+texturedSquare = BezelStyle "texturedSquare"
16+
17+inline :: BezelStyle
18+inline = BezelStyle "inline"
19+
20+newtype VisualEffectMaterial = VisualEffectMaterial String
21+
22+sidebar :: VisualEffectMaterial
23+sidebar = VisualEffectMaterial "sidebar"
24+
25+headerView :: VisualEffectMaterial
26+headerView = VisualEffectMaterial "headerView"
27+
28+titlebar :: VisualEffectMaterial
29+titlebar = VisualEffectMaterial "titlebar"
30+
31+hudWindow :: VisualEffectMaterial
32+hudWindow = VisualEffectMaterial "hudWindow"
33+
34+contentBackground :: VisualEffectMaterial
35+contentBackground = VisualEffectMaterial "contentBackground"
36+
37+menu :: VisualEffectMaterial
38+menu = VisualEffectMaterial "menu"
39+
40+popoverMaterial :: VisualEffectMaterial
41+popoverMaterial = VisualEffectMaterial "popover"
42+
43+sheet :: VisualEffectMaterial
44+sheet = VisualEffectMaterial "sheet"
45+
46+underWindowBackground :: VisualEffectMaterial
47+underWindowBackground = VisualEffectMaterial "underWindowBackground"
48+
49+windowBackground :: VisualEffectMaterial
50+windowBackground = VisualEffectMaterial "windowBackground"
51+
52+newtype BlendingMode = BlendingMode String
53+
54+withinWindow :: BlendingMode
55+withinWindow = BlendingMode "withinWindow"
56+
57+behindWindow :: BlendingMode
58+behindWindow = BlendingMode "behindWindow"
59+
60+newtype VisualEffectState = VisualEffectState String
61+
62+active :: VisualEffectState
63+active = VisualEffectState "active"
64+
65+inactive :: VisualEffectState
66+inactive = VisualEffectState "inactive"
67+
68+followsWindow :: VisualEffectState
69+followsWindow = VisualEffectState "followsWindow"
70+
71+newtype ToolbarStyle = ToolbarStyle String
72+
73+unified :: ToolbarStyle
74+unified = ToolbarStyle "unified"
75+
76+expanded :: ToolbarStyle
77+expanded = ToolbarStyle "expanded"
78+
79+preference :: ToolbarStyle
80+preference = ToolbarStyle "preference"
81+
82+unifiedCompact :: ToolbarStyle
83+unifiedCompact = ToolbarStyle "unifiedCompact"
84+
85+newtype RiveFit = RiveFit String
86+
87+contain :: RiveFit
88+contain = RiveFit "contain"
89+
90+cover :: RiveFit
91+cover = RiveFit "cover"
92+
93+fill :: RiveFit
94+fill = RiveFit "fill"
95+
96+fitWidth :: RiveFit
97+fitWidth = RiveFit "fitWidth"
98+
99+fitHeight :: RiveFit
100+fitHeight = RiveFit "fitHeight"
101+
102+scaleDown :: RiveFit
103+scaleDown = RiveFit "scaleDown"
104+
105+noFit :: RiveFit
106+noFit = RiveFit "noFit"
107+
108+newtype FilePickerMode = FilePickerMode String
109+
110+openFile :: FilePickerMode
111+openFile = FilePickerMode "open"
112+
113+saveFile :: FilePickerMode
114+saveFile = FilePickerMode "save"
115+
116+newtype ControlsStyle = ControlsStyle String
117+
118+noControls :: ControlsStyle
119+noControls = ControlsStyle "none"
120+
121+inlineControls :: ControlsStyle
122+inlineControls = ControlsStyle "inline"
123+
124+minimalControls :: ControlsStyle
125+minimalControls = ControlsStyle "minimal"
126+
127+floatingControls :: ControlsStyle
128+floatingControls = ControlsStyle "floating"
129+
130+defaultControls :: ControlsStyle
131+defaultControls = ControlsStyle "default"
132+
133+newtype ImageContentMode = ImageContentMode String
134+
135+scaleToFit :: ImageContentMode
136+scaleToFit = ImageContentMode "scaleToFit"
137+
138+center :: ImageContentMode
139+center = ImageContentMode "center"
140+
141+scaleProportionally :: ImageContentMode
142+scaleProportionally = ImageContentMode "scaleProportionally"
143+
144+newtype PopoverEdge = PopoverEdge String
145+
146+bottom :: PopoverEdge
147+bottom = PopoverEdge "bottom"
148+
149+top :: PopoverEdge
150+top = PopoverEdge "top"
151+
152+left :: PopoverEdge
153+left = PopoverEdge "left"
154+
155+right :: PopoverEdge
156+right = PopoverEdge "right"
157+
158+newtype PopoverBehavior = PopoverBehavior String
159+
160+transient :: PopoverBehavior
161+transient = PopoverBehavior "transient"
162+
163+semitransient :: PopoverBehavior
164+semitransient = PopoverBehavior "semitransient"
165+
166+applicationDefined :: PopoverBehavior
167+applicationDefined = PopoverBehavior "applicationDefined"
168+
169+newtype AlertStyle = AlertStyle String
170+
171+warning :: AlertStyle
172+warning = AlertStyle "warning"
173+
174+critical :: AlertStyle
175+critical = AlertStyle "critical"
176+
177+informational :: AlertStyle
178+informational = AlertStyle "informational"
src/Yoga/React/Native/MacOS/VideoPlayer.purs+2
@@ -3,6 +3,7 @@ module Yoga.React.Native.MacOS.VideoPlayer (nativeVideoPlayer, NativeVideoPlayer
33import React.Basic (ReactComponent)
44import Yoga.React.Native.Attributes (BaseAttributes)
55import Yoga.React.Native.Internal (FFINativeComponent_, createNativeElement_)
6+import Yoga.React.Native.MacOS.Types (ControlsStyle)
67
78foreign import _videoPlayerImpl :: forall props. ReactComponent props
89
@@ -15,4 +16,5 @@ type NativeVideoPlayerAttributes = BaseAttributes
1516 , looping :: Boolean
1617 , muted :: Boolean
1718 , cornerRadius :: Number
19+ , controlsStyle :: ControlsStyle
1820 )
src/Yoga/React/Native/MacOS/VisualEffect.purs+4−3
@@ -3,6 +3,7 @@ module Yoga.React.Native.MacOS.VisualEffect (nativeVisualEffect, NativeVisualEff
33import React.Basic (ReactComponent)
44import Yoga.React.Native.Attributes (BaseAttributes)
55import Yoga.React.Native.Internal (FFINativeComponent, createNativeElement)
6+import Yoga.React.Native.MacOS.Types (VisualEffectMaterial, BlendingMode, VisualEffectState)
67
78foreign import _visualEffectImpl :: forall props. ReactComponent props
89
@@ -10,7 +11,7 @@ nativeVisualEffect :: FFINativeComponent NativeVisualEffectAttributes
1011nativeVisualEffect = createNativeElement _visualEffectImpl
1112
1213type NativeVisualEffectAttributes = BaseAttributes
13− ( materialName :: String
14− , blendingModeName :: String
15− , stateName :: String
14+ ( materialName :: VisualEffectMaterial
15+ , blendingModeName :: BlendingMode
16+ , stateName :: VisualEffectState
1617 )