This is now available in a dedicated package: ActivityView
Alternatively my SwiftUI Backports now includes a more complete implementation of ShareLink that's also more performant.
| require("dotenv").config(); | |
| const express = require("express"); | |
| const axios = require("axios"); | |
| const app = express(); | |
| const port = 3000; | |
| const TELEGRAM_TOKEN = process.env.TELEGRAM_BOT_TOKEN; | |
| const CHAT_ID = process.env.TELEGRAM_CHANNEL_ID; | |
| const TELEGRAM_API_URL = `https://api.telegram.org/bot${TELEGRAM_TOKEN}/sendMessage`; |
| // | |
| // FreeFormDrawingView.swift | |
| // PKDraw | |
| import SwiftUI | |
| import PencilKit | |
| struct FreeFormDrawingView: View { | |
| @State private var canvas = PKCanvasView() |
| // | |
| // VTBMainViewController.swift | |
| // VisionToolbar | |
| // | |
| // Created by Steven Troughton-Smith on 21/07/2023. | |
| // | |
| // | |
| import UIKit | |
| import SwiftUI |
| class Content: NSManagedObject { | |
| // MARK: - Mappable | |
| func mapValues(using mapper: Mapping) throws { | |
| let mapper = try mapper.mapper(for: self, destination: CKContent.self) | |
| mapper.map(\.objectID, \.identifier, transform: { objectID -> String in | |
| return objectID.uriRepresentation().absoluteString | |
| }) | |
| mapper.map(\.name, \.name) | |
| mapper.map(\.url, \.url) | |
| mapper.map(\.downloadURLExpiry, \.downloadURLExpiry) |
| // | |
| // ContentMapper.swift | |
| // | |
| // | |
| // Created by Antoine van der Lee on 09/03/2021. | |
| // | |
| import Foundation | |
| import ContentKit |
This is now available in a dedicated package: ActivityView
Alternatively my SwiftUI Backports now includes a more complete implementation of ShareLink that's also more performant.
| /** | |
| * MacEditorTextView | |
| * Copyright (c) Thiago Holanda 2020-2025 | |
| * https://bsky.app/profile/tholanda.com | |
| * | |
| * (the twitter account is now deleted, please, do not try to reach me there) | |
| * https://twitter.com/tholanda | |
| * | |
| * MIT license |
| import SwiftUI | |
| import Combine | |
| struct AdaptsToSoftwareKeyboard: ViewModifier { | |
| @State var currentHeight: CGFloat = 0 | |
| func body(content: Content) -> some View { | |
| content | |
| .padding(.bottom, currentHeight) | |
| .edgesIgnoringSafeArea(.bottom) |
| extension UIView { | |
| func roundCorners(_ corners: CACornerMask, radius: CGFloat) { | |
| if #available(iOS 11, *) { | |
| self.layer.cornerRadius = radius | |
| self.layer.maskedCorners = corners | |
| } else { | |
| var cornerMask = UIRectCorner() | |
| if(corners.contains(.layerMinXMinYCorner)){ | |
| cornerMask.insert(.topLeft) |