💄Add business cards
This commit is contained in:
@@ -6,6 +6,10 @@
|
|||||||
objectVersion = 77;
|
objectVersion = 77;
|
||||||
objects = {
|
objects = {
|
||||||
|
|
||||||
|
/* Begin PBXBuildFile section */
|
||||||
|
573DAF242CF0CC54006DF58A /* Lottie in Frameworks */ = {isa = PBXBuildFile; productRef = 573DAF232CF0CC54006DF58A /* Lottie */; };
|
||||||
|
/* End PBXBuildFile section */
|
||||||
|
|
||||||
/* Begin PBXFileReference section */
|
/* Begin PBXFileReference section */
|
||||||
57282ACB2CBD2810000C443E /* AlloVoisinsSwiftUI.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = AlloVoisinsSwiftUI.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
57282ACB2CBD2810000C443E /* AlloVoisinsSwiftUI.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = AlloVoisinsSwiftUI.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
/* End PBXFileReference section */
|
/* End PBXFileReference section */
|
||||||
@@ -36,6 +40,7 @@
|
|||||||
isa = PBXFrameworksBuildPhase;
|
isa = PBXFrameworksBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
|
573DAF242CF0CC54006DF58A /* Lottie in Frameworks */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
@@ -78,6 +83,7 @@
|
|||||||
);
|
);
|
||||||
name = AlloVoisinsSwiftUI;
|
name = AlloVoisinsSwiftUI;
|
||||||
packageProductDependencies = (
|
packageProductDependencies = (
|
||||||
|
573DAF232CF0CC54006DF58A /* Lottie */,
|
||||||
);
|
);
|
||||||
productName = AlloVoisinsSwiftUI;
|
productName = AlloVoisinsSwiftUI;
|
||||||
productReference = 57282ACB2CBD2810000C443E /* AlloVoisinsSwiftUI.app */;
|
productReference = 57282ACB2CBD2810000C443E /* AlloVoisinsSwiftUI.app */;
|
||||||
@@ -107,6 +113,9 @@
|
|||||||
);
|
);
|
||||||
mainGroup = 57282AC22CBD2810000C443E;
|
mainGroup = 57282AC22CBD2810000C443E;
|
||||||
minimizedProjectReferenceProxies = 1;
|
minimizedProjectReferenceProxies = 1;
|
||||||
|
packageReferences = (
|
||||||
|
573DAF222CF0CC54006DF58A /* XCRemoteSwiftPackageReference "lottie-spm" */,
|
||||||
|
);
|
||||||
preferredProjectObjectVersion = 77;
|
preferredProjectObjectVersion = 77;
|
||||||
productRefGroup = 57282ACC2CBD2810000C443E /* Products */;
|
productRefGroup = 57282ACC2CBD2810000C443E /* Products */;
|
||||||
projectDirPath = "";
|
projectDirPath = "";
|
||||||
@@ -343,6 +352,25 @@
|
|||||||
defaultConfigurationName = Release;
|
defaultConfigurationName = Release;
|
||||||
};
|
};
|
||||||
/* End XCConfigurationList section */
|
/* End XCConfigurationList section */
|
||||||
|
|
||||||
|
/* Begin XCRemoteSwiftPackageReference section */
|
||||||
|
573DAF222CF0CC54006DF58A /* XCRemoteSwiftPackageReference "lottie-spm" */ = {
|
||||||
|
isa = XCRemoteSwiftPackageReference;
|
||||||
|
repositoryURL = "https://github.com/airbnb/lottie-spm.git";
|
||||||
|
requirement = {
|
||||||
|
kind = upToNextMajorVersion;
|
||||||
|
minimumVersion = 4.5.0;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
/* End XCRemoteSwiftPackageReference section */
|
||||||
|
|
||||||
|
/* Begin XCSwiftPackageProductDependency section */
|
||||||
|
573DAF232CF0CC54006DF58A /* Lottie */ = {
|
||||||
|
isa = XCSwiftPackageProductDependency;
|
||||||
|
package = 573DAF222CF0CC54006DF58A /* XCRemoteSwiftPackageReference "lottie-spm" */;
|
||||||
|
productName = Lottie;
|
||||||
|
};
|
||||||
|
/* End XCSwiftPackageProductDependency section */
|
||||||
};
|
};
|
||||||
rootObject = 57282AC32CBD2810000C443E /* Project object */;
|
rootObject = 57282AC32CBD2810000C443E /* Project object */;
|
||||||
}
|
}
|
||||||
|
|||||||
+15
@@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"originHash" : "6b3386dc9ff1f3a74f1534de9c41d47137eae0901cfe819ed442f1b241549359",
|
||||||
|
"pins" : [
|
||||||
|
{
|
||||||
|
"identity" : "lottie-spm",
|
||||||
|
"kind" : "remoteSourceControl",
|
||||||
|
"location" : "https://github.com/airbnb/lottie-spm.git",
|
||||||
|
"state" : {
|
||||||
|
"revision" : "b842598f1295f3ffa1475b1580672d1fe5b83580",
|
||||||
|
"version" : "4.5.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"version" : 3
|
||||||
|
}
|
||||||
@@ -49,6 +49,7 @@ struct RegulatedProfessionEditProfilModal: View {
|
|||||||
|
|
||||||
VStack {
|
VStack {
|
||||||
SQButton("fermer", color: .sqNeutral(100), textColor: .white) {}
|
SQButton("fermer", color: .sqNeutral(100), textColor: .white) {}
|
||||||
|
.disabled(true)
|
||||||
}
|
}
|
||||||
.padding(.horizontal, 16)
|
.padding(.horizontal, 16)
|
||||||
.padding(.vertical, 24)
|
.padding(.vertical, 24)
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
// Created by Victor on 12/06/2024.
|
// Created by Victor on 12/06/2024.
|
||||||
//
|
//
|
||||||
|
|
||||||
|
import Lottie
|
||||||
import SwiftUI
|
import SwiftUI
|
||||||
|
|
||||||
struct SQButton: View {
|
struct SQButton: View {
|
||||||
@@ -18,6 +19,13 @@ struct SQButton: View {
|
|||||||
@Binding var isLoading: Bool
|
@Binding var isLoading: Bool
|
||||||
let action: () -> Void
|
let action: () -> Void
|
||||||
|
|
||||||
|
private var textWidth: CGFloat {
|
||||||
|
let font = UIFont.systemFont(ofSize: textSize)
|
||||||
|
let attributes = [NSAttributedString.Key.font: font]
|
||||||
|
let size = (title as NSString).size(withAttributes: attributes)
|
||||||
|
return size.width + (icon != nil ? 24 : 0)
|
||||||
|
}
|
||||||
|
|
||||||
init(_ title: String, color: Color = .sqNeutral(10), textColor: Color = .black, textSize: CGFloat = 16, font: SQTextFont = .demiBold, icon: SQIcon? = nil, isFull: Bool = true, isLoading: Binding<Bool> = .constant(false), action: @escaping () -> Void) {
|
init(_ title: String, color: Color = .sqNeutral(10), textColor: Color = .black, textSize: CGFloat = 16, font: SQTextFont = .demiBold, icon: SQIcon? = nil, isFull: Bool = true, isLoading: Binding<Bool> = .constant(false), action: @escaping () -> Void) {
|
||||||
self.title = title
|
self.title = title
|
||||||
self.color = color
|
self.color = color
|
||||||
@@ -34,26 +42,20 @@ struct SQButton: View {
|
|||||||
Button(action: {
|
Button(action: {
|
||||||
self.action()
|
self.action()
|
||||||
}, label: {
|
}, label: {
|
||||||
if isLoading {
|
|
||||||
ProgressView()
|
|
||||||
.padding(.horizontal, 30)
|
|
||||||
.padding(.vertical, 12)
|
|
||||||
.frame(height: 40, alignment: .center)
|
|
||||||
.background(isFull ? color : .clear)
|
|
||||||
.cornerRadius(100)
|
|
||||||
.overlay(
|
|
||||||
RoundedRectangle(cornerRadius: 100)
|
|
||||||
.inset(by: 0.5)
|
|
||||||
.stroke(color, lineWidth: 1)
|
|
||||||
)
|
|
||||||
} else {
|
|
||||||
HStack {
|
HStack {
|
||||||
if (icon != nil) {
|
if isLoading {
|
||||||
|
LottieView(animation: .named("av_loader"))
|
||||||
|
.looping()
|
||||||
|
.frame(width: 20)
|
||||||
|
} else {
|
||||||
|
if icon != nil {
|
||||||
icon
|
icon
|
||||||
}
|
}
|
||||||
|
|
||||||
SQText(title, size: textSize, font: font, textColor: textColor)
|
SQText(title, size: textSize, font: font, textColor: textColor)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
.frame(minWidth: textWidth)
|
||||||
.padding(.horizontal, 30)
|
.padding(.horizontal, 30)
|
||||||
.padding(.vertical, 12)
|
.padding(.vertical, 12)
|
||||||
.frame(height: 40, alignment: .center)
|
.frame(height: 40, alignment: .center)
|
||||||
@@ -62,9 +64,8 @@ struct SQButton: View {
|
|||||||
.overlay(
|
.overlay(
|
||||||
RoundedRectangle(cornerRadius: 100)
|
RoundedRectangle(cornerRadius: 100)
|
||||||
.inset(by: 0.5)
|
.inset(by: 0.5)
|
||||||
.stroke(color, lineWidth: 1)
|
.stroke(color.opacity(isFull ? 0 : 1), lineWidth: 1)
|
||||||
)
|
)
|
||||||
}
|
|
||||||
})
|
})
|
||||||
.buttonStyle(PlainButtonStyle())
|
.buttonStyle(PlainButtonStyle())
|
||||||
}
|
}
|
||||||
@@ -93,11 +94,12 @@ enum SQButtonStyle {
|
|||||||
|
|
||||||
#Preview {
|
#Preview {
|
||||||
VStack(spacing: 16) {
|
VStack(spacing: 16) {
|
||||||
|
SQButton("C'est parti !", color: .sqNeutral(100), isFull: false) {}
|
||||||
SQButton("C'est parti !") {}
|
SQButton("C'est parti !") {}
|
||||||
.sqStyle()
|
|
||||||
SQButton("C'est parti !", color: .sqOrange(50), textColor: .white) {}
|
SQButton("C'est parti !", color: .sqOrange(50), textColor: .white) {}
|
||||||
.sqStyle()
|
.disabled(true)
|
||||||
SQButton("Imprimer", color: .sqNeutral(100), textColor: .white, icon: SQIcon(.print, color: .white)) {}
|
SQButton("Imprimer", color: .sqNeutral(100), textColor: .white, icon: SQIcon(.print, color: .white)) {}
|
||||||
.sqStyle()
|
.disabled(true)
|
||||||
|
SQButton("C'est parti !", isLoading: .constant(true)) {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,6 +37,9 @@ struct SQColorPicker: View {
|
|||||||
VStack(alignment: .leading) {
|
VStack(alignment: .leading) {
|
||||||
SQText(title, size: 18, font: .bold)
|
SQText(title, size: 18, font: .bold)
|
||||||
SQText(subtitle ?? "")
|
SQText(subtitle ?? "")
|
||||||
|
.lineLimit(2)
|
||||||
|
.lineSpacing(1)
|
||||||
|
.fixedSize(horizontal: false, vertical: true)
|
||||||
}
|
}
|
||||||
HStack {
|
HStack {
|
||||||
ForEach(colors, id: \.self) { color in
|
ForEach(colors, id: \.self) { color in
|
||||||
@@ -76,7 +79,6 @@ struct SQColorPicker: View {
|
|||||||
|
|
||||||
private func colorDot(_ color: Color) -> some View {
|
private func colorDot(_ color: Color) -> some View {
|
||||||
HStack(alignment: .center, spacing: 8) {}
|
HStack(alignment: .center, spacing: 8) {}
|
||||||
.padding(4)
|
|
||||||
.frame(width: 32, height: 32, alignment: .center)
|
.frame(width: 32, height: 32, alignment: .center)
|
||||||
.background(color)
|
.background(color)
|
||||||
.cornerRadius(32)
|
.cornerRadius(32)
|
||||||
|
|||||||
@@ -7,14 +7,20 @@
|
|||||||
|
|
||||||
import SwiftUI
|
import SwiftUI
|
||||||
|
|
||||||
|
enum SQTextFieldType {
|
||||||
|
case text
|
||||||
|
case phoneNumber
|
||||||
|
}
|
||||||
|
|
||||||
struct SQTextField: View {
|
struct SQTextField: View {
|
||||||
var label: String
|
var label: String
|
||||||
var placeholder: String
|
var placeholder: String
|
||||||
|
var type: SQTextFieldType = .text
|
||||||
var errorText: String
|
var errorText: String
|
||||||
var icon: SQIcon?
|
var icon: SQIcon?
|
||||||
var isDisabled: Bool = false
|
var isDisabled: Bool = false
|
||||||
var isOptional: Bool = false
|
var isOptional: Bool = false
|
||||||
var isInError: Bool = false
|
@Binding var isInError: Bool
|
||||||
var minCharacters: Int?
|
var minCharacters: Int?
|
||||||
var maxCharacters: Int?
|
var maxCharacters: Int?
|
||||||
@Binding var text: String
|
@Binding var text: String
|
||||||
@@ -24,15 +30,16 @@ struct SQTextField: View {
|
|||||||
|
|
||||||
private var accentColor: Color = .sqNeutral(80)
|
private var accentColor: Color = .sqNeutral(80)
|
||||||
|
|
||||||
init(_ label: String, placeholder: String, errorText: String = "", text: Binding<String>, icon: SQIcon? = nil, isDisabled: Bool = false, isOptional: Bool = false, isInError: Bool = false, minCharacters: Int? = nil, maxCharacters: Int? = nil, infoAction: (() -> Void)? = nil, iconAction: (() -> Void)? = nil) {
|
init(_ label: String, placeholder: String, type: SQTextFieldType = .text, errorText: String = "", text: Binding<String>, icon: SQIcon? = nil, isDisabled: Bool = false, isOptional: Bool = false, isInError: Binding<Bool> = .constant(false), minCharacters: Int? = nil, maxCharacters: Int? = nil, infoAction: (() -> Void)? = nil, iconAction: (() -> Void)? = nil) {
|
||||||
self.label = label
|
self.label = label
|
||||||
self.placeholder = placeholder
|
self.placeholder = placeholder
|
||||||
|
self.type = type
|
||||||
self.errorText = errorText
|
self.errorText = errorText
|
||||||
self._text = text
|
self._text = text
|
||||||
self.icon = icon
|
self.icon = icon
|
||||||
self.isDisabled = isDisabled
|
self.isDisabled = isDisabled
|
||||||
self.isOptional = isOptional
|
self.isOptional = isOptional
|
||||||
self.isInError = isInError
|
self._isInError = isInError
|
||||||
self.minCharacters = minCharacters
|
self.minCharacters = minCharacters
|
||||||
self.maxCharacters = maxCharacters
|
self.maxCharacters = maxCharacters
|
||||||
self.infoAction = infoAction
|
self.infoAction = infoAction
|
||||||
@@ -57,11 +64,33 @@ struct SQTextField: View {
|
|||||||
}
|
}
|
||||||
// TextField
|
// TextField
|
||||||
HStack(spacing: 4) {
|
HStack(spacing: 4) {
|
||||||
|
if type == .phoneNumber {
|
||||||
|
TextField(placeholder, text: Binding(
|
||||||
|
get: { formatPhoneNumber(self.text) },
|
||||||
|
set: {
|
||||||
|
let filtered = $0.filter { $0.isNumber }
|
||||||
|
let truncated = String(filtered.prefix(10))
|
||||||
|
self.text = truncated
|
||||||
|
self.isInError = !isValidPhoneNumber(truncated)
|
||||||
|
}
|
||||||
|
))
|
||||||
|
.onReceive(self.text.publisher.collect()) {
|
||||||
|
self.text = String($0.prefix(10))
|
||||||
|
}
|
||||||
|
.keyboardType(.numberPad)
|
||||||
|
.font(.sq(.medium))
|
||||||
|
.foregroundStyle(Color.sqNeutral(100))
|
||||||
|
.tint(accentColor)
|
||||||
|
} else {
|
||||||
TextField(placeholder, text: Binding(
|
TextField(placeholder, text: Binding(
|
||||||
get: { self.text },
|
get: { self.text },
|
||||||
set: { self.text = String($0.prefix(self.maxCharacters ?? Int.max)) }
|
set: { self.text = String($0.prefix(self.maxCharacters ?? Int.max)) }
|
||||||
))
|
))
|
||||||
|
.onChange(of: self.text, perform: { _ in
|
||||||
|
self.isInError = false
|
||||||
|
})
|
||||||
.font(.sq(.medium))
|
.font(.sq(.medium))
|
||||||
|
.foregroundStyle(Color.sqNeutral(100))
|
||||||
.tint(accentColor)
|
.tint(accentColor)
|
||||||
if let icon = icon {
|
if let icon = icon {
|
||||||
Button {
|
Button {
|
||||||
@@ -71,13 +100,14 @@ struct SQTextField: View {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
.padding(16)
|
.padding(16)
|
||||||
.foregroundStyle(Color.sqNeutral())
|
.foregroundStyle(Color.sqNeutral())
|
||||||
.background(isDisabled ? Color.sqNeutral(10) : .clear)
|
.background(isDisabled ? Color.sqNeutral(10) : .clear)
|
||||||
.overlay(
|
.overlay(
|
||||||
RoundedRectangle(cornerRadius: 8)
|
RoundedRectangle(cornerRadius: 8)
|
||||||
.inset(by: 0.5)
|
.inset(by: 0.5)
|
||||||
.stroke(isFocused ? accentColor : isDisabled ? Color.sqNeutral(20) : Color.sqNeutral(30), lineWidth: 1)
|
.stroke(isInError ? .sqSemanticRed : isFocused ? accentColor : isDisabled ? Color.sqNeutral(20) : Color.sqNeutral(30), lineWidth: 1)
|
||||||
)
|
)
|
||||||
.focused($isFocused)
|
.focused($isFocused)
|
||||||
.disabled(isDisabled)
|
.disabled(isDisabled)
|
||||||
@@ -106,6 +136,25 @@ struct SQTextField: View {
|
|||||||
}
|
}
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private func formatPhoneNumber(_ number: String) -> String {
|
||||||
|
let numbers = number.filter { $0.isNumber }
|
||||||
|
var result = ""
|
||||||
|
|
||||||
|
for (index, char) in numbers.enumerated() {
|
||||||
|
if index > 0 && index % 2 == 0 {
|
||||||
|
result += " "
|
||||||
|
}
|
||||||
|
result += String(char)
|
||||||
|
}
|
||||||
|
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
private func isValidPhoneNumber(_ number: String) -> Bool {
|
||||||
|
let numbers = number.filter { $0.isNumber }
|
||||||
|
return numbers.count == 10 && numbers.first == "0"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#Preview {
|
#Preview {
|
||||||
@@ -113,6 +162,8 @@ struct SQTextField: View {
|
|||||||
SQTextField("Label name", placeholder: "Placeholder", text: .constant("Bonjour, "), minCharacters: 20)
|
SQTextField("Label name", placeholder: "Placeholder", text: .constant("Bonjour, "), minCharacters: 20)
|
||||||
SQTextField("Label name", placeholder: "Placeholder", text: .constant(""), isOptional: true)
|
SQTextField("Label name", placeholder: "Placeholder", text: .constant(""), isOptional: true)
|
||||||
SQTextField("Label name", placeholder: "Placeholder", text: .constant(""), isDisabled: true)
|
SQTextField("Label name", placeholder: "Placeholder", text: .constant(""), isDisabled: true)
|
||||||
|
SQTextField("Label name", placeholder: "Placeholder", errorText: "Champ invalide", text: .constant(""), isInError: .constant(true))
|
||||||
|
SQTextField("Téléphone", placeholder: "01 23 45 67 89", type: .phoneNumber, text: .constant(""))
|
||||||
}
|
}
|
||||||
.padding()
|
.padding()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,13 +12,18 @@ struct MarketingSupportSelectionView: View {
|
|||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
ScrollView {
|
ScrollView {
|
||||||
|
VStack(spacing: 16) {
|
||||||
Spacer()
|
Spacer()
|
||||||
.frame(height: 16)
|
.frame(height: 16)
|
||||||
// Visit cards
|
// Visit cards
|
||||||
VStack(alignment: .leading, spacing: 0) {
|
VStack(alignment: .leading, spacing: 0) {
|
||||||
SQImage("visit_card_new", height: 200)
|
SQImage("visit_card_new", height: 200)
|
||||||
.cornerRadius(8, corners: [.topLeft, .topRight])
|
.cornerRadius(8, corners: [.topLeft, .topRight])
|
||||||
|
HStack {
|
||||||
SQText("Mes cartes de visite", size: 18, font: .bold)
|
SQText("Mes cartes de visite", size: 18, font: .bold)
|
||||||
|
Spacer()
|
||||||
|
SQImage("for_pro_icon", height: 13)
|
||||||
|
}
|
||||||
.padding(16)
|
.padding(16)
|
||||||
}
|
}
|
||||||
.overlay(
|
.overlay(
|
||||||
@@ -29,12 +34,17 @@ struct MarketingSupportSelectionView: View {
|
|||||||
.onTapGesture {
|
.onTapGesture {
|
||||||
self.goToNext.toggle()
|
self.goToNext.toggle()
|
||||||
}
|
}
|
||||||
|
.fixedSize(horizontal: true, vertical: false)
|
||||||
|
|
||||||
// Flyers
|
// Flyers
|
||||||
VStack(alignment: .leading, spacing: 0) {
|
VStack(alignment: .leading, spacing: 0) {
|
||||||
SQImage("flyers", height: 200)
|
SQImage("flyers", height: 200)
|
||||||
.cornerRadius(8, corners: [.topLeft, .topRight])
|
.cornerRadius(8, corners: [.topLeft, .topRight])
|
||||||
|
HStack {
|
||||||
SQText("Mes prospetus", size: 18, font: .bold)
|
SQText("Mes prospetus", size: 18, font: .bold)
|
||||||
|
Spacer()
|
||||||
|
SQImage("for_pro_icon", height: 13)
|
||||||
|
}
|
||||||
.padding(16)
|
.padding(16)
|
||||||
}
|
}
|
||||||
.overlay(
|
.overlay(
|
||||||
@@ -42,12 +52,17 @@ struct MarketingSupportSelectionView: View {
|
|||||||
.inset(by: 0.5)
|
.inset(by: 0.5)
|
||||||
.stroke(Color.sqNeutral(20), lineWidth: 1)
|
.stroke(Color.sqNeutral(20), lineWidth: 1)
|
||||||
)
|
)
|
||||||
|
.fixedSize(horizontal: true, vertical: false)
|
||||||
|
|
||||||
// Quotes
|
// Quotes
|
||||||
VStack(alignment: .leading, spacing: 0) {
|
VStack(alignment: .center, spacing: 0) {
|
||||||
SQImage("quotes", height: 200)
|
SQImage("quotes", height: 200)
|
||||||
.cornerRadius(8, corners: [.topLeft, .topRight])
|
.cornerRadius(8, corners: [.topLeft, .topRight])
|
||||||
|
HStack {
|
||||||
SQText("Mes prospetus", size: 18, font: .bold)
|
SQText("Mes prospetus", size: 18, font: .bold)
|
||||||
|
Spacer()
|
||||||
|
SQImage("for_pro_icon", height: 13)
|
||||||
|
}
|
||||||
.padding(16)
|
.padding(16)
|
||||||
}
|
}
|
||||||
.overlay(
|
.overlay(
|
||||||
@@ -55,6 +70,8 @@ struct MarketingSupportSelectionView: View {
|
|||||||
.inset(by: 0.5)
|
.inset(by: 0.5)
|
||||||
.stroke(Color.sqNeutral(20), lineWidth: 1)
|
.stroke(Color.sqNeutral(20), lineWidth: 1)
|
||||||
)
|
)
|
||||||
|
.fixedSize(horizontal: true, vertical: false)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
.scrollIndicators(.hidden)
|
.scrollIndicators(.hidden)
|
||||||
.sqNavigationBar(title: "Mes supports de communication")
|
.sqNavigationBar(title: "Mes supports de communication")
|
||||||
|
|||||||
+2
-1
@@ -1,6 +1,7 @@
|
|||||||
{
|
{
|
||||||
"colors" : [
|
"images" : [
|
||||||
{
|
{
|
||||||
|
"filename" : "badge.png",
|
||||||
"idiom" : "universal"
|
"idiom" : "universal"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
BIN
Binary file not shown.
|
After Width: | Height: | Size: 2.6 KiB |
@@ -0,0 +1 @@
|
|||||||
|
{"v":"4.8.0","meta":{"g":"LottieFiles AE 3.1.1","a":"","k":"","d":"","tc":""},"fr":30,"ip":0,"op":61,"w":500,"h":500,"nm":"loading_6","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Shape Layer 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":60,"s":[360]}],"ix":10},"p":{"a":0,"k":[250,250,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[142,142,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[300,300],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0.466666668653,0.54509806633,0.639215707779,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":50,"ix":5},"lc":2,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformer "}],"nm":"Ellipse 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":10,"s":[0]},{"t":60,"s":[99]}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[1]},{"t":50,"s":[100]}],"ix":2},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":60,"s":[3]}],"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Shape Layer 1","sr":1,"ks":{"o":{"a":0,"k":30,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[250,250,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[142,142,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[300,300],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0.466666668653,0.54509806633,0.639215707779,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":50,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformer "}],"nm":"Ellipse 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":300,"st":0,"bm":0}],"markers":[]}
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
|||||||
|
{"v":"4.8.0","meta":{"g":"LottieFiles AE 3.1.1","a":"","k":"","d":"","tc":""},"fr":29.9700012207031,"ip":0,"op":45.0000018328876,"w":1050,"h":1050,"nm":"heart","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"entier/heart-regular Silhouettes","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":16,"s":[0]},{"t":26.0000010590017,"s":[100]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[525,525,0],"ix":2},"a":{"a":0,"k":[525.5,455.5,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0,0,0.667],"y":[1,1,1]},"o":{"x":[1,1,0.333],"y":[0,0,0]},"t":17,"s":[70,70,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":26,"s":[100,100,100]},{"i":{"x":[0.7,0.7,0.667],"y":[1,1,1]},"o":{"x":[1,1,0.333],"y":[0,0,0]},"t":29,"s":[85,85,100]},{"t":35.0000014255792,"s":[100,100,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0.021],[0,0],[0,0],[-93.516,-15.566],[0,-143.35],[0,0],[62.344,-58.037],[0,0],[21.123,0],[15.381,14.355],[0,0],[0,85.107],[0,0],[-141.258,23.543],[-66.855,-66.917]],"o":[[0,0],[0,0],[68.701,-66.958],[141.299,23.543],[0,0],[0,85.107],[0,0],[-15.381,14.355],[-21.123,0],[0,0],[-62.262,-58.037],[0,0],[0,-143.35],[91.67,-15.566],[-1.846,0]],"v":[[-24.609,-357.358],[-1.845,-332.749],[22.764,-357.317],[280.137,-439.184],[525,-150.024],[525,-138.129],[427.383,86.431],[56.807,432.397],[0,454.751],[-56.806,432.397],[-427.403,86.431],[-525,-138.129],[-525,-150.024],[-280.136,-439.184],[-24.609,-357.358]],"c":true},"ix":2},"nm":"Tracé 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.235294118524,0.454901963472,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fond 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[525.25,455],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformer "}],"nm":"Groupe 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":900.000036657751,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"linéaire/heart-regular Silhouettes","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":25,"s":[100]},{"t":26.0000010590017,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[525,525,0],"ix":2},"a":{"a":0,"k":[525.5,455.5,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":0,"s":[100,100,100]},{"i":{"x":[1,1,0.667],"y":[1,1,1]},"o":{"x":[1,1,0.333],"y":[0,0,0]},"t":10,"s":[100,100,100]},{"i":{"x":[0,0,0.667],"y":[1,1,1]},"o":{"x":[1,1,0.333],"y":[0,0,0]},"t":17,"s":[70,70,100]},{"t":26.0000010590017,"s":[100,100,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[62.139,-10.335],[0,-95.157],[0,0],[-42.307,-39.375],[0,0],[0,0],[0,57.832],[0,0],[93.721,15.648],[44.502,-42.697]],"o":[[0,0],[-44.502,-42.697],[-93.823,15.648],[0,0],[0,57.832],[0,0],[0,0],[42.246,-39.375],[0,0],[0,-95.157],[-62.138,-10.335],[0,0]],"v":[[-1.846,-193.502],[-94.131,-289.479],[-263.936,-342.102],[-426.563,-150.024],[-426.563,-138.13],[-360.241,14.448],[0,350.775],[360.322,14.448],[426.562,-138.13],[426.562,-150.024],[263.935,-342.102],[94.131,-289.479]],"c":true},"ix":2},"nm":"Tracé 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0.02],[0,0],[0,0],[-93.515,-15.565],[0,-143.35],[0,0],[62.343,-58.037],[0,0],[21.123,0],[15.381,14.356],[0,0],[0,85.108],[0,0],[-141.258,23.543],[-66.855,-66.917]],"o":[[0,0],[0,0],[68.702,-66.958],[141.299,23.543],[0,0],[0,85.108],[0,0],[-15.381,14.356],[-21.123,0],[0,0],[-62.261,-58.037],[0,0],[0,-143.35],[91.67,-15.565],[-1.845,0]],"v":[[-24.61,-357.359],[-1.846,-332.75],[22.763,-357.318],[280.136,-439.185],[525,-150.024],[525,-138.13],[427.383,86.43],[56.806,432.396],[0,454.75],[-56.807,432.396],[-427.404,86.43],[-525,-138.13],[-525,-150.024],[-280.137,-439.185],[-24.61,-357.359]],"c":true},"ix":2},"nm":"Tracé 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Fusionner les tracés 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.090196080506,0.141176477075,0.20000000298,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fond 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[525.25,455.001],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformer "}],"nm":"Groupe 1","np":6,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":900.000036657751,"st":0,"bm":0}],"markers":[]}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"v":"4.8.0","meta":{"g":"LottieFiles AE 3.1.1","a":"","k":"","d":"","tc":""},"fr":29.9700012207031,"ip":0,"op":45.0000018328876,"w":1050,"h":1050,"nm":"heart white","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"entier/heart-regular Silhouettes","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":16,"s":[0]},{"t":26.0000010590017,"s":[100]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[525,525,0],"ix":2},"a":{"a":0,"k":[525.5,455.5,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0,0,0.667],"y":[1,1,1]},"o":{"x":[1,1,0.333],"y":[0,0,0]},"t":17,"s":[70,70,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":26,"s":[100,100,100]},{"i":{"x":[0.7,0.7,0.667],"y":[1,1,1]},"o":{"x":[1,1,0.333],"y":[0,0,0]},"t":29,"s":[85,85,100]},{"t":35.0000014255792,"s":[100,100,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0.021],[0,0],[0,0],[-93.516,-15.566],[0,-143.35],[0,0],[62.344,-58.037],[0,0],[21.123,0],[15.381,14.355],[0,0],[0,85.107],[0,0],[-141.258,23.543],[-66.855,-66.917]],"o":[[0,0],[0,0],[68.701,-66.958],[141.299,23.543],[0,0],[0,85.107],[0,0],[-15.381,14.355],[-21.123,0],[0,0],[-62.262,-58.037],[0,0],[0,-143.35],[91.67,-15.566],[-1.846,0]],"v":[[-24.609,-357.358],[-1.845,-332.749],[22.764,-357.317],[280.137,-439.184],[525,-150.024],[525,-138.129],[427.383,86.431],[56.807,432.397],[0,454.751],[-56.806,432.397],[-427.403,86.431],[-525,-138.129],[-525,-150.024],[-280.136,-439.184],[-24.609,-357.358]],"c":true},"ix":2},"nm":"Tracé 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.235294118524,0.454901963472,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fond 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[525.25,455],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformer "}],"nm":"Groupe 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":900.000036657751,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"linéaire/heart-regular Silhouettes","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":25,"s":[100]},{"t":26.0000010590017,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[525,525,0],"ix":2},"a":{"a":0,"k":[525.5,455.5,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":0,"s":[100,100,100]},{"i":{"x":[1,1,0.667],"y":[1,1,1]},"o":{"x":[1,1,0.333],"y":[0,0,0]},"t":10,"s":[100,100,100]},{"i":{"x":[0,0,0.667],"y":[1,1,1]},"o":{"x":[1,1,0.333],"y":[0,0,0]},"t":17,"s":[70,70,100]},{"t":26.0000010590017,"s":[100,100,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[62.139,-10.335],[0,-95.157],[0,0],[-42.307,-39.375],[0,0],[0,0],[0,57.832],[0,0],[93.721,15.648],[44.502,-42.697]],"o":[[0,0],[-44.502,-42.697],[-93.823,15.648],[0,0],[0,57.832],[0,0],[0,0],[42.246,-39.375],[0,0],[0,-95.157],[-62.138,-10.335],[0,0]],"v":[[-1.846,-193.502],[-94.131,-289.479],[-263.936,-342.102],[-426.563,-150.024],[-426.563,-138.13],[-360.241,14.448],[0,350.775],[360.322,14.448],[426.562,-138.13],[426.562,-150.024],[263.935,-342.102],[94.131,-289.479]],"c":true},"ix":2},"nm":"Tracé 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0.02],[0,0],[0,0],[-93.515,-15.565],[0,-143.35],[0,0],[62.343,-58.037],[0,0],[21.123,0],[15.381,14.356],[0,0],[0,85.108],[0,0],[-141.258,23.543],[-66.855,-66.917]],"o":[[0,0],[0,0],[68.702,-66.958],[141.299,23.543],[0,0],[0,85.108],[0,0],[-15.381,14.356],[-21.123,0],[0,0],[-62.261,-58.037],[0,0],[0,-143.35],[91.67,-15.565],[-1.845,0]],"v":[[-24.61,-357.359],[-1.846,-332.75],[22.763,-357.318],[280.136,-439.185],[525,-150.024],[525,-138.13],[427.383,86.43],[56.806,432.396],[0,454.75],[-56.807,432.396],[-427.404,86.43],[-525,-138.13],[-525,-150.024],[-280.137,-439.185],[-24.61,-357.359]],"c":true},"ix":2},"nm":"Tracé 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Fusionner les tracés 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fond 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[525.25,455.001],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformer "}],"nm":"Groupe 1","np":6,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":900.000036657751,"st":0,"bm":0}],"markers":[]}
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user