@lucca-front/scss 21.0.0-rc.8 → 21.0.1

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lucca-front/scss",
3
- "version": "21.0.0-rc.8",
3
+ "version": "21.0.1",
4
4
  "description": "A Sass framework for Lucca products.",
5
5
  "main": "src/main.scss",
6
6
  "scripts": {},
@@ -23,6 +23,6 @@
23
23
  "normalize.css": "^8.0.0"
24
24
  },
25
25
  "peerDependencies": {
26
- "@lucca-front/icons": "21.0.0-rc.8"
26
+ "@lucca-front/icons": "21.0.1"
27
27
  }
28
28
  }
@@ -274,6 +274,10 @@
274
274
  }
275
275
  }
276
276
 
277
+ %placeItemsCenter {
278
+ place-items: center;
279
+ }
280
+
277
281
 
278
282
 
279
283
  [data-content-before] {
@@ -438,6 +442,10 @@
438
442
  @extend %focusVisible;
439
443
  }
440
444
 
445
+ .pr-u-placeItemsCenter {
446
+ @extend %placeItemsCenter;
447
+ }
448
+
441
449
  @include core.classes('float', core.$float);
442
450
  @include core.classes('vertical-align', core.$verticalAlign);
443
451
  @include core.classes('white-space', core.$whiteSpace);
@@ -8,8 +8,13 @@
8
8
 
9
9
  @layer mods {
10
10
  &.mod-AI {
11
+ &:not(.invert) {
11
12
  @include AI;
12
13
 
14
+ &.mod-invert {
15
+ @include invertIA;
16
+ }
17
+
13
18
  &.is-success {
14
19
  @include successAI;
15
20
  }
@@ -17,6 +22,7 @@
17
22
  &.is-loading {
18
23
  @include loadingAI;
19
24
  }
25
+ }
20
26
  }
21
27
 
22
28
  &.mod-block {
@@ -253,8 +253,29 @@
253
253
  &:not(:disabled) {
254
254
  @include color.borderGradient(135deg, var(--palettes-brand-400), var(--palettes-AI-500));
255
255
 
256
- .lucca-icon {
256
+ &:not(.mod-invert) .lucca-icon {
257
257
  @include icons.AI;
258
258
  }
259
259
  }
260
260
  }
261
+
262
+ @mixin invertIA {
263
+ --components-button-backgroundColor: transparent;
264
+ --components-button-color: var(--palettes-neutral-0);
265
+
266
+ background-image: linear-gradient(
267
+ -135deg,
268
+ color-mix(in srgb, var(--palettes-AI-500) var(--components-button-AI-background-opacity), transparent),
269
+ color-mix(in srgb, var(--palettes-brand-400) var(--components-button-AI-background-opacity), transparent)
270
+ );
271
+
272
+ &:hover,
273
+ &:focus-visible {
274
+ --components-button-AI-background-opacity: 15%;
275
+ --components-button-color: var(--palettes-neutral-0);
276
+ }
277
+
278
+ &:active {
279
+ --components-button-AI-background-opacity: 5%;
280
+ }
281
+ }
@@ -19,6 +19,7 @@
19
19
  --components-button-color: var(--palettes-0, var(--palettes-text, var(--palettes-product-0)));
20
20
  --components-button-backgroundColor: var(--palettes-700, var(--palettes-product-700));
21
21
  --components-button-arrow-transform: none;
22
+ --components-button-AI-background-opacity: 25%;
22
23
 
23
24
  // Deprecated
24
25
  --components-button-font-size: var(--pr-t-font-body-M-fontSize);
@@ -56,9 +56,7 @@
56
56
  font-weight: var(--pr-t-font-fontWeight-regular);
57
57
  font-size: var(--component-checkboxField-icon-fontSize);
58
58
  direction: ltr;
59
-
60
- // stylelint-disable-next-line font-family-no-missing-generic-family-keyword -- This font is for icons and should not have fallback.
61
- font-family: 'Lucca icons';
59
+ font-family: var(--icon-fontFamily);
62
60
  font-feature-settings: 'liga';
63
61
  font-style: normal;
64
62
  letter-spacing: normal;
@@ -79,10 +79,6 @@
79
79
  &:has([selectable]),
80
80
  &.mod-selectable {
81
81
  @include selectable;
82
-
83
- &:has(input:checked) {
84
- @include selected;
85
- }
86
82
  }
87
83
 
88
84
  &.mod-draggable {
@@ -95,6 +91,15 @@
95
91
  }
96
92
  }
97
93
 
94
+ :is(.dataTable-body-row, .dataTable-foot-row) {
95
+ &:has([selectable]),
96
+ &.mod-selectable {
97
+ &:has(input:checked) {
98
+ @include selected;
99
+ }
100
+ }
101
+ }
102
+
98
103
  :is(.dataTable-head-row-cell, .dataTable-body-row-cell, .dataTable-foot-row-cell) {
99
104
  &.mod-actions {
100
105
  @include actions;
@@ -6,7 +6,6 @@
6
6
  }
7
7
 
8
8
  @mixin S {
9
- --components-fancyBox-contentMinBlockSize: 9.75rem;
10
9
  --components-fancyBox-offsetInline: -9rem;
11
10
  --components-fancyBox-offsetBlock: -0.75rem;
12
11
  --components-fancyBox-imageWidth: 9.375rem;
@@ -3,7 +3,7 @@
3
3
  --components-fancyBox-marginInline: auto;
4
4
 
5
5
  // Content
6
- --components-fancyBox-contentMinBlockSize: 11.25rem;
6
+ --components-fancyBox-contentMinBlockSize: 7rem;
7
7
  --components-fancyBox-contentMinInlineSize: min(22rem, 100%);
8
8
  --components-fancyBox-contentPaddingBlock: var(--pr-t-spacings-300);
9
9
  --components-fancyBox-contentPaddingInline: var(--pr-t-spacings-700);
@@ -181,9 +181,7 @@
181
181
  font-weight: var(--pr-t-font-fontWeight-regular);
182
182
  font-size: 1rem;
183
183
  direction: ltr;
184
-
185
- // stylelint-disable-next-line font-family-no-missing-generic-family-keyword -- This font is for icons and should not have fallback.
186
- font-family: 'Lucca icons';
184
+ font-family: var(--icon-fontFamily);
187
185
  font-feature-settings: 'liga';
188
186
  font-style: normal;
189
187
  letter-spacing: normal;
@@ -109,6 +109,7 @@
109
109
  @forward 'mainLayout';
110
110
  @forward 'listboxOption';
111
111
  @forward 'suggestion';
112
+ @forward 'resourceCard';
112
113
 
113
114
  @forward 'filterBarDeprecated';
114
115
  @forward 'tableFixedDeprecated';
@@ -0,0 +1,140 @@
1
+ @use '@lucca-front/scss/src/commons/utils/namespace';
2
+ @use '@lucca-front/scss/src/commons/utils/reset';
3
+
4
+ @mixin component($atRoot: namespace.$defaultAtRoot) {
5
+ border-radius: var(--components-resourceCard-borderRadius);
6
+ position: relative;
7
+ color: var(--components-resourceCard-color);
8
+ display: block;
9
+ align-self: stretch;
10
+ justify-self: stretch;
11
+
12
+ &::before {
13
+ content: '';
14
+ position: absolute;
15
+ inset: var(--components-resourceCard-before-inset);
16
+ background-color: var(--pr-t-elevation-surface-raised);
17
+ box-shadow: var(--components-resourceCard-before-boxShadow);
18
+ border-radius: var(--components-resourceCard-borderRadius);
19
+ transition-duration: var(--commons-animations-durations-fast);
20
+ transition-property: inset, box-shadow;
21
+ }
22
+
23
+ @at-root ($atRoot) {
24
+ .resourceCardWrapper {
25
+ grid-template-columns: repeat(auto-fill, minmax(var(--components-resourceCardWrapper-gridTemplateColumnsMin), 1fr));
26
+ display: var(--components-resourceCardWrapper-display);
27
+ flex-direction: column;
28
+ gap: var(--pr-t-spacings-100);
29
+ background-color: var(--pr-t-elevation-surface-sunken);
30
+ padding: var(--pr-t-spacings-100);
31
+ border-radius: var(--components-resourceCardWrapper-borderRadius);
32
+ align-items: start;
33
+ justify-items: start;
34
+ }
35
+
36
+ .resourceCard-layout {
37
+ isolation: isolate;
38
+ padding: var(--pr-t-spacings-100);
39
+ display: grid;
40
+ grid-template: var(--components-resourceCard-layout-gridTemplate);
41
+ align-items: var(--components-resourceCard-layout-alignItems);
42
+ }
43
+
44
+ .resourceCard-layout-header {
45
+ display: flex;
46
+ align-items: var(--components-resourceCard-layout-header-alignItems);
47
+ flex-direction: var(--components-resourceCard-layout-header-flexDirection);
48
+ gap: var(--pr-t-spacings-50) var(--pr-t-spacings-100);
49
+ grid-area: header;
50
+ padding-block-start: var(--components-resourceCard-layout-header-paddingBlockStart);
51
+ padding-block-end: var(--components-resourceCard-layout-header-paddingBlockEnd);
52
+ padding-inline: var(--pr-t-spacings-100);
53
+ min-inline-size: 0;
54
+ }
55
+
56
+ .resourceCard-layout-header-infos {
57
+ display: flex;
58
+ align-items: center;
59
+ gap: var(--pr-t-spacings-100);
60
+
61
+ &:empty {
62
+ display: none;
63
+ }
64
+ }
65
+
66
+ .resourceCard-layout-header-title {
67
+ font: var(--components-resourceCard-layout-header-title-font);
68
+ display: flex;
69
+ gap: var(--pr-t-spacings-100);
70
+ align-items: center;
71
+ min-inline-size: 0;
72
+ max-inline-size: 100%;
73
+ }
74
+
75
+ .resourceCard-layout-header-title-action {
76
+ @include reset.button;
77
+
78
+ color: var(--components-resourceCard-layout-header-title-action-color);
79
+ text-decoration: none;
80
+ outline: none;
81
+ cursor: var(--components-resourceCard-layout-header-title-action-cursor);
82
+ overflow: hidden;
83
+ white-space: nowrap;
84
+ text-overflow: ellipsis;
85
+
86
+ &::after {
87
+ content: '';
88
+ position: absolute;
89
+ inset: var(--components-resourceCard-layout-header-title-action-after-inset);
90
+ border-radius: var(--components-resourceCard-borderRadius);
91
+ transition-duration: var(--commons-animations-durations-fast);
92
+ transition-property: inset;
93
+ z-index: 1;
94
+ }
95
+ }
96
+
97
+ .resourceCard-layout-before {
98
+ grid-area: before;
99
+ display: flex;
100
+ align-items: center;
101
+ }
102
+
103
+ .resourceCard-layout-before-illustration {
104
+ &:not(:empty) {
105
+ min-block-size: var(--components-resourceCard-layout-before-illustration-minSize);
106
+ min-inline-size: var(--components-resourceCard-layout-before-illustration-minSize);
107
+ margin: var(--pr-t-spacings-100) var(--pr-t-spacings-50) var(--pr-t-spacings-100) var(--pr-t-spacings-100);
108
+ display: grid;
109
+ place-items: center;
110
+ }
111
+
112
+ &:empty {
113
+ display: none;
114
+ }
115
+ }
116
+
117
+ .resourceCard-layout-after {
118
+ grid-area: after;
119
+ margin-block: var(--components-resourceCard-layout-after-marginBlock);
120
+ }
121
+
122
+ .resourceCard-layout-content {
123
+ grid-area: content;
124
+ font: var(--components-resourceCard-layout-content-font);
125
+
126
+ &:not(:empty) {
127
+ padding: var(--components-resourceCard-layout-content-paddingBlockStart) var(--pr-t-spacings-100) var(--pr-t-spacings-50);
128
+ }
129
+ }
130
+
131
+ .resourceCard-layout-content a,
132
+ .resourceCard-layout-content button,
133
+ .resourceCard-layout-content [tabindex],
134
+ .resourceCard-layout-before-button,
135
+ .resourceCard-layout-after {
136
+ position: relative;
137
+ z-index: 2;
138
+ }
139
+ }
140
+ }
@@ -0,0 +1,4 @@
1
+ @forward 'vars';
2
+ @forward 'mods';
3
+ @forward 'states';
4
+ @forward 'component';
@@ -0,0 +1,104 @@
1
+ @use 'exports' as *;
2
+
3
+ .resourceCard {
4
+ @layer components {
5
+ @include vars;
6
+ @include component;
7
+ }
8
+
9
+ @layer mods {
10
+ &:hover {
11
+ @include hover;
12
+ }
13
+
14
+ &:has(.resourceCard-layout-header-title-action:focus-visible) {
15
+ @include focusVisible;
16
+ }
17
+
18
+ &:has(.resourceCard-layout-header-title-action:active) {
19
+ @include active;
20
+ }
21
+
22
+ &:has(.resourceCard-layout-header-title-action.is-disabled),
23
+ &:has(.resourceCard-layout-header-title-action:disabled) {
24
+ @include disabled;
25
+ }
26
+
27
+ &:has(.resourceCard-layout-before-button) {
28
+ @include hasDrag;
29
+ }
30
+
31
+ &:has(.resourceCard-layout-header-title .numericBadge) {
32
+ @include hasNumericBadge;
33
+ }
34
+
35
+ &:has(.resourceCard-layout-content:not(:empty)) {
36
+ &:not(.mod-grid),
37
+ &:not(.resourceCardWrapper.mod-grid &) {
38
+ @include hasContentNoGrid;
39
+
40
+ &:has(.resourceCard-layout-before-illustration:not(:empty)) {
41
+ @include hasContentNoGridHasIllustration;
42
+
43
+ &.mod-S {
44
+ @include hasContentNoGridHasIllustrationS;
45
+ }
46
+ }
47
+ }
48
+ }
49
+
50
+ &:has(.resourceCard-layout-content:empty),
51
+ &:not(:has(.resourceCard-layout-content)) {
52
+ &:has(.resourceCard-layout-before-illustration:not(:empty)) {
53
+ &:not(.mod-grid),
54
+ .resourceCardWrapper.mod-grid & {
55
+ @include hasNoContentHasIllustrationNoGrid;
56
+ }
57
+ }
58
+ }
59
+
60
+ &:has(.resourceCard-layout-after:not(:empty)) {
61
+ @include hasAction;
62
+ }
63
+
64
+ &:has(.resourceCard-layout-before-illustration:not(:empty)) {
65
+ &.mod-grid,
66
+ .resourceCardWrapper.mod-grid & {
67
+ @include hasIllustrationGrid;
68
+
69
+ &.mod-S {
70
+ @include hasIllustrationGridS;
71
+ }
72
+ }
73
+ }
74
+
75
+ &.mod-S {
76
+ @include S;
77
+ }
78
+
79
+ &.mod-grid,
80
+ .resourceCardWrapper.mod-grid & {
81
+ @include grid;
82
+ }
83
+ }
84
+ }
85
+
86
+ .resourceCardWrapper {
87
+ @layer components {
88
+ @include varsWrapper;
89
+ }
90
+
91
+ @layer mods {
92
+ .resourceCard {
93
+ @include wrapped;
94
+ }
95
+
96
+ &.mod-grid {
97
+ @include gridWrapper;
98
+ }
99
+
100
+ &:has(> .button) {
101
+ @include add;
102
+ }
103
+ }
104
+ }
@@ -0,0 +1,89 @@
1
+ @use '@lucca-front/scss/src/commons/utils/color';
2
+ @use '@lucca-front/scss/src/components/button/exports' as button;
3
+ @use '@lucca-front/scss/src/components/numericBadge/exports' as numericBadge;
4
+
5
+ @mixin gridWrapper {
6
+ --components-resourceCardWrapper-display: grid;
7
+ }
8
+
9
+ @mixin grid {
10
+ --components-resourceCard-layout-content-paddingBlockStart: var(--pr-t-spacings-50);
11
+ --components-resourceCard-layout-header-alignItems: start;
12
+ --components-resourceCard-layout-header-flexDirection: column;
13
+ --components-resourceCard-layout-gridTemplate: "before header after" auto
14
+ "content content content" auto
15
+ /auto 1fr auto;
16
+ }
17
+
18
+ @mixin wrapped {
19
+ --components-resourceCard-borderRadius: var(--pr-t-border-radius-default);
20
+ }
21
+
22
+ @mixin S {
23
+ --components-resourceCard-layout-content-font: var(--pr-t-font-body-S);
24
+ --components-resourceCard-layout-header-title-font: var(--pr-t-font-heading-4);
25
+ --components-resourceCard-layout-before-illustration-minSize: calc(var(--pr-t-spacings-400) + var(--pr-t-spacings-50));
26
+ }
27
+
28
+ @mixin hasIllustrationGridS {
29
+ --components-resourceCard-layout-header-paddingBlockStart: 0;
30
+ --components-resourceCard-layout-header-paddingBlockEnd: 0;
31
+ }
32
+
33
+ @mixin hasNoContentHasIllustrationNoGrid {
34
+ --components-resourceCard-layout-alignItems: center;
35
+ --components-resourceCard-layout-gridTemplate: "before header after" 1fr
36
+ /auto 1fr auto;
37
+ }
38
+
39
+ @mixin hasContentNoGridHasIllustration {
40
+ --components-resourceCard-layout-after-marginBlock: var(--pr-t-spacings-150);
41
+ }
42
+
43
+ @mixin hasIllustrationGrid {
44
+ --components-resourceCard-layout-alignItems: center;
45
+ }
46
+
47
+ @mixin hasContentNoGridHasIllustrationS {
48
+ --components-resourceCard-layout-after-marginBlock: 0.625rem;
49
+ }
50
+
51
+ @mixin hasContentNoGrid {
52
+ --components-resourceCard-layout-header-paddingBlockEnd: 0;
53
+ }
54
+
55
+ @mixin hasAction {
56
+ .resourceCard-layout-after .button {
57
+ @include button.S;
58
+ @include button.ghost;
59
+
60
+ &:has(> lu-icon:only-child, > .lucca-icon:only-child, > .lucca-icon:first-child + .pr-u-mask:last-child) {
61
+ @include button.onlyIcon;
62
+ @include button.onlyIconS;
63
+ }
64
+ }
65
+ }
66
+
67
+ @mixin hasDrag {
68
+ .resourceCard-layout-before-button.button {
69
+ @include button.S;
70
+ @include button.ghost;
71
+ @include button.onlyIcon;
72
+ @include button.onlyIconS;
73
+ }
74
+ }
75
+
76
+ @mixin hasNumericBadge {
77
+ .resourceCard-layout-header-title {
78
+ .numericBadge {
79
+ @include numericBadge.S;
80
+ }
81
+ }
82
+ }
83
+
84
+ @mixin add {
85
+ > .button {
86
+ @include button.outlined;
87
+ @include color.palette('product');
88
+ }
89
+ }
@@ -0,0 +1,28 @@
1
+ @use '@lucca-front/scss/src/components/button/exports' as button;
2
+ @use '@lucca-front/scss/src/commons/utils/a11y';
3
+
4
+ @mixin hover {
5
+ --components-resourceCard-before-inset: -4px;
6
+ --components-resourceCard-before-boxShadow: var(--pr-t-elevation-shadow-overlay);
7
+ }
8
+
9
+ @mixin focusVisible {
10
+ .resourceCard-layout-header-title-action {
11
+ &::after {
12
+ @include a11y.focusVisible;
13
+ }
14
+ }
15
+ }
16
+
17
+ @mixin disabled {
18
+ --components-resourceCard-layout-header-title-action-cursor: default;
19
+ --components-resourceCard-before-inset: 0;
20
+ --components-resourceCard-color: var(--palettes-neutral-500);
21
+ --components-resourceCard-layout-header-title-action-color: var(--palettes-neutral-500);
22
+ --components-resourceCard-before-boxShadow: 0 0 0 1px var(--palettes-neutral-50);
23
+ }
24
+
25
+ @mixin active {
26
+ --components-resourceCard-layout-header-title-action-color: var(--palettes-product-700);
27
+ --components-resourceCard-before-boxShadow: 0 0 0 1px var(--palettes-product-400);
28
+ }
@@ -0,0 +1,34 @@
1
+ @mixin vars {
2
+ --components-resourceCard-color: inherit;
3
+ --components-resourceCard-borderRadius: var(--pr-t-border-radius-structure);
4
+
5
+ --components-resourceCard-before-inset: 0;
6
+ --components-resourceCard-before-boxShadow: var(--pr-t-elevation-shadow-raised);
7
+
8
+ --components-resourceCard-layout-alignItems: start;
9
+ --components-resourceCard-layout-content-font: var(--pr-t-font-body-M);
10
+ --components-resourceCard-layout-content-paddingBlockStart: 0;
11
+
12
+ --components-resourceCard-layout-before-illustration-minSize: var(--pr-t-spacings-500);
13
+
14
+ --components-resourceCard-layout-after-marginBlock: 0;
15
+
16
+ --components-resourceCard-layout-header-title-action-cursor: pointer;
17
+ --components-resourceCard-layout-header-title-action-color: inherit;
18
+ --components-resourceCard-layout-header-title-action-after-inset: var(--components-resourceCard-before-inset);
19
+ --components-resourceCard-layout-header-title-font: var(--pr-t-font-heading-3);
20
+ --components-resourceCard-layout-header-alignItems: center;
21
+ --components-resourceCard-layout-header-flexDirection: row;
22
+ --components-resourceCard-layout-header-paddingBlockStart: var(--pr-t-spacings-50);
23
+ --components-resourceCard-layout-header-paddingBlockEnd: var(--pr-t-spacings-50);
24
+
25
+ --components-resourceCard-layout-gridTemplate: "before header after" auto
26
+ "before content after" 1fr
27
+ / auto 1fr auto;
28
+ }
29
+
30
+ @mixin varsWrapper {
31
+ --components-resourceCardWrapper-gridTemplateColumnsMin: 20rem;
32
+ --components-resourceCardWrapper-display: flex;
33
+ --components-resourceCardWrapper-borderRadius: var(--pr-t-border-radius-structure);
34
+ }
@@ -14,6 +14,7 @@
14
14
  padding-inline: var(--pr-t-spacings-75) var(--pr-t-spacings-100);
15
15
  white-space: nowrap;
16
16
  max-inline-size: 100%;
17
+ color: var(--pr-t-color-text);
17
18
 
18
19
  &::before {
19
20
  background-color: var(--palettes-700, var(--palettes-product-700));