@fest-lib/veela 0.1.20 → 1.0.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.
Files changed (141) hide show
  1. package/dist/veela.js +4 -33
  2. package/package.json +9 -2
  3. package/src/scss/_layers.scss +6 -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,478 @@
1
+ // Layout Components - Refactored and Optimized
2
+ // Unified with design system variables and mixins
3
+ @use "../basic/layout" as layout;
4
+ @use "../core/mixins" as core;
5
+ @use "../core/tokens" as t;
6
+ @use "./chrome-mixins" as ui;
7
+
8
+ //
9
+ @mixin sidebar {
10
+
11
+ //
12
+ .sidebar {
13
+ align-items: stretch;
14
+ box-sizing: border-box;
15
+ user-select: none;
16
+ text-align: start;
17
+ padding: 0px;
18
+ touch-action: pan-y;
19
+ pointer-events: auto;
20
+ justify-content: start;
21
+ block-size: stretch;
22
+ margin: 0px;
23
+
24
+ //
25
+ @include core.flex-center;
26
+ @include layout.container-clamped(clamp(0px, var(--sidebar-width, 20rem), 100cqi), stretch);
27
+ @include layout.scrollable("y");
28
+ @include core.hide-scrollbar;
29
+
30
+ //
31
+ @include ui.vstack(0px);
32
+ @include ui.tonal-surface(surface-container-low, var(--surface-opacity-default), var(--radius-sm), 0px, 1, true);
33
+
34
+ //
35
+ & {
36
+ box-sizing: border-box;
37
+ border: none 0 transparent;
38
+ outline: none 0 transparent;
39
+ max-block-size: stretch;
40
+ min-block-size: 0px;
41
+ box-shadow: none;
42
+
43
+ contain: strict;
44
+ content-visibility: auto;
45
+ block-size: stretch;
46
+ padding: 0.25rem;
47
+ padding-inline: 0.25rem;
48
+ padding-block: 0.25rem;
49
+
50
+ border-radius: 0px;
51
+ border-start-start-radius: 0px;
52
+ border-end-start-radius: 0px;
53
+ //background-color: oklch(from --c2-surface(0.15, var(--current, currentColor)) l c h / 0.9);
54
+ //filter: drop-shadow(0 1.5rem 1rem color-mix(in oklch, #000 22%, transparent));
55
+ //backdrop-filter: blur(1rem);
56
+ background-color: transparent;
57
+ filter: drop-shadow(0 1.5rem 1rem color-mix(in oklch, #000 22%, transparent));
58
+ }
59
+
60
+ //
61
+ &[slot="sidebar"] {
62
+ grid-column: 1 / 2;
63
+ grid-row: 1 / -1;
64
+ position: sticky;
65
+ inset-block-start: var(--padding-sm);
66
+ align-self: start;
67
+ display: flex;
68
+ flex-direction: column;
69
+ touch-action: pan-y;
70
+ justify-content: start;
71
+
72
+ //
73
+ @include layout.container-clamped(stretch, stretch);
74
+ @include layout.scrollable;
75
+ @include core.hide-scrollbar;
76
+ @container (inline-size >= 60rem) {
77
+ position: static;
78
+ max-block-size: none;
79
+ order: 2;
80
+ inline-size: calc(100cqi - clamp(0px, var(--padding-sm), 100cqi));
81
+ }
82
+
83
+ //
84
+ & { min-block-size: 0px; box-shadow: none; block-size: stretch; max-block-size: stretch; }
85
+ }
86
+
87
+ ul {
88
+ user-select: none;
89
+ overflow: visible;
90
+ box-sizing: border-box;
91
+ margin: 0px;
92
+ touch-action: pan-y;
93
+ justify-content: start;
94
+ max-block-size: none;
95
+ block-size: max-content;
96
+ margin-block: 0.25rem;
97
+
98
+ //
99
+ @include layout.container-clamped(stretch, fit-content);
100
+ @include ui.tonal-list(surface, var(--surface-opacity-subtle), var(--radius-sm), 0);
101
+
102
+ //
103
+ /*filter: drop-shadow(0 1.5rem 1rem color-mix(in oklch, #000 22%, transparent));*/
104
+ background-color: oklch(from var(--surface-color) l c h / 1);
105
+ /*backdrop-filter: blur(1rem);*/
106
+
107
+ //
108
+ &, &:focus {
109
+ border: none 0 transparent;
110
+ outline: none 0 transparent;
111
+ }
112
+
113
+ //
114
+ & { block-size: max-content; min-block-size: max-content; max-block-size: none; }
115
+
116
+ //
117
+ li {
118
+ overflow: visible;
119
+ font-size: t.$font-sm;
120
+ transition: var(--transition-colors);
121
+ touch-action: pan-y;
122
+
123
+ //
124
+ @include layout.container-clamped(stretch, fit-content);
125
+
126
+ //
127
+ &, * { pointer-events: none; }
128
+
129
+ //
130
+ a {
131
+ display: flex;
132
+ flex-direction: row;
133
+ flex-wrap: nowrap;
134
+ pointer-events: auto;
135
+ background: transparent;
136
+ touch-action: pan-y;
137
+
138
+ //
139
+ @include layout.container-clamped(stretch, fit-content);
140
+ @include ui.nav-item;
141
+
142
+ //
143
+ &, &:focus {
144
+ border: none;
145
+ outline: none;
146
+ }
147
+
148
+ //
149
+ & { padding: var(--padding-lg); column-gap: var(--gap-xs); gap: var(--gap-md); }
150
+ @media (max-height: 600px) { padding: var(--padding-xl); gap: var(--gap-sm); }
151
+ @media (max-height: 480px) { padding: var(--padding-lg); gap: var(--gap-md); }
152
+
153
+ //
154
+ & {
155
+ position: relative;
156
+ isolation: isolate;
157
+ border-radius: var(--radius-sm);
158
+ transition: color var(--transition-colors), background-color var(--transition-colors);
159
+ color: color-mix(in oklch, var(--on-surface, currentColor) 72%, transparent);
160
+ min-block-size: 3rem; // 56px
161
+ }
162
+
163
+ &::before {
164
+ content: "";
165
+ position: absolute;
166
+ inset: 0;
167
+ border-radius: inherit;
168
+ background: color-mix(in oklch, var(--primary, var(--color-primary, currentColor)) 18%, transparent);
169
+ opacity: 0;
170
+ transform: scale3d(0.4, 1, 1);
171
+ transition: opacity var(--transition-colors), transform var(--transition-medium, var(--transition-colors));
172
+ pointer-events: none;
173
+ }
174
+
175
+ &::after {
176
+ display: none; // Remove the small indicator
177
+ }
178
+
179
+ &:where(:hover, :focus-visible, :focus, :active) {
180
+ color: color-mix(in oklch, var(--on-surface, currentColor) 94%, transparent);
181
+
182
+ &::before {
183
+ opacity: 0.55;
184
+ transform: scale3d(1, 1, 1);
185
+ }
186
+
187
+ ui-icon {
188
+ color: color-mix(in oklch, var(--on-surface, currentColor) 94%, transparent);
189
+ }
190
+ }
191
+
192
+ &[data-active="true"] {
193
+ color: color-mix(in oklch, var(--on-secondary-container, var(--on-surface, currentColor)) 100%, transparent);
194
+ font-weight: var(--font-weight-semibold);
195
+ letter-spacing: 0.01em;
196
+
197
+ &::before {
198
+ opacity: 1;
199
+ transform: scale3d(1, 1, 1);
200
+ background: var(--secondary-container, color-mix(in oklch, var(--primary, var(--color-primary, currentColor)) 25%, transparent));
201
+ box-shadow: none;
202
+ }
203
+
204
+ ui-icon {
205
+ color: currentColor;
206
+ }
207
+ }
208
+
209
+ @media (prefers-reduced-motion: reduce) {
210
+ &, &::before, &::after {
211
+ transition-duration: 0ms;
212
+ transform: none;
213
+ }
214
+ }
215
+
216
+ ui-icon {
217
+ justify-self: start;
218
+ inline-size: var(--icon-size);
219
+ block-size: var(--icon-size);
220
+ --icon-size: var(--icon-size-sm);
221
+ color: color-mix(in oklch, var(--on-surface, currentColor) 58%, transparent);
222
+ transition: color var(--transition-colors), transform var(--transition-medium, var(--transition-colors));
223
+
224
+ @media (max-width: 720px) { --icon-size: var(--icon-size-md); }
225
+ @media (max-width: 480px) { --icon-size: var(--icon-size-lg); }
226
+ }
227
+
228
+ //
229
+ span {
230
+ display: block;
231
+ justify-self: start;
232
+ text-align: start;
233
+ @include layout.container-clamped(stretch, max-content);
234
+ }
235
+ }
236
+ }
237
+ }
238
+
239
+ &,
240
+ ul,
241
+ ul li,
242
+ ul li a,
243
+ ul li a span {
244
+ text-align: start;
245
+ direction: ltr;
246
+ justify-items: start;
247
+ justify-self: start;
248
+ }
249
+
250
+ //
251
+ @container (inline-size >= 60rem) {
252
+ nav {
253
+ inline-size: 100cqi;
254
+
255
+ //
256
+ padding: var(--padding-sm) var(--padding-xs);
257
+ @media (max-width: 720px) { padding: var(--padding-md) var(--padding-sm); }
258
+ @media (max-width: 480px) { padding: var(--padding-lg) var(--padding-md); }
259
+
260
+ //
261
+ ul {
262
+ gap: 0;
263
+ padding-inline: 0;
264
+ inline-size: stretch;
265
+
266
+ li {
267
+ flex: 0 0 auto;
268
+ white-space: nowrap;
269
+ border-radius: var(--radius-sm);
270
+
271
+ //
272
+ @media (max-width: 480px) { border-radius: var(--radius-md); }
273
+ }
274
+ }
275
+ }
276
+ }
277
+ }
278
+ }
279
+
280
+ // ============================================================================
281
+ // Sidebar Component Styles
282
+ // ============================================================================
283
+ @mixin tabbed-sidebar($selector: ".sidebar") {
284
+ @at-root :host {
285
+ #{$selector} {
286
+ // ================================================================
287
+ // Base Layout
288
+ // ================================================================
289
+ & {
290
+ display: flex;
291
+ flex-direction: column;
292
+ justify-content: start;
293
+ gap: 0px;
294
+
295
+ // Grid positioning
296
+ grid-column: 1 / 2 span;
297
+ grid-row: 2 / -1;
298
+ z-index: 2;
299
+
300
+ // Sizing
301
+ min-inline-size: 0px;
302
+ min-block-size: 0px;
303
+ max-inline-size: stretch;
304
+ max-block-size: stretch;
305
+
306
+ // Spacing
307
+ padding: 0px !important;
308
+ margin: 0px !important;
309
+
310
+ // Visual
311
+ background: none;
312
+ box-shadow: none;
313
+ border-radius: 0px;
314
+ overflow: visible;
315
+
316
+ // Transform & Animation
317
+ transform: translateX(0px);
318
+ background-color: transparent;
319
+ transition-behavior: allow-discrete;
320
+
321
+ //
322
+ /*filter: drop-shadow(0 1.5rem 1rem color-mix(in oklch, #000 22%, transparent));*/
323
+ filter: none;
324
+ }
325
+
326
+ // ================================================================
327
+ // Slotted Sidebar Content
328
+ // ================================================================
329
+ ::slotted([slot="sidebar"]) {
330
+ // Grid positioning
331
+ grid-row: 1 / -1;
332
+
333
+ // Sizing
334
+ inline-size: stretch;
335
+ block-size: stretch;
336
+ max-block-size: stretch;
337
+ flex-grow: 1;
338
+
339
+ // Spacing
340
+ padding: 0rem;
341
+ margin: 0px;
342
+ gap: 0px;
343
+
344
+ // Layout
345
+ place-content: center;
346
+ place-items: center;
347
+ align-content: start;
348
+ line-height: normal;
349
+
350
+ // Visual
351
+ box-shadow: none;
352
+ }
353
+
354
+ // ================================================================
355
+ // Desktop Layout (≥800px)
356
+ // ================================================================
357
+ @at-root :host(:not([sidebar-drop-menu])) {
358
+ --sidebar-inline-grid-size: 0px;
359
+
360
+ //
361
+ #{$selector} {
362
+ & {
363
+ will-change: inline-size;
364
+ grid-column: 1 / 2 span;
365
+ position: relative;
366
+ min-inline-size: 0px;
367
+ inline-size: clamp(min(20rem, 100%), max(16rem, 10cqi), 100cqi);
368
+ max-inline-size: none;
369
+ transform: translate3d(-100%, 0, 0);
370
+ transition: transform var(--transition-medium, 0.28s) ease,
371
+ box-shadow var(--transition-medium, 0.28s) ease;
372
+ pointer-events: none;
373
+ block-size: stretch;
374
+ max-block-size: stretch;
375
+ }
376
+
377
+ // Hidden state
378
+ &:is([sidebar-opened="false"], :not([sidebar-opened="true"], [sidebar-opened=""])) {
379
+ pointer-events: none;
380
+ transform: translate3d(-100%, 0, 0);
381
+ }
382
+
383
+ // Visible state
384
+ &:is([sidebar-opened="true"], [sidebar-opened=""]) {
385
+ transform: translate3d(0, 0, 0);
386
+ pointer-events: auto;
387
+
388
+ @starting-style {
389
+ transform: translate3d(-100%, 0, 0);
390
+ box-shadow: none;
391
+ }
392
+ }
393
+ }
394
+ }
395
+
396
+ // ================================================================
397
+ // Drop Menu Mode
398
+ // ================================================================
399
+ @at-root :host([sidebar-drop-menu]) {
400
+ --sidebar-inline-grid-size: 0px;
401
+
402
+ #{$selector} {
403
+ & {
404
+ // Grid positioning
405
+ grid-column: sidebar-col !important;
406
+ grid-row: 2 / -1;
407
+ z-index: 5;
408
+
409
+ // Sizing
410
+ inline-size: min(26rem, 80cqi);
411
+ min-inline-size: clamp(16rem, 32cqi, 24rem);
412
+ block-size: stretch;
413
+ max-block-size: min(48rem, 100cqb);
414
+
415
+ // Spacing
416
+ padding-block: clamp(0.75rem, 1cqb + 0.5rem, 1.25rem);
417
+ padding-inline: clamp(0.75rem, 1cqi + 0.75rem, 1.5rem);
418
+
419
+ // Visual
420
+ background-color: color-mix(in oklch, var(--surface-color) 96%, transparent);
421
+ border: 1px solid color-mix(in oklch, var(--md3-outline) 40%, transparent);
422
+ border-radius: 0px;
423
+ box-shadow: 0 1.5rem 3rem color-mix(in oklch, #000 22%, transparent);
424
+
425
+ // Transform & Animation
426
+ transform-origin: top center;
427
+ transform: translate3d(0, -20%, 0);
428
+ transition-behavior: allow-discrete;
429
+ transition:
430
+ visibility var(--transition-medium, 0.3s) steps(1, jump-both),
431
+ transform var(--transition-medium, 0.3s) var(--ease-emphasized),
432
+ opacity var(--transition-medium, 0.3s) var(--ease-out),
433
+ box-shadow var(--transition-medium, 0.3s) var(--ease-emphasized);
434
+
435
+ // Initial state
436
+ pointer-events: none;
437
+ visibility: hidden;
438
+ opacity: 0;
439
+ }
440
+
441
+ // Visible state
442
+ &:is([sidebar-opened=""], [sidebar-opened="true"]) {
443
+ opacity: 1;
444
+ pointer-events: auto;
445
+ transform: translate3d(0, 0, 0);
446
+ visibility: visible;
447
+
448
+ @starting-style {
449
+ transform: translate3d(0, -20%, 0);
450
+ }
451
+ }
452
+
453
+ // Backdrop overlay
454
+ &:has([sidebar-opened="true"]) .content-box::after {
455
+ opacity: 0.6;
456
+ pointer-events: auto;
457
+ }
458
+ }
459
+ }
460
+
461
+ // ================================================================
462
+ // Drop Menu: Bottom Tab Position
463
+ // ================================================================
464
+ @at-root :host([sidebar-drop-menu][tab-position="bottom"]) #{$selector} {
465
+ inset-block-start: auto;
466
+ inset-block-end: calc(var(--tabbed-bar-block-size) + var(--tabbed-padding-block));
467
+ transform-origin: bottom center;
468
+ transform: translate3d(0, 20%, 0);
469
+
470
+ &:is([sidebar-opened=""], [sidebar-opened="true"]) {
471
+ @starting-style {
472
+ transform: translate3d(0, 20%, 0);
473
+ }
474
+ }
475
+ }
476
+ }
477
+ }
478
+ }
@@ -0,0 +1,47 @@
1
+ @use "../interact/viewport" as *;
2
+
3
+ //
4
+ // Desktop-like launcher / speed-dial grids (orient-aware drag + placement).
5
+ // Use with:
6
+ // - Host: `data-mixin="ui-orientbox"` ancestor, `data-grid-columns` / `data-grid-rows`
7
+ // - Items: `compute_grid_item_cell` (see `.ui-gridlayout` or include mixin on children)
8
+ // - JS: `fest/dom` `resolveGridCellFromClientPoint`, `fest/lure` `bindDraggable`, `fest/core` `normalizeGridLayout` / `redirectCell`
9
+ //
10
+ @layer components {
11
+ .ui-launcher-grid, .ui-speed-dial-grid {
12
+ @include compute_orient_grid_layout();
13
+
14
+ display: grid;
15
+ position: relative;
16
+ container-type: size;
17
+ box-sizing: border-box;
18
+ inline-size: stretch;
19
+ block-size: stretch;
20
+ min-inline-size: 0px;
21
+ min-block-size: 0px;
22
+ pointer-events: none;
23
+ gap: 0;
24
+ place-content: center;
25
+ place-items: center;
26
+
27
+ // Override `--layout-c` / `--layout-r` (or set `--grid-cols` / `--grid-rows` in a parent theme) to match `data-grid-*` + app state.
28
+ --layout-c: 4;
29
+ --layout-r: 8;
30
+
31
+ --sd-inherit-layout-c: var(--layout-c, 4);
32
+ --sd-inherit-layout-r: var(--layout-r, 8);
33
+ --sd-inherit-cs-layout-c: var(--cs-layout-c, var(--layout-c, 4));
34
+ --sd-inherit-cs-layout-r: var(--cs-layout-r, var(--layout-r, 8));
35
+
36
+ grid-template-columns: repeat(var(--cs-layout-c, 4), minmax(0px, 1fr));
37
+ grid-template-rows: repeat(var(--cs-layout-r, 8), minmax(0px, 1fr));
38
+
39
+ //
40
+ & > :where(.ui-ws-item, [data-launcher-item]) {
41
+ @include compute_grid_item_cell();
42
+ --f-col: clamp(1, var(--sd-inherit-layout-c, var(--layout-c, 4)), 16);
43
+ --f-row: clamp(1, var(--sd-inherit-layout-r, var(--layout-r, 8)), 16);
44
+ pointer-events: auto;
45
+ }
46
+ }
47
+ }
@@ -0,0 +1,4 @@
1
+ /*
2
+ * MAP:modules/projects/veela.css/src/scss/basic/_states.scss
3
+ */
4
+ @forward "../basic/states";
@@ -0,0 +1,28 @@
1
+ @use "./layout" as layout;
2
+
3
+ //
4
+ @mixin table-base {
5
+ inline-size: stretch;
6
+ border-collapse: collapse;
7
+ border-radius: var(--radius-md);
8
+ overflow: hidden;
9
+ box-shadow: var(--shadow-md);
10
+ }
11
+
12
+ //
13
+ @mixin table-header {
14
+ background-color: var(--gradient-primary);
15
+ color: var(--text-light);
16
+ padding: var(--space-md) var(--space-sm);
17
+ text-align: start;
18
+ font-weight: var(--font-weight-semibold);
19
+ font-size: var(--font-size-sm);
20
+ white-space: nowrap;
21
+ }
22
+
23
+ //
24
+ @mixin table-cell {
25
+ padding: var(--space-sm);
26
+ border-block-end: 1px solid var(--bg-tertiary);
27
+ vertical-align: middle;
28
+ }