💄Add business cards

This commit is contained in:
Victor Bodinaud
2024-11-25 10:25:11 +01:00
parent 6e711be25d
commit 2031687f53
31 changed files with 215 additions and 80 deletions

View File

@@ -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 */;
} }

View File

@@ -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
}

View File

@@ -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)

View File

@@ -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)) {}
} }
} }

View File

@@ -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)

View File

@@ -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()
} }

View File

@@ -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")

View File

@@ -1,6 +1,7 @@
{ {
"colors" : [ "images" : [
{ {
"filename" : "badge.png",
"idiom" : "universal" "idiom" : "universal"
} }
], ],

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

@@ -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

View File

@@ -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":[]}

View File

@@ -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