@fluid-topics/ftds-card 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,7 @@
1
+ export interface FtdsCardProperties {
2
+ headerText?: string;
3
+ headerBorder?: boolean;
4
+ headerHref?: string;
5
+ selectable?: boolean;
6
+ selected?: boolean;
7
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,51 @@
1
+ import { FtdsTypographyVariants } from "@fluid-topics/ftds-typography";
2
+ export declare const FtdsCardCssVariables: {
3
+ borderRadius: import("@fluid-topics/design-system-variables").FtCssVariable;
4
+ focusFocusRingColor: import("@fluid-topics/design-system-variables").FtCssVariable;
5
+ focusOutlineWidth: import("@fluid-topics/design-system-variables").FtCssVariable;
6
+ focusOutlineOffset: import("@fluid-topics/design-system-variables").FtCssVariable;
7
+ headerTitleHorizontalPadding: import("@fluid-topics/design-system-variables").FtCssVariable;
8
+ headerTitleVerticalPadding: import("@fluid-topics/design-system-variables").FtCssVariable;
9
+ headerActionHorizontalPadding: import("@fluid-topics/design-system-variables").FtCssVariable;
10
+ headerActionVerticalPadding: import("@fluid-topics/design-system-variables").FtCssVariable;
11
+ headerActionGap: import("@fluid-topics/design-system-variables").FtCssVariable;
12
+ bodyHorizontalPadding: import("@fluid-topics/design-system-variables").FtCssVariable;
13
+ bodyVerticalPadding: import("@fluid-topics/design-system-variables").FtCssVariable;
14
+ footerActionHorizontalPadding: import("@fluid-topics/design-system-variables").FtCssVariable;
15
+ footerActionVerticalPadding: import("@fluid-topics/design-system-variables").FtCssVariable;
16
+ footerActionGap: import("@fluid-topics/design-system-variables").FtCssVariable;
17
+ footerContentHorizontalPadding: import("@fluid-topics/design-system-variables").FtCssVariable;
18
+ footerContentVerticalPadding: import("@fluid-topics/design-system-variables").FtCssVariable;
19
+ sideBarHorizontalPadding: import("@fluid-topics/design-system-variables").FtCssVariable;
20
+ sideBarVerticalPadding: import("@fluid-topics/design-system-variables").FtCssVariable;
21
+ sideBarGap: import("@fluid-topics/design-system-variables").FtCssVariable;
22
+ nonSelectableBorderWidth: import("@fluid-topics/design-system-variables").FtCssVariable;
23
+ nonSelectableStateLayerColor: import("@fluid-topics/design-system-variables").FtCssVariable;
24
+ nonSelectableDefaultBackgroundColor: import("@fluid-topics/design-system-variables").FtCssVariable;
25
+ nonSelectableDefaultBorderColor: import("@fluid-topics/design-system-variables").FtCssVariable;
26
+ nonSelectableHoverBorderColor: import("@fluid-topics/design-system-variables").FtCssVariable;
27
+ nonSelectableHoverStateLayerOpacity: import("@fluid-topics/design-system-variables").FtCssVariable;
28
+ nonSelectableFocusBorderColor: import("@fluid-topics/design-system-variables").FtCssVariable;
29
+ nonSelectableFocusStateLayerOpacity: import("@fluid-topics/design-system-variables").FtCssVariable;
30
+ internalBorderColor: import("@fluid-topics/design-system-variables").FtCssVariable;
31
+ selectableUnselectedBorderWidth: import("@fluid-topics/design-system-variables").FtCssVariable;
32
+ selectableUnselectedStateLayerColor: import("@fluid-topics/design-system-variables").FtCssVariable;
33
+ selectableUnselectedDefaultBackgroundColor: import("@fluid-topics/design-system-variables").FtCssVariable;
34
+ selectableUnselectedDefaultBorderColor: import("@fluid-topics/design-system-variables").FtCssVariable;
35
+ selectableUnselectedHoverBorderColor: import("@fluid-topics/design-system-variables").FtCssVariable;
36
+ selectableUnselectedHoverStateLayerOpacity: import("@fluid-topics/design-system-variables").FtCssVariable;
37
+ selectableUnselectedFocusBorderColor: import("@fluid-topics/design-system-variables").FtCssVariable;
38
+ selectableUnselectedFocusStateLayerOpacity: import("@fluid-topics/design-system-variables").FtCssVariable;
39
+ selectableSelectedBorderColor: import("@fluid-topics/design-system-variables").FtCssVariable;
40
+ selectableSelectedBorderWidth: import("@fluid-topics/design-system-variables").FtCssVariable;
41
+ selectableSelectedStateLayerColor: import("@fluid-topics/design-system-variables").FtCssVariable;
42
+ selectableSelectedBackgroundColor: import("@fluid-topics/design-system-variables").FtCssVariable;
43
+ selectableSelectedDefaultStateLayerOpacity: import("@fluid-topics/design-system-variables").FtCssVariable;
44
+ selectableSelectedHoverStateLayerOpacity: import("@fluid-topics/design-system-variables").FtCssVariable;
45
+ selectableSelectedFocusStateLayerOpacity: import("@fluid-topics/design-system-variables").FtCssVariable;
46
+ internalBorderWidth: import("@fluid-topics/design-system-variables").FtCssVariable;
47
+ };
48
+ export declare const FtdsCardTypographies: {
49
+ header: FtdsTypographyVariants;
50
+ };
51
+ export declare const designSystemStyles: import("lit").CSSResult;
@@ -0,0 +1,233 @@
1
+ import { css } from "lit";
2
+ import { card, link, } from "@fluid-topics/design-system-variables";
3
+ import { FtdsTypographyVariants } from "@fluid-topics/ftds-typography";
4
+ import { FtRippleCssVariables } from "@fluid-topics/ft-ripple";
5
+ export const FtdsCardCssVariables = {
6
+ ...card,
7
+ };
8
+ export const FtdsCardTypographies = {
9
+ header: FtdsTypographyVariants.body1semibold,
10
+ };
11
+ // language=CSS
12
+ export const designSystemStyles = css `
13
+ :host {
14
+ display: block;
15
+ height: stretch;
16
+ }
17
+
18
+ #container {
19
+ position: relative;
20
+ overflow: hidden;
21
+ border-radius: ${card.borderRadius};
22
+ display: flex;
23
+ align-items: stretch;
24
+ height: stretch;
25
+ }
26
+
27
+ #container.ftds-card--clickable {
28
+ cursor: pointer;
29
+ }
30
+
31
+ #container:focus-visible,
32
+ #container:has(a:focus-visible) {
33
+ outline: ${card.focusOutlineWidth} solid ${card.focusFocusRingColor};
34
+ outline-offset: ${card.focusOutlineOffset};
35
+ border-radius: ${card.borderRadius};
36
+ }
37
+
38
+ #container:focus {
39
+ outline: none;
40
+ }
41
+
42
+ #container:focus-visible {
43
+ outline: 2px solid ${card.focusFocusRingColor};
44
+ outline-offset: 2px;
45
+ }
46
+
47
+ #header a {
48
+ text-decoration: none;
49
+ color: ${link.neutralDefaultColor};
50
+ }
51
+
52
+ #header a:focus {
53
+ outline: none;
54
+ }
55
+
56
+ #header a:before {
57
+ content: "";
58
+ position: absolute;
59
+ inset: 0;
60
+ }
61
+
62
+ #main {
63
+ min-width: 0;
64
+ flex-grow: 1;
65
+ display: flex;
66
+ flex-direction: column;
67
+ }
68
+
69
+ #header {
70
+ display: flex;
71
+ justify-content: space-between;
72
+
73
+ #header-title {
74
+ min-width: 0;
75
+ padding: ${card.headerTitleVerticalPadding} ${card.headerTitleHorizontalPadding};
76
+ }
77
+
78
+ ftds-typography, a {
79
+ display: -webkit-box;
80
+ overflow: hidden;
81
+ -webkit-box-orient: vertical;
82
+ text-overflow: ellipsis;
83
+ word-break: break-word;
84
+ -webkit-line-clamp: 2;
85
+ }
86
+
87
+ #header-actions {
88
+ padding: ${card.headerActionVerticalPadding} ${card.headerActionHorizontalPadding} ${card.headerActionVerticalPadding} 0;
89
+
90
+ slot[name="header-actions"] {
91
+ display: flex;
92
+ gap: ${card.headerActionGap};
93
+ }
94
+ }
95
+ }
96
+
97
+ .ftds-card--header-border #header {
98
+ border-bottom: ${card.internalBorderWidth} solid ${card.internalBorderColor};
99
+ }
100
+
101
+ .ftds-card--no-header #header {
102
+ display: none;
103
+ }
104
+
105
+ .ftds-card--no-header-actions #header-actions {
106
+ display: none;
107
+ }
108
+
109
+ #body {
110
+ padding: 0 ${card.bodyHorizontalPadding} ${card.bodyVerticalPadding} ${card.bodyHorizontalPadding};
111
+ flex-grow: 1;
112
+ }
113
+
114
+ .ftds-card--header-border #body, .ftds-card--no-header #body {
115
+ padding: ${card.bodyVerticalPadding} ${card.bodyHorizontalPadding};
116
+ }
117
+
118
+ .ftds-card--no-body #body {
119
+ display: none;
120
+ }
121
+
122
+ #footer {
123
+ border-top: ${card.internalBorderWidth} solid ${card.internalBorderColor};
124
+ display: flex;
125
+ justify-content: space-between;
126
+ align-items: center;
127
+
128
+ #footer-text {
129
+ padding: ${card.footerContentVerticalPadding} ${card.footerContentHorizontalPadding};
130
+
131
+ slot[name="footer"] {
132
+ display: flex;
133
+ align-items: center;
134
+ }
135
+ }
136
+
137
+ #footer-actions {
138
+ padding: ${card.footerActionVerticalPadding} ${card.footerActionHorizontalPadding} ${card.footerActionVerticalPadding} 0;
139
+
140
+ slot[name="footer-actions"] {
141
+ display: flex;
142
+ gap: ${card.footerActionGap};
143
+
144
+ }
145
+ }
146
+ }
147
+
148
+ .ftds-card--no-footer #footer {
149
+ display: none;
150
+ }
151
+
152
+ .ftds-card--no-body.ftds-card--no-header #footer {
153
+ border-top: none;
154
+ }
155
+
156
+ .ftds-card--no-footer-actions #footer-actions {
157
+ display: none;
158
+ }
159
+
160
+ #side-bar {
161
+ padding: ${card.sideBarVerticalPadding} ${card.sideBarHorizontalPadding};
162
+ border-left: ${card.internalBorderWidth} solid ${card.internalBorderColor};
163
+
164
+ slot[name="side-bar"] {
165
+ display: flex;
166
+ flex-direction: column;
167
+ gap: ${card.sideBarGap};
168
+ }
169
+ }
170
+
171
+ .ftds-card--no-side-bar #side-bar {
172
+ display: none;
173
+ }
174
+
175
+
176
+ /* SPECIFICATIONS FOR INTERACTIVE CARDS */
177
+ /* selectable selected */
178
+ #container.ftds-card--selected {
179
+ background-color: ${card.selectableSelectedBackgroundColor};
180
+ border: ${card.selectableSelectedBorderWidth} solid ${card.selectableSelectedBorderColor};
181
+
182
+ .ftds-card--header-border #header {
183
+ border-bottom: ${card.selectableSelectedBorderWidth} solid ${card.selectableSelectedBorderColor};;
184
+ }
185
+
186
+ ft-ripple {
187
+ ${FtRippleCssVariables.color.set(card.selectableSelectedStateLayerColor)};
188
+ ${FtRippleCssVariables.opacityContentOnSurfaceSelected.set(card.selectableSelectedDefaultStateLayerOpacity)};
189
+ ${FtRippleCssVariables.opacityContentOnSurfaceFocused.set(card.selectableSelectedFocusStateLayerOpacity)};
190
+ ${FtRippleCssVariables.opacityContentOnSurfaceHover.set(card.selectableSelectedHoverStateLayerOpacity)};
191
+ }
192
+ }
193
+
194
+ /* selectable unselected */
195
+ #container.ftds-card--selectable:not(.ftds-card--selected) {
196
+ background-color: ${card.selectableUnselectedDefaultBackgroundColor};
197
+ border: ${card.selectableUnselectedBorderWidth} solid ${card.selectableUnselectedDefaultBorderColor};
198
+
199
+ ft-ripple {
200
+ ${FtRippleCssVariables.color.set(card.selectableUnselectedStateLayerColor)};
201
+ ${FtRippleCssVariables.opacityContentOnSurfaceFocused.set(card.selectableUnselectedFocusStateLayerOpacity)};
202
+ ${FtRippleCssVariables.opacityContentOnSurfaceHover.set(card.selectableUnselectedHoverStateLayerOpacity)};
203
+ }
204
+ }
205
+
206
+ #container.ftds-card--selectable:not(.ftds-card--selected):hover {
207
+ border: ${card.selectableUnselectedBorderWidth} solid ${card.selectableUnselectedHoverBorderColor};
208
+ }
209
+
210
+ #container.ftds-card--selectable:not(.ftds-card--selected):focus {
211
+ border: ${card.selectableUnselectedBorderWidth} solid ${card.selectableUnselectedFocusBorderColor};
212
+ }
213
+
214
+ /* not selectable */
215
+ #container:not(.ftds-card--selectable) {
216
+ background-color: ${card.nonSelectableDefaultBackgroundColor};
217
+ border: ${card.nonSelectableBorderWidth} solid ${card.nonSelectableDefaultBorderColor};
218
+
219
+ ft-ripple {
220
+ ${FtRippleCssVariables.color.set(card.nonSelectableStateLayerColor)};
221
+ ${FtRippleCssVariables.opacityContentOnSurfaceFocused.set(card.nonSelectableFocusStateLayerOpacity)};
222
+ ${FtRippleCssVariables.opacityContentOnSurfaceHover.set(card.nonSelectableHoverStateLayerOpacity)};
223
+ }
224
+ }
225
+
226
+ #container.ftds-card--clickable:not(.ftds-card--selectable):hover {
227
+ border: ${card.nonSelectableBorderWidth} solid ${card.nonSelectableHoverBorderColor};
228
+ }
229
+
230
+ #container.ftds-card--clickable:not(.ftds-card--selectable):focus {
231
+ border: ${card.nonSelectableBorderWidth} solid ${card.nonSelectableFocusBorderColor};
232
+ }
233
+ `;
@@ -0,0 +1,10 @@
1
+ export * from "./ftds-card";
2
+ export * from "./ftds-card.styles";
3
+ export * from "./ftds-card.properties";
4
+ export * from "./ftds-card-user-info";
5
+ export * from "./ftds-card-user-info.styles";
6
+ export * from "./ftds-card-user-info.properties";
7
+ export * from "./ftds-card-labelled-info";
8
+ export * from "./ftds-card-labelled-info.styles";
9
+ export * from "./ftds-card-labelled-info.properties";
10
+ import "./define";
package/build/index.js ADDED
@@ -0,0 +1,10 @@
1
+ export * from "./ftds-card";
2
+ export * from "./ftds-card.styles";
3
+ export * from "./ftds-card.properties";
4
+ export * from "./ftds-card-user-info";
5
+ export * from "./ftds-card-user-info.styles";
6
+ export * from "./ftds-card-user-info.properties";
7
+ export * from "./ftds-card-labelled-info";
8
+ export * from "./ftds-card-labelled-info.styles";
9
+ export * from "./ftds-card-labelled-info.properties";
10
+ import "./define";
package/package.json ADDED
@@ -0,0 +1,32 @@
1
+ {
2
+ "name": "@fluid-topics/ftds-card",
3
+ "version": "2.1.0",
4
+ "description": "The design system card component",
5
+ "keywords": [
6
+ "Lit"
7
+ ],
8
+ "author": "Fluid Topics <devtopics@antidot.net>",
9
+ "license": "ISC",
10
+ "main": "build/index.js",
11
+ "web": "build/ftds-card.min.js",
12
+ "typings": "build/index",
13
+ "files": [
14
+ "build/**/*.js",
15
+ "build/**/*.ts"
16
+ ],
17
+ "repository": {
18
+ "type": "git",
19
+ "url": "ssh://git@scm.mrs.antidot.net:2222/fluidtopics/ft-web-components.git"
20
+ },
21
+ "dependencies": {
22
+ "@fluid-topics/ft-ripple": "2.1.0",
23
+ "@fluid-topics/ft-wc-utils": "2.1.0",
24
+ "@fluid-topics/ftds-icon": "2.1.0",
25
+ "@fluid-topics/ftds-typography": "2.1.0",
26
+ "lit": "3.1.0"
27
+ },
28
+ "devDependencies": {
29
+ "@fluid-topics/ft-wc-test-utils": "2.1.0"
30
+ },
31
+ "gitHead": "4727cf19d04236ad1d2b2cb43ce1c46298834c7e"
32
+ }