@mohamedatia/fly-design-system 2.4.0 → 2.6.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.4.0",
3
+ "version": "2.6.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,208 +1,209 @@
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
- .vos-btn {
7
- position: relative;
8
- display: inline-flex;
9
- align-items: center;
10
- justify-content: center;
11
- border: none;
12
- background: transparent;
13
- color: var(--label-primary);
14
- font-family: var(--font-family);
15
- font-weight: var(--btn-font-weight);
16
- cursor: pointer;
17
- white-space: nowrap;
18
- overflow: clip;
19
- padding: 0;
20
- transition: background 0.15s ease, color 0.15s ease;
21
-
22
- &.sm {
23
- height: var(--btn-sm-height);
24
- padding: var(--btn-sm-padding);
25
- font-size: var(--btn-sm-font-size);
26
- line-height: var(--btn-sm-line-height);
27
- gap: var(--btn-sm-gap);
28
- border-radius: var(--btn-radius-capsule);
29
-
30
- i, .btn-symbol { font-size: var(--btn-sm-symbol-size); }
31
- }
32
-
33
- &.reg {
34
- height: var(--btn-reg-height);
35
- padding: var(--btn-reg-padding);
36
- font-size: var(--btn-reg-font-size);
37
- line-height: var(--btn-reg-line-height);
38
- gap: var(--btn-reg-gap);
39
- border-radius: var(--btn-radius-capsule);
40
-
41
- i, .btn-symbol { font-size: var(--btn-reg-symbol-size); }
42
- }
43
-
44
- &.lg {
45
- height: var(--btn-lg-height);
46
- padding: var(--btn-lg-padding);
47
- font-size: var(--btn-lg-font-size);
48
- line-height: var(--btn-lg-line-height);
49
- gap: var(--btn-lg-gap);
50
- border-radius: var(--btn-radius-capsule);
51
-
52
- i, .btn-symbol { font-size: var(--btn-lg-symbol-size); }
53
- }
54
-
55
- &.rect {
56
- &.sm { border-radius: var(--btn-radius-rect-sm); }
57
- &.reg { border-radius: var(--btn-radius-rect-sm); }
58
- &.lg { border-radius: var(--btn-radius-rect-lg); }
59
- }
60
-
61
- &.platter::before {
62
- @include vos-platter-layers(inherit);
63
- }
64
-
65
- &:hover:not(:disabled):not(.selected):not(.active)::before {
66
- @include vos-platter-layers(inherit);
67
- }
68
-
69
- &.selected,
70
- &.active {
71
- background: var(--btn-selected-bg);
72
- color: var(--btn-selected-text);
73
-
74
- &::before { display: none; }
75
- }
76
-
77
- &:disabled, &.disabled {
78
- cursor: default;
79
- color: var(--btn-disabled-text);
80
- pointer-events: none;
81
-
82
- &::before {
83
- @include vos-disabled-layers(inherit);
84
- }
85
- }
86
-
87
- &.danger {
88
- color: var(--system-red);
89
- }
90
-
91
- &.primary {
92
- &.platter::before, &:hover:not(:disabled)::before {
93
- background: linear-gradient(var(--primary-color), var(--primary-color));
94
- mix-blend-mode: normal;
95
- opacity: 0.15;
96
- }
97
- &.selected,
98
- &.active {
99
- background: var(--primary-color);
100
- color: #fff;
101
- }
102
- }
103
- }
104
-
105
- .vos-btn-symbol {
106
- position: relative;
107
- display: inline-flex;
108
- align-items: center;
109
- justify-content: center;
110
- border: none;
111
- background: transparent;
112
- color: var(--label-primary);
113
- font-family: var(--font-family);
114
- font-weight: var(--btn-symbol-font-weight);
115
- cursor: pointer;
116
- overflow: clip;
117
- border-radius: 500px;
118
- padding: 0;
119
- transition: background 0.15s ease, color 0.15s ease;
120
-
121
- &.mini {
122
- width: var(--btn-symbol-mini);
123
- height: var(--btn-symbol-mini);
124
- font-size: var(--btn-symbol-mini-font);
125
- font-weight: var(--btn-font-weight);
126
- }
127
-
128
- &.sm {
129
- width: var(--btn-symbol-sm);
130
- height: var(--btn-symbol-sm);
131
- font-size: var(--btn-symbol-sm-font);
132
- }
133
-
134
- &.reg {
135
- width: var(--btn-symbol-reg);
136
- height: var(--btn-symbol-reg);
137
- font-size: var(--btn-symbol-reg-font);
138
- }
139
-
140
- &.lg {
141
- width: var(--btn-symbol-lg);
142
- height: var(--btn-symbol-lg);
143
- font-size: var(--btn-symbol-lg-font);
144
- }
145
-
146
- &.xl {
147
- width: var(--btn-symbol-xl);
148
- height: var(--btn-symbol-xl);
149
- font-size: var(--btn-symbol-xl-font);
150
- }
151
-
152
- &.platter::before {
153
- @include vos-platter-layers(500px);
154
- }
155
-
156
- &:hover:not(:disabled):not(.selected):not(.active)::before {
157
- @include vos-platter-layers(500px);
158
- }
159
-
160
- &.selected,
161
- &.active {
162
- background: var(--btn-selected-bg);
163
- color: var(--btn-selected-text);
164
-
165
- &::before { display: none; }
166
- }
167
-
168
- &:disabled, &.disabled {
169
- cursor: default;
170
- color: var(--btn-disabled-text);
171
- pointer-events: none;
172
-
173
- &::before {
174
- @include vos-disabled-layers(500px);
175
- }
176
- }
177
-
178
- &.danger {
179
- &:hover:not(:disabled) {
180
- background: rgba(255, 69, 58, 0.15);
181
- color: var(--system-red);
182
- }
183
- }
184
- }
185
-
186
- .vos-link {
187
- display: inline-flex;
188
- align-items: center;
189
- justify-content: center;
190
- height: var(--link-height);
191
- padding: 0 3px;
192
- border: none;
193
- background: transparent;
194
- color: var(--link-color);
195
- font-family: var(--font-family);
196
- font-weight: var(--btn-font-weight);
197
- font-size: var(--link-font-size);
198
- cursor: pointer;
199
- white-space: nowrap;
200
- text-decoration: none;
201
- border-radius: var(--btn-radius-capsule);
202
- transition: background 0.15s ease;
203
-
204
- &:hover {
205
- background: rgba(60, 211, 254, 0.1);
206
- border-radius: var(--btn-radius-rect-sm);
207
- }
208
- }
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
+ .vos-btn {
7
+ position: relative;
8
+ display: inline-flex;
9
+ align-items: center;
10
+ justify-content: center;
11
+ border: none;
12
+ background: transparent;
13
+ color: var(--label-primary);
14
+ font-family: var(--font-family);
15
+ font-weight: var(--btn-font-weight);
16
+ cursor: pointer;
17
+ white-space: nowrap;
18
+ overflow: clip;
19
+ padding: 0;
20
+ transition: background 0.15s ease, color 0.15s ease;
21
+
22
+ &.sm {
23
+ height: var(--btn-sm-height);
24
+ padding: var(--btn-sm-padding);
25
+ font-size: var(--btn-sm-font-size);
26
+ line-height: var(--btn-sm-line-height);
27
+ gap: var(--btn-sm-gap);
28
+ border-radius: var(--btn-radius-capsule);
29
+
30
+ i, .btn-symbol { font-size: var(--btn-sm-symbol-size); }
31
+ }
32
+
33
+ &.reg {
34
+ height: var(--btn-reg-height);
35
+ padding: var(--btn-reg-padding);
36
+ font-size: var(--btn-reg-font-size);
37
+ line-height: var(--btn-reg-line-height);
38
+ gap: var(--btn-reg-gap);
39
+ border-radius: var(--btn-radius-capsule);
40
+
41
+ i, .btn-symbol { font-size: var(--btn-reg-symbol-size); }
42
+ }
43
+
44
+ &.lg {
45
+ height: var(--btn-lg-height);
46
+ padding: var(--btn-lg-padding);
47
+ font-size: var(--btn-lg-font-size);
48
+ line-height: var(--btn-lg-line-height);
49
+ gap: var(--btn-lg-gap);
50
+ border-radius: var(--btn-radius-capsule);
51
+
52
+ i, .btn-symbol { font-size: var(--btn-lg-symbol-size); }
53
+ }
54
+
55
+ &.rect {
56
+ &.sm { border-radius: var(--btn-radius-rect-sm); }
57
+ &.reg { border-radius: var(--btn-radius-rect-sm); }
58
+ &.lg { border-radius: var(--btn-radius-rect-lg); }
59
+ }
60
+
61
+ &.platter::before {
62
+ @include vos-platter-layers(inherit);
63
+ }
64
+
65
+ &:hover:not(:disabled, .selected, .active)::before {
66
+ @include vos-platter-layers(inherit);
67
+ }
68
+
69
+ &.selected,
70
+ &.active {
71
+ background: var(--btn-selected-bg);
72
+ color: var(--btn-selected-text);
73
+
74
+ &::before { display: none; }
75
+ }
76
+
77
+ &:disabled, &.disabled {
78
+ cursor: default;
79
+ color: var(--btn-disabled-text);
80
+ pointer-events: none;
81
+
82
+ &::before {
83
+ @include vos-disabled-layers(inherit);
84
+ }
85
+ }
86
+
87
+ &.danger {
88
+ color: var(--system-red);
89
+ }
90
+
91
+ &.primary {
92
+ &.platter::before, &:hover:not(:disabled)::before {
93
+ background: linear-gradient(var(--primary-color), var(--primary-color));
94
+ mix-blend-mode: normal;
95
+ opacity: 0.15;
96
+ }
97
+
98
+ &.selected,
99
+ &.active {
100
+ background: var(--primary-color);
101
+ color: #fff;
102
+ }
103
+ }
104
+ }
105
+
106
+ .vos-btn-symbol {
107
+ position: relative;
108
+ display: inline-flex;
109
+ align-items: center;
110
+ justify-content: center;
111
+ border: none;
112
+ background: transparent;
113
+ color: var(--label-primary);
114
+ font-family: var(--font-family);
115
+ font-weight: var(--btn-symbol-font-weight);
116
+ cursor: pointer;
117
+ overflow: clip;
118
+ border-radius: 500px;
119
+ padding: 0;
120
+ transition: background 0.15s ease, color 0.15s ease;
121
+
122
+ &.mini {
123
+ width: var(--btn-symbol-mini);
124
+ height: var(--btn-symbol-mini);
125
+ font-size: var(--btn-symbol-mini-font);
126
+ font-weight: var(--btn-font-weight);
127
+ }
128
+
129
+ &.sm {
130
+ width: var(--btn-symbol-sm);
131
+ height: var(--btn-symbol-sm);
132
+ font-size: var(--btn-symbol-sm-font);
133
+ }
134
+
135
+ &.reg {
136
+ width: var(--btn-symbol-reg);
137
+ height: var(--btn-symbol-reg);
138
+ font-size: var(--btn-symbol-reg-font);
139
+ }
140
+
141
+ &.lg {
142
+ width: var(--btn-symbol-lg);
143
+ height: var(--btn-symbol-lg);
144
+ font-size: var(--btn-symbol-lg-font);
145
+ }
146
+
147
+ &.xl {
148
+ width: var(--btn-symbol-xl);
149
+ height: var(--btn-symbol-xl);
150
+ font-size: var(--btn-symbol-xl-font);
151
+ }
152
+
153
+ &.platter::before {
154
+ @include vos-platter-layers(500px);
155
+ }
156
+
157
+ &:hover:not(:disabled, .selected, .active)::before {
158
+ @include vos-platter-layers(500px);
159
+ }
160
+
161
+ &.selected,
162
+ &.active {
163
+ background: var(--btn-selected-bg);
164
+ color: var(--btn-selected-text);
165
+
166
+ &::before { display: none; }
167
+ }
168
+
169
+ &:disabled, &.disabled {
170
+ cursor: default;
171
+ color: var(--btn-disabled-text);
172
+ pointer-events: none;
173
+
174
+ &::before {
175
+ @include vos-disabled-layers(500px);
176
+ }
177
+ }
178
+
179
+ &.danger {
180
+ &:hover:not(:disabled) {
181
+ background: rgb(255 69 58 / 15%);
182
+ color: var(--system-red);
183
+ }
184
+ }
185
+ }
186
+
187
+ .vos-link {
188
+ display: inline-flex;
189
+ align-items: center;
190
+ justify-content: center;
191
+ height: var(--link-height);
192
+ padding: 0 3px;
193
+ border: none;
194
+ background: transparent;
195
+ color: var(--link-color);
196
+ font-family: var(--font-family);
197
+ font-weight: var(--btn-font-weight);
198
+ font-size: var(--link-font-size);
199
+ cursor: pointer;
200
+ white-space: nowrap;
201
+ text-decoration: none;
202
+ border-radius: var(--btn-radius-capsule);
203
+ transition: background 0.15s ease;
204
+
205
+ &:hover {
206
+ background: rgb(60 211 254 / 10%);
207
+ border-radius: var(--btn-radius-rect-sm);
208
+ }
209
+ }
@@ -1,9 +1,10 @@
1
- @use 'theme-spatial-vars' as *;
2
-
3
- // ─── Automatic dark mode via OS preference (when user hasn't chosen) ─────────
4
- @media (prefers-color-scheme: dark) {
5
- html:not(.light-theme):not(.spatial-theme):not(.dark-theme) {
6
- color-scheme: dark;
7
- @include spatial-theme-vars;
8
- }
9
- }
1
+ @use 'theme-spatial-vars' as *;
2
+
3
+ // ─── Automatic dark mode via OS preference (when user hasn't chosen) ─────────
4
+ @media (prefers-color-scheme: dark) {
5
+ html:not(.light-theme, .spatial-theme, .dark-theme) {
6
+ color-scheme: dark;
7
+
8
+ @include spatial-theme-vars;
9
+ }
10
+ }
@@ -0,0 +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%);
50
+ }