Commit Graph

548 Commits

Author SHA1 Message Date
Max Desiatov 362be5a5fa
Add missing `Link` re-export to TokamakDOM (#351) 2021-01-13 01:05:13 +00:00
Morten Bek Ditlevsen 25e2191154
GTK shape support WIP (#348)
* GTK shape support

* Support for ellipsis

* Allow drawing 'outside' of current frame. Experimental.

* Correctly support Capsules (rounded rects with nil cornerSize)

* Use boundingRect.size for Path size

* Refactored GdkRGBA from AnyColorBox.ResolvedValue to be reusable

* Added 'resolveToCairo(in environment:)' extension on Color

* Create slightly lighter View type hierarchies.
2021-01-12 12:09:25 +01:00
Max Desiatov b55f703972
Add a "bug report" issue template (#349)
* Add a "bug report" issue template

We currently receive bug reports that don't always provide a self-contained code sample or screenshots to help us reproduce issues quickly or to add test cases. I hope that this issue template alleviates that.

* Apply suggestions from code review

Co-authored-by: Jed Fox <git@jedfox.com>

Co-authored-by: Jed Fox <git@jedfox.com>
2021-01-08 14:53:17 +00:00
Morten Bek Ditlevsen a97a05ffd2
Allow gtk modifiers to be expressed as css attributes. (#345) 2020-12-31 23:15:00 +01:00
Max Desiatov c9877dcbd7
GTK: `background` modifier, support widget updates in `WidgetView` (#344)
Re-created #340.

* Added background modifier support for color backgrounds

* Fix indentation

* Allow WidgetView to be initialized with an update closure in order to fix updates to children of WidgetViews

* Fix indentation

Co-authored-by: Morten Bek Ditlevsen <morten@ka-ching.dk>
2020-12-26 19:22:16 +00:00
Max Desiatov 6ef59293f5
Add `Image` implementation to the GTK renderer (#343)
* Add rudimentary Image support

* Added Image implementation and sample image

* Updated sample and scaled down image

* Removed commented code

* Update main.swift

Co-authored-by: Morten Bek Ditlevsen <morten@ka-ching.dk>
2020-12-26 19:21:01 +00:00
Max Desiatov 99bcfd12b9
Add `GTK renderer` to the list of supported labels 2020-12-26 16:26:10 +00:00
Max Desiatov bd38866cb2
Add basic GTK renderer code (#333)
Based on the work discussed in #306.

* TokamakGTK implementation

* Fix macOS GTK Renderer impl

* Always release text in Picker. Use 'destroy_data' parameter to release closure boxes in GSignal.swift

* Revert commenting out this code

* Specify the product explicitly in Makefile

* Add GTK renderer build for macOS on CI

* Prevent xcodebuild from seeing GTK code

Co-authored-by: Carson Katri <carson.katri@gmail.com>
Co-authored-by: Morten Bek Ditlevsen <morten@ka-ching.dk>
2020-12-26 16:11:06 +00:00
Jed Fox 8e5ad7f67f
Remove extra `path` element (#341)
The blue capsule in the PathDemo, rendered to HTML:

```diff
 <svg style="width: 100%;height: 100%; overflow: visible;">
   <rect
     x="0.0"
     height="100%"
     width="100%"
     y="0.0"
     ry="50%"
     stroke-width="0.0"
   ></rect>
-  <path style="stroke-width: 0.0;" d=""></path>
 </svg>
```

* Run swiftformat

* Remove excess `path` element
2020-12-22 23:03:00 +00:00
Max Desiatov 3c97be617a
Update script injection code in `README.md` (#332)
This code had a missing `document` reference, and was plain outdated and not working with the latest version of JavaScriptKit.

Also, it turns out that `insertAdjacentHTML` does not work for script injection, although it does seem to work for styles injection. Separate `createElement`, `setAttribute`, and `appendChild` calls do seem to work for scripts.
2020-12-19 15:28:30 +00:00
David Hunt ba17b79b1d
Added some missing TokamakDOM/Core type typealiases (#331) 2020-12-10 10:42:59 +00:00
Max Desiatov 99581929a2
Add `TextEditor` implementation (#329)
* Add `TextEditor` implementation

Resolves #173.

* Clean up and bump requirements in the demo project

* Use a single `_tokamak-formcontrol` CSS class

* Add missing CSS class to `TextEditor.swift`

Co-authored-by: Jed Fox <git@jedfox.com>

Co-authored-by: Jed Fox <git@jedfox.com>
2020-12-07 21:13:24 +00:00
Max Desiatov 302cd3b108
Add `PreviewProvider` protocol (#328)
* Add `PreviewProvider` protocol

No functionality behind, just makes it easier to integrate with existing SwiftUI projects.

* Update PreviewProvider.swift

* Add missing preview-related types and modifiers
2020-12-07 17:55:20 +00:00
Max Desiatov 8230e98072
Add Discord link to `README.md` 2020-12-06 17:12:22 +00:00
Max Desiatov b4b0efca4d
Bump version to 0.6.1, update `CHANGELOG.md` 2020-12-06 14:34:12 +00:00
Max Desiatov e7f295954f
Add macOS `xcodebuild` invocation to `ci.yml` 2020-12-06 14:28:48 +00:00
Max Desiatov 37cdf6e454
Use `lowercased()` to fix Xcode autocomplete issue 2020-12-06 14:21:50 +00:00
Max Desiatov 8ad964c2f9
Mark `Link` view as implemented in `progress.md` 2020-12-06 13:56:53 +00:00
Max Desiatov abceb8609f
Update progress.md 2020-12-04 11:38:01 +00:00
Max Desiatov 2f97ecfe16
Bump version to 0.6.0, update `CHANGELOG.md` 2020-12-04 11:35:22 +00:00
Max Desiatov 1b814d0583
Add @kateinoigakukun to the list of maintainers (#310) 2020-12-04 11:20:26 +00:00
Jed Fox 797c0d849f
Add `Image` implementation, bump JSKit to 0.9.0 (#155)
* Add Image view

* Add image to demo

* Update progress.md

* Alt text

* Use Bundle type to load images, remove systemName

* Add `logo-header.png` resource to `TokamakDemo`

* Reduce image size in the demo

* Allow bundles passed to `Image` to be optional

* Pass `nil` as a default `bundle` to `Image`

Co-authored-by: Max Desiatov <max@desiatov.com>
2020-12-04 11:19:55 +00:00
Carson Katri 9d347f49f3
Add Preferences (#307)
This adds the `PreferenceKey` protocol and related modifiers.

* Initial PreferenceKey implementation

* Don't send default value to match SwiftUI behavior

* Add CustomDebugStringConvertible conformance to Color

* PR fixes

* Fix onAppear and preference modification calls

* Attempt macOS build fix

* Fix <background/overlay>PreferenceValue

* Implement/revise transformPreference

* Fix linter warnings, apply SwiftFormat

Co-authored-by: Max Desiatov <max@desiatov.com>
2020-12-04 11:19:14 +00:00
Max Desiatov 2e8e458b9c
Remove unused Dangerfile.swift (#311)
We already use SwiftLint as a separate action, and don't run Danger checks on CI anyway.
2020-11-28 14:31:51 +00:00
Max Desiatov cabe5abef5
Bump version to 0.5.3, update `CHANGELOG.md` 2020-11-28 11:39:30 +00:00
Max Desiatov dfcacc862f
Fix update of `checked` property of checkbox input (#309)
Resolve #287.

The `checked` attribute is a peculiar one, as any value on it keeps the checkbox checked. Attribute updates in `DOMRenderer` don't handle removals of attributes, but this seems to be the only case where this is relevant. I've added special handling for this attribute and checkbox inputs, and also had to declare `HTMLAttribute.checked` to set `isUpdatedAsProperty: true` on it for it to fully work.
2020-11-28 11:27:18 +00:00
Max Desiatov c754b313ef
Use latest macOS and Xcode on CI (#308)
* Use latest macOS and Xcode on CI

* Update ci.yml
2020-11-27 14:17:45 +00:00
Max Desiatov b26eb71f3e
Fix `carton dev` guidance for the demo product 2020-11-26 13:53:23 +00:00
Max Desiatov 05465be93d
Use `JSScheduler` from `OpenCombineJS` package (#304)
Now that OpenCombineJS had its first release, we can rely on its `JSScheduler` implementation.
2020-11-26 09:01:54 +00:00
Max Desiatov d5a50e7045
Bump version to 0.5.2, update CHANGELOG and README 2020-11-12 14:44:16 +00:00
Max Desiatov 3451d9ea12
Pass sibling to `Renderer.mount`, fix update order (#301)
Resolves, but adds no tests cases to the test suite for #294. See the issue for the detailed description of the problem.

I will add end-to-end tests for this in future PRs.

I've tested these cases manually so far:

```swift
struct Choice: View {
  @State private var choice = false

  var body: some View {
    HStack {
      Button("Trigger") {
        choice.toggle()
      }
      if choice {
        Group {
          Text("true")
          Text("true")
        }
      } else {
        VStack {
          Text("false")
        }
      }
      Text("end")
    }
  }
}
```

Note the `Group` view with multiple children in this one, it uncovered required checks for `GroupView` conformance.

Also tested these more simple cases:

```swift
struct Choice: View {
  @State private var choice = false

  var body: some View {
    HStack {
      Button("Trigger") {
        choice.toggle()
      }
      if choice {
        Group {
          // single child
          Text("true")
        }
      } else {
        VStack {
          Text("false")
        }
      }
      Text("end")
    }
  }
}
```

and

```swift
struct Choice: View {
  @State private var choice = false

  var body: some View {
    HStack {
      Button("Trigger") {
        choice.toggle()
      }
      if choice {
        // single child, no nesting
        Text("true")
      } else {
        VStack {
          Text("false")
        }
      }
      Text("end")
    }
  }
}
```
2020-11-11 19:34:45 +00:00
Max Desiatov 33adba20ab
Fix build after SwiftFormat changes 2020-11-09 12:47:27 +00:00
Max Desiatov fb3ab974df
Bump version to 0.5.1, update `CHANGELOG.md` 2020-11-09 12:27:26 +00:00
Max Desiatov f24a09f006
Apply latest SwiftFormat 2020-11-09 12:27:17 +00:00
Max Desiatov bff7c1bf27
Remove unused `.swift-version` file 2020-11-09 12:25:04 +00:00
Yuta Saito c813061b17
Update Package.resolved (#300) 2020-11-09 12:20:41 +00:00
Max Desiatov 7320de9857
Allow use of Combine to enable Xcode autocomplete (#299)
It looks weird, but it works 🤷‍♂️
2020-11-09 12:20:22 +00:00
Max Desiatov 082fa19398
Fix linter warning 2020-11-09 12:02:25 +00:00
Max Desiatov 18da2d279e
Fix typo in CHANGELOG.md 2020-11-08 23:47:03 +00:00
Max Desiatov 014383f751
Bump version to 0.5.0, update `CHANGELOG.md` (#298)
* Bump version to 0.5.0, update `CHANGELOG.md`

* Update CHANGELOG.md

Co-authored-by: Carson Katri <Carson.katri@gmail.com>

Co-authored-by: Carson Katri <Carson.katri@gmail.com>
2020-11-08 23:22:36 +00:00
Yuta Saito af08c1a6f6
Xcode compatibility (#297)
* Ignore xcodeproj generated by SwiftPM

* Update to use official OpenCombine to avoid Xcode build error

* Use forked version with ObservableObject implementation

* Fix ambigious error

* Ignore SwiftPM edit mode package

* Update toolchain version
2020-11-08 19:42:25 +09:00
Max Desiatov 9681b91a84
Allow tests to be run on macOS (#295)
Requires #276 to be merged, as earlier versions of JavaScriptKit can't be depended on in macOS builds due to unsafe flags.

* Add Link View

* Add Publish support

* Remove #if checks

* Upgrade swift snapshot

* Try swiftwasm-action@main

* Remove Publish support from this repo

* Remove TokamakPublish target

* Allow tests to be run on macOS

* Update `ci.yml` to build and run the test product

* Trigger CI on all PRs without branch restrictions

* Rename linux_build to swiftwasm_build in ci.yml

Co-authored-by: Carson Katri <carson.katri@gmail.com>
2020-11-07 10:11:35 +00:00
Carson Katri 348408eba1
Add Link view, update JavaScriptKit to 0.8.0 (#276)
* Add Link View

* Add Publish support

* Remove #if checks

* Upgrade swift snapshot

* Try swiftwasm-action@main

* Remove Publish support from this repo

* Remove TokamakPublish target
2020-11-05 16:37:56 -05:00
Carson Katri a5da04989e
Add `AnyColorBox` and `AnyFontBox` (#291)
* Add AnyColorBox implementation

* Add TokenDeferredToRenderer

* Implement AnyFontBox

* Add Any[Color/Font]BoxDeferredToRenderer

* Resolve linter errors

* Appease the linter
2020-10-28 18:26:42 -04:00
Max Desiatov 94dc934fe4
Replace Danger with SwiftLint to improve warnings (#293)
Looks like the Danger action duplicates warning comments. The new SwiftLint action does not, although warnings only show up in the diff view, which I think is an acceptable trade-off.
2020-10-27 21:43:42 +00:00
Max Desiatov 1e43d98bb2
Use v5.3 tag of `swiftwasm-action` in `ci.yml` (#292)
`swiftwasm-action@master` no longer exists, and we should use a tag to rely on more stable action code anyway.
2020-10-25 12:40:48 +00:00
Max Desiatov af225afab7
Add @carson-katri and @kateinoigakukun to `FUNDING.yml` (#289)
* Add @carson-katri and @kateinoigakukun to `FUNDING.yml`

* Update README.md
2020-10-07 08:07:45 +01:00
Max Desiatov dbd1ee46c4
Add `URLHashDemo` w/ `window.onhashchange` closure (#288)
* Add `URLHashDemo` w/ `window.onhashchange` closure

Resolves #284

* Assign `.undefined` in HashState.deinit
2020-10-06 21:18:18 +01:00
Max Desiatov a631d181e6
Update required `carton` version in `README.md` 2020-10-04 18:16:23 +01:00
Max Desiatov b5b68c4186
Update `CHANGELOG.md` for 0.4.0 release 2020-09-30 11:22:45 +01:00