@fest-lib/fl-ui 0.1.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.
Files changed (55) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +3 -0
  3. package/dist/assets/OPFS.uniform.worker-Ddx6J_37.js +2982 -0
  4. package/dist/fl-ui.js +16004 -0
  5. package/dist/font-registry-BWosB92f.js +271 -0
  6. package/package.json +104 -0
  7. package/src/styles/font-loader.ts +224 -0
  8. package/src/styles/font-registry.ts +275 -0
  9. package/src/styles/fonts/_index.scss +8 -0
  10. package/src/styles/fonts/_inter.scss +171 -0
  11. package/src/styles/index.scss +2 -0
  12. package/src/styles/index.ts +33 -0
  13. package/src/styles/layers.scss +1 -0
  14. package/src/styles/patch-global-native-controls.scss +13 -0
  15. package/src/styles/scripts/encode-fonts.ts +172 -0
  16. package/src/styles/skins/thin/Thin.ts +13 -0
  17. package/src/styles/ui/_bar.scss +271 -0
  18. package/src/styles/ui/_buttons.scss +215 -0
  19. package/src/styles/ui/_color.scss +3 -0
  20. package/src/styles/ui/_colorize.scss +5 -0
  21. package/src/styles/ui/_content.scss +169 -0
  22. package/src/styles/ui/_essentials-options.scss +2 -0
  23. package/src/styles/ui/_essentials.scss +705 -0
  24. package/src/styles/ui/_explorer-content.scss +362 -0
  25. package/src/styles/ui/_explorer.scss +237 -0
  26. package/src/styles/ui/_forms-bare-host-elements.scss +25 -0
  27. package/src/styles/ui/_forms-options.scss +2 -0
  28. package/src/styles/ui/_forms.scss +280 -0
  29. package/src/styles/ui/_forms_misc.scss +201 -0
  30. package/src/styles/ui/_gridbox.scss +298 -0
  31. package/src/styles/ui/_home-host.scss +179 -0
  32. package/src/styles/ui/_index.scss +22 -0
  33. package/src/styles/ui/_launcher-typography.scss +31 -0
  34. package/src/styles/ui/_layers.scss +48 -0
  35. package/src/styles/ui/_layout.scss +3 -0
  36. package/src/styles/ui/_markdown.scss +1636 -0
  37. package/src/styles/ui/_modal.scss +258 -0
  38. package/src/styles/ui/_motion.scss +3 -0
  39. package/src/styles/ui/_native-host-button-chrome.scss +31 -0
  40. package/src/styles/ui/_orientation-functions.scss +274 -0
  41. package/src/styles/ui/_orientbox.scss +97 -0
  42. package/src/styles/ui/_scrollbar.scss +257 -0
  43. package/src/styles/ui/_shared-overlays.scss +16 -0
  44. package/src/styles/ui/_sidebar.scss +477 -0
  45. package/src/styles/ui/_speed-dial.scss +47 -0
  46. package/src/styles/ui/_tables.scss +28 -0
  47. package/src/styles/ui/_tabs.scss +406 -0
  48. package/src/styles/ui/_taskbar.scss +215 -0
  49. package/src/styles/ui/_toolbars.scss +165 -0
  50. package/src/styles/ui/_typography.scss +11 -0
  51. package/src/styles/ui/_utils.scss +8 -0
  52. package/src/styles/ui/_variables.scss +45 -0
  53. package/src/styles/ui/_viewport.scss +469 -0
  54. package/src/styles/ui/_window-frame.scss +658 -0
  55. package/src/styles/ui/home-host-apply.scss +10 -0
@@ -0,0 +1,280 @@
1
+ @use "./layout" as layout;
2
+ @use "./typography" as type;
3
+ @use "./colorize" as colorize;
4
+ @use "./buttons" as button;
5
+ @use "./color" as color;
6
+ @use "veela-lib" as *;
7
+ @use "./forms-options" as fo;
8
+ @use "./forms-bare-host-elements" as bare_forms;
9
+
10
+ // WHY: Host-wide `input, select, textarea` rules override third-party forms; default off (`forms-options`).
11
+
12
+ //
13
+ @use "./forms_misc" as *;
14
+
15
+ //
16
+ @mixin input-base {
17
+ @include variable-colorization("input");
18
+ @include appearance-decl();
19
+
20
+ //
21
+ position: relative;
22
+ align-items: center;
23
+ gap: var(--input-gap, var(--space-sm));
24
+
25
+ //
26
+ inline-size: var(--input-inline-size, fit-content); block-size: fit-content;
27
+ min-inline-size: var(--input-min-inline-size, 0px); min-block-size: var(--input-min-block-size, fit-content);
28
+ max-inline-size: var(--input-max-inline-size, 100%);
29
+
30
+ //
31
+ box-sizing: border-box;
32
+
33
+ //
34
+ padding-block: var(--input-padding-block, var(--input-padding, var(--padding-sm)));
35
+ padding-inline: var(--input-padding-inline, var(--input-padding, var(--padding-md)));
36
+ padding-inline-start: var(--input-padding-inline-start, var(--padding-lg, 1rem));
37
+ padding-inline-end: var(--input-padding-inline-end, var(--input-padding-inline, var(--input-padding, var(--padding-md))));
38
+
39
+ //
40
+ /*border-radius: var(--input-radius);
41
+ border-width: var(--input-border-width, 1px);
42
+ border-color: var(--_input-border-current);*/
43
+
44
+ border: none 0px transparent;
45
+ outline: none 0px transparent;
46
+
47
+ border-style: solid;
48
+
49
+ //
50
+ background-clip: padding-box;
51
+ outline: none;
52
+
53
+ //
54
+ pointer-events: auto;
55
+ field-sizing: content;
56
+ user-select: text;
57
+
58
+ //
59
+ caret-color: var(--_input-text-current);
60
+ font-weight: var(--input-font-weight, inherit);
61
+ line-height: var(--input-line-height, 1.4);
62
+ letter-spacing: var(--input-letter-spacing, 0.01em);
63
+
64
+ //
65
+ z-index: 0;
66
+ display: inline-block;
67
+
68
+ //
69
+ &:is(textarea) {
70
+ border-radius: var(--radius-md);
71
+ }
72
+
73
+ //
74
+ &:where([type="checkbox"], [type="radio"]) {
75
+ @include button.button-filled;
76
+
77
+ & {
78
+ display: inline-flex;
79
+ aspect-ratio: 1 / 1;
80
+ }
81
+ }
82
+ }
83
+
84
+ //
85
+ @mixin form-field-base() {
86
+ @include variable-colorization("form");
87
+ @include input-base();
88
+ @include appearance-decl();
89
+
90
+ //
91
+ display: block;
92
+ border: none;
93
+ border-width: 0px;
94
+
95
+ //
96
+ place-content: start;
97
+ place-items: start;
98
+
99
+ //
100
+ inline-size: stretch; block-size: fit-content;
101
+ min-inline-size: min(var(--form-min-inline-size, 24ch), fit-content); min-block-size: var(--form-min-block-size, fit-content);
102
+
103
+ //
104
+ padding-block: var(--form-padding-block, var(--input-padding-block, var(--padding-md)));
105
+ padding-inline-start: var(--form-padding-inline-start, var(--input-padding-inline-start, var(--padding-lg, 1rem)));
106
+ padding-inline-end: var(--form-padding-inline-end, calc(var(--space-lg) * 2));
107
+
108
+ //
109
+ line-height: var(--form-line-height, 1.5);
110
+
111
+ //
112
+ user-select: text;
113
+ resize: var(--form-resize, vertical);
114
+ overflow: hidden;
115
+ overflow-y: auto
116
+ }
117
+
118
+ //
119
+ @mixin option-style() {
120
+ @include variable-colorization("option");
121
+ @include option-radius();
122
+ @include appearance-decl();
123
+
124
+ //
125
+ border-style: solid;
126
+ border-color: var(--_option-border-current);
127
+
128
+ //
129
+ padding-inline: var(--option-padding-inline, calc(var(--padding-lg, 1rem) * 0.75));
130
+ padding-block: var(--option-padding-block, var(--padding-sm));
131
+ gap: var(--space-md);
132
+
133
+ //
134
+ display: flex;
135
+ place-items: center;
136
+ place-content: center;
137
+ justify-content: flex-start;
138
+
139
+ //
140
+ text-overflow: ellipsis;
141
+ white-space: nowrap;
142
+ text-wrap: nowrap;
143
+ word-break: keep-all;
144
+ overflow: hidden;
145
+
146
+ //
147
+ min-inline-size: fit-content; inline-size: stretch;
148
+
149
+ //
150
+ outline: none;
151
+ }
152
+
153
+ //
154
+ @mixin select-base() {
155
+ @include appearance-decl();
156
+
157
+ //
158
+ & {
159
+ cursor: pointer;
160
+ position: relative;
161
+ }
162
+
163
+ //
164
+ &:where(select) {
165
+ @include button.button-filled();
166
+ @include variable-colorization("select");
167
+
168
+ //
169
+ display: inline-flex;
170
+
171
+ //
172
+ place-content: center;
173
+ place-items: center;
174
+ justify-content: space-between;
175
+
176
+ //
177
+ color: transparent;
178
+ appearance: base-select;
179
+
180
+ //
181
+ text-indent: 0;
182
+ text-overflow: ellipsis;
183
+ white-space: nowrap;
184
+ text-wrap: nowrap;
185
+ word-break: keep-all;
186
+ overflow: hidden;
187
+
188
+ //
189
+ min-inline-size: fit-content; inline-size: stretch;
190
+
191
+ //
192
+ gap: var(--select-gap, var(--input-gap, var(--space-sm)));
193
+ padding-inline: var(--option-padding-inline);
194
+ padding-block: var(--option-padding-block);
195
+ }
196
+
197
+ //
198
+ &::picker(select) {
199
+ appearance: base-select;
200
+ background-color: transparent;
201
+ color: transparent;
202
+
203
+ //
204
+ padding: 0px;
205
+ border: none;
206
+ outline: none;
207
+ z-index: 9999;
208
+ line-height: 0;
209
+
210
+ //
211
+ overflow: visible;
212
+ visibility: visible;
213
+ content-visibility: visible;
214
+ }
215
+
216
+ //
217
+ & option { @include option-style(); }
218
+ & > option { @include option-style(); }
219
+ &:is(option) { @include option-style(); }
220
+ &::-ms-expand { display: none; }
221
+
222
+ //
223
+ &::after, &::picker-icon {
224
+ @include icon-style("select", $select-icon);
225
+ }
226
+
227
+ //
228
+ span, a {
229
+ font-size: var(--font-size-md);
230
+ font-weight: var(--font-weight-medium);
231
+ line-height: var(--line-height-md);
232
+ letter-spacing: var(--letter-spacing-md);
233
+ text-transform: var(--text-transform-md);
234
+ text-decoration: none;
235
+ }
236
+ }
237
+
238
+ //
239
+ @mixin checkbox-base() {
240
+ @include button.button-filled;
241
+ @include variable-colorization("checkbox");
242
+ @include appearance-decl();
243
+
244
+ //
245
+ margin: 0;
246
+ padding: 0;
247
+
248
+ //
249
+ contain: strict;
250
+ line-height: 0;
251
+
252
+ //
253
+ display: flex;
254
+ content: " ";
255
+ cursor: pointer;
256
+ user-select: none;
257
+ pointer-events: auto;
258
+ place-content: center;
259
+ place-items: center;
260
+ place-self: center;
261
+
262
+ //
263
+ inline-size: var(--checkbox-size, 1.25rem);
264
+ block-size: var(--checkbox-size, 1.25rem);
265
+ aspect-ratio: 1 / 1;
266
+
267
+ //
268
+ border-radius: var(--checkbox-radius, var(--radius-sm));
269
+ border-width: 0px;/*var(--checkbox-border-width, 0px);*/
270
+ border-style: solid;
271
+
272
+ //
273
+ &::before { @include icon-style("checkbox", $checkbox-icon); }
274
+ &:checked::before { --icon-color: var(--surface-color, currentColor); }
275
+ }
276
+
277
+ //
278
+ @if fo.$include-bare-form-element-rules {
279
+ @include bare_forms.emit-bare-form-element-layer;
280
+ }
@@ -0,0 +1,201 @@
1
+ @use "./layout" as layout;
2
+ @use "./typography" as type;
3
+ @use "./colorize" as colorize;
4
+ @use "./buttons" as button;
5
+ @use "./color" as color;
6
+ @use "./utils" as utils;
7
+
8
+ //
9
+ @mixin appearance-decl() {
10
+ appearance: none;
11
+ -webkit-appearance: none;
12
+ -moz-appearance: none;
13
+ transition:
14
+ background-color var(--transition-normal, 160ms ease),
15
+ border-color var(--transition-normal, 160ms ease),
16
+ color var(--transition-normal, 160ms ease),
17
+ box-shadow var(--transition-normal, 160ms ease),
18
+ transform var(--transition-fast, 120ms ease);
19
+
20
+ //
21
+ transform: translateZ(0);
22
+ transform-origin: 50% 50%;
23
+ backface-visibility: hidden;
24
+ }
25
+
26
+ //
27
+ $select-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='currentColor'%3e%3cpath d='M4.2 6.4a.75.75 0 0 1 1.06-.05L8 8.68l2.74-2.33a.75.75 0 1 1 .98 1.14l-3.24 2.75a.75.75 0 0 1-.98 0L4.25 7.49a.75.75 0 0 1-.05-1.06z'/%3e%3c/svg%3e");
28
+ $checkbox-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='currentColor'%3e%3cpath d='M10.97 4.97a.75.75 0 0 1 1.07 1.05l-3.99 4.99a.75.75 0 0 1-1.08.02L4.32 8.38a.75.75 0 1 1 1.06-1.06l2.09 2.08 3.99-4.99z'/%3e%3c/svg%3e");
29
+ $radio-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='currentColor'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e");
30
+
31
+ //
32
+ @mixin icon-style($name: "select", $icon: $select-icon) {
33
+ pointer-events: none;
34
+ mask-image: $icon;
35
+ mask-repeat: no-repeat;
36
+ mask-origin: content-box;
37
+ mask-clip: content-box;
38
+ mask-position: center;
39
+ mask-size: contain;
40
+ mask-type: alpha;
41
+
42
+ //
43
+ content: "";
44
+ display: flex;
45
+ background-color: var(--icon-color, var(--on-surface-color, currentColor));
46
+ inline-size: var(--#{$name}-indicator-size, var(--space-lg));
47
+ block-size: var(--#{$name}-indicator-size, var(--space-lg));
48
+ margin-inline-start: auto;
49
+ box-sizing: border-box;
50
+ aspect-ratio: 1 / 1;
51
+ text-align: center;
52
+ overflow: hidden;
53
+
54
+ //
55
+ place-content: center;
56
+ place-items: center;
57
+ place-self: center;
58
+ }
59
+
60
+ //
61
+ @mixin option-radius() {
62
+ --_option-border-radius: 0px;
63
+ --_option-border-block-start-size: 0px;
64
+ --_option-border-block-end-size: 0px;
65
+ --_option-border-inline-size: 0.5px;
66
+
67
+ //
68
+ --_option-border-radius-start-start: 0px;
69
+ --_option-border-radius-start-end: 0px;
70
+ --_option-border-radius-end-start: 0px;
71
+ --_option-border-radius-end-end: 0px;
72
+
73
+ //
74
+ border-radius: var(--_option-border-radius-start-start) var(--_option-border-radius-start-end) var(--_option-border-radius-end-start) var(--_option-border-radius-end-end);
75
+ border-inline-start-width: var(--_option-border-inline-size, 1px);
76
+ border-inline-end-width: var(--_option-border-inline-size, 1px);
77
+ border-block-start-width: var(--_option-border-block-start-size, 0px);
78
+ border-block-end-width: var(--_option-border-block-end-size, 0px);
79
+
80
+ //
81
+ &:first-of-type {
82
+ --_option-border-block-start-size: 0.5px;
83
+ --_option-border-radius-start-start: var(--radius-sm);
84
+ --_option-border-radius-start-end: var(--radius-sm);
85
+ }
86
+
87
+ //
88
+ &:last-of-type {
89
+ --_option-border-block-end-size: 0.5px;
90
+ --_option-border-radius-end-start: var(--radius-sm);
91
+ --_option-border-radius-end-end: var(--radius-sm);
92
+ }
93
+ }
94
+
95
+ //
96
+ @mixin variable-colorization($name: "input") {
97
+ @include type.type("body-medium");
98
+ @include type.text-wrap();
99
+
100
+ //
101
+ --_#{$name}-border-current: var(--#{$name}-border-color, var(--border-color, transparent));
102
+ --_#{$name}-surface-current: var(--#{$name}-surface-color, var(--#{$name}-surface, var(--surface-color, transparent)));
103
+ --_#{$name}-shadow-current: var(--#{$name}-shadow, var(--shadow-color, transparent));
104
+ --_#{$name}-text-current: var(--#{$name}-text-color, var(--on-surface-color, currentColor));
105
+ --_#{$name}-icon-current: var(--#{$name}-icon-color, var(--on-surface-color, currentColor));
106
+
107
+ //
108
+ & {
109
+ cursor: var(--#{$name}-cursor, pointer);
110
+ background-color: var(--_#{$name}-surface-current, var(--surface-color, transparent));
111
+ color: var(--_#{$name}-text-current, var(--on-surface-color, currentColor));
112
+ -webkit-text-fill-color: var(--_#{$name}-text-current, var(--on-surface-color, currentColor));
113
+ --icon-color: var(--_#{$name}-icon-current, currentColor);
114
+ }
115
+
116
+ //
117
+ &:is(textarea) { cursor: text; }
118
+ /*&:is(:checked, [aria-selected="true"]) {
119
+ --_#{$name}-surface-current: var(--#{$name}-surface-checked, var(--on-surface-color, transparent));
120
+ --_#{$name}-border-current: var(--#{$name}-border-checked, var(--border-color, transparent));
121
+ --_#{$name}-text-current: var(--#{$name}-text-checked, var(--surface-color, currentColor));
122
+ --_#{$name}-icon-current: var(--#{$name}-icon-checked, var(--surface-color, currentColor));
123
+ }*/
124
+
125
+ //
126
+ /*@include utils.when-hover {
127
+ &:not(:disabled):not([aria-disabled="true"]) {
128
+ --_#{$name}-surface-current: var(--#{$name}-surface-hover, var(--surface-color, transparent));
129
+ --_#{$name}-border-current: var(--#{$name}-border-hover, var(--border-color, transparent));
130
+ --_#{$name}-shadow-current: var(--#{$name}-shadow-hover, var(--shadow-color, transparent));
131
+ --_#{$name}-text-current: var(--#{$name}-text-hover, var(--on-surface-color, currentColor));
132
+ }
133
+ }*/
134
+
135
+ //
136
+ /*@include utils.when-active {
137
+ &:not(:disabled):not([aria-disabled="true"]) {
138
+ --_#{$name}-surface-current: var(--#{$name}-surface-active, var(--surface-color, transparent));
139
+ --_#{$name}-border-current: var(--#{$name}-border-active, var(--border-color, transparent));
140
+ --_#{$name}-shadow-current: var(--#{$name}-shadow-active, var(--shadow-color, transparent));
141
+ --_#{$name}-text-current: var(--#{$name}-text-active, var(--on-surface-color, currentColor));
142
+ }
143
+ }*/
144
+
145
+ //
146
+ /*@include utils.when-focus {
147
+ &:not(:disabled):not([aria-disabled="true"]) {
148
+ --_#{$name}-surface-current: var(--#{$name}-surface-focus, var(--surface-color, transparent));
149
+ --_#{$name}-border-current: var(--#{$name}-border-focus, var(--border-color, transparent));
150
+ --_#{$name}-shadow-current: var(--#{$name}-shadow-focus, var(--shadow-color, transparent));
151
+ --_#{$name}-text-current: var(--#{$name}-text-focus, var(--on-surface-color, currentColor));
152
+ }
153
+ }*/
154
+
155
+ //
156
+ &:invalid, &[aria-invalid="true"] {
157
+ --current: var(--color-error, var(--color-danger, currentColor));
158
+
159
+ /*
160
+ --_#{$name}-border-current: var(--#{$name}-border-error, var(--border-color, transparent));
161
+ --_#{$name}-surface-current: var(--#{$name}-surface-error, var(--surface-color, transparent));
162
+ --_#{$name}-shadow-current: var(--#{$name}-shadow-error, var(--shadow-color, transparent));
163
+ */
164
+ }
165
+
166
+ //
167
+ @include utils.when-disabled {
168
+ /*
169
+ --_#{$name}-border-current: var(--#{$name}-border-disabled, var(--border-color, transparent));
170
+ --_#{$name}-surface-current: var(--#{$name}-surface-disabled, var(--surface-color, transparent));
171
+ --_#{$name}-text-current: var(--#{$name}-text-disabled, color-mix(in oklch, var(--input-text-color, currentColor) 55%, transparent));
172
+ --_#{$name}-shadow-current: none;*/
173
+
174
+ //
175
+ cursor: not-allowed;
176
+ resize: none;
177
+ user-select: none;
178
+ }
179
+
180
+ //
181
+ &[readonly] {
182
+ /*
183
+ --_#{$name}-border-current: var(--#{$name}-border-readonly, var(--border-color, transparent));
184
+ --_#{$name}-surface-current: var(--#{$name}-surface-readonly, var(--surface-color, transparent));
185
+ --_#{$name}-text-current: var(--#{$name}-text-readonly, var(--on-surface-color, currentColor));
186
+ */
187
+
188
+ //
189
+ cursor: default;
190
+ }
191
+
192
+ //
193
+ &::-moz-focus-inner { border: 0; }
194
+
195
+ //
196
+ span, a, ui-icon {
197
+ --icon-color: var(--_#{$name}-icon-current, var(--_#{$name}-text-current, var(--on-surface-color, currentColor)));
198
+ color: var(--_#{$name}-text-current, var(--on-surface-color, currentColor));
199
+ background-color: transparent;
200
+ }
201
+ }