@fest-lib/veela 0.1.19 → 1.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.
Files changed (141) hide show
  1. package/dist/veela.js +4 -33
  2. package/package.json +9 -2
  3. package/src/scss/_layers.scss +5 -34
  4. package/src/scss/basic/{misc/_core-layout.scss → _core-layout.scss} +1 -1
  5. package/src/scss/basic/_layers.scss +1 -0
  6. package/src/scss/basic/{misc/_layout.scss → _layout.scss} +15 -15
  7. package/src/scss/basic/{misc/_normalize.scss → _normalize.scss} +5 -103
  8. package/src/scss/basic/{misc/_states.scss → _states.scss} +2 -2
  9. package/src/scss/{core/misc → basic}/_utilities.scss +4 -4
  10. package/src/scss/basic/design/_keyframes.scss +1 -1
  11. package/src/scss/basic/design/_shapes.scss +1 -1
  12. package/src/scss/basic/index.scss +14 -16
  13. package/src/scss/chrome.scss +2 -0
  14. package/src/scss/core/_color-mod.scss +24 -0
  15. package/src/scss/core/{misc/_color-properties.scss → _color-properties.scss} +1 -1
  16. package/src/scss/core/{misc/_tokens.scss → _tokens.scss} +10 -93
  17. package/src/scss/core/index.scss +13 -1
  18. package/src/scss/index.scss +7 -2
  19. package/src/scss/index.ts +1 -1
  20. package/src/scss/{core/interact → interact}/_viewport.scss +1 -1
  21. package/src/scss/interact/index.scss +18 -0
  22. package/src/scss/theme/_effects.scss +60 -0
  23. package/src/scss/theme/index.scss +8 -0
  24. package/src/scss/{advanced/index.ts → theme/loader.ts} +3 -4
  25. package/src/scss/ui/_bar.scss +268 -0
  26. package/src/scss/ui/_buttons.scss +215 -0
  27. package/src/scss/ui/_chrome-mixins.scss +104 -0
  28. package/src/scss/ui/_color.scss +3 -0
  29. package/src/scss/ui/_colorize.scss +5 -0
  30. package/src/scss/{advanced/layout → ui}/_content.scss +0 -1
  31. package/src/scss/ui/_core-layout.scss +4 -0
  32. package/src/scss/ui/_essentials-options.scss +2 -0
  33. package/src/scss/ui/_essentials.scss +707 -0
  34. package/src/scss/ui/_explorer-content.scss +417 -0
  35. package/src/scss/ui/_explorer.scss +274 -0
  36. package/src/scss/ui/_forms-bare-host-elements.scss +25 -0
  37. package/src/scss/ui/_forms-options.scss +2 -0
  38. package/src/scss/ui/_forms.scss +279 -0
  39. package/src/scss/ui/_forms_misc.scss +201 -0
  40. package/src/scss/ui/_gridbox.scss +298 -0
  41. package/src/scss/ui/_home-host.scss +192 -0
  42. package/src/scss/ui/_index.scss +23 -0
  43. package/src/scss/ui/_launcher-typography.scss +31 -0
  44. package/src/scss/ui/_layers.scss +48 -0
  45. package/src/scss/ui/_layout.scss +3 -0
  46. package/src/scss/ui/_markdown.scss +1634 -0
  47. package/src/scss/ui/_modal.scss +309 -0
  48. package/src/scss/ui/_motion.scss +3 -0
  49. package/src/scss/ui/_native-host-button-chrome.scss +31 -0
  50. package/src/scss/ui/_normalize.scss +5 -0
  51. package/src/scss/ui/_orientation-functions.scss +273 -0
  52. package/src/scss/ui/_orientbox.scss +97 -0
  53. package/src/scss/ui/_scrollbar.scss +257 -0
  54. package/src/scss/ui/_shared-overlays.scss +16 -0
  55. package/src/scss/ui/_shared.scss +4 -0
  56. package/src/scss/ui/_sidebar.scss +478 -0
  57. package/src/scss/ui/_speed-dial.scss +47 -0
  58. package/src/scss/ui/_states.scss +4 -0
  59. package/src/scss/ui/_tables.scss +28 -0
  60. package/src/scss/ui/_tabs.scss +405 -0
  61. package/src/scss/ui/_taskbar.scss +215 -0
  62. package/src/scss/ui/_toolbars.scss +167 -0
  63. package/src/scss/ui/_typography.scss +11 -0
  64. package/src/scss/ui/_utils.scss +8 -0
  65. package/src/scss/ui/_viewport.scss +470 -0
  66. package/src/scss/ui/_window-frame.scss +658 -0
  67. package/src/scss/ui/components/app-menu.scss +817 -0
  68. package/src/scss/ui/components/appearance-desktop.scss +14 -0
  69. package/src/scss/ui/components/appearance-mobile.scss +14 -0
  70. package/src/scss/ui/components/calendar/flyout.scss +194 -0
  71. package/src/scss/ui/components/calendar/index.scss +627 -0
  72. package/src/scss/ui/components/explorer-settings.scss +232 -0
  73. package/src/scss/ui/components/file-manager-content.scss +2 -0
  74. package/src/scss/ui/components/file-manager.scss +2 -0
  75. package/src/scss/ui/components/launcher-icon-mask.scss +34 -0
  76. package/src/scss/ui/components/navbar.scss +133 -0
  77. package/src/scss/ui/components/quick-settings.scss +321 -0
  78. package/src/scss/ui/components/scrollframe.scss +58 -0
  79. package/src/scss/ui/components/slider.scss +188 -0
  80. package/src/scss/ui/components/speed-dial.scss +2288 -0
  81. package/src/scss/ui/components/statusbar.scss +255 -0
  82. package/src/scss/ui/components/task.scss +118 -0
  83. package/src/scss/ui/components/taskbar.scss +514 -0
  84. package/src/scss/ui/components/text.scss +241 -0
  85. package/src/scss/ui/components/window.scss +601 -0
  86. package/src/scss/ui/home-host-apply.scss +10 -0
  87. package/src/scss/ui/index.scss +7 -0
  88. package/src/scss/ui/native-controls.scss +17 -0
  89. package/src/scss/advanced/_index.scss +0 -0
  90. package/src/scss/advanced/animation/_motion.scss +0 -323
  91. package/src/scss/advanced/color/_color.scss +0 -328
  92. package/src/scss/advanced/color/_colorize.scss +0 -325
  93. package/src/scss/advanced/design/_design-tokens.scss +0 -118
  94. package/src/scss/advanced/design/_effects.scss +0 -275
  95. package/src/scss/advanced/design/_shadow.scss +0 -359
  96. package/src/scss/advanced/design/_surfaces.scss +0 -76
  97. package/src/scss/advanced/effects/_animations.scss +0 -124
  98. package/src/scss/advanced/effects/_shadows.scss +0 -50
  99. package/src/scss/advanced/font/_typography.scss +0 -601
  100. package/src/scss/advanced/index.scss +0 -11
  101. package/src/scss/advanced/layout/_index.scss +0 -5
  102. package/src/scss/advanced/layout/_normalize.scss +0 -543
  103. package/src/scss/advanced/layout/_shared-overlays.scss +0 -162
  104. package/src/scss/advanced/md3/_md3.scss +0 -506
  105. package/src/scss/advanced/md3/_utils.scss +0 -114
  106. package/src/scss/advanced/misc/_config.scss +0 -119
  107. package/src/scss/advanced/misc/_initials.scss +0 -298
  108. package/src/scss/advanced/misc/_mixins.scss +0 -179
  109. package/src/scss/advanced/misc/_rendering.scss +0 -82
  110. package/src/scss/advanced/misc/_tokens.scss +0 -74
  111. package/src/scss/advanced/theme/_shared.scss +0 -232
  112. package/src/scss/advanced/theme/_states.scss +0 -332
  113. package/src/scss/advanced/theme/_variants.scss +0 -354
  114. package/src/scss/advanced/tokens/_material-color.scss +0 -120
  115. package/src/scss/advanced/tokens/_variables.scss +0 -171
  116. package/src/scss/basic/misc/_index.scss +0 -18
  117. package/src/scss/basic/misc/_mixins.scss +0 -179
  118. package/src/scss/basic/misc/_queries.scss +0 -34
  119. package/src/scss/basic/misc/_tokens.scss +0 -78
  120. package/src/scss/basic/misc/_veela.scss +0 -12
  121. package/src/scss/core/misc/_index.scss +0 -6
  122. /package/src/scss/basic/{misc/_motion.scss → _motion.scss} +0 -0
  123. /package/src/scss/{advanced/misc → basic}/_queries.scss +0 -0
  124. /package/src/scss/basic/{misc/_shared.scss → _shared.scss} +0 -0
  125. /package/src/scss/core/{misc/_config.scss → _config.scss} +0 -0
  126. /package/src/scss/core/{misc/_functions.scss → _functions.scss} +0 -0
  127. /package/src/scss/core/{misc/_icons.scss → _icons.scss} +0 -0
  128. /package/src/scss/core/{misc/_layout.scss → _layout.scss} +0 -0
  129. /package/src/scss/core/{misc/_mixins.scss → _mixins.scss} +0 -0
  130. /package/src/scss/core/{misc/_properties.scss → _properties.scss} +0 -0
  131. /package/src/scss/core/{misc/_utils.scss → _utils.scss} +0 -0
  132. /package/src/scss/{core/interact → interact}/_draggable.scss +0 -0
  133. /package/src/scss/{core/interact → interact}/_position.scss +0 -0
  134. /package/src/scss/{core/interact → interact}/_ps-anchor.scss +0 -0
  135. /package/src/scss/{core/interact → interact}/_ps-centered.scss +0 -0
  136. /package/src/scss/{core/interact → interact}/_ps-cursor.scss +0 -0
  137. /package/src/scss/{core/interact → interact}/_ps-draggable.scss +0 -0
  138. /package/src/scss/{core/interact → interact}/_ps-mechanic.scss +0 -0
  139. /package/src/scss/{core/interact → interact}/_ps-properties.scss +0 -0
  140. /package/src/scss/{core/interact → interact}/_ps-resizable.scss +0 -0
  141. /package/src/scss/{core/interact → interact}/_resizable.scss +0 -0
@@ -0,0 +1,417 @@
1
+ // File Manager content grid styles (basic variant)
2
+
3
+ /* WHY: `@property … initial-value: inherit` is invalid and Capacitor replaceSync drops the sheet. */
4
+
5
+ //
6
+ @layer components {
7
+ /* WHY: no subgrid — Android WebView collapses name/size to 0 and spills Actions. */
8
+ $row-grid: [icon] 2rem [name] minmax(5rem, 1fr) [size] 4.25rem [date] minmax(0, 7.5rem) [actions] 6.4rem;
9
+ $row-grid-mobile: [icon] 2rem [name] minmax(4.5rem, 1fr) [size] 3.75rem [date] 0 [actions] 6.4rem;
10
+
11
+ :host(ui-file-manager-content) {
12
+ & {
13
+ /* WHY: perspective + isolation skipped descendant text paint on Capacitor WebView. */
14
+ display: flex;
15
+ flex-direction: column;
16
+ flex: 1 1 auto;
17
+ inline-size: 100%;
18
+ block-size: 100%;
19
+ min-inline-size: 0;
20
+ min-block-size: 0;
21
+ overflow: hidden;
22
+ scrollbar-width: none;
23
+ scrollbar-color: transparent transparent;
24
+ scrollbar-gutter: auto;
25
+ grid-column: 1 / -1;
26
+ z-index: 1;
27
+ position: relative;
28
+ contain: none;
29
+ container-type: size;
30
+
31
+ touch-action: manipulation;
32
+ pointer-events: auto;
33
+ border-radius: 0;
34
+ margin: 0;
35
+
36
+ color-scheme: inherit;
37
+ background-color: #f7f8fc;
38
+ background-color: light-dark(#f7f8fc, #1a1d24);
39
+ background-color: var(--color-surface);
40
+ color: #1a1c1f;
41
+ color: light-dark(#1a1c1f, #e8eaed);
42
+ color: var(--color-on-surface);
43
+
44
+ outline: none 0px transparent;
45
+ border: none 0px transparent;
46
+ }
47
+
48
+ .fm-grid {
49
+ display: flex;
50
+ flex-direction: column;
51
+ align-content: start;
52
+ inline-size: 100%;
53
+ min-inline-size: 0;
54
+ min-block-size: 0;
55
+ block-size: 100%;
56
+ flex: 1 1 auto;
57
+ overflow: hidden;
58
+ scrollbar-width: none;
59
+ scrollbar-color: transparent transparent;
60
+ scrollbar-gutter: auto;
61
+
62
+ touch-action: manipulation;
63
+ pointer-events: none;
64
+ outline: none 0px transparent;
65
+ border: none 0px transparent;
66
+ }
67
+
68
+ .fm-grid-rows {
69
+ display: flex;
70
+ flex-direction: column;
71
+ flex: 1 1 auto;
72
+ align-content: start;
73
+
74
+ gap: var(--gap-sm, 0.5rem);
75
+ overflow: auto;
76
+ scrollbar-gutter: stable;
77
+ min-block-size: 0;
78
+
79
+ scrollbar-width: thin;
80
+ scrollbar-color: color-mix(in oklab, var(--color-on-surface) 22%, transparent) transparent;
81
+
82
+ inline-size: 100%;
83
+ block-size: 100%;
84
+ min-inline-size: 0;
85
+ z-index: 1;
86
+
87
+ content-visibility: visible;
88
+ contain-intrinsic-size: 1px var(--ui-explorer-row-height, var(--touch-min, 3rem));
89
+ contain: none;
90
+
91
+ //
92
+ touch-action: manipulation;
93
+ pointer-events: auto;
94
+
95
+ //
96
+ slot { display: contents !important; }
97
+ }
98
+
99
+ :where(.row) {
100
+ background-color: color-mix(in oklab, var(--color-on-surface, #fff) 3%, transparent);
101
+ color: var(--color-on-surface);
102
+
103
+ display: grid;
104
+ grid-template-columns: #{$row-grid};
105
+ /* WHY: minmax(0, …) + min-block-size:0 collapsed rows below --touch-min on Android WebView. */
106
+ grid-template-rows: minmax(var(--ui-explorer-row-height, var(--touch-min, 3rem)), auto);
107
+ order: var(--order, 1) !important;
108
+ min-block-size: var(--ui-explorer-row-height, var(--touch-min, 3rem));
109
+ box-sizing: border-box;
110
+
111
+ inline-size: 100%;
112
+ min-inline-size: 0;
113
+ place-content: center;
114
+ place-items: center;
115
+ place-self: stretch;
116
+ justify-items: start;
117
+ padding: 0.35rem 0.65rem;
118
+ border-radius: var(--radius-lg, 0.75rem);
119
+ border: none;
120
+ cursor: pointer;
121
+ pointer-events: auto;
122
+ touch-action: manipulation;
123
+ block-size: auto;
124
+ user-drag: none;
125
+ -webkit-user-drag: none;
126
+
127
+ text-align: start;
128
+ text-wrap: nowrap;
129
+ text-overflow: ellipsis;
130
+ white-space: nowrap;
131
+ letter-spacing: normal;
132
+ overflow: hidden;
133
+ gap: 0.35rem;
134
+ flex-wrap: nowrap;
135
+
136
+ // no draggable available on mobile (touch devices currently)
137
+ @media (hover: hover) and (pointer: fine) {
138
+ user-drag: element;
139
+ -webkit-user-drag: element;
140
+ }
141
+
142
+ ui-icon {
143
+ --ui-icon-size: var(--ui-explorer-icon-size, 1.5rem);
144
+ --ui-icon-padding: 0px;
145
+ inline-size: var(--ui-icon-size);
146
+ block-size: var(--ui-icon-size);
147
+ min-inline-size: var(--ui-icon-size);
148
+ min-block-size: var(--ui-icon-size);
149
+ flex-shrink: 0;
150
+ place-content: center;
151
+ place-items: center;
152
+ }
153
+
154
+ a, span {
155
+ background-color: transparent !important;
156
+ }
157
+
158
+ & > * {
159
+ background-color: transparent !important;
160
+ min-block-size: 0;
161
+ block-size: auto;
162
+ }
163
+ }
164
+
165
+ .row {
166
+ &:hover {
167
+ background-color: color-mix(in oklab, var(--color-on-surface) 8%, transparent);
168
+ }
169
+ &:active {
170
+ background-color: color-mix(in oklab, var(--color-on-surface) 11%, transparent);
171
+ }
172
+ &:focus-visible {
173
+ outline: 2px solid var(--color-primary, #5a7fff);
174
+ outline-offset: -2px;
175
+ }
176
+ }
177
+
178
+ .c:not(.icon) {
179
+ min-inline-size: 0;
180
+ display: flex;
181
+ flex-direction: row;
182
+ text-align: start;
183
+ text-wrap: nowrap;
184
+ text-overflow: ellipsis;
185
+ white-space: nowrap;
186
+ overflow: hidden;
187
+ inline-size: auto;
188
+ place-content: center;
189
+ place-items: center;
190
+ justify-content: start;
191
+ color: inherit;
192
+ min-block-size: 0;
193
+ block-size: auto;
194
+ }
195
+
196
+ /* WHY: anonymous flex text nodes often do not paint on Android WebView. */
197
+ .c.name,
198
+ .c.size,
199
+ .c.date {
200
+ display: block;
201
+ color: #1a1c1f;
202
+ color: light-dark(#1a1c1f, #e8eaed);
203
+ color: var(--color-on-surface);
204
+ -webkit-text-fill-color: currentColor;
205
+ }
206
+
207
+ .c .t {
208
+ display: block;
209
+ overflow: hidden;
210
+ text-overflow: ellipsis;
211
+ white-space: nowrap;
212
+ color: inherit;
213
+ -webkit-text-fill-color: currentColor;
214
+ }
215
+
216
+ .icon {
217
+ display: flex;
218
+ grid-column: icon;
219
+ place-content: center;
220
+ place-items: center;
221
+ overflow: visible;
222
+ flex-shrink: 0;
223
+ inline-size: 1.5rem;
224
+ block-size: 1.5rem;
225
+ min-inline-size: 1.5rem;
226
+ min-block-size: 1.5rem;
227
+ aspect-ratio: 1;
228
+
229
+ ui-icon,
230
+ img {
231
+ --ui-icon-size: var(--ui-explorer-icon-size, 1.5rem);
232
+ --ui-icon-padding: 0px;
233
+ inline-size: var(--ui-icon-size) !important;
234
+ block-size: var(--ui-icon-size) !important;
235
+ min-inline-size: var(--ui-icon-size) !important;
236
+ min-block-size: var(--ui-icon-size) !important;
237
+ max-inline-size: var(--ui-icon-size) !important;
238
+ max-block-size: var(--ui-icon-size) !important;
239
+ flex-shrink: 0;
240
+ object-fit: contain;
241
+ }
242
+ }
243
+ .name { grid-column: name; inline-size: stretch; }
244
+ .size {
245
+ grid-column: size;
246
+ justify-content: end;
247
+ text-align: end;
248
+ }
249
+ .date {
250
+ grid-column: date;
251
+ justify-content: end;
252
+ text-align: end;
253
+ }
254
+ .actions { grid-column: actions; }
255
+
256
+ .row, ::slotted(.row), .fm-grid-header {
257
+ grid-template-columns: #{$row-grid};
258
+ }
259
+
260
+ @container (inline-size <= 600px) {
261
+ .row, ::slotted(.row), .fm-grid-header { grid-template-columns: #{$row-grid-mobile}; }
262
+ .date { display: none !important; }
263
+ }
264
+
265
+ //
266
+ .actions {
267
+ background-color: color-mix(in oklab, var(--color-on-surface, #fff) 5%, transparent);
268
+ color: var(--color-on-surface);
269
+
270
+ pointer-events: none;
271
+ padding: 0.2rem;
272
+ max-inline-size: stretch;
273
+ border-radius: 999px;
274
+ border: none;
275
+
276
+ display: flex;
277
+ flex-direction: row;
278
+ flex-wrap: nowrap;
279
+ place-content: center;
280
+ place-items: center;
281
+ place-self: center;
282
+ justify-content: flex-end;
283
+ justify-self: end;
284
+ inline-size: 6.4rem;
285
+ max-inline-size: 6.4rem;
286
+ block-size: 2.125rem;
287
+ gap: 0.15rem;
288
+ overflow: hidden;
289
+ }
290
+
291
+ .action-btn {
292
+ background-color: transparent;
293
+ color: var(--color-on-surface);
294
+
295
+ pointer-events: auto;
296
+ appearance: none;
297
+ border: none;
298
+ padding: 0;
299
+ border-radius: 999px;
300
+ cursor: pointer;
301
+ inline-size: 1.85rem;
302
+ block-size: 1.85rem;
303
+ min-inline-size: 1.85rem;
304
+ min-block-size: 1.85rem;
305
+ flex-shrink: 0;
306
+ aspect-ratio: 1;
307
+ display: inline-flex;
308
+ place-content: center;
309
+ place-items: center;
310
+ transition: background 0.14s ease, transform 0.1s ease;
311
+ position: relative;
312
+ overflow: hidden;
313
+ box-shadow: none;
314
+
315
+ &:hover {
316
+ background-color: color-mix(in oklab, var(--color-on-surface) 12%, transparent);
317
+ }
318
+
319
+ &:active {
320
+ transform: scale(0.94);
321
+ }
322
+
323
+ &:focus-visible {
324
+ outline: 2px solid color-mix(in oklab, var(--color-primary, #5a7fff) 55%, transparent);
325
+ outline-offset: 1px;
326
+ }
327
+
328
+ ui-icon {
329
+ --ui-icon-size: var(--ui-explorer-action-icon-size, 1.15rem);
330
+ --ui-icon-padding: 0px;
331
+ inline-size: var(--ui-icon-size) !important;
332
+ block-size: var(--ui-icon-size) !important;
333
+ min-inline-size: var(--ui-icon-size) !important;
334
+ min-block-size: var(--ui-icon-size) !important;
335
+ max-inline-size: var(--ui-icon-size) !important;
336
+ max-block-size: var(--ui-icon-size) !important;
337
+ }
338
+ }
339
+
340
+ .fm-grid-header {
341
+ position: sticky !important;
342
+ display: grid;
343
+ grid-template-columns: #{$row-grid};
344
+ box-sizing: border-box;
345
+ inline-size: 100%;
346
+ min-inline-size: 0;
347
+ inset-block-start: 0;
348
+ z-index: 8;
349
+ padding: 0.4rem 0.65rem;
350
+ border-radius: 0;
351
+ border: none;
352
+ box-shadow: 0 1px 0 color-mix(in oklab, var(--color-on-surface, #fff) 6%, transparent);
353
+ background: color-mix(in oklab, var(--color-on-surface, #fff) 3.5%, transparent);
354
+ font-size: 0.6875rem;
355
+ font-weight: 600;
356
+ letter-spacing: 0.04em;
357
+ text-transform: uppercase;
358
+ color: #5c5f66;
359
+ color: light-dark(#5c5f66, #c4c7ce);
360
+ color: var(--color-on-surface-variant);
361
+ -webkit-text-fill-color: currentColor;
362
+ opacity: 1;
363
+ gap: 0.35rem;
364
+ min-block-size: 2rem;
365
+
366
+ place-content: center;
367
+ place-items: center;
368
+ justify-content: start;
369
+ justify-items: start;
370
+ text-align: start;
371
+
372
+ touch-action: manipulation;
373
+ pointer-events: auto;
374
+
375
+ & > * { inline-size: auto; }
376
+
377
+ .c { font-weight: 600; }
378
+ .icon { grid-column: icon; }
379
+ .name { grid-column: name; inline-size: stretch; }
380
+ .size {
381
+ grid-column: size;
382
+ justify-content: end;
383
+ text-align: end;
384
+ }
385
+ .date {
386
+ grid-column: date;
387
+ justify-content: end;
388
+ text-align: end;
389
+ }
390
+ .actions {
391
+ grid-column: actions;
392
+ inline-size: stretch;
393
+ block-size: fit-content;
394
+ box-shadow: none;
395
+ padding: 0;
396
+ max-inline-size: stretch;
397
+ border-radius: 0;
398
+ display: flex;
399
+ flex-direction: row;
400
+ flex-wrap: nowrap;
401
+ place-content: center;
402
+ place-items: center;
403
+ text-wrap: nowrap;
404
+ text-overflow: ellipsis;
405
+ white-space: nowrap;
406
+ overflow: hidden;
407
+ gap: 0.25rem;
408
+
409
+ justify-content: flex-end;
410
+ justify-items: end;
411
+ justify-self: end;
412
+ text-align: end;
413
+ }
414
+ }
415
+
416
+ }
417
+ }
@@ -0,0 +1,274 @@
1
+ // File Manager shell styles (basic variant)
2
+
3
+ //
4
+ @layer components {
5
+
6
+ :host(ui-file-manager) {
7
+ &, :where(*) {
8
+ box-sizing: border-box;
9
+ user-select: none;
10
+ -webkit-tap-highlight-color: transparent;
11
+ }
12
+
13
+ & {
14
+ container-type: inline-size;
15
+ container-name: ui-file-manager;
16
+ display: flex;
17
+ flex-direction: column;
18
+ flex: 1 1 auto;
19
+ inline-size: 100%;
20
+ block-size: 100%;
21
+ min-block-size: 0;
22
+ min-inline-size: 0;
23
+ /* WHY: Avoid skipped list painting under transformed frame ancestors. */
24
+ content-visibility: visible;
25
+ border-radius: 0;
26
+ overflow: hidden;
27
+ margin: 0;
28
+ line-height: normal;
29
+ max-block-size: none;
30
+ max-inline-size: none;
31
+
32
+ /* WHY: plain hex before light-dark/var — WebView may lack both; invalid `--color-*` is IACVT. */
33
+ color-scheme: inherit;
34
+ background-color: #f7f8fc;
35
+ background-color: light-dark(#f7f8fc, #1a1d24);
36
+ background-color: var(--color-surface);
37
+ color: #1a1c1f;
38
+ color: light-dark(#1a1c1f, #e8eaed);
39
+ color: var(--color-on-surface);
40
+ --ui-icon-size: var(--ui-explorer-icon-size, 1.5rem);
41
+ --ui-icon-padding: 0px;
42
+ --icon-color: light-dark(#1a1c1f, #e8eaed);
43
+ --icon-color: var(--color-on-surface);
44
+ }
45
+
46
+ .fm-root {
47
+ position: relative;
48
+ gap: 0;
49
+ display: grid;
50
+ grid-template-columns: [content-col] minmax(0px, 1fr);
51
+ grid-template-rows: auto minmax(0px, 1fr);
52
+ inline-size: 100%;
53
+ block-size: 100%;
54
+ min-inline-size: 0;
55
+ min-block-size: 0;
56
+ flex: 1 1 auto;
57
+ overflow: hidden;
58
+ }
59
+
60
+ .fm-toolbar {
61
+ grid-column: 1 / -1;
62
+ display: grid;
63
+ grid-template-columns: minmax(0px, max-content) minmax(0px, 1fr) minmax(0px, max-content);
64
+ grid-template-rows: minmax(0px, 1fr);
65
+ grid-auto-flow: column;
66
+ place-content: center;
67
+ place-items: center;
68
+ gap: 0.625rem;
69
+ border-radius: 0;
70
+ padding: 0.5rem 0.75rem;
71
+ line-height: normal;
72
+ background: #f7f8fc;
73
+ background: light-dark(#f7f8fc, #1a1d24);
74
+ background: var(--color-surface);
75
+ box-shadow: 0 1px 0 color-mix(in oklab, var(--color-on-surface, #fff) 6%, transparent);
76
+
77
+ button, input {
78
+ background-color: transparent;
79
+ color: #1a1c1f;
80
+ color: light-dark(#1a1c1f, #e8eaed);
81
+ color: var(--color-on-surface);
82
+ }
83
+
84
+ input {
85
+ inline-size: stretch;
86
+ block-size: stretch;
87
+ border: none;
88
+ outline: none;
89
+ padding: 0.45rem 0.85rem;
90
+ overflow: auto;
91
+ border-radius: 999px;
92
+ font: 0.8125rem/1.35 ui-monospace, "Cascadia Code", "SF Mono", Consolas, monospace;
93
+ background: color-mix(in oklab, var(--color-on-surface, #fff) 6%, transparent);
94
+ }
95
+
96
+ input:focus-visible {
97
+ box-shadow: 0 0 0 2px color-mix(in oklab, var(--color-primary, #5a7fff) 45%, transparent);
98
+ }
99
+
100
+ .btn {
101
+ transition: background 0.14s ease, transform 0.1s ease;
102
+ appearance: none;
103
+ border: 0;
104
+ padding: 0;
105
+ border-radius: 999px;
106
+ cursor: pointer;
107
+ inline-size: 2.5rem;
108
+ block-size: 2.5rem;
109
+ aspect-ratio: 1 / 1;
110
+ display: inline-flex;
111
+ align-items: center;
112
+ justify-content: center;
113
+ background: transparent;
114
+
115
+ ui-icon {
116
+ --ui-icon-size: var(--ui-explorer-icon-size, 1.5rem);
117
+ --ui-icon-padding: 0px;
118
+ inline-size: var(--ui-icon-size) !important;
119
+ block-size: var(--ui-icon-size) !important;
120
+ min-inline-size: var(--ui-icon-size) !important;
121
+ min-block-size: var(--ui-icon-size) !important;
122
+ max-inline-size: var(--ui-icon-size) !important;
123
+ max-block-size: var(--ui-icon-size) !important;
124
+ flex-shrink: 0;
125
+ }
126
+ }
127
+
128
+ .btn:hover {
129
+ background: color-mix(in oklab, var(--color-on-surface) 9%, transparent);
130
+ }
131
+
132
+ .btn:active {
133
+ transform: scale(0.96);
134
+ }
135
+
136
+ .btn:focus-visible {
137
+ outline: 2px solid color-mix(in oklab, var(--color-primary, #5a7fff) 55%, transparent);
138
+ outline-offset: 1px;
139
+ }
140
+
141
+ & > * {
142
+ display: flex;
143
+ flex-direction: row;
144
+ flex-wrap: nowrap;
145
+ gap: 0.2rem;
146
+ block-size: fit-content;
147
+ min-block-size: stretch;
148
+ align-items: center;
149
+ }
150
+
151
+ & .fm-toolbar-left {
152
+ grid-column: 1;
153
+ }
154
+
155
+ & .fm-toolbar-left,
156
+ & .fm-toolbar-right {
157
+ padding: 0.2rem;
158
+ border-radius: 999px;
159
+ background: color-mix(in oklab, var(--color-on-surface, #fff) 5.5%, transparent);
160
+ }
161
+
162
+ & .fm-toolbar-center {
163
+ grid-column: 2;
164
+ flex-grow: 1;
165
+ inline-size: stretch;
166
+ block-size: fit-content;
167
+ min-block-size: 2.5rem;
168
+ border-radius: 999px;
169
+ padding: 0;
170
+ overflow: hidden;
171
+ place-content: stretch;
172
+ place-items: stretch;
173
+ justify-content: start;
174
+ background: color-mix(in oklab, var(--color-on-surface, #fff) 5.5%, transparent);
175
+
176
+ & > * {
177
+ inline-size: stretch;
178
+ block-size: stretch;
179
+ }
180
+
181
+ & input {
182
+ padding-inline: 0.9rem;
183
+ inline-size: stretch;
184
+ background: transparent;
185
+ }
186
+ }
187
+
188
+ & .fm-toolbar-right { grid-column: 3; }
189
+ }
190
+
191
+ .fm-sidebar {
192
+ grid-row: 2;
193
+ grid-column: sidebar-col;
194
+ align-content: start;
195
+ gap: 0.5rem;
196
+ padding: 0.5rem;
197
+ border-radius: 0.5rem;
198
+ line-height: normal;
199
+ justify-content: start;
200
+ justify-items: start;
201
+ text-align: start;
202
+ display: none;
203
+
204
+ .sec {
205
+ display: grid;
206
+ gap: 0.25rem;
207
+ place-content: start;
208
+ place-items: start;
209
+ justify-content: start;
210
+ justify-items: start;
211
+ }
212
+ .sec-title {
213
+ font-weight: 600;
214
+ opacity: 0.8;
215
+ padding-block: 0.25rem;
216
+ place-self: start;
217
+ }
218
+ .link {
219
+ text-align: start;
220
+ appearance: none;
221
+ border: 0;
222
+ padding: 0.25rem 0.375rem;
223
+ border-radius: 0.375rem;
224
+ cursor: pointer;
225
+ line-height: normal;
226
+ }
227
+ }
228
+
229
+ .fm-root--settings .fm-content {
230
+ visibility: hidden;
231
+ pointer-events: none;
232
+ }
233
+
234
+ .fm-content {
235
+ grid-row: 2;
236
+ grid-column: content-col;
237
+ display: flex;
238
+ flex-direction: column;
239
+ inline-size: 100%;
240
+ block-size: 100%;
241
+ min-inline-size: 0;
242
+ min-block-size: 0;
243
+ flex: 1 1 auto;
244
+ overflow: hidden;
245
+ border-radius: 0;
246
+ padding: 0 0.35rem 0.45rem;
247
+
248
+ scrollbar-width: thin;
249
+ scrollbar-color: color-mix(in oklab, var(--color-on-surface) 22%, transparent) transparent;
250
+ }
251
+
252
+ .status { padding: 0.5rem; opacity: 0.8; }
253
+ .status.error { color: var(--error-color, crimson); }
254
+
255
+ @container (inline-size < 520px) {
256
+ .fm-content { grid-column: 1 / -1; }
257
+ .fm-root { grid-column: 1 / -1; }
258
+ .fm-grid { grid-column: 1 / -1; }
259
+ .fm-root[data-with-sidebar="true"] { grid-template-columns: [content-col] minmax(0px, 1fr); }
260
+ .fm-sidebar { display: none !important; }
261
+ .fm-toolbar {
262
+ gap: 0.35rem;
263
+ padding-inline: 0.4rem;
264
+ .btn {
265
+ inline-size: 2rem;
266
+ block-size: 2rem;
267
+ }
268
+ & .fm-toolbar-center {
269
+ min-inline-size: 0;
270
+ }
271
+ }
272
+ }
273
+ }
274
+ }
@@ -0,0 +1,25 @@
1
+ // Host-wide bare form controls (opt-in only; keep out of default fl-ui document scope).
2
+ @mixin emit-bare-form-element-layer() {
3
+ @layer components {
4
+ input,
5
+ select,
6
+ textarea {
7
+ & {
8
+ background-repeat: no-repeat;
9
+ min-block-size: 2.5rem;
10
+ font-size: inherit;
11
+ max-inline-size: stretch;
12
+ max-inline-size: 100cqi;
13
+
14
+ text-overflow: ellipsis;
15
+ overflow: auto;
16
+ scrollbar-width: none;
17
+ }
18
+ }
19
+
20
+ textarea[data-multiline="true"] {
21
+ min-block-size: 5rem;
22
+ resize: vertical;
23
+ }
24
+ }
25
+ }