@mohamedatia/fly-design-system 2.15.3 → 2.16.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mohamedatia/fly-design-system",
3
- "version": "2.15.3",
3
+ "version": "2.16.0",
4
4
  "description": "FlyOS design system — shared components, directives, pipes, services, and models for Business App developers.",
5
5
  "keywords": [
6
6
  "flyos",
@@ -1,213 +1,213 @@
1
- @use 'vos-button-mixins' as *;
2
-
3
- // ─── visionOS Button Utility Classes (shared with FlyOS desktop shell) ────────
4
- // Requires @use 'fly-theme' (or equivalent tokens) before this partial.
5
-
6
- @layer designsystem {
7
-
8
- .vos-btn {
9
- position: relative;
10
- display: inline-flex;
11
- align-items: center;
12
- justify-content: center;
13
- border: none;
14
- background: transparent;
15
- color: var(--label-primary);
16
- font-family: var(--font-family);
17
- font-weight: var(--btn-font-weight);
18
- cursor: pointer;
19
- white-space: nowrap;
20
- overflow: clip;
21
- padding: 0;
22
- transition: background 0.15s ease, color 0.15s ease;
23
-
24
- &.sm {
25
- height: var(--btn-sm-height);
26
- padding: var(--btn-sm-padding);
27
- font-size: var(--btn-sm-font-size);
28
- line-height: var(--btn-sm-line-height);
29
- gap: var(--btn-sm-gap);
30
- border-radius: var(--btn-radius-capsule);
31
-
32
- i, .btn-symbol { font-size: var(--btn-sm-symbol-size); }
33
- }
34
-
35
- &.reg {
36
- height: var(--btn-reg-height);
37
- padding: var(--btn-reg-padding);
38
- font-size: var(--btn-reg-font-size);
39
- line-height: var(--btn-reg-line-height);
40
- gap: var(--btn-reg-gap);
41
- border-radius: var(--btn-radius-capsule);
42
-
43
- i, .btn-symbol { font-size: var(--btn-reg-symbol-size); }
44
- }
45
-
46
- &.lg {
47
- height: var(--btn-lg-height);
48
- padding: var(--btn-lg-padding);
49
- font-size: var(--btn-lg-font-size);
50
- line-height: var(--btn-lg-line-height);
51
- gap: var(--btn-lg-gap);
52
- border-radius: var(--btn-radius-capsule);
53
-
54
- i, .btn-symbol { font-size: var(--btn-lg-symbol-size); }
55
- }
56
-
57
- &.rect {
58
- &.sm { border-radius: var(--btn-radius-rect-sm); }
59
- &.reg { border-radius: var(--btn-radius-rect-sm); }
60
- &.lg { border-radius: var(--btn-radius-rect-lg); }
61
- }
62
-
63
- &.platter::before {
64
- @include vos-platter-layers(inherit);
65
- }
66
-
67
- &:hover:not(:disabled, .selected, .active)::before {
68
- @include vos-platter-layers(inherit);
69
- }
70
-
71
- &.selected,
72
- &.active {
73
- background: var(--btn-selected-bg);
74
- color: var(--btn-selected-text);
75
-
76
- &::before { display: none; }
77
- }
78
-
79
- &:disabled, &.disabled {
80
- cursor: default;
81
- color: var(--btn-disabled-text);
82
- pointer-events: none;
83
-
84
- &::before {
85
- @include vos-disabled-layers(inherit);
86
- }
87
- }
88
-
89
- &.danger {
90
- color: var(--system-red);
91
- }
92
-
93
- &.primary {
94
- &.platter::before, &:hover:not(:disabled)::before {
95
- background: linear-gradient(var(--primary-color), var(--primary-color));
96
- mix-blend-mode: normal;
97
- opacity: 0.15;
98
- }
99
-
100
- &.selected,
101
- &.active {
102
- background: var(--primary-color);
103
- color: #fff;
104
- }
105
- }
106
- }
107
-
108
- .vos-btn-symbol {
109
- position: relative;
110
- display: inline-flex;
111
- align-items: center;
112
- justify-content: center;
113
- border: none;
114
- background: transparent;
115
- color: var(--label-primary);
116
- font-family: var(--font-family);
117
- font-weight: var(--btn-symbol-font-weight);
118
- cursor: pointer;
119
- overflow: clip;
120
- border-radius: 500px;
121
- padding: 0;
122
- transition: background 0.15s ease, color 0.15s ease;
123
-
124
- &.mini {
125
- width: var(--btn-symbol-mini);
126
- height: var(--btn-symbol-mini);
127
- font-size: var(--btn-symbol-mini-font);
128
- font-weight: var(--btn-font-weight);
129
- }
130
-
131
- &.sm {
132
- width: var(--btn-symbol-sm);
133
- height: var(--btn-symbol-sm);
134
- font-size: var(--btn-symbol-sm-font);
135
- }
136
-
137
- &.reg {
138
- width: var(--btn-symbol-reg);
139
- height: var(--btn-symbol-reg);
140
- font-size: var(--btn-symbol-reg-font);
141
- }
142
-
143
- &.lg {
144
- width: var(--btn-symbol-lg);
145
- height: var(--btn-symbol-lg);
146
- font-size: var(--btn-symbol-lg-font);
147
- }
148
-
149
- &.xl {
150
- width: var(--btn-symbol-xl);
151
- height: var(--btn-symbol-xl);
152
- font-size: var(--btn-symbol-xl-font);
153
- }
154
-
155
- &.platter::before {
156
- @include vos-platter-layers(500px);
157
- }
158
-
159
- &:hover:not(:disabled, .selected, .active)::before {
160
- @include vos-platter-layers(500px);
161
- }
162
-
163
- &.selected,
164
- &.active {
165
- background: var(--btn-selected-bg);
166
- color: var(--btn-selected-text);
167
-
168
- &::before { display: none; }
169
- }
170
-
171
- &:disabled, &.disabled {
172
- cursor: default;
173
- color: var(--btn-disabled-text);
174
- pointer-events: none;
175
-
176
- &::before {
177
- @include vos-disabled-layers(500px);
178
- }
179
- }
180
-
181
- &.danger {
182
- &:hover:not(:disabled) {
183
- background: rgb(255 69 58 / 15%);
184
- color: var(--system-red);
185
- }
186
- }
187
- }
188
-
189
- .vos-link {
190
- display: inline-flex;
191
- align-items: center;
192
- justify-content: center;
193
- height: var(--link-height);
194
- padding: 0 3px;
195
- border: none;
196
- background: transparent;
197
- color: var(--link-color);
198
- font-family: var(--font-family);
199
- font-weight: var(--btn-font-weight);
200
- font-size: var(--link-font-size);
201
- cursor: pointer;
202
- white-space: nowrap;
203
- text-decoration: none;
204
- border-radius: var(--btn-radius-capsule);
205
- transition: background 0.15s ease;
206
-
207
- &:hover {
208
- background: rgb(60 211 254 / 10%);
209
- border-radius: var(--btn-radius-rect-sm);
210
- }
211
- }
212
-
213
- } // @layer designsystem
1
+ @use 'vos-button-mixins' as *;
2
+
3
+ // ─── visionOS Button Utility Classes (shared with FlyOS desktop shell) ────────
4
+ // Requires @use 'fly-theme' (or equivalent tokens) before this partial.
5
+
6
+ @layer designsystem {
7
+
8
+ .vos-btn {
9
+ position: relative;
10
+ display: inline-flex;
11
+ align-items: center;
12
+ justify-content: center;
13
+ border: none;
14
+ background: transparent;
15
+ color: var(--label-primary);
16
+ font-family: var(--font-family);
17
+ font-weight: var(--btn-font-weight);
18
+ cursor: pointer;
19
+ white-space: nowrap;
20
+ overflow: clip;
21
+ padding: 0;
22
+ transition: background 0.15s ease, color 0.15s ease;
23
+
24
+ &.sm {
25
+ height: var(--btn-sm-height);
26
+ padding: var(--btn-sm-padding);
27
+ font-size: var(--btn-sm-font-size);
28
+ line-height: var(--btn-sm-line-height);
29
+ gap: var(--btn-sm-gap);
30
+ border-radius: var(--btn-radius-capsule);
31
+
32
+ i, .btn-symbol { font-size: var(--btn-sm-symbol-size); }
33
+ }
34
+
35
+ &.reg {
36
+ height: var(--btn-reg-height);
37
+ padding: var(--btn-reg-padding);
38
+ font-size: var(--btn-reg-font-size);
39
+ line-height: var(--btn-reg-line-height);
40
+ gap: var(--btn-reg-gap);
41
+ border-radius: var(--btn-radius-capsule);
42
+
43
+ i, .btn-symbol { font-size: var(--btn-reg-symbol-size); }
44
+ }
45
+
46
+ &.lg {
47
+ height: var(--btn-lg-height);
48
+ padding: var(--btn-lg-padding);
49
+ font-size: var(--btn-lg-font-size);
50
+ line-height: var(--btn-lg-line-height);
51
+ gap: var(--btn-lg-gap);
52
+ border-radius: var(--btn-radius-capsule);
53
+
54
+ i, .btn-symbol { font-size: var(--btn-lg-symbol-size); }
55
+ }
56
+
57
+ &.rect {
58
+ &.sm { border-radius: var(--btn-radius-rect-sm); }
59
+ &.reg { border-radius: var(--btn-radius-rect-sm); }
60
+ &.lg { border-radius: var(--btn-radius-rect-lg); }
61
+ }
62
+
63
+ &.platter::before {
64
+ @include vos-platter-layers(inherit);
65
+ }
66
+
67
+ &:hover:not(:disabled, .selected, .active)::before {
68
+ @include vos-platter-layers(inherit);
69
+ }
70
+
71
+ &.selected,
72
+ &.active {
73
+ background: var(--btn-selected-bg);
74
+ color: var(--btn-selected-text);
75
+
76
+ &::before { display: none; }
77
+ }
78
+
79
+ &:disabled, &.disabled {
80
+ cursor: default;
81
+ color: var(--btn-disabled-text);
82
+ pointer-events: none;
83
+
84
+ &::before {
85
+ @include vos-disabled-layers(inherit);
86
+ }
87
+ }
88
+
89
+ &.danger {
90
+ color: var(--system-red);
91
+ }
92
+
93
+ &.primary {
94
+ &.platter::before, &:hover:not(:disabled)::before {
95
+ background: linear-gradient(var(--primary-color), var(--primary-color));
96
+ mix-blend-mode: normal;
97
+ opacity: 0.15;
98
+ }
99
+
100
+ &.selected,
101
+ &.active {
102
+ background: var(--primary-color);
103
+ color: #fff;
104
+ }
105
+ }
106
+ }
107
+
108
+ .vos-btn-symbol {
109
+ position: relative;
110
+ display: inline-flex;
111
+ align-items: center;
112
+ justify-content: center;
113
+ border: none;
114
+ background: transparent;
115
+ color: var(--label-primary);
116
+ font-family: var(--font-family);
117
+ font-weight: var(--btn-symbol-font-weight);
118
+ cursor: pointer;
119
+ overflow: clip;
120
+ border-radius: 500px;
121
+ padding: 0;
122
+ transition: background 0.15s ease, color 0.15s ease;
123
+
124
+ &.mini {
125
+ width: var(--btn-symbol-mini);
126
+ height: var(--btn-symbol-mini);
127
+ font-size: var(--btn-symbol-mini-font);
128
+ font-weight: var(--btn-font-weight);
129
+ }
130
+
131
+ &.sm {
132
+ width: var(--btn-symbol-sm);
133
+ height: var(--btn-symbol-sm);
134
+ font-size: var(--btn-symbol-sm-font);
135
+ }
136
+
137
+ &.reg {
138
+ width: var(--btn-symbol-reg);
139
+ height: var(--btn-symbol-reg);
140
+ font-size: var(--btn-symbol-reg-font);
141
+ }
142
+
143
+ &.lg {
144
+ width: var(--btn-symbol-lg);
145
+ height: var(--btn-symbol-lg);
146
+ font-size: var(--btn-symbol-lg-font);
147
+ }
148
+
149
+ &.xl {
150
+ width: var(--btn-symbol-xl);
151
+ height: var(--btn-symbol-xl);
152
+ font-size: var(--btn-symbol-xl-font);
153
+ }
154
+
155
+ &.platter::before {
156
+ @include vos-platter-layers(500px);
157
+ }
158
+
159
+ &:hover:not(:disabled, .selected, .active)::before {
160
+ @include vos-platter-layers(500px);
161
+ }
162
+
163
+ &.selected,
164
+ &.active {
165
+ background: var(--btn-selected-bg);
166
+ color: var(--btn-selected-text);
167
+
168
+ &::before { display: none; }
169
+ }
170
+
171
+ &:disabled, &.disabled {
172
+ cursor: default;
173
+ color: var(--btn-disabled-text);
174
+ pointer-events: none;
175
+
176
+ &::before {
177
+ @include vos-disabled-layers(500px);
178
+ }
179
+ }
180
+
181
+ &.danger {
182
+ &:hover:not(:disabled) {
183
+ background: rgb(255 69 58 / 15%);
184
+ color: var(--system-red);
185
+ }
186
+ }
187
+ }
188
+
189
+ .vos-link {
190
+ display: inline-flex;
191
+ align-items: center;
192
+ justify-content: center;
193
+ height: var(--link-height);
194
+ padding: 0 3px;
195
+ border: none;
196
+ background: transparent;
197
+ color: var(--link-color);
198
+ font-family: var(--font-family);
199
+ font-weight: var(--btn-font-weight);
200
+ font-size: var(--link-font-size);
201
+ cursor: pointer;
202
+ white-space: nowrap;
203
+ text-decoration: none;
204
+ border-radius: var(--btn-radius-capsule);
205
+ transition: background 0.15s ease;
206
+
207
+ &:hover {
208
+ background: rgb(60 211 254 / 10%);
209
+ border-radius: var(--btn-radius-rect-sm);
210
+ }
211
+ }
212
+
213
+ } // @layer designsystem
@@ -1,8 +1,8 @@
1
- // Entry: tokens + html.light-theme / .dark-theme + OS auto dark.
2
- // Use from shell or Business Apps:
3
- // stylePreprocessorOptions.includePaths → design-system src folder
4
- // @use 'scss/fly-theme' or @use 'fly-theme' when scss is on the path.
5
- @use 'tokens';
6
- @use 'theme-light';
7
- @use 'theme-dark';
8
- @use 'theme-auto';
1
+ // Entry: tokens + html.light-theme / .dark-theme + OS auto dark.
2
+ // Use from shell or Business Apps:
3
+ // stylePreprocessorOptions.includePaths → design-system src folder
4
+ // @use 'scss/fly-theme' or @use 'fly-theme' when scss is on the path.
5
+ @use 'tokens';
6
+ @use 'theme-light';
7
+ @use 'theme-dark';
8
+ @use 'theme-auto';
@@ -1,6 +1,6 @@
1
- // ─── Automatic dark mode via OS preference (when user hasn't chosen) ─────────
2
- @media (prefers-color-scheme: dark) {
3
- html:not(.light-theme, .dark-theme) {
4
- color-scheme: dark;
5
- }
6
- }
1
+ // ─── Automatic dark mode via OS preference (when user hasn't chosen) ─────────
2
+ @media (prefers-color-scheme: dark) {
3
+ html:not(.light-theme, .dark-theme) {
4
+ color-scheme: dark;
5
+ }
6
+ }
@@ -1,50 +1,50 @@
1
- // ─── Dark Theme Variables (shared mixin to avoid duplication) ────────────────
2
- @mixin dark-theme-vars {
3
- --primary-light: rgb(232 115 42 / 18%);
4
- --surface-ground: #0e0e10;
5
- --surface-section: rgb(28 28 30 / 85%);
6
- --surface-card: rgb(28 28 30 / 70%);
7
- --surface-border: rgb(255 255 255 / 10%);
8
- --surface-hover: rgb(255 255 255 / 8%);
9
- --text-color: #f2f2f7;
10
- --text-color-secondary: rgb(242 242 247 / 65%);
11
- --glass-bg: rgb(25 25 28 / 72%);
12
- --glass-bg-elevated: rgb(38 38 42 / 82%);
13
- --glass-border: rgb(255 255 255 / 12%);
14
- --glass-shadow: 0 8px 40px rgb(0 0 0 / 35%);
15
- --glass-inner-glow: inset 0 1px 0 rgb(255 255 255 / 8%);
16
- --window-bg: rgb(22 22 24 / 55%);
17
- --window-radius: 46px;
18
- --window-shadow: 0 24px 80px rgb(0 0 0 / 40%);
19
- --window-border: rgb(255 255 255 / 12%);
20
- --titlebar-bg: transparent;
21
- --dock-bg: rgb(20 20 20 / 24%);
22
- --dock-border: 1px solid rgb(255 255 255 / 8%);
23
- --dock-blur: 40px;
24
- --dock-shadow: 0 8px 32px rgb(0 0 0 / 60%),
25
- inset 0 1px 0 rgb(255 255 255 / 5%);
26
- --menubar-bg: rgb(14 14 16 / 60%);
27
- --menubar-border: rgb(255 255 255 / 6%);
28
- --menubar-text: rgb(242 242 247 / 100%);
29
- --sidebar-bg: rgb(20 20 22 / 60%);
30
- --sidebar-border: rgb(255 255 255 / 8%);
31
- --focus-ring: rgb(232 115 42 / 60%);
32
-
33
- // Opaque Business App surfaces (mirror light-theme semantic set for embeds).
34
- --label-primary: var(--text-color);
35
- --label-secondary: var(--text-color-secondary);
36
- --label-tertiary: rgb(242 242 247 / 42%);
37
- --separator-primary: rgb(255 255 255 / 14%);
38
- --separator: var(--separator-primary);
39
- --fill-secondary: rgb(255 255 255 / 10%);
40
- --fill-tertiary: rgb(255 255 255 / 6%);
41
- --material-glass: rgb(28 28 30 / 92%);
42
- --fly-color-surface: rgb(28 28 30 / 95%);
43
- --fly-color-surface-alt: rgb(38 38 42 / 90%);
44
- --fly-color-border: rgb(255 255 255 / 12%);
45
- --fly-color-text-muted: var(--text-color-secondary);
46
- --fly-color-primary: var(--primary-color);
47
- --fly-color-primary-hover: var(--primary-hover);
48
- --fly-color-danger: var(--system-red);
49
- --fly-shadow-md: 0 4px 16px rgb(0 0 0 / 35%);
1
+ // ─── Dark Theme Variables (shared mixin to avoid duplication) ────────────────
2
+ @mixin dark-theme-vars {
3
+ --primary-light: rgb(232 115 42 / 18%);
4
+ --surface-ground: #0e0e10;
5
+ --surface-section: rgb(28 28 30 / 85%);
6
+ --surface-card: rgb(28 28 30 / 70%);
7
+ --surface-border: rgb(255 255 255 / 10%);
8
+ --surface-hover: rgb(255 255 255 / 8%);
9
+ --text-color: #f2f2f7;
10
+ --text-color-secondary: rgb(242 242 247 / 65%);
11
+ --glass-bg: rgb(25 25 28 / 72%);
12
+ --glass-bg-elevated: rgb(38 38 42 / 82%);
13
+ --glass-border: rgb(255 255 255 / 12%);
14
+ --glass-shadow: 0 8px 40px rgb(0 0 0 / 35%);
15
+ --glass-inner-glow: inset 0 1px 0 rgb(255 255 255 / 8%);
16
+ --window-bg: rgb(22 22 24 / 55%);
17
+ --window-radius: 46px;
18
+ --window-shadow: 0 24px 80px rgb(0 0 0 / 40%);
19
+ --window-border: rgb(255 255 255 / 12%);
20
+ --titlebar-bg: transparent;
21
+ --dock-bg: rgb(20 20 20 / 24%);
22
+ --dock-border: 1px solid rgb(255 255 255 / 8%);
23
+ --dock-blur: 40px;
24
+ --dock-shadow: 0 8px 32px rgb(0 0 0 / 60%),
25
+ inset 0 1px 0 rgb(255 255 255 / 5%);
26
+ --menubar-bg: rgb(14 14 16 / 60%);
27
+ --menubar-border: rgb(255 255 255 / 6%);
28
+ --menubar-text: rgb(242 242 247 / 100%);
29
+ --sidebar-bg: rgb(20 20 22 / 60%);
30
+ --sidebar-border: rgb(255 255 255 / 8%);
31
+ --focus-ring: rgb(232 115 42 / 60%);
32
+
33
+ // Opaque Business App surfaces (mirror light-theme semantic set for embeds).
34
+ --label-primary: var(--text-color);
35
+ --label-secondary: var(--text-color-secondary);
36
+ --label-tertiary: rgb(242 242 247 / 42%);
37
+ --separator-primary: rgb(255 255 255 / 14%);
38
+ --separator: var(--separator-primary);
39
+ --fill-secondary: rgb(255 255 255 / 10%);
40
+ --fill-tertiary: rgb(255 255 255 / 6%);
41
+ --material-glass: rgb(28 28 30 / 92%);
42
+ --fly-color-surface: rgb(28 28 30 / 95%);
43
+ --fly-color-surface-alt: rgb(38 38 42 / 90%);
44
+ --fly-color-border: rgb(255 255 255 / 12%);
45
+ --fly-color-text-muted: var(--text-color-secondary);
46
+ --fly-color-primary: var(--primary-color);
47
+ --fly-color-primary-hover: var(--primary-hover);
48
+ --fly-color-danger: var(--system-red);
49
+ --fly-shadow-md: 0 4px 16px rgb(0 0 0 / 35%);
50
50
  }