Skip to content

Repository files navigation

DiffableTextViews

An open source package for as-you-type formatting in SwiftUI.

NumberPattern

Features

FeatureDescription
⌨️ResponsiveFormats text as you type
🪄AutomagicalBinds text to appropriate types
✔️ProperValidates and autocorrects
🛠️VersatileUses snapshots and attributes
🏃‍♂️PerformantO(n) differentiation algorithms
🏝️StandaloneUses no remote dependencies
📖Open100% transparent

Installation

How to install this package.

Xcode (SPM)

  1. Select https://github.com/oscbyspro/DiffableTextViews
  2. Select a VERSIONED release (5.0.0)

Package.swift

.package(url:"https://github.com/oscbyspro/DiffableTextViews", from:"5.0.0"),

Requirements

VersionSwiftiOSiPadOSMac CatalysttvOS
5.0.0+5.7+15.0+15.0+15.0+15.0+

Apps

The example app provides quick-and-easy-to-use customization tools.

NumberPattern
NumberPattern

Installation

Download this package and compile/run it with Xcode.

Views

DiffableTextField

A text field that binds values and formats them as you type.

Features

FeatureDescription
📱SwiftUIValue, style, done
⛰️EnvironmentUses environment values
🔎FocusSupports SwiftUI.FocusState

Environment

environment(\.locale, _:)environment(\.layoutDirection, _:)diffableTextViews_autocorrectionDisabled(_:)diffableTextViews_font(_:)diffableTextViews_foregroundColor(_:)diffableTextViews_multilineTextAlignment(_:)diffableTextViews_onSubmit(_:)diffableTextViews_submitLabel(_:)diffableTextViews_textContentType(_:)diffableTextViews_textFieldStyle(_:)diffableTextViews_textInputAutocapitalization(_:)diffableTextViews_tint(_:)diffableTextViews_toolbarDoneButton(_:)

Styles

NumberTextStyle (Source, Tests)

A style that binds localized numbers using various formats.

Features

FeatureDescription
🪙ValuesDecimal, Double, (U)Int(8-64)
OptionalStandard and optional values
🎨FormatsNumber, currency and percent
🧱BoundsClamps values to bounds
🏹PrecisionUp to 38 digits of precision
🏞️LocalesSupports Foundation.Locale
2️⃣BilingualAccepts local and ASCII input 

Examples

Number

import DiffableTextViews
import SwiftUI
//*============================================================================*
// MARK: * Number [...]
//*============================================================================*
structContentView:View{typealiasAmount=Decimal // Decimal, Double, (U)Int(8-64), Optional<T>
//=------------------------------------------------------------------------=
@Statevaramount=0asAmount@StatevarcurrencyCode="SEK"@Statevarlocale=Locale(identifier:"sv_SE")
//=------------------------------------------------------------------------=
varbody:someView{DiffableTextField(value: $amount){.currency(code: currencyCode)
// .bounds((0 as Amount)...) // autocorrects while view is in focus
// .precision(integer: 1..., fraction: 2) // default is appropriate
// .locale(Locale(identifier: "en_US")).constant() // ignores sv_SE
}.environment(\.locale, locale).diffableTextViews_font(.body.monospaced()).diffableTextViews_keyboardType(.decimalPad)}}

PatternTextStyle (Source, Tests)

A style that processes characters laid out in custom patterns.

Features

FeatureDescription
🏁PatternCharacters are laid out as described by a pattern
♟️PlaceholdersPlaceholders represent not-yet-assigned values
IndependanceSupports multiple placeholders with different rules
👻InvisibilityPattern suffix can easily be \.hidden()

Examples

Pattern

import DiffableTextViews
import SwiftUI
//*============================================================================*
// MARK: * Pattern [...]
//*============================================================================*
structContentView:View{typealiasNumber=String // Array<Character>
//=------------------------------------------------------------------------=
@Statevarnumber=Number("123456789")
//=------------------------------------------------------------------------=
varbody:someView{DiffableTextField(value: $number){.pattern("+## (###) ###-##-##").placeholders("#"){ $0.isASCII && $0.isNumber }
// .hidden(true) // hides pattern beyond last real value
// .equals(()) // skips comparisons and discards changes
}.diffableTextViews_font(.body.monospaced()).diffableTextViews_keyboardType(.numberPad)}}

WrapperTextStyle(s) (Source, Tests)

Decorative styles that modify the behavior of their content.

StyleDescription
constant()Prevents style transformations
equals(_:)Binds the style's equality to a proxy
standalone()Grants ownership of the style's cache
prefix(_:)Adds a prefix to the style
suffix(_:)Adds a suffix to the style

About

As-you-type formatting in SwiftUI

Topics

Resources

Stars

55 stars

Watchers

4 watching

Forks

Releases

Packages

Contributors

Languages