This commit is contained in:
DDIsFriend
2023-08-18 17:28:57 +08:00
commit f0e8a1709d
4282 changed files with 192396 additions and 0 deletions

View File

@@ -0,0 +1,84 @@
//
// EKAttributes+UserInteraction.swift
// SwiftEntryKit
//
// Created by Daniel Huri on 4/21/18.
// Copyright (c) 2018 huri000@gmail.com. All rights reserved.
//
import Foundation
public extension EKAttributes {
/** Describes the user interaction events that are triggered as the user taps the entry / screen */
struct UserInteraction {
/** Code that is executed when the user taps the entry / screen */
public typealias Action = () -> ()
/** The default event that happens as the user interacts */
public enum Default {
/** Absorbs touches. The entry / screen does nothing (Swallows the touch) */
case absorbTouches
/** Touches delay the exit of the entry */
case delayExit(by: TimeInterval)
/** Taps dismiss the entry immediately */
case dismissEntry
/** Touches are forwarded to the lower window (In most cases it would be the application main window that will handle it */
case forward
}
var isResponsive: Bool {
switch defaultAction {
case .forward:
return false
default:
return true
}
}
var isDelayExit: Bool {
switch defaultAction {
case .delayExit:
return true
default:
return false
}
}
/** A default action that is executed when the entry or the screen are interacted by the user */
public var defaultAction: Default
/** Additional actions that can be customized by the user */
public var customTapActions: [Action]
public init(defaultAction: Default = .absorbTouches, customTapActions: [Action] = []) {
self.defaultAction = defaultAction
self.customTapActions = customTapActions
}
/** Dismiss action */
public static var dismiss: UserInteraction {
return UserInteraction(defaultAction: .dismissEntry)
}
/** Forward action */
public static var forward: UserInteraction {
return UserInteraction(defaultAction: .forward)
}
/** Absorb touches action */
public static var absorbTouches: UserInteraction {
return UserInteraction(defaultAction: .absorbTouches)
}
/** Delay exit action */
public static func delayExit(by delay: TimeInterval) -> UserInteraction {
return UserInteraction(defaultAction: .delayExit(by: delay))
}
}
}