<commit_before># Unreleased

## RangeControl
- `LinearRangeBehavior` now correctly responds to `UserStep` values, providing quantized input
- Fixed `RangeControl.RelativeValue` to properly update when bound in UX
- Allowed `Minimum` to be less than `Maximum` on `RangeControl` making it easier to do left-to-right `100..0` ranges.

## ScrollViewPager
- Fixed a NullReferenceError that could happen while using ScrollViewPager in preview

## DatePicker
- Introduced Fuse.Controls.DatePicker class, which wraps native date pickers on Android and iOS. See the `DatePicker` class documentation for more details.

## TimePicker
- Introduced Fuse.Controls.TimePicker class, which wraps native time pickers on Android and iOS. See the `TimePicker` class documentation for more details.

## TextView
- Fixed bug on Android where setting `TextWrapping="NoWrap"` would force the `TextView` to be single line. New behavior is to instead allow the view to scroll horizontally instead of automatically wrapping the text.

## MultiDensityImageSource
- Added native support, meaning it can be used by images inside a `NativeViewHost`.

## Video
- Fixed bug in Video where playback actions, like `Play`, used before the video was initialized would end up getting swallowed.
- Added some JavaScript methods to `Video` to make it easier to control playback from JavaScript, as well as obtaining information the video duration.
- Made `Video.Duration` and `Video.Position` property-bindable.

## Fuse.Marshal:
- Fixed a bug where UX expressions that produce two component floats did not expand to four compoent floats the same same way as literals did.

## Fuse.Reactive framework changes (Uno-level)
- These are breaking changes, but very unlikely to affect your app:
 * The `DataBinding`, `EventBinding` and `ExpressionBinding` class constructors no longer take a `NameTable` argument.
 * The `Name` and `This` expression classes has been removed. The UX compiler will now compile these as `Constant` expressions that contain the actual objects instead.
 * The `IContext` interface no longer contains the `NameTable` property.
 * The `Fuse.IRaw` interface removed (now internal to the `Fuse.Reactive.JavaScript` package). Had no practical public use.
 * The `Fuse.Reactive.ListMirror` class is no longer public. This was never intended to be public and has no practical public application.
 * Added detailed docs for many of the interfaces in the `Fuse.Reactive` namespace.
 * The `Fuse.Reactive.IWriteable` interface has changed (breaking!). The method signature is now `bool TrySetExclusive(object)` instead of `void SetExclusive(object)`. Unlikely to affect your code.
 * `IObservable` and `IObservableArray` no longer push their initial value on `Subscribe`.


# 1.3

## 1.3.0

### Native UI:
- Fixed bug on iOS that could cause native views from thirdparty libraries to get an incorrect position. (Fixes issues with Firebase AdMob)

### JavaScript: Optional explicit require() of UX symbols
- Symbols declared with `ux:Name`, `ux:Dependency` or `dep` are now also available to `require()` for `<JavaScript>` modules using the `ux:` prefix. This allows us to write code that plays nicer with transpilers and linters. Using require for names declared in UX is optional, but may make the code more readable and maintainable, e.g. `var router = require("ux:router")` over just using `router` with no declaration.

### Fuse.Drawing.Surface
- Fixed a problem where horizontal or vertical lines would not draw in the .NET backend.

### Attract
- Fixed an issue with `attract` not updating when using a data binding as the source value

### Fonts
- Fixed bug where the default font on Android could end up being null.

### ViewHandle
- Fixed issue where Images with Mask could end up not displaying. This happend due to unnecessary invalidation of the implicit native GraphicsView in the app root. This invalidation was introduced when the Surface API was implemented for native. Invalidation is now opt-in on ViewHandle

### Fuse.Drawing.Primitives
- Fixed issue where Circles could draw incorrect due to floating point precision
- Fixed issue where Rectangles could render incorreclty due to FP16 precision limitation.

### Navigation
- Added `Navigator.Pages` to bind the local history to an observable/model
- Added `PageControl.Pages` to bind the list of available pages to an observable/model
- Fixed the semantics of `PageControl.ActiveIndex` to work with dynamic pages. The output, getter, will only be updated when the navigation is intentionally changed to a new page. Previously it would always reflect the current page, which causes problem with dynamic pages. The variation between th desired target and actual target only lasts while the desired target is not yet rooted.
- Changed how `Router` maintains history. This resolves several minor issues, including local histories (though this isn't fully exposed yet). It's intended to be backwards compatible for all known use-cases.
- Changed `IRouterOutlet` and related types to be internal. This was not meant to be public as it's a private detail of the navigation system and could not be implemented correctly by users.
- Removed the `Navigator` `IsReusable` property. These were deprecated over a year ago. Use `Resuse="Any"` instead.
- Removed `PageControl.TransitionEasing` and `Pagecontrol.TransitionDuration`. These were deprecated over a year ago. Use a `NavigationMotion` object instead with `GotoEasing` and `GotoDuration` properties.
- Removed `PageIndicator.DotTemplate` and `PageIndicator.DotFactor`. These were deprecated over a year ago. Use a `ux:Tempate="Dot"` child instead.
- Removed `Navigation.PageData`. It was always meant to be internal and has no public use.
- Allowed `GoBack` and `WhileCanGoBack` on the router to properly interact with bound observable/model `PageHistory`

### ScriptClass
- Added ScriptPromise. This adds support for passing Promises between Uno and the scripting engine. Very useful when dealing with async stuff and JavaScript
- Added ScriptReadonlyProperty. This feature lets you expose readonly data in JavaScript. Useful for exposing constants for example

### WebView
Fixed issue where custom URI schemes were matched too greedily in URLs, making for erroneously intercepted URL requests.

### Delay Push Notification Registration on iOS

On iOS you can now put the following in your unoproj file:

```
    "iOS": {
        "PushNotifications": {
            "RegisterOnLaunch": false
        }
    },
```
which will stop push notifications registering (and potentially asking for permissions) on launch. Your must then call `register()` from JS when you wish to begin using push notifications. On android this option & register are silently ignored.

### Image
- Fixed issue where an `<Image />` could fail to display inside a `<NativeViewHost />` on iOS
- Fixed an issue where a JPEG image from a misconfigured server using `image/jpg` would fail to load.

### Each
- Fixed a bug where replacing the whole list of items with an empty list would not immediately remove the items from the UI.

### Router
- Added several features to allow navigation/routing from within UX, whereas previously JavaScript code was required.
- Added `ModifyRoute`, `GotoRoute` and `PushRoute` actions to replace `RouterModify`. These all have a `Path` property.
	<Each Items="{tags}">
		<Text Value="{tag}"><commit_msg>Added CHANGELOG.md entry for commit <PASSWORD><commit_after># Unreleased

## RangeControl
- `LinearRangeBehavior` now correctly responds to `UserStep` values, providing quantized input
- Fixed `RangeControl.RelativeValue` to properly update when bound in UX
- Allowed `Minimum` to be less than `Maximum` on `RangeControl` making it easier to do left-to-right `100..0` ranges.

## ScrollViewPager
- Fixed a NullReferenceError that could happen while using ScrollViewPager in preview

## DatePicker
- Introduced Fuse.Controls.DatePicker class, which wraps native date pickers on Android and iOS. See the `DatePicker` class documentation for more details.

## TimePicker
- Introduced Fuse.Controls.TimePicker class, which wraps native time pickers on Android and iOS. See the `TimePicker` class documentation for more details.

## TextView
- Fixed bug on Android where setting `TextWrapping="NoWrap"` would force the `TextView` to be single line. New behavior is to instead allow the view to scroll horizontally instead of automatically wrapping the text.

## MultiDensityImageSource
- Added native support, meaning it can be used by images inside a `NativeViewHost`.

## Video
- Fixed bug in Video where playback actions, like `Play`, used before the video was initialized would end up getting swallowed.
- Added some JavaScript methods to `Video` to make it easier to control playback from JavaScript, as well as obtaining information the video duration.
- Made `Video.Duration` and `Video.Position` property-bindable.

## Fuse.Marshal:
- Fixed a bug where UX expressions that produce two component floats did not expand to four compoent floats the same same way as literals did.

## Fuse.Reactive framework changes (Uno-level)
- These are breaking changes, but very unlikely to affect your app:
 * The `DataBinding`, `EventBinding` and `ExpressionBinding` class constructors no longer take a `NameTable` argument.
 * The `Name` and `This` expression classes has been removed. The UX compiler will now compile these as `Constant` expressions that contain the actual objects instead.
 * The `IContext` interface no longer contains the `NameTable` property.
 * The `Fuse.IRaw` interface removed (now internal to the `Fuse.Reactive.JavaScript` package). Had no practical public use.
 * The `Fuse.Reactive.ListMirror` class is no longer public. This was never intended to be public and has no practical public application.
 * Added detailed docs for many of the interfaces in the `Fuse.Reactive` namespace.
 * The `Fuse.Reactive.IWriteable` interface has changed (breaking!). The method signature is now `bool TrySetExclusive(object)` instead of `void SetExclusive(object)`. Unlikely to affect your code.
 * `IObservable` and `IObservableArray` no longer push their initial value on `Subscribe`.


# 1.3

## 1.3.0

### Native UI:
- Fixed bug on iOS that could cause native views from thirdparty libraries to get an incorrect position. (Fixes issues with Firebase AdMob)

### JavaScript: Optional explicit require() of UX symbols
- Symbols declared with `ux:Name`, `ux:Dependency` or `dep` are now also available to `require()` for `<JavaScript>` modules using the `ux:` prefix. This allows us to write code that plays nicer with transpilers and linters. Using require for names declared in UX is optional, but may make the code more readable and maintainable, e.g. `var router = require("ux:router")` over just using `router` with no declaration.

### Fuse.Drawing.Surface
- Fixed a problem where horizontal or vertical lines would not draw in the .NET backend.

### Attract
- Fixed an issue with `attract` not updating when using a data binding as the source value

### Fonts
- Fixed bug where the default font on Android could end up being null.

### ViewHandle
- Fixed issue where Images with Mask could end up not displaying. This happend due to unnecessary invalidation of the implicit native GraphicsView in the app root. This invalidation was introduced when the Surface API was implemented for native. Invalidation is now opt-in on ViewHandle

### Fuse.Drawing.Primitives
- Fixed issue where Circles could draw incorrect due to floating point precision
- Fixed issue where Rectangles could render incorreclty due to FP16 precision limitation.

### Navigation
- Added `Navigator.Pages` to bind the local history to an observable/model
- Added `PageControl.Pages` to bind the list of available pages to an observable/model
- Fixed the semantics of `PageControl.ActiveIndex` to work with dynamic pages. The output, getter, will only be updated when the navigation is intentionally changed to a new page. Previously it would always reflect the current page, which causes problem with dynamic pages. The variation between th desired target and actual target only lasts while the desired target is not yet rooted.
- Changed how `Router` maintains history. This resolves several minor issues, including local histories (though this isn't fully exposed yet). It's intended to be backwards compatible for all known use-cases.
- Changed `IRouterOutlet` and related types to be internal. This was not meant to be public as it's a private detail of the navigation system and could not be implemented correctly by users.
- Removed the `Navigator` `IsReusable` property. These were deprecated over a year ago. Use `Resuse="Any"` instead.
- Removed `PageControl.TransitionEasing` and `Pagecontrol.TransitionDuration`. These were deprecated over a year ago. Use a `NavigationMotion` object instead with `GotoEasing` and `GotoDuration` properties.
- Removed `PageIndicator.DotTemplate` and `PageIndicator.DotFactor`. These were deprecated over a year ago. Use a `ux:Tempate="Dot"` child instead.
- Removed `Navigation.PageData`. It was always meant to be internal and has no public use.
- Allowed `GoBack` and `WhileCanGoBack` on the router to properly interact with bound observable/model `PageHistory`

### ScriptClass
- Added ScriptPromise. This adds support for passing Promises between Uno and the scripting engine. Very useful when dealing with async stuff and JavaScript
- Added ScriptReadonlyProperty. This feature lets you expose readonly data in JavaScript. Useful for exposing constants for example

### WebView
Fixed issue where custom URI schemes were matched too greedily in URLs, making for erroneously intercepted URL requests.

- Exported the methods goBack, goForward, reload and stop for use in FuseJS

### Delay Push Notification Registration on iOS

On iOS you can now put the following in your unoproj file:

```
    "iOS": {
        "PushNotifications": {
            "RegisterOnLaunch": false
        }
    },
```
which will stop push notifications registering (and potentially asking for permissions) on launch. Your must then call `register()` from JS when you wish to begin using push notifications. On android this option & register are silently ignored.

### Image
- Fixed issue where an `<Image />` could fail to display inside a `<NativeViewHost />` on iOS
- Fixed an issue where a JPEG image from a misconfigured server using `image/jpg` would fail to load.

### Each
- Fixed a bug where replacing the whole list of items with an empty list would not immediately remove the items from the UI.

### Router
- Added several features to allow navigation/routing from within UX, whereas previously JavaScript code was required.
- Added `ModifyRoute`, `GotoRoute` and `PushRoute` actions to replace `RouterModify`. These all have a `Path` property.
	<Each Items="{tags}">
		<Text Value="{tag}">
{'fraction_non_alphanumeric': 0.06576298483425044, 'fraction_numerical': 0.0014763119044423566, 'mean_word_length': 4.628021148036254, 'pattern_counts': {'":': 6, '<': 14, '<?xml version=': 0, '>': 14, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3542079', 'n_tokens_mistral': 3784, 'n_tokens_neox': 3583, 'n_words': 2020}