Card
Card: Composite Component Protocol
The _CardComponent protocol defines the complete card structure.
This protocol combines header, body, and footer components to create a comprehensive card layout
that provides a complete container for displaying structured content with consistent styling and behavior.
Usage
This is the top-level component that combines all card sections into a unified interface.
Card {
Image("productThumbnail")
.resizable()
.aspectRatio(contentMode: .fill)
.frame(height: 145)
} description: {
Text("Title")
} title: {
Text("Title that goes to two lines before truncating")
} subtitle: {
Text("Subtitle that goes to multiple lines before truncating")
} icons: {
IconStack(icons: [TextOrIcon.icon(Image(systemName: "circle.fill")),
TextOrIcon.icon(Image(systemName: "paperclip")),
TextOrIcon.text("1")])
} detailImage: {
Image("ProfilePic")
.resizable()
.clipShape(Circle())
} headerAction: {
FioriButton(title: "Action")
} counter: {
Text("1 of 3")
} row1: {
HStack {
LabelItem(icon: Image(systemName: "exclamationmark.triangle.fill"), title: "Negative")
.titleStyle { config in
config.title.foregroundStyle(Color.preferredColor(.negativeLabel))
}
LabelItem(title: "Critical")
.titleStyle { config in
config.title.foregroundStyle(Color.preferredColor(.criticalLabel))
}
LabelItem(icon: Image(systemName: "checkmark.circle"), title: "Positive")
.titleStyle { config in
config.title.foregroundStyle(Color.preferredColor(.positiveLabel))
}
}
} row2: {
HStack {
Text("256 reviews")
}
} row3: {
HStack {
Tag(verbatim: "Tag")
Tag(verbatim: "Tag")
Tag(verbatim: "Tag")
}
} kpi: {
_KPIItem(KPIItemData.components([.icon(Image(systemName: "arrowtriangle.up.fill")),
.unit("$"),
.metric("26.9"),
.unit("M")]))
} kpiCaption: {
Text("Revenue")
} cardBody: {
VStack(alignment: .leading, spacing: 4) {
DataTable(model: tableModel)
.frame(height: 80)
Divider()
TagExample(num: 4, withDot: true)
}
} action: {
FioriButton(title: "Approve")
} secondaryAction: {
FioriButton(title: "Decline")
}
Card(mediaImage: Image("productThumbnail"),
description: "Title",
title: "Title",
subtitle: "Subtitle",
icons: [TextOrIcon.icon(Image(systemName: "circle.fill"))],
detailImage: Image("ProfilePic"),
headerAction: FioriButton(title: "Action"),
counter: "1 of 3",
kpi: KPIItemData.components([.unit("$"), .metric("26.9"), .unit("M")]),
kpiCaption: "Revenue",
action: FioriButton(title: "Primary"),
secondaryAction: FioriButton(title: "Secondary"))
-
init(mediaImage:description: title: subtitle: icons: detailImage: headerAction: counter: flexItem: flexItemPosition: row1: row2: row3: kpi: kpiCaption: cardBody: action: secondaryAction: tertiaryAction: overflowAction: componentIdentifier: ) Undocumented
Declaration
Swift
public init(@ViewBuilder mediaImage: () -> any View = { EmptyView() }, @ViewBuilder description: () -> any View = { EmptyView() }, @ViewBuilder title: () -> any View, @ViewBuilder subtitle: () -> any View = { EmptyView() }, @IconBuilder icons: () -> any View = { EmptyView() }, @ViewBuilder detailImage: () -> any View = { EmptyView() }, @ViewBuilder headerAction: () -> any View = { EmptyView() }, @ViewBuilder counter: () -> any View = { EmptyView() }, @ViewBuilder flexItem: () -> any View = { EmptyView() }, flexItemPosition: FlexItemPositionType? = nil, @ViewBuilder row1: () -> any View = { EmptyView() }, @ViewBuilder row2: () -> any View = { EmptyView() }, @ViewBuilder row3: () -> any View = { EmptyView() }, @ViewBuilder kpi: () -> any View = { EmptyView() }, @ViewBuilder kpiCaption: () -> any View = { EmptyView() }, @ViewBuilder cardBody: () -> any View = { EmptyView() }, @ViewBuilder action: () -> any View = { EmptyView() }, @ViewBuilder secondaryAction: () -> any View = { EmptyView() }, @ViewBuilder tertiaryAction: () -> any View = { EmptyView() }, @ViewBuilder overflowAction: () -> any View = { FioriButton { _ in Image(systemName: "ellipsis") } }, componentIdentifier: String? = Card.identifier) -
Undocumented
Declaration
Swift
static let identifier: String -
init(mediaImage:description: title: subtitle: icons: detailImage: headerAction: counter: flexItem: flexItemPosition: row1: row2: row3: kpi: kpiCaption: cardBody: action: secondaryAction: tertiaryAction: overflowAction: ) Undocumented
Declaration
Swift
init(mediaImage: Image? = nil, description: AttributedString? = nil, title: AttributedString, subtitle: AttributedString? = nil, icons: [TextOrIcon] = [], detailImage: Image? = nil, headerAction: FioriButton? = nil, counter: AttributedString? = nil, @ViewBuilder flexItem: () -> any View = { EmptyView() }, flexItemPosition: FlexItemPositionType? = nil, @ViewBuilder row1: () -> any View = { EmptyView() }, @ViewBuilder row2: () -> any View = { EmptyView() }, @ViewBuilder row3: () -> any View = { EmptyView() }, kpi: KPIItemData? = nil, kpiCaption: AttributedString? = nil, @ViewBuilder cardBody: () -> any View = { EmptyView() }, action: FioriButton? = nil, secondaryAction: FioriButton? = nil, tertiaryAction: FioriButton? = nil, overflowAction: FioriButton? = FioriButton { _ in Image(systemName: "ellipsis") }) -
Undocumented
Declaration
Swift
init(_ configuration: CardConfiguration) -
Declaration
Swift
@MainActor public var body: some View { get } -
Undocumented
Declaration
Swift
public var isEmpty: Bool { get }