💄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;
objects = {
/* Begin PBXBuildFile section */
573DAF242CF0CC54006DF58A /* Lottie in Frameworks */ = {isa = PBXBuildFile; productRef = 573DAF232CF0CC54006DF58A /* Lottie */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
57282ACB2CBD2810000C443E /* AlloVoisinsSwiftUI.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = AlloVoisinsSwiftUI.app; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */
@@ -36,6 +40,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
573DAF242CF0CC54006DF58A /* Lottie in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -78,6 +83,7 @@
);
name = AlloVoisinsSwiftUI;
packageProductDependencies = (
573DAF232CF0CC54006DF58A /* Lottie */,
);
productName = AlloVoisinsSwiftUI;
productReference = 57282ACB2CBD2810000C443E /* AlloVoisinsSwiftUI.app */;
@@ -107,6 +113,9 @@
);
mainGroup = 57282AC22CBD2810000C443E;
minimizedProjectReferenceProxies = 1;
packageReferences = (
573DAF222CF0CC54006DF58A /* XCRemoteSwiftPackageReference "lottie-spm" */,
);
preferredProjectObjectVersion = 77;
productRefGroup = 57282ACC2CBD2810000C443E /* Products */;
projectDirPath = "";
@@ -343,6 +352,25 @@
defaultConfigurationName = Release;
};
/* 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 */;
}

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 {
SQButton("fermer", color: .sqNeutral(100), textColor: .white) {}
.disabled(true)
}
.padding(.horizontal, 16)
.padding(.vertical, 24)

View File

@@ -5,6 +5,7 @@
// Created by Victor on 12/06/2024.
//
import Lottie
import SwiftUI
struct SQButton: View {
@@ -18,6 +19,13 @@ struct SQButton: View {
@Binding var isLoading: Bool
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) {
self.title = title
self.color = color
@@ -34,37 +42,30 @@ struct SQButton: View {
Button(action: {
self.action()
}, 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 {
if (icon != nil) {
HStack {
if isLoading {
LottieView(animation: .named("av_loader"))
.looping()
.frame(width: 20)
} else {
if icon != nil {
icon
}
SQText(title, size: textSize, font: font, textColor: textColor)
}
.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)
)
}
.frame(minWidth: textWidth)
.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.opacity(isFull ? 0 : 1), lineWidth: 1)
)
})
.buttonStyle(PlainButtonStyle())
}
@@ -93,11 +94,12 @@ enum SQButtonStyle {
#Preview {
VStack(spacing: 16) {
SQButton("C'est parti !", color: .sqNeutral(100), isFull: false) {}
SQButton("C'est parti !") {}
.sqStyle()
SQButton("C'est parti !", color: .sqOrange(50), textColor: .white) {}
.sqStyle()
.disabled(true)
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) {
SQText(title, size: 18, font: .bold)
SQText(subtitle ?? "")
.lineLimit(2)
.lineSpacing(1)
.fixedSize(horizontal: false, vertical: true)
}
HStack {
ForEach(colors, id: \.self) { color in
@@ -76,7 +79,6 @@ struct SQColorPicker: View {
private func colorDot(_ color: Color) -> some View {
HStack(alignment: .center, spacing: 8) {}
.padding(4)
.frame(width: 32, height: 32, alignment: .center)
.background(color)
.cornerRadius(32)

View File

@@ -7,14 +7,20 @@
import SwiftUI
enum SQTextFieldType {
case text
case phoneNumber
}
struct SQTextField: View {
var label: String
var placeholder: String
var type: SQTextFieldType = .text
var errorText: String
var icon: SQIcon?
var isDisabled: Bool = false
var isOptional: Bool = false
var isInError: Bool = false
@Binding var isInError: Bool
var minCharacters: Int?
var maxCharacters: Int?
@Binding var text: String
@@ -24,15 +30,16 @@ struct SQTextField: View {
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.placeholder = placeholder
self.type = type
self.errorText = errorText
self._text = text
self.icon = icon
self.isDisabled = isDisabled
self.isOptional = isOptional
self.isInError = isInError
self._isInError = isInError
self.minCharacters = minCharacters
self.maxCharacters = maxCharacters
self.infoAction = infoAction
@@ -57,17 +64,40 @@ struct SQTextField: View {
}
// TextField
HStack(spacing: 4) {
TextField(placeholder, text: Binding(
get: { self.text },
set: { self.text = String($0.prefix(self.maxCharacters ?? Int.max)) }
))
.font(.sq(.medium))
.tint(accentColor)
if let icon = icon {
Button {
iconAction?()
} label: {
icon
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(
get: { self.text },
set: { self.text = String($0.prefix(self.maxCharacters ?? Int.max)) }
))
.onChange(of: self.text, perform: { _ in
self.isInError = false
})
.font(.sq(.medium))
.foregroundStyle(Color.sqNeutral(100))
.tint(accentColor)
if let icon = icon {
Button {
iconAction?()
} label: {
icon
}
}
}
}
@@ -77,7 +107,7 @@ struct SQTextField: View {
.overlay(
RoundedRectangle(cornerRadius: 8)
.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)
.disabled(isDisabled)
@@ -106,6 +136,25 @@ struct SQTextField: View {
}
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 {
@@ -113,6 +162,8 @@ struct SQTextField: View {
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(""), 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()
}

View File

@@ -12,49 +12,66 @@ struct MarketingSupportSelectionView: View {
var body: some View {
ScrollView {
Spacer()
.frame(height: 16)
// Visit cards
VStack(alignment: .leading, spacing: 0) {
SQImage("visit_card_new", height: 200)
.cornerRadius(8, corners: [.topLeft, .topRight])
SQText("Mes cartes de visite", size: 18, font: .bold)
VStack(spacing: 16) {
Spacer()
.frame(height: 16)
// Visit cards
VStack(alignment: .leading, spacing: 0) {
SQImage("visit_card_new", height: 200)
.cornerRadius(8, corners: [.topLeft, .topRight])
HStack {
SQText("Mes cartes de visite", size: 18, font: .bold)
Spacer()
SQImage("for_pro_icon", height: 13)
}
.padding(16)
}
.overlay(
RoundedRectangle(cornerRadius: 8)
.inset(by: 0.5)
.stroke(Color.sqNeutral(20), lineWidth: 1)
}
.overlay(
RoundedRectangle(cornerRadius: 8)
.inset(by: 0.5)
.stroke(Color.sqNeutral(20), lineWidth: 1)
)
.onTapGesture {
self.goToNext.toggle()
}
.onTapGesture {
self.goToNext.toggle()
}
.fixedSize(horizontal: true, vertical: false)
// Flyers
VStack(alignment: .leading, spacing: 0) {
SQImage("flyers", height: 200)
.cornerRadius(8, corners: [.topLeft, .topRight])
SQText("Mes prospetus", size: 18, font: .bold)
// Flyers
VStack(alignment: .leading, spacing: 0) {
SQImage("flyers", height: 200)
.cornerRadius(8, corners: [.topLeft, .topRight])
HStack {
SQText("Mes prospetus", size: 18, font: .bold)
Spacer()
SQImage("for_pro_icon", height: 13)
}
.padding(16)
}
.overlay(
RoundedRectangle(cornerRadius: 8)
.inset(by: 0.5)
.stroke(Color.sqNeutral(20), lineWidth: 1)
}
.overlay(
RoundedRectangle(cornerRadius: 8)
.inset(by: 0.5)
.stroke(Color.sqNeutral(20), lineWidth: 1)
)
.fixedSize(horizontal: true, vertical: false)
// Quotes
VStack(alignment: .leading, spacing: 0) {
SQImage("quotes", height: 200)
.cornerRadius(8, corners: [.topLeft, .topRight])
SQText("Mes prospetus", size: 18, font: .bold)
// Quotes
VStack(alignment: .center, spacing: 0) {
SQImage("quotes", height: 200)
.cornerRadius(8, corners: [.topLeft, .topRight])
HStack {
SQText("Mes prospetus", size: 18, font: .bold)
Spacer()
SQImage("for_pro_icon", height: 13)
}
.padding(16)
}
.overlay(
RoundedRectangle(cornerRadius: 8)
.inset(by: 0.5)
.stroke(Color.sqNeutral(20), lineWidth: 1)
}
.overlay(
RoundedRectangle(cornerRadius: 8)
.inset(by: 0.5)
.stroke(Color.sqNeutral(20), lineWidth: 1)
)
.fixedSize(horizontal: true, vertical: false)
}
}
.scrollIndicators(.hidden)
.sqNavigationBar(title: "Mes supports de communication")

View File

@@ -1,6 +1,7 @@
{
"colors" : [
"images" : [
{
"filename" : "badge.png",
"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