|
|
@@ -23,6 +23,24 @@ struct PostPageBoundary<Content: View>: View {
|
|
|
|
|
|
// MARK: - Shared Form Components
|
|
|
|
|
|
+struct PostFormLabel: View {
|
|
|
+ let text: String
|
|
|
+ var isRequired: Bool = false
|
|
|
+
|
|
|
+ var body: some View {
|
|
|
+ HStack(spacing: 2) {
|
|
|
+ Text(text)
|
|
|
+ .font(.system(size: 10, weight: .medium))
|
|
|
+ .foregroundStyle(AppTheme.textTertiary)
|
|
|
+ if isRequired {
|
|
|
+ Text("*")
|
|
|
+ .font(.system(size: 10, weight: .semibold))
|
|
|
+ .foregroundStyle(Color(hex: 0xF87171))
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
struct PostFormCard<Content: View>: View {
|
|
|
let title: String
|
|
|
var subtitle: String?
|
|
|
@@ -61,12 +79,11 @@ struct PostFormField: View {
|
|
|
var placeholder: String = ""
|
|
|
@Binding var text: String
|
|
|
var prefix: String?
|
|
|
+ var isRequired: Bool = false
|
|
|
|
|
|
var body: some View {
|
|
|
VStack(alignment: .leading, spacing: 6) {
|
|
|
- Text(label)
|
|
|
- .font(.system(size: 10, weight: .medium))
|
|
|
- .foregroundStyle(AppTheme.textTertiary)
|
|
|
+ PostFormLabel(text: label, isRequired: isRequired)
|
|
|
|
|
|
HStack(spacing: 0) {
|
|
|
if let prefix {
|
|
|
@@ -98,12 +115,11 @@ struct PostFormTextEditor: View {
|
|
|
var placeholder: String = ""
|
|
|
@Binding var text: String
|
|
|
var minHeight: CGFloat = 120
|
|
|
+ var isRequired: Bool = false
|
|
|
|
|
|
var body: some View {
|
|
|
VStack(alignment: .leading, spacing: 6) {
|
|
|
- Text(label)
|
|
|
- .font(.system(size: 10, weight: .medium))
|
|
|
- .foregroundStyle(AppTheme.textTertiary)
|
|
|
+ PostFormLabel(text: label, isRequired: isRequired)
|
|
|
|
|
|
ThinCaretTextEditor(
|
|
|
text: $text,
|