This release introduces new view types such as DatePicker
, new modifiers such as shadow
,
improves test coverage, updates dependencies, and fixes multiple bugs and crashes. Additionally,
a proof of concept GTK renderer is now available in the TokamakGTK
module.
Many thanks to (in alphabetical order) @carson-katri, @filip-sakel, @foscomputerservices, @literalpie, @mattpolzin, @mortenbekditlevsen, and @Snowy1803 for their contributions to this release!
Closed issues:
@ObservedObject
is a get-only property (#392)- What is the difference between
HTML
andDynamicHTML
? (#388) - Reduce
View.body
Visibility (#385) - Verify that type constructor names contain contain module names (#368)
- Crash when using a
View
with optional content (#362) - Set up code coverage reports on GitHub Actions (#350)
- Shadow support (#324)
- Implement
DatePicker
view in the DOM renderer (#320) TokamakDemo
build failed (#305)
Merged pull requests:
- Add
@dynamicMemberLookup
toBinding
(#396) via @carson-katri - Add
DatePicker
to theTokamakDOM
module (#394) via @Snowy1803 - Use
String(reflecting:)
vsString(describing:)
(#391) via @MaxDesiatov - Clarify the difference between
HTML
andDynamicHTML
(#389) via @MaxDesiatov - Add
_spi(TokamakCore)
to ideally internal public members (#386) via @filip-sakel - Make properties of
CGPoint
,CGSize
andCGRect
var
s instead oflet
s (#382) via @mortenbekditlevsen - Use immediate scheduler in
TestRenderer
(#380) via @MaxDesiatov - Simple Code Coverage analysis (#378) via @mattpolzin
- Add checks for metadata state (#375) via @MaxDesiatov
- Use upstream OpenCombine instead of a fork (#377) via @MaxDesiatov
- Update JavaScriptKit, OpenCombineJS dependencies (#376) via @MaxDesiatov
- Clean up metadata reflection code (#372) via @MaxDesiatov
- Add David Hunt to the list of maintainers (#373) via @MaxDesiatov
- Refactor environment injection, add a test (#371) via @MaxDesiatov
- Replace uses of the Runtime library with stdlib (#370) via @MaxDesiatov
- Use
macos-latest
agent for the GTK build (#360) via @MaxDesiatov - Add a benchmark target and a script to run it (#365) via @MaxDesiatov
- Fix crashes in views with optional content (#364) via @MaxDesiatov
- Add GTK support for
SecureField
(#363) via @mortenbekditlevsen - Add support for shadow modifier (#355) via @literalpie
- Two infinite loop fixes (#359) via @foscomputerservices
- Added
TextField
support for GTK usingGtkEntry
(#361) via @mortenbekditlevsen - Fixed a small issue with re-renderers being dropped (#356) via @foscomputerservices
- Removed an extra space that cause Safari to issue "Invalid value" (#358) via @foscomputerservices
- Add
@mortenbekditlevsen
to the list of maintainers inREADME.md
(#352) via @MaxDesiatov - Build the GTK renderer on Ubuntu on CI (#347) via @MaxDesiatov
- Add missing
Link
re-export to TokamakDOM (#351) via @MaxDesiatov - GTK shape support WIP (#348) via @mortenbekditlevsen
- Add a "bug report" issue template (#349) via @MaxDesiatov
This release fixes autocomplete in Xcode for projects that depend on Tokamak.
This release introduces support for the Image
view, which can load images bundled as SwiftPM
resources. It also adds the PreferenceKey
protocol and preference(key:value:)
,
onPreferenceChange
, backgroundPreferenceValue
, transformPreference
, and
overlayPreferenceValue
modifiers. Many thanks to @carson-katri
and @j-f1 for implementing this!
Merged pull requests:
- Add @kateinoigakukun to the list of maintainers (#310) via @MaxDesiatov
- Add
Image
implementation, bump JSKit to 0.9.0 (#155) via @j-f1 - Add Preferences (#307) via @carson-katri
- Remove unused Dangerfile.swift (#311) via @MaxDesiatov
A bugfix release that fixes Toggle
values not updated when reset from a binding. Additionally, the
embedded internal implementation of JSScheduler
is replaced with one from
OpenCombineJS
. This library is a new dependency of
Tokamak used in the DOM renderer.
Closed issues:
Toggle
value not updated when it's reset from a binding (#287)
Merged pull requests:
- Fix update of
checked
property of checkbox input (#309) via @MaxDesiatov - Use latest macOS and Xcode on CI (#308) via @MaxDesiatov
- Use
JSScheduler
fromOpenCombineJS
package (#304) via @MaxDesiatov
This is a bugfix release that fixes in-tree updates in cases where type of a view changes with conditional updates. Thanks to @vi4m for reporting the issue!
Merged pull requests:
- Pass sibling to
Renderer.mount
, fix update order (#301) via @MaxDesiatov
A bugfix release to improve compatibility with Xcode autocomplete.
Merged pull requests:
- Update Package.resolved (#300) via @kateinoigakukun
- Allow use of Combine to enable Xcode autocomplete (#299) via @MaxDesiatov
This is a compatibility release with small feature additions. Namely the Link
view is now available,
and our JavaScriptKit dependency has been updated. The latter change now allows you to open
Package.swift
package manifests of your Tokamak projects with working auto-complete in Xcode.
Also, our dark mode implementation now more closely follows SwiftUI behavior.
Many thanks to @carson-katri and @kateinoigakukun for their contributions to this release!
Closed issues:
- Can't build Tokamak project - carton dev command (#296)
- Colors should change depending on light/dark color scheme (#290)
- Pattern for handling global dom events (#284)
- 0.4.0 upgrade / regression? (#283)
Merged pull requests:
- Xcode compatibility (#297) via @kateinoigakukun
- Allow tests to be run on macOS (#295) via @MaxDesiatov
- Add Link view, update JavaScriptKit to 0.8.0 (#276) via @carson-katri
- Add
AnyColorBox
andAnyFontBox
(#291) via @carson-katri - Replace Danger with SwiftLint to improve warnings (#293) via @MaxDesiatov
- Use v5.3 tag of
swiftwasm-action
inci.yml
(#292) via @MaxDesiatov - Add @carson-katri and @kateinoigakukun to
FUNDING.yml
(#289) via @MaxDesiatov - Add
URLHashDemo
w/window.onhashchange
closure (#288) via @MaxDesiatov
This is mainly a bugfix and compatibility release with a small feature addition. Namely, Slider
view is introduced in the DOM renderer, and binding updates for SVG elements are working now. During
this development cycle efforts of our team were devoted to recently released JavaScriptKit
0.7 and carton
0.6. Both of those releases are pretty big
updates that improve developer experience significantly, and this version of Tokamak requires those
as minimum versions.
Many thanks to @j-f1 and @kateinoigakukun for their contributions to these updates!
Closed issues:
- HTML + Binding (#278)
Merged pull requests:
- Fix compatibility with JavaScriptKit 0.7 (#281) via @MaxDesiatov
- Re-export
HTML
type inTokamakDOM
(#275) via @kateinoigakukun - Use setAttribute, not properties to fix SVG update (#279) via @MaxDesiatov
- Allow non-body mount host node (#271) via @kateinoigakukun
- Add missing JavaScriptKit import to
README.md
(#265) via @MaxDesiatov - Fix the sizing of sliders (#268) via @j-f1
- Add
Slider
implementation (#228) via @j-f1 - Remove Xcode 12 warning from README.md (#264) via @MaxDesiatov
This release improves compatibility with the SwiftUI API and fixes bugs in our WebAssembly/DOM renderer, included but not limited to:
- support for
App
/Scene
lifecycle; ColorScheme
detection and environment setting;- dark mode styles;
@StateObject
property wrapper implementation;SidebarListStyle
,ButtonStyle
,GeometryProxy
types;NavigationView
andGeometryReader
views.
Additionally, new TokamakStaticHTML
renderer was added that supports rendering stateless views into static HTML that doesn't include any JavaScript or WebAssembly dependencies. This is useful for static websites and in the future could be used together with TokamakDOM
for server-side rendering.
Tokamak 0.3.0 now requires 5.3 snapshots of SwiftWasm, which in general should be more stable than the development snapshots that were previously used, and is also compatible with Xcode 12 betas. If you have a .swift-version
file in your project, you should specify wasm-5.3-SNAPSHOT-2020-07-27-a
in it or a later 5.3 snapshot, otherwise carton
0.5 selects a compatible 5.3 snapshot for you automatically. Allowing carton
to select a default snapshot is the recommended approach, so in general we recommend avoiding .swif-version
files in projects that use Tokamak.
Many thanks to @carson-katri, @j-f1, and @Outcue for their contributions to this release.
The complete list of changes included in this release is available below.
Closed issues:
- Command "carton dev" failed (#258)
- Dark mode detection causes crashes in Safari (#245)
- Add dark color scheme style (#237)
- Establish App lifecycle as the only way to start rendering (#224)
- Runtime issues with dynamic properties in
App
types (#222) List
appearance changes when reloaded (#212)- List scrolling does not work on Firefox 78 on macOS (#211)
- Scrolling broken when
List
is child ofNavigationView
(#208) Rectangle
frame is not being set properly (#185)- Implement
SidebarListStyle
(#180) - Implement
GeometryReader
/GeometryProxy
(#176) @StateObject
support (#158)- NavigationView/NavigationLink (#129)
Merged pull requests:
- Set versions of dependencies in
Package.swift
(#262) via @MaxDesiatov - Implement
StateObject
property wrapper (#260) via @MaxDesiatov - Fix
NavigationView
broken state after re-render (#259) via @MaxDesiatov - Add
GeometryReader
implementation (#239) via @MaxDesiatov - Add default dark styles for Views (#241) via @carson-katri
- Link to the renderers guide from
README.md
(#251) via @MaxDesiatov - Use the latest 5.3 snapshot in
.swift-version
(#252) via @MaxDesiatov - Fix color scheme observer crashes in Safari (#249) via @MaxDesiatov
- Update to the latest version of SwiftFormat (#250) via @MaxDesiatov
- Split demo list into sections (#243) via @j-f1
- Remove some
AnyView
in theList
implementation (#246) via @MaxDesiatov - Add
_targetRef
and_domRef
modifiers (#240) via @MaxDesiatov - Add
ColorScheme
environment (#136) via @MaxDesiatov - Add
redacted
modifier (#232) via @carson-katri - Add Static HTML Renderer and Documentation (#204) via @carson-katri
- Fix tests, move
DefaultButtonStyle
to TokamakCore (#234) via @MaxDesiatov - Remove
DefaultApp
, makeDOMRenderer
internal (#227) via @MaxDesiatov - Add basic
ButtonStyle
implementation (#214) via @MaxDesiatov - Make reconciler tests build and run on macOS (#229) via @MaxDesiatov
- Fix environment changes causing remounted scenes with lost state (#223) via @MaxDesiatov
- Add
DefaultApp
type to simplifyDOMRenderer.init
(#217) via @MaxDesiatov - Implement
SidebarListStyle
(#210) via @Outcue - Unify code of
MountedApp
/MountedCompositeView
(#219) via @MaxDesiatov - Generalize style and environment in
DOMRenderer
(#215) via @MaxDesiatov - Implement
DynamicProperty
(#213) via @carson-katri - Warn against beta versions of Xcode in README.md (#207) via @MaxDesiatov
- Fix typo in
TokamakDemo.swift
(#206) via @MaxDesiatov - Update "Requirements" and "Getting started" README sections (#205) via @MaxDesiatov
- Initial
NavigationView
implementation (#130) via @j-f1 - Add SwiftUI App Lifecycle (#195) via @carson-katri
This is the first release that supports WebAssembly and browser apps with the new TokamakDOM
module. The API now closely follows SwiftUI, while the new React-like API is no longer available.
Unfortunately, since older versions of iOS don't support opaque
types, and you already can use
SwiftUI on iOS versions that do support it, iOS and macOS renderers are no longer available. Many
thanks to @carson-katri, @j-f1,
@helje5, @hodovani,
@Outcue, @filip-sakel and
@noontideox for their contributions to this release!
Closed issues:
- State vars have to be first (#190)
- Implicit 8 pixel margin added to html body (#188)
- Unable to set Color value (#186)
- Crash in protocol conformance code (#167)
- Extend Path to match the SwiftUI API (#156)
- Some primitive Views cannot access @Environment (#139)
- Logo for the project (#132)
- ZStack? (#111)
- View has - by default - a Body of type Never. (#110)
- Getting value of type 'String' has no member 'components' (#108)
- Does iOS 10 work? (#105)
- Add Tokamak project linter (#77)
- Ambiguous reference to member 'node' (#68)
Merged pull requests:
- Move view files to separate subdirectories (#194) via @MaxDesiatov
- Add
UIColor
stub and newColor.init(_:UIColor)
(#196) via @MaxDesiatov - Add Toggle implementation (#159) via @j-f1
- Add
TokamakShim
module to simplify imports (#192) via @MaxDesiatov - Organize all the re-exports into a single file (#193) via @j-f1
- Add
Picker
andPopUpButtonPickerStyle
as default (#149) via @MaxDesiatov - Add @EnvironmentObject (#170) via @carson-katri
- Allow non-consecutive state variables (#191) via @j-f1
- Add @ObservedObject implementation (#171) via @MaxDesiatov
- Avoid AnyView in the Counter code (#168) via @MaxDesiatov
- Mention
#webassembly
SwiftPM Slack channel in README.md (#187) via @MaxDesiatov - Add LazyHGrid and LazyVGrid (#179) via @carson-katri
- Implement
static func Binding<Value>.constant
(#178) via @MaxDesiatov - Extend Color to match SwiftUI (#177) via @carson-katri
- Add Text concatenation via + operator (#174) via @carson-katri
- Extend Path to match SwiftUI (#172) via @carson-katri
- Allow modified views to fill their parent if a child requires it (#165) via @carson-katri
- Build macOS demo on CI (#164) via @MaxDesiatov
- Add List and related Views (#147) via @carson-katri
- ViewBuilder buildIf fix (#162) via @carson-katri
- Use
let
instead ofvar
inTextFieldStyleKey: EnvironmentKey
(#160) via @MaxDesiatov - Update Acknowledgments section in README.md (#157) via @MaxDesiatov
- Credit SwiftWebUI in a special way in README.md (#140) via @MaxDesiatov
- Add Group implementation (#150) via @MaxDesiatov
- Update AnyView status in progress.md (#151) via @MaxDesiatov
- Use a range instead of an array in ForEach (#153) via @MaxDesiatov
- Documentation comments (#143) via @carson-katri
- Add Xcode project and native targets (#142) via @j-f1
- Add AppearanceActionModifier, onAppear/onDisappear (#145) via @MaxDesiatov
- Add doc comment to the ViewDeferredToRenderer protocol (#144) via @MaxDesiatov
Update example code in README for CocoaPods page.
Update rendered README.md on CocoaPods page.
First release with an iOS renderer for UIKit and a basic macOS renderer for AppKit.