@raintonic/formaui 0.4.0 → 0.9.2
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/CHANGELOG.md +80 -35
- package/README.md +22 -26
- package/fesm2022/raintonic-formaui-cdk-drag-drop.mjs +39 -41
- package/fesm2022/raintonic-formaui-cdk-drag-drop.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-cdk-form-field.mjs +207 -3
- package/fesm2022/raintonic-formaui-cdk-form-field.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-cdk-overlay.mjs +19 -1
- package/fesm2022/raintonic-formaui-cdk-overlay.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-cdk-virtual-scroll.mjs +5 -12
- package/fesm2022/raintonic-formaui-cdk-virtual-scroll.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-accordion.mjs +8 -5
- package/fesm2022/raintonic-formaui-components-accordion.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-alert.mjs +16 -2
- package/fesm2022/raintonic-formaui-components-alert.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-autocomplete.mjs +255 -462
- package/fesm2022/raintonic-formaui-components-autocomplete.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-avatar.mjs +34 -59
- package/fesm2022/raintonic-formaui-components-avatar.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-badge.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-badge.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-breadcrumb.mjs +4 -4
- package/fesm2022/raintonic-formaui-components-breadcrumb.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-button-group.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-button-group.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-button.mjs +15 -20
- package/fesm2022/raintonic-formaui-components-button.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-card.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-card.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-checkbox.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-checkbox.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-chip.mjs +97 -0
- package/fesm2022/raintonic-formaui-components-chip.mjs.map +1 -0
- package/fesm2022/raintonic-formaui-components-data-table.mjs +69 -29
- package/fesm2022/raintonic-formaui-components-data-table.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-date-picker.mjs +223 -144
- package/fesm2022/raintonic-formaui-components-date-picker.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-divider.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-divider.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-drawer.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-drawer.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-dropdown-menu.mjs +888 -0
- package/fesm2022/raintonic-formaui-components-dropdown-menu.mjs.map +1 -0
- package/fesm2022/raintonic-formaui-components-dual-tier-navigation.mjs +774 -0
- package/fesm2022/raintonic-formaui-components-dual-tier-navigation.mjs.map +1 -0
- package/fesm2022/raintonic-formaui-components-empty-state.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-empty-state.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-file-upload.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-file-upload.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-form-field.mjs +81 -50
- package/fesm2022/raintonic-formaui-components-form-field.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-icon.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-icon.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-input.mjs +47 -12
- package/fesm2022/raintonic-formaui-components-input.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-list.mjs +4 -4
- package/fesm2022/raintonic-formaui-components-list.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-number-input.mjs +20 -12
- package/fesm2022/raintonic-formaui-components-number-input.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-paginator.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-paginator.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-password-input.mjs +35 -110
- package/fesm2022/raintonic-formaui-components-password-input.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-popover.mjs +3 -2
- package/fesm2022/raintonic-formaui-components-popover.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-progressbar.mjs +3 -2
- package/fesm2022/raintonic-formaui-components-progressbar.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-radio.mjs +5 -6
- package/fesm2022/raintonic-formaui-components-radio.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-select.mjs +257 -412
- package/fesm2022/raintonic-formaui-components-select.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-side-panel.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-side-panel.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-sidebar-nav-menu.mjs +525 -0
- package/fesm2022/raintonic-formaui-components-sidebar-nav-menu.mjs.map +1 -0
- package/fesm2022/raintonic-formaui-components-skeleton.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-skeleton.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-slider.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-slider.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-spinner.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-spinner.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-stepper.mjs +50 -45
- package/fesm2022/raintonic-formaui-components-stepper.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-strength-meter.mjs +149 -0
- package/fesm2022/raintonic-formaui-components-strength-meter.mjs.map +1 -0
- package/fesm2022/raintonic-formaui-components-tab.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-tab.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-time-picker.mjs +194 -154
- package/fesm2022/raintonic-formaui-components-time-picker.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-toggle-group.mjs +302 -0
- package/fesm2022/raintonic-formaui-components-toggle-group.mjs.map +1 -0
- package/fesm2022/raintonic-formaui-components-toggle.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-toggle.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-toolbar.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-toolbar.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-tooltip.mjs +10 -4
- package/fesm2022/raintonic-formaui-components-tooltip.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-topbar.mjs +60 -0
- package/fesm2022/raintonic-formaui-components-topbar.mjs.map +1 -0
- package/fesm2022/raintonic-formaui-components-tree-select.mjs +59 -69
- package/fesm2022/raintonic-formaui-components-tree-select.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-tree-table.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-tree-table.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-tree.mjs +31 -5
- package/fesm2022/raintonic-formaui-components-tree.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-core.mjs +279 -1
- package/fesm2022/raintonic-formaui-core.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-services-breakpoint.mjs +93 -0
- package/fesm2022/raintonic-formaui-services-breakpoint.mjs.map +1 -0
- package/fesm2022/raintonic-formaui-services-dialog.mjs +314 -16
- package/fesm2022/raintonic-formaui-services-dialog.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-services-notification.mjs +93 -29
- package/fesm2022/raintonic-formaui-services-notification.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-services-theme.mjs +46 -196
- package/fesm2022/raintonic-formaui-services-theme.mjs.map +1 -1
- package/fesm2022/raintonic-formaui.mjs +1 -1
- package/fesm2022/raintonic-formaui.mjs.map +1 -1
- package/llms-full.txt +2329 -450
- package/llms.txt +36 -33
- package/package.json +42 -19
- package/styles/fonts/Geist-Bold.woff2 +0 -0
- package/styles/fonts/Geist-Italic.woff2 +0 -0
- package/styles/fonts/Geist-Light.woff2 +0 -0
- package/styles/fonts/Geist-Medium.woff2 +0 -0
- package/styles/fonts/Geist-Regular.woff2 +0 -0
- package/styles/fonts/Geist-SemiBold.woff2 +0 -0
- package/styles/fonts/GeistMono-Regular.woff2 +0 -0
- package/styles/generated/_tokens.scss +906 -0
- package/styles/index.scss +11 -10
- package/styles/partials/_brand.scss +46 -0
- package/styles/partials/_constants.scss +22 -20
- package/styles/partials/_fonts.scss +54 -10
- package/styles/partials/_grid.scss +29 -18
- package/styles/partials/_mixins.scss +69 -27
- package/styles/partials/_motion.scss +28 -33
- package/styles/partials/_theme.scss +28 -255
- package/styles/partials/_type.scss +117 -0
- package/styles/partials/_typography.scss +45 -45
- package/styles/partials/_utilities.scss +198 -98
- package/styles/partials/components/_button.scss +144 -75
- package/styles/partials/components/_dialog.scss +181 -180
- package/styles/partials/components/_overlay.scss +87 -87
- package/styles/partials/themes/_dark.scss +3 -268
- package/styles/partials/themes/_light.scss +4 -268
- package/styles/styles.css +7744 -0
- package/styles/styles.entry.scss +3 -0
- package/styles/utilities.css +4802 -0
- package/styles/utilities.entry.scss +3 -0
- package/types/raintonic-formaui-cdk-drag-drop.d.ts +0 -1
- package/types/raintonic-formaui-cdk-drag-drop.d.ts.map +1 -1
- package/types/raintonic-formaui-cdk-form-field.d.ts +118 -2
- package/types/raintonic-formaui-cdk-form-field.d.ts.map +1 -1
- package/types/raintonic-formaui-cdk-overlay.d.ts +2 -0
- package/types/raintonic-formaui-cdk-overlay.d.ts.map +1 -1
- package/types/raintonic-formaui-cdk-virtual-scroll.d.ts +0 -1
- package/types/raintonic-formaui-cdk-virtual-scroll.d.ts.map +1 -1
- package/types/raintonic-formaui-components-accordion.d.ts +1 -1
- package/types/raintonic-formaui-components-accordion.d.ts.map +1 -1
- package/types/raintonic-formaui-components-alert.d.ts +6 -1
- package/types/raintonic-formaui-components-alert.d.ts.map +1 -1
- package/types/raintonic-formaui-components-autocomplete.d.ts +73 -116
- package/types/raintonic-formaui-components-autocomplete.d.ts.map +1 -1
- package/types/raintonic-formaui-components-avatar.d.ts +13 -31
- package/types/raintonic-formaui-components-avatar.d.ts.map +1 -1
- package/types/raintonic-formaui-components-button.d.ts +4 -10
- package/types/raintonic-formaui-components-button.d.ts.map +1 -1
- package/types/raintonic-formaui-components-chip.d.ts +43 -0
- package/types/raintonic-formaui-components-chip.d.ts.map +1 -0
- package/types/raintonic-formaui-components-data-table.d.ts +48 -11
- package/types/raintonic-formaui-components-data-table.d.ts.map +1 -1
- package/types/raintonic-formaui-components-date-picker.d.ts +59 -23
- package/types/raintonic-formaui-components-date-picker.d.ts.map +1 -1
- package/types/raintonic-formaui-components-dropdown-menu.d.ts +394 -0
- package/types/raintonic-formaui-components-dropdown-menu.d.ts.map +1 -0
- package/types/raintonic-formaui-components-dual-tier-navigation.d.ts +87 -0
- package/types/raintonic-formaui-components-dual-tier-navigation.d.ts.map +1 -0
- package/types/raintonic-formaui-components-form-field.d.ts +51 -21
- package/types/raintonic-formaui-components-form-field.d.ts.map +1 -1
- package/types/raintonic-formaui-components-input.d.ts +20 -11
- package/types/raintonic-formaui-components-input.d.ts.map +1 -1
- package/types/raintonic-formaui-components-number-input.d.ts +5 -3
- package/types/raintonic-formaui-components-number-input.d.ts.map +1 -1
- package/types/raintonic-formaui-components-password-input.d.ts +18 -32
- package/types/raintonic-formaui-components-password-input.d.ts.map +1 -1
- package/types/raintonic-formaui-components-popover.d.ts.map +1 -1
- package/types/raintonic-formaui-components-progressbar.d.ts +1 -1
- package/types/raintonic-formaui-components-progressbar.d.ts.map +1 -1
- package/types/raintonic-formaui-components-radio.d.ts +1 -2
- package/types/raintonic-formaui-components-radio.d.ts.map +1 -1
- package/types/raintonic-formaui-components-select.d.ts +107 -76
- package/types/raintonic-formaui-components-select.d.ts.map +1 -1
- package/types/raintonic-formaui-components-sidebar-nav-menu.d.ts +223 -0
- package/types/raintonic-formaui-components-sidebar-nav-menu.d.ts.map +1 -0
- package/types/raintonic-formaui-components-stepper.d.ts +4 -2
- package/types/raintonic-formaui-components-stepper.d.ts.map +1 -1
- package/types/raintonic-formaui-components-strength-meter.d.ts +78 -0
- package/types/raintonic-formaui-components-strength-meter.d.ts.map +1 -0
- package/types/raintonic-formaui-components-time-picker.d.ts +44 -24
- package/types/raintonic-formaui-components-time-picker.d.ts.map +1 -1
- package/types/raintonic-formaui-components-toggle-group.d.ts +100 -0
- package/types/raintonic-formaui-components-toggle-group.d.ts.map +1 -0
- package/types/raintonic-formaui-components-tooltip.d.ts +2 -1
- package/types/raintonic-formaui-components-tooltip.d.ts.map +1 -1
- package/types/raintonic-formaui-components-topbar.d.ts +48 -0
- package/types/raintonic-formaui-components-topbar.d.ts.map +1 -0
- package/types/raintonic-formaui-components-tree-select.d.ts +25 -9
- package/types/raintonic-formaui-components-tree-select.d.ts.map +1 -1
- package/types/raintonic-formaui-components-tree.d.ts +12 -1
- package/types/raintonic-formaui-components-tree.d.ts.map +1 -1
- package/types/raintonic-formaui-core.d.ts +243 -5
- package/types/raintonic-formaui-core.d.ts.map +1 -1
- package/types/raintonic-formaui-services-breakpoint.d.ts +44 -0
- package/types/raintonic-formaui-services-breakpoint.d.ts.map +1 -0
- package/types/raintonic-formaui-services-dialog.d.ts +141 -2
- package/types/raintonic-formaui-services-dialog.d.ts.map +1 -1
- package/types/raintonic-formaui-services-notification.d.ts +24 -2
- package/types/raintonic-formaui-services-notification.d.ts.map +1 -1
- package/types/raintonic-formaui-services-theme.d.ts +13 -103
- package/types/raintonic-formaui-services-theme.d.ts.map +1 -1
- package/types/raintonic-formaui.d.ts +1 -1
- package/fesm2022/raintonic-formaui-components-big-menu.mjs +0 -86
- package/fesm2022/raintonic-formaui-components-big-menu.mjs.map +0 -1
- package/fesm2022/raintonic-formaui-components-menu.mjs +0 -896
- package/fesm2022/raintonic-formaui-components-menu.mjs.map +0 -1
- package/fesm2022/raintonic-formaui-components-sidebar.mjs +0 -275
- package/fesm2022/raintonic-formaui-components-sidebar.mjs.map +0 -1
- package/fesm2022/raintonic-formaui-components-tag.mjs +0 -95
- package/fesm2022/raintonic-formaui-components-tag.mjs.map +0 -1
- package/styles/_fonts-entry.scss +0 -3
- package/styles/fonts/inter-tight-latin-italic.woff2 +0 -0
- package/styles/fonts/inter-tight-latin.woff2 +0 -0
- package/types/raintonic-formaui-components-big-menu.d.ts +0 -73
- package/types/raintonic-formaui-components-big-menu.d.ts.map +0 -1
- package/types/raintonic-formaui-components-menu.d.ts +0 -403
- package/types/raintonic-formaui-components-menu.d.ts.map +0 -1
- package/types/raintonic-formaui-components-sidebar.d.ts +0 -185
- package/types/raintonic-formaui-components-sidebar.d.ts.map +0 -1
- package/types/raintonic-formaui-components-tag.d.ts +0 -43
- package/types/raintonic-formaui-components-tag.d.ts.map +0 -1
package/styles/index.scss
CHANGED
|
@@ -12,6 +12,8 @@
|
|
|
12
12
|
|
|
13
13
|
// 4. Typography system
|
|
14
14
|
@forward './partials/typography';
|
|
15
|
+
@forward './partials/type';
|
|
16
|
+
@forward './partials/brand';
|
|
15
17
|
|
|
16
18
|
// 5. Motion system
|
|
17
19
|
@forward './partials/motion';
|
|
@@ -32,8 +34,7 @@
|
|
|
32
34
|
@use './partials/constants' as *;
|
|
33
35
|
|
|
34
36
|
// Fonts are now opt-in. Import directly in your app's styles.scss:
|
|
35
|
-
|
|
36
|
-
// @use "./partials/fonts";
|
|
37
|
+
@use './partials/fonts.scss';
|
|
37
38
|
|
|
38
39
|
// Base reset and normalization
|
|
39
40
|
*,
|
|
@@ -49,7 +50,7 @@
|
|
|
49
50
|
}
|
|
50
51
|
|
|
51
52
|
html {
|
|
52
|
-
font-family: var(--fui-font-
|
|
53
|
+
font-family: var(--fui-font-sans);
|
|
53
54
|
line-height: 1.5;
|
|
54
55
|
-webkit-text-size-adjust: 100%;
|
|
55
56
|
-moz-tab-size: 4;
|
|
@@ -61,7 +62,7 @@ body {
|
|
|
61
62
|
font-family: inherit;
|
|
62
63
|
line-height: inherit;
|
|
63
64
|
color: var(--fui-text-primary);
|
|
64
|
-
background-color: var(--fui-
|
|
65
|
+
background-color: var(--fui-bg-default);
|
|
65
66
|
|
|
66
67
|
// Dialog overlay support
|
|
67
68
|
&.fui-dialog-open {
|
|
@@ -69,11 +70,11 @@ body {
|
|
|
69
70
|
}
|
|
70
71
|
}
|
|
71
72
|
|
|
72
|
-
// Focus management
|
|
73
|
+
// Focus management. For inputs we delegate focus to fui-form-field
|
|
73
74
|
button:focus-visible,
|
|
74
75
|
[role='button']:focus-visible,
|
|
75
76
|
a:focus-visible,
|
|
76
|
-
input:focus-visible,
|
|
77
|
+
input:focus-visible, // ONLY for inputs not wrapper by form-field, which overrides outline to none
|
|
77
78
|
select:focus-visible,
|
|
78
79
|
textarea:focus-visible {
|
|
79
80
|
@include fui-focus-ring();
|
|
@@ -84,14 +85,14 @@ button {
|
|
|
84
85
|
@include fui-button-reset();
|
|
85
86
|
}
|
|
86
87
|
|
|
87
|
-
// Link styles
|
|
88
|
+
// Link styles — exclude fui-button anchors, which have their own variant system
|
|
88
89
|
a:not(.fui-button) {
|
|
89
|
-
color: var(--fui-
|
|
90
|
+
color: var(--fui-text-link);
|
|
90
91
|
text-decoration: none;
|
|
91
92
|
|
|
92
93
|
&:hover {
|
|
93
|
-
color: var(--fui-
|
|
94
|
-
text-decoration: underline;
|
|
94
|
+
color: var(--fui-text-link-hover);
|
|
95
|
+
/* text-decoration: underline; */
|
|
95
96
|
}
|
|
96
97
|
|
|
97
98
|
&:focus-visible {
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
// FormaUI — build-time brand override. NO runtime generation.
|
|
2
|
+
// Uso consumer: @use '@raintonic/formaui/styles' as fui; @include fui.brand($primary: #6657B8, $accent: #9D94F0);
|
|
3
|
+
@use 'sass:color';
|
|
4
|
+
@use 'sass:math';
|
|
5
|
+
|
|
6
|
+
@function _fui-ramp-light($base, $s) {
|
|
7
|
+
@if $s == 60 {
|
|
8
|
+
@return $base;
|
|
9
|
+
} @else if $s < 60 {
|
|
10
|
+
@return color.mix(#fff, $base, math.div(60 - $s, 60) * 100%);
|
|
11
|
+
} @else {
|
|
12
|
+
@return color.mix(#000, $base, math.div($s - 60, 60) * 100%);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
// dark = mirror: step s dark = light (120 - s)
|
|
16
|
+
@function _fui-ramp-dark($base, $s) {
|
|
17
|
+
@return _fui-ramp-light($base, 120 - $s);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
$_fui-steps: 10 20 30 40 50 60 70 80 90 100 110;
|
|
21
|
+
|
|
22
|
+
@mixin brand($primary, $accent: null) {
|
|
23
|
+
:root,
|
|
24
|
+
:root[data-theme='light'],
|
|
25
|
+
[data-theme='light'] {
|
|
26
|
+
@each $s in $_fui-steps {
|
|
27
|
+
--fui-primary-#{$s}: #{_fui-ramp-light($primary, $s)};
|
|
28
|
+
}
|
|
29
|
+
@if $accent {
|
|
30
|
+
@each $s in $_fui-steps {
|
|
31
|
+
--fui-accent-#{$s}: #{_fui-ramp-light($accent, $s)};
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
:root[data-theme='dark'],
|
|
36
|
+
[data-theme='dark'] {
|
|
37
|
+
@each $s in $_fui-steps {
|
|
38
|
+
--fui-primary-#{$s}: #{_fui-ramp-dark($primary, $s)};
|
|
39
|
+
}
|
|
40
|
+
@if $accent {
|
|
41
|
+
@each $s in $_fui-steps {
|
|
42
|
+
--fui-accent-#{$s}: #{_fui-ramp-dark($accent, $s)};
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
@@ -1,29 +1,31 @@
|
|
|
1
1
|
// Design tokens and constants
|
|
2
2
|
// Based on Carbon Design System principles
|
|
3
3
|
|
|
4
|
-
// Spacing scale (rem units)
|
|
5
|
-
$fui-spacing-
|
|
6
|
-
$fui-spacing-
|
|
7
|
-
$fui-spacing-
|
|
8
|
-
$fui-spacing-
|
|
9
|
-
$fui-spacing-
|
|
10
|
-
$fui-spacing-
|
|
11
|
-
$fui-spacing-
|
|
12
|
-
$fui-spacing-
|
|
13
|
-
$fui-spacing-
|
|
14
|
-
$fui-spacing-
|
|
15
|
-
$fui-spacing-
|
|
16
|
-
$fui-spacing-
|
|
4
|
+
// Spacing scale (rem units) — PRD scale 0..13
|
|
5
|
+
$fui-spacing-0: 0; // 0px
|
|
6
|
+
$fui-spacing-1: 0.125rem; // 2px
|
|
7
|
+
$fui-spacing-2: 0.25rem; // 4px
|
|
8
|
+
$fui-spacing-3: 0.375rem; // 6px
|
|
9
|
+
$fui-spacing-4: 0.5rem; // 8px
|
|
10
|
+
$fui-spacing-5: 0.625rem; // 10px
|
|
11
|
+
$fui-spacing-6: 0.75rem; // 12px
|
|
12
|
+
$fui-spacing-7: 1rem; // 16px
|
|
13
|
+
$fui-spacing-8: 1.25rem; // 20px
|
|
14
|
+
$fui-spacing-9: 1.5rem; // 24px
|
|
15
|
+
$fui-spacing-10: 1.75rem; // 28px
|
|
16
|
+
$fui-spacing-11: 2rem; // 32px
|
|
17
|
+
$fui-spacing-12: 2.5rem; // 40px
|
|
18
|
+
$fui-spacing-13: 3rem; // 48px
|
|
17
19
|
|
|
18
20
|
// Layout constants
|
|
19
21
|
$fui-grid-columns: 12;
|
|
20
|
-
$fui-grid-gutter: $fui-spacing-
|
|
22
|
+
$fui-grid-gutter: $fui-spacing-7;
|
|
21
23
|
$fui-container-max-width: 1200px;
|
|
22
24
|
|
|
23
25
|
// Breakpoints
|
|
24
|
-
$fui-
|
|
25
|
-
$fui-
|
|
26
|
-
$fui-
|
|
27
|
-
$fui-
|
|
28
|
-
$fui-
|
|
29
|
-
$fui-
|
|
26
|
+
$fui-bp-xs: 480px;
|
|
27
|
+
$fui-bp-sm: 640px;
|
|
28
|
+
$fui-bp-md: 768px;
|
|
29
|
+
$fui-bp-lg: 1024px;
|
|
30
|
+
$fui-bp-xl: 1280px;
|
|
31
|
+
$fui-bp-2xl: 1536px;
|
|
@@ -1,35 +1,79 @@
|
|
|
1
1
|
// Self-hosted fonts — eliminates render-blocking Google Fonts dependency
|
|
2
2
|
|
|
3
|
-
//
|
|
3
|
+
// Geist — individual weights (Light, Regular, Medium, SemiBold, Bold)
|
|
4
4
|
@font-face {
|
|
5
|
-
font-family: '
|
|
5
|
+
font-family: 'Geist';
|
|
6
6
|
font-style: normal;
|
|
7
|
-
font-weight:
|
|
7
|
+
font-weight: 300;
|
|
8
8
|
font-display: swap;
|
|
9
|
-
src: url('../fonts/
|
|
9
|
+
src: url('../fonts/Geist-Light.woff2') format('woff2');
|
|
10
10
|
unicode-range:
|
|
11
11
|
U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191,
|
|
12
12
|
U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
@font-face {
|
|
16
|
-
font-family: '
|
|
16
|
+
font-family: 'Geist';
|
|
17
|
+
font-style: normal;
|
|
18
|
+
font-weight: 400;
|
|
19
|
+
font-display: swap;
|
|
20
|
+
src: url('../fonts/Geist-Regular.woff2') format('woff2');
|
|
21
|
+
unicode-range:
|
|
22
|
+
U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191,
|
|
23
|
+
U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
@font-face {
|
|
27
|
+
font-family: 'Geist';
|
|
28
|
+
font-style: normal;
|
|
29
|
+
font-weight: 500;
|
|
30
|
+
font-display: swap;
|
|
31
|
+
src: url('../fonts/Geist-Medium.woff2') format('woff2');
|
|
32
|
+
unicode-range:
|
|
33
|
+
U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191,
|
|
34
|
+
U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
@font-face {
|
|
38
|
+
font-family: 'Geist';
|
|
39
|
+
font-style: normal;
|
|
40
|
+
font-weight: 600;
|
|
41
|
+
font-display: swap;
|
|
42
|
+
src: url('../fonts/Geist-SemiBold.woff2') format('woff2');
|
|
43
|
+
unicode-range:
|
|
44
|
+
U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191,
|
|
45
|
+
U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
@font-face {
|
|
49
|
+
font-family: 'Geist';
|
|
50
|
+
font-style: normal;
|
|
51
|
+
font-weight: 700;
|
|
52
|
+
font-display: swap;
|
|
53
|
+
src: url('../fonts/Geist-Bold.woff2') format('woff2');
|
|
54
|
+
unicode-range:
|
|
55
|
+
U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191,
|
|
56
|
+
U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
@font-face {
|
|
60
|
+
font-family: 'Geist';
|
|
17
61
|
font-style: italic;
|
|
18
|
-
font-weight:
|
|
62
|
+
font-weight: 400;
|
|
19
63
|
font-display: swap;
|
|
20
|
-
src: url('../fonts/
|
|
64
|
+
src: url('../fonts/Geist-Italic.woff2') format('woff2');
|
|
21
65
|
unicode-range:
|
|
22
66
|
U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191,
|
|
23
67
|
U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
|
24
68
|
}
|
|
25
69
|
|
|
26
|
-
//
|
|
70
|
+
// Geist Mono — regular (400) only, latin subset
|
|
27
71
|
@font-face {
|
|
28
|
-
font-family: '
|
|
72
|
+
font-family: 'Geist Mono';
|
|
29
73
|
font-style: normal;
|
|
30
74
|
font-weight: 400;
|
|
31
75
|
font-display: swap;
|
|
32
|
-
src: url('../fonts/
|
|
76
|
+
src: url('../fonts/GeistMono-Regular.woff2') format('woff2');
|
|
33
77
|
unicode-range:
|
|
34
78
|
U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191,
|
|
35
79
|
U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
|
@@ -10,28 +10,39 @@
|
|
|
10
10
|
padding-left: calc(var(--fui-gutter-x, #{$fui-grid-gutter}) * 0.5);
|
|
11
11
|
margin-right: auto;
|
|
12
12
|
margin-left: auto;
|
|
13
|
+
|
|
14
|
+
@media (min-width: $fui-bp-sm) {
|
|
15
|
+
max-width: var(--fui-container-sm);
|
|
16
|
+
}
|
|
17
|
+
@media (min-width: $fui-bp-md) {
|
|
18
|
+
max-width: var(--fui-container-md);
|
|
19
|
+
}
|
|
20
|
+
@media (min-width: $fui-bp-lg) {
|
|
21
|
+
max-width: var(--fui-container-lg);
|
|
22
|
+
}
|
|
23
|
+
@media (min-width: $fui-bp-xl) {
|
|
24
|
+
max-width: var(--fui-container-xl);
|
|
25
|
+
}
|
|
26
|
+
@media (min-width: $fui-bp-2xl) {
|
|
27
|
+
max-width: var(--fui-container-2xl);
|
|
28
|
+
}
|
|
13
29
|
}
|
|
14
30
|
|
|
15
31
|
.fui-container-sm {
|
|
16
|
-
max-width:
|
|
32
|
+
max-width: var(--fui-container-sm);
|
|
17
33
|
}
|
|
18
|
-
|
|
19
34
|
.fui-container-md {
|
|
20
|
-
max-width:
|
|
35
|
+
max-width: var(--fui-container-md);
|
|
21
36
|
}
|
|
22
|
-
|
|
23
37
|
.fui-container-lg {
|
|
24
|
-
max-width:
|
|
38
|
+
max-width: var(--fui-container-lg);
|
|
25
39
|
}
|
|
26
|
-
|
|
27
40
|
.fui-container-xl {
|
|
28
|
-
max-width:
|
|
41
|
+
max-width: var(--fui-container-xl);
|
|
29
42
|
}
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
max-width: $fui-container-max-width;
|
|
43
|
+
.fui-container-2xl {
|
|
44
|
+
max-width: var(--fui-container-2xl);
|
|
33
45
|
}
|
|
34
|
-
|
|
35
46
|
.fui-container-fluid {
|
|
36
47
|
max-width: none;
|
|
37
48
|
}
|
|
@@ -75,7 +86,7 @@
|
|
|
75
86
|
}
|
|
76
87
|
|
|
77
88
|
// Responsive columns
|
|
78
|
-
@each $breakpoint in (sm, md, lg, xl,
|
|
89
|
+
@each $breakpoint in (sm, md, lg, xl, 2xl) {
|
|
79
90
|
@include fui-breakpoint($breakpoint) {
|
|
80
91
|
.fui-col-#{$breakpoint} {
|
|
81
92
|
flex: 1 0 0%;
|
|
@@ -106,7 +117,7 @@
|
|
|
106
117
|
}
|
|
107
118
|
}
|
|
108
119
|
|
|
109
|
-
@each $breakpoint in (sm, md, lg, xl,
|
|
120
|
+
@each $breakpoint in (sm, md, lg, xl, 2xl) {
|
|
110
121
|
@include fui-breakpoint($breakpoint) {
|
|
111
122
|
@for $i from 0 through ($fui-grid-columns - 1) {
|
|
112
123
|
.fui-offset-#{$breakpoint}-#{$i} {
|
|
@@ -134,17 +145,17 @@
|
|
|
134
145
|
@for $i from 1 through 5 {
|
|
135
146
|
.fui-g-#{$i},
|
|
136
147
|
.fui-gx-#{$i} {
|
|
137
|
-
--fui-gutter-x: #{$fui-spacing-
|
|
148
|
+
--fui-gutter-x: #{$fui-spacing-4 * $i};
|
|
138
149
|
}
|
|
139
150
|
|
|
140
151
|
.fui-g-#{$i},
|
|
141
152
|
.fui-gy-#{$i} {
|
|
142
|
-
--fui-gutter-y: #{$fui-spacing-
|
|
153
|
+
--fui-gutter-y: #{$fui-spacing-4 * $i};
|
|
143
154
|
}
|
|
144
155
|
}
|
|
145
156
|
|
|
146
157
|
// Responsive gutters
|
|
147
|
-
@each $breakpoint in (sm, md, lg, xl,
|
|
158
|
+
@each $breakpoint in (sm, md, lg, xl, 2xl) {
|
|
148
159
|
@include fui-breakpoint($breakpoint) {
|
|
149
160
|
.fui-g-#{$breakpoint}-0,
|
|
150
161
|
.fui-gx-#{$breakpoint}-0 {
|
|
@@ -159,12 +170,12 @@
|
|
|
159
170
|
@for $i from 1 through 5 {
|
|
160
171
|
.fui-g-#{$breakpoint}-#{$i},
|
|
161
172
|
.fui-gx-#{$breakpoint}-#{$i} {
|
|
162
|
-
--fui-gutter-x: #{$fui-spacing-
|
|
173
|
+
--fui-gutter-x: #{$fui-spacing-4 * $i};
|
|
163
174
|
}
|
|
164
175
|
|
|
165
176
|
.fui-g-#{$breakpoint}-#{$i},
|
|
166
177
|
.fui-gy-#{$breakpoint}-#{$i} {
|
|
167
|
-
--fui-gutter-y: #{$fui-spacing-
|
|
178
|
+
--fui-gutter-y: #{$fui-spacing-4 * $i};
|
|
168
179
|
}
|
|
169
180
|
}
|
|
170
181
|
}
|
|
@@ -1,11 +1,53 @@
|
|
|
1
1
|
// Mixins for common patterns
|
|
2
2
|
@use 'sass:color';
|
|
3
|
+
@use 'sass:map';
|
|
4
|
+
@use 'sass:string';
|
|
3
5
|
@use './constants' as *;
|
|
4
6
|
|
|
5
|
-
//
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
// CSS identifier escape per nomi che iniziano con cifra (es. 2xl → \32 xl).
|
|
8
|
+
// In CSS un identificatore di classe non può iniziare con una cifra senza
|
|
9
|
+
// escape. Lo standard CSS richiede `\3X ` (hex del codice ASCII + space
|
|
10
|
+
// terminatore). Stesso pattern usato da Tailwind.
|
|
11
|
+
//
|
|
12
|
+
// Esempi:
|
|
13
|
+
// css-ident-escape('2xl') → '\32 xl'
|
|
14
|
+
// css-ident-escape('4k') → '\34 k'
|
|
15
|
+
// css-ident-escape('md') → 'md' (no-op)
|
|
16
|
+
@function css-ident-escape($name) {
|
|
17
|
+
$str: '#{$name}';
|
|
18
|
+
$first: string.slice($str, 1, 1);
|
|
19
|
+
$digits: ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9');
|
|
20
|
+
$hex-map: (
|
|
21
|
+
'0': '\\30',
|
|
22
|
+
'1': '\\31',
|
|
23
|
+
'2': '\\32',
|
|
24
|
+
'3': '\\33',
|
|
25
|
+
'4': '\\34',
|
|
26
|
+
'5': '\\35',
|
|
27
|
+
'6': '\\36',
|
|
28
|
+
'7': '\\37',
|
|
29
|
+
'8': '\\38',
|
|
30
|
+
'9': '\\39',
|
|
31
|
+
);
|
|
32
|
+
|
|
33
|
+
$is-digit: false;
|
|
34
|
+
@each $d in $digits {
|
|
35
|
+
@if $first == $d {
|
|
36
|
+
$is-digit: true;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
@if $is-digit {
|
|
41
|
+
$hex: map.get($hex-map, $first);
|
|
42
|
+
$rest: string.slice($str, 2);
|
|
43
|
+
@return string.unquote('#{$hex} #{$rest}');
|
|
44
|
+
}
|
|
45
|
+
@return $name;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// Focus ring mixin (Carbon Design System style). fui-primary-10 follows figma design
|
|
49
|
+
@mixin fui-focus-ring($width: 2px, $color: var(--fui-primary-10)) {
|
|
50
|
+
outline: $width solid $color;
|
|
9
51
|
}
|
|
10
52
|
|
|
11
53
|
// Button reset mixin
|
|
@@ -54,32 +96,32 @@
|
|
|
54
96
|
// Responsive breakpoint mixin
|
|
55
97
|
@mixin fui-breakpoint($size) {
|
|
56
98
|
@if $size == xs {
|
|
57
|
-
@media (min-width: #{$fui-
|
|
99
|
+
@media (min-width: #{$fui-bp-xs}) {
|
|
58
100
|
@content;
|
|
59
101
|
}
|
|
60
102
|
}
|
|
61
103
|
@if $size == sm {
|
|
62
|
-
@media (min-width: #{$fui-
|
|
104
|
+
@media (min-width: #{$fui-bp-sm}) {
|
|
63
105
|
@content;
|
|
64
106
|
}
|
|
65
107
|
}
|
|
66
108
|
@if $size == md {
|
|
67
|
-
@media (min-width: #{$fui-
|
|
109
|
+
@media (min-width: #{$fui-bp-md}) {
|
|
68
110
|
@content;
|
|
69
111
|
}
|
|
70
112
|
}
|
|
71
113
|
@if $size == lg {
|
|
72
|
-
@media (min-width: #{$fui-
|
|
114
|
+
@media (min-width: #{$fui-bp-lg}) {
|
|
73
115
|
@content;
|
|
74
116
|
}
|
|
75
117
|
}
|
|
76
118
|
@if $size == xl {
|
|
77
|
-
@media (min-width: #{$fui-
|
|
119
|
+
@media (min-width: #{$fui-bp-xl}) {
|
|
78
120
|
@content;
|
|
79
121
|
}
|
|
80
122
|
}
|
|
81
|
-
@if $size ==
|
|
82
|
-
@media (min-width: #{$fui-
|
|
123
|
+
@if $size == 2xl {
|
|
124
|
+
@media (min-width: #{$fui-bp-2xl}) {
|
|
83
125
|
@content;
|
|
84
126
|
}
|
|
85
127
|
}
|
|
@@ -92,22 +134,22 @@
|
|
|
92
134
|
@mixin fui-elevation($level: 1) {
|
|
93
135
|
@if $level == 0 {
|
|
94
136
|
box-shadow: none;
|
|
95
|
-
background-color: var(--fui-
|
|
137
|
+
background-color: var(--fui-bg-default);
|
|
96
138
|
} @else if $level == 1 {
|
|
97
|
-
box-shadow: var(--fui-shadow-
|
|
98
|
-
background-color: var(--fui-
|
|
139
|
+
box-shadow: var(--fui-shadow-xs);
|
|
140
|
+
background-color: var(--fui-bg-default);
|
|
99
141
|
} @else if $level == 2 {
|
|
100
|
-
box-shadow: var(--fui-shadow-
|
|
101
|
-
background-color: var(--fui-
|
|
142
|
+
box-shadow: var(--fui-shadow-sm);
|
|
143
|
+
background-color: var(--fui-bg-subtle);
|
|
102
144
|
} @else if $level == 3 {
|
|
103
|
-
box-shadow: var(--fui-shadow-
|
|
104
|
-
background-color: var(--fui-
|
|
145
|
+
box-shadow: var(--fui-shadow-md);
|
|
146
|
+
background-color: var(--fui-bg-muted);
|
|
105
147
|
} @else if $level == 4 {
|
|
106
|
-
box-shadow: var(--fui-shadow-
|
|
107
|
-
background-color: var(--fui-
|
|
148
|
+
box-shadow: var(--fui-shadow-lg);
|
|
149
|
+
background-color: var(--fui-bg-muted);
|
|
108
150
|
} @else if $level == 5 {
|
|
109
|
-
box-shadow: var(--fui-shadow-
|
|
110
|
-
background-color: var(--fui-
|
|
151
|
+
box-shadow: var(--fui-shadow-xl);
|
|
152
|
+
background-color: var(--fui-bg-muted);
|
|
111
153
|
}
|
|
112
154
|
}
|
|
113
155
|
|
|
@@ -116,15 +158,15 @@
|
|
|
116
158
|
@if $level == 0 {
|
|
117
159
|
box-shadow: none;
|
|
118
160
|
} @else if $level == 1 {
|
|
119
|
-
box-shadow: var(--fui-shadow-
|
|
161
|
+
box-shadow: var(--fui-shadow-xs);
|
|
120
162
|
} @else if $level == 2 {
|
|
121
|
-
box-shadow: var(--fui-shadow-
|
|
163
|
+
box-shadow: var(--fui-shadow-sm);
|
|
122
164
|
} @else if $level == 3 {
|
|
123
|
-
box-shadow: var(--fui-shadow-
|
|
165
|
+
box-shadow: var(--fui-shadow-md);
|
|
124
166
|
} @else if $level == 4 {
|
|
125
|
-
box-shadow: var(--fui-shadow-
|
|
167
|
+
box-shadow: var(--fui-shadow-lg);
|
|
126
168
|
} @else if $level == 5 {
|
|
127
|
-
box-shadow: var(--fui-shadow-
|
|
169
|
+
box-shadow: var(--fui-shadow-xl);
|
|
128
170
|
}
|
|
129
171
|
}
|
|
130
172
|
|
|
@@ -4,48 +4,46 @@
|
|
|
4
4
|
// Motion CSS variables are defined in _theme-variables.scss to avoid duplication.
|
|
5
5
|
|
|
6
6
|
// Motion mixins
|
|
7
|
-
@mixin fui-motion(
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
$easing
|
|
11
|
-
|
|
12
|
-
) {
|
|
13
|
-
transition: $property $duration $easing $delay;
|
|
7
|
+
@mixin fui-motion($property: all, $duration: var(--fui-duration-base), $easing: var(--fui-ease-in-out), $delay: 0ms) {
|
|
8
|
+
transition-property: $property;
|
|
9
|
+
transition-duration: $duration;
|
|
10
|
+
transition-timing-function: $easing;
|
|
11
|
+
transition-delay: $delay;
|
|
14
12
|
}
|
|
15
13
|
|
|
16
14
|
// Specific motion patterns
|
|
17
15
|
@mixin fui-motion-fade-in {
|
|
18
|
-
@include fui-motion(opacity, var(--fui-duration-fast
|
|
16
|
+
@include fui-motion(opacity, var(--fui-duration-fast), var(--fui-ease-out));
|
|
19
17
|
}
|
|
20
18
|
|
|
21
19
|
@mixin fui-motion-fade-out {
|
|
22
|
-
@include fui-motion(opacity, var(--fui-duration-fast
|
|
20
|
+
@include fui-motion(opacity, var(--fui-duration-fast), var(--fui-ease-in));
|
|
23
21
|
}
|
|
24
22
|
|
|
25
23
|
@mixin fui-motion-slide-in($direction: 'bottom') {
|
|
26
24
|
@if $direction == 'bottom' {
|
|
27
|
-
@include fui-motion(transform, var(--fui-duration-
|
|
25
|
+
@include fui-motion(transform, var(--fui-duration-base), var(--fui-ease-out));
|
|
28
26
|
transform: translateY(0);
|
|
29
27
|
|
|
30
28
|
&.fui-motion-entering {
|
|
31
29
|
transform: translateY(1rem);
|
|
32
30
|
}
|
|
33
31
|
} @else if $direction == 'top' {
|
|
34
|
-
@include fui-motion(transform, var(--fui-duration-
|
|
32
|
+
@include fui-motion(transform, var(--fui-duration-base), var(--fui-ease-out));
|
|
35
33
|
transform: translateY(0);
|
|
36
34
|
|
|
37
35
|
&.fui-motion-entering {
|
|
38
36
|
transform: translateY(-1rem);
|
|
39
37
|
}
|
|
40
38
|
} @else if $direction == 'left' {
|
|
41
|
-
@include fui-motion(transform, var(--fui-duration-
|
|
39
|
+
@include fui-motion(transform, var(--fui-duration-base), var(--fui-ease-out));
|
|
42
40
|
transform: translateX(0);
|
|
43
41
|
|
|
44
42
|
&.fui-motion-entering {
|
|
45
43
|
transform: translateX(-1rem);
|
|
46
44
|
}
|
|
47
45
|
} @else if $direction == 'right' {
|
|
48
|
-
@include fui-motion(transform, var(--fui-duration-
|
|
46
|
+
@include fui-motion(transform, var(--fui-duration-base), var(--fui-ease-out));
|
|
49
47
|
transform: translateX(0);
|
|
50
48
|
|
|
51
49
|
&.fui-motion-entering {
|
|
@@ -55,7 +53,7 @@
|
|
|
55
53
|
}
|
|
56
54
|
|
|
57
55
|
@mixin fui-motion-scale-in {
|
|
58
|
-
@include fui-motion((transform, opacity), var(--fui-duration-
|
|
56
|
+
@include fui-motion((transform, opacity), var(--fui-duration-base), var(--fui-ease-out));
|
|
59
57
|
transform: scale(1);
|
|
60
58
|
opacity: 1;
|
|
61
59
|
|
|
@@ -67,10 +65,10 @@
|
|
|
67
65
|
|
|
68
66
|
@mixin fui-motion-expand($direction: 'vertical') {
|
|
69
67
|
@if $direction == 'vertical' {
|
|
70
|
-
@include fui-motion(max-height, var(--fui-duration-moderate
|
|
68
|
+
@include fui-motion(max-height, var(--fui-duration-moderate), var(--fui-ease-in-out));
|
|
71
69
|
overflow: hidden;
|
|
72
70
|
} @else if $direction == 'horizontal' {
|
|
73
|
-
@include fui-motion(max-width, var(--fui-duration-moderate
|
|
71
|
+
@include fui-motion(max-width, var(--fui-duration-moderate), var(--fui-ease-in-out));
|
|
74
72
|
overflow: hidden;
|
|
75
73
|
}
|
|
76
74
|
}
|
|
@@ -92,9 +90,9 @@
|
|
|
92
90
|
opacity: 0;
|
|
93
91
|
transform: translate(-50%, -50%);
|
|
94
92
|
transition:
|
|
95
|
-
width var(--fui-duration-slow
|
|
96
|
-
height var(--fui-duration-slow
|
|
97
|
-
opacity var(--fui-duration-slow
|
|
93
|
+
width var(--fui-duration-slow) var(--fui-ease-emphasized),
|
|
94
|
+
height var(--fui-duration-slow) var(--fui-ease-emphasized),
|
|
95
|
+
opacity var(--fui-duration-slow) var(--fui-ease-in-out);
|
|
98
96
|
}
|
|
99
97
|
|
|
100
98
|
&:active::before {
|
|
@@ -119,22 +117,22 @@
|
|
|
119
117
|
|
|
120
118
|
@mixin fui-skeleton-loading {
|
|
121
119
|
animation: fui-skeleton-pulse 1.5s ease-in-out infinite;
|
|
122
|
-
background-color: var(--fui-
|
|
123
|
-
border-radius: var(--fui-
|
|
120
|
+
background-color: var(--fui-bg-muted);
|
|
121
|
+
border-radius: var(--fui-radius-md);
|
|
124
122
|
}
|
|
125
123
|
|
|
126
124
|
// Focus transition
|
|
127
125
|
@mixin fui-focus-transition {
|
|
128
126
|
transition:
|
|
129
|
-
box-shadow var(--fui-duration-fast
|
|
130
|
-
outline var(--fui-duration-fast
|
|
127
|
+
box-shadow var(--fui-duration-fast) var(--fui-ease-in-out),
|
|
128
|
+
outline var(--fui-duration-fast) var(--fui-ease-in-out);
|
|
131
129
|
}
|
|
132
130
|
|
|
133
131
|
// Hover lift effect
|
|
134
132
|
@mixin fui-hover-lift {
|
|
135
133
|
transition:
|
|
136
|
-
transform var(--fui-duration-fast
|
|
137
|
-
box-shadow var(--fui-duration-fast
|
|
134
|
+
transform var(--fui-duration-fast) var(--fui-ease-in-out),
|
|
135
|
+
box-shadow var(--fui-duration-fast) var(--fui-ease-in-out);
|
|
138
136
|
|
|
139
137
|
&:hover {
|
|
140
138
|
transform: translateY(-2px);
|
|
@@ -145,8 +143,8 @@
|
|
|
145
143
|
// Disabled state transition
|
|
146
144
|
@mixin fui-disabled-transition {
|
|
147
145
|
transition:
|
|
148
|
-
opacity var(--fui-duration-fast
|
|
149
|
-
cursor var(--fui-duration-fast
|
|
146
|
+
opacity var(--fui-duration-fast) var(--fui-ease-in-out),
|
|
147
|
+
cursor var(--fui-duration-fast) var(--fui-ease-in-out);
|
|
150
148
|
}
|
|
151
149
|
|
|
152
150
|
// Loading spinner
|
|
@@ -182,7 +180,7 @@
|
|
|
182
180
|
}
|
|
183
181
|
|
|
184
182
|
@mixin fui-error-shake {
|
|
185
|
-
animation: fui-shake var(--fui-duration-slow
|
|
183
|
+
animation: fui-shake var(--fui-duration-slow) var(--fui-ease-in-out);
|
|
186
184
|
}
|
|
187
185
|
|
|
188
186
|
// Utility classes for motion
|
|
@@ -248,7 +246,7 @@
|
|
|
248
246
|
}
|
|
249
247
|
|
|
250
248
|
.fui-slide-in {
|
|
251
|
-
animation: fui-slide-in var(--fui-duration-
|
|
249
|
+
animation: fui-slide-in var(--fui-duration-base) var(--fui-ease-out);
|
|
252
250
|
}
|
|
253
251
|
|
|
254
252
|
// Popover/dropdown entrance — for panels portaled into the overlay container
|
|
@@ -268,10 +266,7 @@
|
|
|
268
266
|
}
|
|
269
267
|
}
|
|
270
268
|
|
|
271
|
-
@mixin fui-motion-popover-enter(
|
|
272
|
-
$duration: var(--fui-duration-moderate-01),
|
|
273
|
-
$easing: var(--fui-ease-entrance)
|
|
274
|
-
) {
|
|
269
|
+
@mixin fui-motion-popover-enter($duration: var(--fui-duration-base), $easing: var(--fui-ease-out)) {
|
|
275
270
|
animation: fui-popover-enter $duration $easing both;
|
|
276
271
|
will-change: transform, opacity;
|
|
277
272
|
}
|