@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,167 @@
1
+ // Toolbar Components - Refactored and Optimized
2
+ // Unified with design system variables and mixins
3
+
4
+ @use "../basic/layout" as layout;
5
+ @use "../core/mixins" as core;
6
+ @use "./buttons" as button;
7
+ @use "./chrome-mixins" as ui;
8
+
9
+ //
10
+ @mixin toolbar {
11
+
12
+ .toolbar {
13
+ background-color: transparent;
14
+ display: flex;
15
+ flex-direction: column;
16
+ block-size: stretch;
17
+ inline-size: stretch;
18
+ max-inline-size: stretch;
19
+ grid-row: toolbar;
20
+ box-shadow: none;
21
+ padding: 0px;
22
+ max-block-size: min(3rem, 100%);;
23
+ min-block-size: stretch;
24
+ }
25
+
26
+ .view-toolbar {
27
+ background: transparent;
28
+ position: sticky;
29
+ inset-block-start: 0;
30
+ z-index: 10;
31
+ padding: 0px;
32
+
33
+ justify-content: flex-start;
34
+ place-content: center;
35
+ place-items: center;
36
+ place-self: center;
37
+ pointer-events: none;
38
+ inline-size: stretch;
39
+ max-inline-size: stretch;
40
+ max-block-size: min(3rem, 100%);
41
+ min-block-size: stretch;
42
+
43
+ box-sizing: border-box;
44
+ box-shadow: none;
45
+
46
+ //
47
+ @include ui.inline-toolbar(var(--gap-xs));
48
+ @include ui.tonal-surface(surface, var(--surface-opacity-subtle), var(--radius-lg), null, 1);
49
+ @include ui.backdrop-blur("subtle");
50
+ @include layout.container-clamped(stretch, max-content);
51
+
52
+ //
53
+ & { min-block-size: 0px; block-size: stretch; max-block-size: min(3rem, 100%); }
54
+ & { min-inline-size: 0px; inline-size: stretch; max-inline-size: stretch; }
55
+ & {
56
+ margin: 0px;
57
+ margin-inline: 0px;
58
+ box-shadow: none;
59
+ background-color: transparent;
60
+ padding: 0px;
61
+ padding-inline: 0px;
62
+ padding-block: 0px;
63
+ }
64
+
65
+ //
66
+ &:empty {
67
+ display: none;
68
+ }
69
+
70
+ .button-set {
71
+ @include ui.inline-toolbar(var(--gap-md));
72
+ @include ui.tonal-surface(surface-container, var(--surface-opacity-subtle, 0.00), var(--radius-lg), 0px);
73
+ @include layout.container-clamped(stretch, stretch);
74
+
75
+ //
76
+ flex-wrap: nowrap;
77
+ padding: 0px;
78
+ padding-inline: 0.25rem;
79
+ padding-block: 0.25rem;
80
+ inline-size: stretch;
81
+ block-size: stretch;
82
+
83
+ //
84
+ &:empty { display: none; }
85
+ & { min-block-size: 3rem; block-size: stretch; max-block-size: 3rem; }
86
+ & { min-inline-size: 0px; inline-size: stretch; max-inline-size: stretch; }
87
+
88
+ //
89
+ button {
90
+ max-block-size: stretch;
91
+ border-radius: var(--radius-full);
92
+ padding: 0px;
93
+ pointer-events: auto;
94
+ touch-action: none;
95
+
96
+ //
97
+ @include ui.tonal-surface(surface-container, calc(var(--surface-opacity-subtle, 0.00) + 0.02), var(--radius-lg), 0px);
98
+ @include ui.inline-toolbar(var(--gap-sm));
99
+ @include button.toolbar-button;
100
+ @include core.flex-center;
101
+
102
+ //
103
+ & {
104
+ min-inline-size: 2.5rem;
105
+ min-block-size: 2.75rem;
106
+ inline-size: max-content;
107
+ block-size: stretch;
108
+ touch-action: manipulation;
109
+ flex-direction: row;
110
+ flex-wrap: nowrap;
111
+ max-inline-size: stretch;
112
+ padding: 0.5rem;
113
+ padding-block: 0px;
114
+ padding-inline: 0.5rem;
115
+ max-block-size: stretch;
116
+ flex-shrink: 0;
117
+ }
118
+
119
+ //
120
+ ui-icon {
121
+ padding: 0rem;
122
+ --icon-size: clamp(1.25rem, 5.5vmin, 1.75rem);
123
+ font-size: var(--icon-size);
124
+ block-size: auto;
125
+ inline-size: auto;
126
+ min-inline-size: 1.25rem;
127
+ min-block-size: 1.25rem;
128
+ max-block-size: none;
129
+ }
130
+
131
+ //
132
+ span {
133
+ display: block;
134
+ color: color-mix(in oklch, var(--on-surface, currentColor) var(--text-tint-primary, 92%), transparent);
135
+ padding-inline-end: 0.25rem;
136
+ max-inline-size: stretch;
137
+ inline-size: fit-content;
138
+ min-inline-size: fit-content;
139
+ padding-block: 0px;
140
+
141
+ @include ui.text-body("body-small");
142
+ }
143
+ }
144
+ }
145
+
146
+ // Mobile optimizations
147
+ @include core.breakpoint("md") {
148
+ justify-content: center;
149
+
150
+ .button-set {
151
+ justify-content: center;
152
+ inline-size: stretch;
153
+ }
154
+ }
155
+
156
+ //
157
+ @container (inline-size >= 60rem) {
158
+ button span { display: none !important; }
159
+ }
160
+
161
+ //
162
+ @container (inline-size <= 600px) {
163
+ button span { display: none !important; };
164
+ }
165
+ }
166
+
167
+ }
@@ -0,0 +1,11 @@
1
+ @function md3-type($role, $token: size) {
2
+ @return var(--type-#{$role}-#{$token}, inherit);
3
+ }
4
+
5
+ @mixin type($role) {
6
+ font: var(--type-#{$role}, inherit);
7
+ }
8
+
9
+ @mixin text-wrap() {
10
+ overflow-wrap: anywhere;
11
+ }
@@ -0,0 +1,8 @@
1
+ @mixin visually-hidden() {
2
+ position: absolute;
3
+ inline-size: 1px;
4
+ block-size: 1px;
5
+ overflow: hidden;
6
+ clip-path: inset(50%);
7
+ white-space: nowrap;
8
+ }
@@ -0,0 +1,470 @@
1
+ @use "../core/functions" as lg;
2
+ @use "sass:list";
3
+ @use "sass:string";
4
+ @use "sass:meta";
5
+
6
+ //
7
+ // 2D shorthand helpers
8
+ @function v2-suffix($suffix) {
9
+ @if $suffix == null or $suffix == "" { @return ""; }
10
+
11
+ $value: #{$suffix};
12
+ @if string.slice($value, 1, 1) == "-" {
13
+ @return string.unquote($value);
14
+ }
15
+
16
+ @return string.unquote("-#{$value}");
17
+ }
18
+
19
+ @mixin v2-pair($token, $first-value, $second-value, $axes: ("x", "y")) {
20
+ $first-suffix: v2-suffix(list.nth($axes, 1));
21
+ $second-suffix: v2-suffix(list.nth($axes, 2));
22
+
23
+ --#{$token}#{$first-suffix}: #{$first-value};
24
+ --#{$token}#{$second-suffix}: #{$second-value};
25
+ }
26
+
27
+ @function v2-size($axis, $primary, $secondary, $orient: var(--orient, 0)) {
28
+ @return string.unquote("--get-oriented-size(#{$orient}, #{$primary}, #{$secondary}, #{$axis})");
29
+ }
30
+
31
+ @function v2-size-num($axis, $primary, $secondary, $orient: var(--orient, 0)) {
32
+ @return string.unquote("--get-oriented-size-num(#{$orient}, #{$primary}, #{$secondary}, #{$axis})");
33
+ }
34
+
35
+ @function v2-coord($axis, $first, $second, $size-x, $size-y, $orient: var(--orient, 0)) {
36
+ @return string.unquote("--get-oriented-coordinate(#{$orient}, #{$first}, #{$second}, #{$size-x}, #{$size-y}, #{$axis})");
37
+ }
38
+
39
+ @function v2-coord-num($axis, $first, $second, $max-x, $max-y, $orient: var(--orient, 0)) {
40
+ @return string.unquote("--get-oriented-coord-num(#{$orient}, #{$first}, #{$second}, #{$max-x}, #{$max-y}, #{$axis})");
41
+ }
42
+
43
+ @function v2-vec($axis, $first, $second, $orient: var(--orient, 0)) {
44
+ @return string.unquote("--get-oriented-vector(#{$orient}, #{$first}, #{$second}, #{$axis})");
45
+ }
46
+
47
+ @function v2-pick($value, $index, $fallback: null) {
48
+ @if meta.type-of($value) != "list" {
49
+ @return if(
50
+ sass($index == 1): $value;
51
+ else: $fallback;
52
+ );
53
+ }
54
+
55
+ @if list.length($value) < $index {
56
+ @return $fallback;
57
+ }
58
+
59
+ @return list.nth($value, $index);
60
+ }
61
+
62
+ @mixin v2-size-pair($token, $axis-0, $axis-1: $axis-0, $axes: ("x", "y"), $orient: var(--orient, 0)) {
63
+ $a0-primary: v2-pick($axis-0, 1);
64
+ $a0-secondary: v2-pick($axis-0, 2);
65
+ $a1-primary: v2-pick($axis-1, 1, $a0-primary);
66
+ $a1-secondary: v2-pick($axis-1, 2, $a0-secondary);
67
+
68
+ @include v2-pair(
69
+ $token,
70
+ v2-size(0, $a0-primary, $a0-secondary, $orient),
71
+ v2-size(1, $a1-primary, $a1-secondary, $orient),
72
+ $axes
73
+ );
74
+ }
75
+
76
+ @mixin v2-size-num-pair($token, $axis-0, $axis-1: $axis-0, $axes: ("x", "y"), $orient: var(--orient, 0)) {
77
+ $a0-primary: v2-pick($axis-0, 1);
78
+ $a0-secondary: v2-pick($axis-0, 2);
79
+ $a1-primary: v2-pick($axis-1, 1, $a0-primary);
80
+ $a1-secondary: v2-pick($axis-1, 2, $a0-secondary);
81
+
82
+ @include v2-pair(
83
+ $token,
84
+ v2-size-num(0, $a0-primary, $a0-secondary, $orient),
85
+ v2-size-num(1, $a1-primary, $a1-secondary, $orient),
86
+ $axes
87
+ );
88
+ }
89
+
90
+ @mixin v2-coord-pair($token, $axis-0, $axis-1: $axis-0, $axes: ("x", "y"), $orient: var(--orient, 0)) {
91
+ $a0-first: v2-pick($axis-0, 1);
92
+ $a0-second: v2-pick($axis-0, 2);
93
+ $a0-size-x: v2-pick($axis-0, 3);
94
+ $a0-size-y: v2-pick($axis-0, 4);
95
+
96
+ $a1-first: v2-pick($axis-1, 1, $a0-first);
97
+ $a1-second: v2-pick($axis-1, 2, $a0-second);
98
+ $a1-size-x: v2-pick($axis-1, 3, $a0-size-x);
99
+ $a1-size-y: v2-pick($axis-1, 4, $a0-size-y);
100
+
101
+ @include v2-pair(
102
+ $token,
103
+ v2-coord(0, $a0-first, $a0-second, $a0-size-x, $a0-size-y, $orient),
104
+ v2-coord(1, $a1-first, $a1-second, $a1-size-x, $a1-size-y, $orient),
105
+ $axes
106
+ );
107
+ }
108
+
109
+ @mixin v2-coord-num-pair($token, $axis-0, $axis-1: $axis-0, $axes: ("x", "y"), $orient: var(--orient, 0)) {
110
+ $a0-first: v2-pick($axis-0, 1);
111
+ $a0-second: v2-pick($axis-0, 2);
112
+ $a0-max-x: v2-pick($axis-0, 3);
113
+ $a0-max-y: v2-pick($axis-0, 4);
114
+
115
+ $a1-first: v2-pick($axis-1, 1, $a0-first);
116
+ $a1-second: v2-pick($axis-1, 2, $a0-second);
117
+ $a1-max-x: v2-pick($axis-1, 3, $a0-max-x);
118
+ $a1-max-y: v2-pick($axis-1, 4, $a0-max-y);
119
+
120
+ @include v2-pair(
121
+ $token,
122
+ v2-coord-num(0, $a0-first, $a0-second, $a0-max-x, $a0-max-y, $orient),
123
+ v2-coord-num(1, $a1-first, $a1-second, $a1-max-x, $a1-max-y, $orient),
124
+ $axes
125
+ );
126
+ }
127
+
128
+ @mixin v2-vec-pair($token, $axis-0, $axis-1: $axis-0, $axes: ("x", "y"), $orient: var(--orient, 0)) {
129
+ $a0-first: v2-pick($axis-0, 1);
130
+ $a0-second: v2-pick($axis-0, 2);
131
+ $a1-first: v2-pick($axis-1, 1, $a0-first);
132
+ $a1-second: v2-pick($axis-1, 2, $a0-second);
133
+
134
+ @include v2-pair(
135
+ $token,
136
+ v2-vec(0, $a0-first, $a0-second, $orient),
137
+ v2-vec(1, $a1-first, $a1-second, $orient),
138
+ $axes
139
+ );
140
+ }
141
+
142
+ @mixin oriented($property, $portrait, $landscape) {
143
+ & { #{$property}: #{$portrait}; }
144
+ @media (orientation: portrait) { #{$property}: #{$portrait}; }
145
+ @media (orientation: landscape) { #{$property}: #{$landscape}; }
146
+ }
147
+
148
+
149
+ //
150
+ @function inverse-orient($orient) {
151
+ @return mod(calc(4 - $orient), 4);
152
+ }
153
+
154
+
155
+ //
156
+ @mixin compute_os_conditions {
157
+ & {
158
+ --in-orient-base: round(nearest, var(--orient, 0), 1);
159
+ --in-rev-cond-x: clamp(0, calc(var(--in-orient-base, 0) - 1), 1);
160
+ --in-rev-cond-y: clamp(0, calc((1 - abs(calc(var(--in-orient-base, 0) - 1.5))) * 2), 1);
161
+ --in-swap-cond: #{css-rem(var(--orient, 0), 2)};
162
+ --in-rev-vx: calc(var(--in-rev-cond-x, 1) * -2 + 1);
163
+ --in-rev-vy: calc(var(--in-rev-cond-y, 1) * -2 + 1);
164
+ }
165
+ }
166
+
167
+
168
+
169
+ @mixin compute_cs_size_to_os {
170
+ $orient: #{inverse-orient(var(--orient, 0))};
171
+
172
+ & {
173
+ @include v2-size-pair(
174
+ "os-size",
175
+ (var(--cs-size-x, 100cqi), var(--cs-size-y, 100cqb)),
176
+ (var(--cs-size-x, 100cqb), var(--cs-size-y, 100cqi)),
177
+ $orient: $orient
178
+ );
179
+
180
+ @include v2-size-pair(
181
+ "os-self-size",
182
+ (var(--cs-self-size-x, 100%), var(--cs-self-size-y, 100%)),
183
+ $orient: $orient
184
+ );
185
+ }
186
+ }
187
+
188
+ @mixin compute_from_cs_to_os {
189
+ $orient: #{inverse-orient(var(--orient, 0))};
190
+
191
+ & {
192
+ @include v2-coord-pair(
193
+ "os-inset",
194
+ (var(--cs-inset-x, 0px), var(--cs-inset-y, 0px), var(--cs-size-x, 100cqi), var(--cs-size-y, 100cqb)),
195
+ $orient: $orient
196
+ );
197
+
198
+ @include v2-vec-pair(
199
+ "os-drag",
200
+ (var(--cs-drag-x, 0px), var(--cs-drag-y, 0px)),
201
+ $orient: $orient
202
+ );
203
+ }
204
+ }
205
+
206
+
207
+
208
+ @mixin compute_os_size_to_cs {
209
+ $orient: var(--orient, 0);
210
+
211
+ & {
212
+ @include v2-size-pair(
213
+ "cs-size",
214
+ (var(--os-size-x, 100cqb), var(--os-size-y, 100cqi)),
215
+ (var(--os-size-x, 100cqi), var(--os-size-y, 100cqb)),
216
+ $orient: $orient
217
+ );
218
+
219
+ @include v2-size-pair(
220
+ "cs-self-size",
221
+ (var(--os-self-size-x, 100%), var(--os-self-size-y, 100%)),
222
+ $orient: $orient
223
+ );
224
+ }
225
+ }
226
+
227
+ @mixin compute_from_os_to_cs {
228
+ $orient: var(--orient, 0);
229
+
230
+ & {
231
+ @include v2-coord-pair(
232
+ "cs-inset",
233
+ (var(--os-inset-x, 0px), var(--os-inset-y, 0px), var(--os-size-x, 100cqi), var(--os-size-y, 100cqb)),
234
+ $orient: $orient
235
+ );
236
+
237
+ @include v2-vec-pair(
238
+ "cs-drag",
239
+ (var(--os-drag-x, 0px), var(--os-drag-y, 0px)),
240
+ $orient: $orient
241
+ );
242
+ }
243
+ }
244
+
245
+
246
+ @mixin portrait-size {
247
+ --cqi: 100cqmin;
248
+ --cqb: 100cqmax;
249
+ }
250
+
251
+ @mixin landscape-size {
252
+ --cqi: 100cqmax;
253
+ --cqb: 100cqmin;
254
+ }
255
+
256
+ @mixin init-os-size-by-native {
257
+ @include v2-pair("os-size", var(--cqi, 100cqi), var(--cqb, 100cqb));
258
+ }
259
+
260
+ @mixin init-cs-size {
261
+ @include v2-pair("cs-size", 100cqi, 100cqb);
262
+ }
263
+
264
+ @mixin centered-self($transforms: null) {
265
+ transform-origin: 0% 0%;
266
+ transform:
267
+ #{$transforms}
268
+ scale3d(var(--scale, 1), var(--scale, 1), var(--scale, 1))
269
+ #{perfect-translate(calc(var(--translate-x, 0px) - 50%), calc(var(--translate-y, 0px) - 50%))};
270
+ place-self: center;
271
+ }
272
+
273
+ @mixin centered-with-offset {
274
+ $translate: #{perfect-translate(var(--cs-drag-x, 0px), var(--cs-drag-y, 0px))};
275
+ @include centered-self($translate);
276
+ }
277
+
278
+ @mixin use-inset {
279
+ inset: var(--cs-inset-y, 0px) auto auto var(--cs-inset-x, 0px);
280
+ }
281
+
282
+ //
283
+ @mixin use_dvp {
284
+ & { --avi: 100dvmin; --avb: 100dvmax; };
285
+ & {
286
+ --vp-i-size: var(--avi, 100dvmin);
287
+ --vp-b-size: var(--avb, 100dvmax);
288
+ }
289
+ }
290
+
291
+ //
292
+ @mixin use_lvp {
293
+ & { --avi: 100lvmin; --avb: 100lvmax; };
294
+ & {
295
+ --vp-i-size: var(--avi, 100lvmin);
296
+ --vp-b-size: var(--avb, 100lvmax);
297
+ }
298
+ }
299
+
300
+
301
+ //
302
+ @mixin when-fullscreen($selector: &) {
303
+ @media (display-mode: fullscreen) { @content; }
304
+ @at-root :fullscreen #{$selector} { @content; }
305
+ }
306
+
307
+ //
308
+ @mixin vp-vars {
309
+ @include use_dvp();
310
+ @include when-fullscreen() {
311
+ @include use_lvp();
312
+ & {
313
+ --vp-i-size: min(var(--avail-width, 100dvmin), 100dvmin);
314
+ --vp-b-size: min(var(--avail-height, 100dvmax), 100dvmax);
315
+ }
316
+ }
317
+ };
318
+
319
+ //
320
+ @mixin fit-viewport {
321
+ @include vp-vars;
322
+ & {
323
+ @include oriented(inline-size, var(--vp-i-size, 100lvi), var(--vp-b-size, 100lvb));
324
+ @include oriented(block-size, var(--vp-b-size, 100lvb), var(--vp-i-size, 100lvi));
325
+ @include oriented(max-inline-size, var(--vp-i-size, 100lvi), var(--vp-b-size, 100lvb));
326
+ @include oriented(max-block-size, var(--vp-b-size, 100lvb), var(--vp-i-size, 100lvi));
327
+ }
328
+ };
329
+
330
+ //
331
+ @function perfect-translate($x: 0px, $y: 0px) {
332
+ @return translate3d(round(nearest, #{$x}, calc(1px / var(--pixel-ratio, 1))), round(nearest, #{$y}, calc(1px / var(--pixel-ratio, 1))), 0);
333
+ }
334
+
335
+ //
336
+ @mixin compute_grid_item_cell() {
337
+ /* WHY: `v2-coord-num` maps logical `--cell-x`/`--cell-y` into physical `cs-grid-*` using `--orient` from the launcher / `ui-orientbox` host; without inherit, items see initial `0` and placement ignores rotation. */
338
+ & {
339
+ --orient: inherit;
340
+ }
341
+
342
+ // hack: use translate diff shifting for correct animation for CSS Grid Layout
343
+ & { // currently, I have no viable solution for correct animation for CSS Grid Layout
344
+ @include v2-pair(
345
+ "cs-sw-unit",
346
+ calc(var(--cs-size-x, 100cqi) / var(--cs-layout-c, 1)),
347
+ calc(var(--cs-size-y, 100cqb) / var(--cs-layout-r, 1))
348
+ );
349
+ }
350
+
351
+ & {
352
+ @include v2-pair(
353
+ "cs-transition",
354
+ 0px,
355
+ 0px,
356
+ ("c", "r")
357
+ );
358
+ }
359
+
360
+ &[data-dragging] {
361
+ //
362
+ @include v2-pair(
363
+ "cs-transition",
364
+ calc((var(--rv-grid-c, 0) - var(--cs-grid-c, 0)) * var(--cs-sw-unit-x, 1px)),
365
+ calc((var(--rv-grid-r, 0) - var(--cs-grid-r, 0)) * var(--cs-sw-unit-y, 1px)),
366
+ ("c", "r")
367
+ );
368
+ }
369
+
370
+ & {
371
+ @include v2-pair("p-cell", var(--cell-x), var(--cell-y));
372
+
373
+ // CLAMPED GRID
374
+ --f-col: clamp(1, var(--layout-c, 4), 16);
375
+ --f-row: clamp(1, var(--layout-r, 8), 16);
376
+
377
+ //
378
+ @include v2-pair(
379
+ "grid",
380
+ clamp(0, var(--cell-x), calc(var(--f-col) - 1)),
381
+ clamp(0, var(--cell-y), calc(var(--f-row) - 1)),
382
+ ("c", "r")
383
+ );
384
+
385
+ //
386
+ @include v2-pair(
387
+ "p-grid",
388
+ clamp(0, var(--p-cell-x), calc(var(--f-col) - 1)),
389
+ clamp(0, var(--p-cell-y), calc(var(--f-row) - 1)),
390
+ ("c", "r")
391
+ );
392
+
393
+ //
394
+ @include v2-pair(
395
+ "fc-cell",
396
+ clamp(0, var(--cs-grid-c, 0), calc(var(--f-col) - 1)),
397
+ clamp(0, var(--cs-grid-r, 0), calc(var(--f-row) - 1))
398
+ );
399
+
400
+ //
401
+ @include v2-pair(
402
+ "fp-cell",
403
+ clamp(0, var(--cs-p-grid-c, 0), calc(var(--f-col) - 1)),
404
+ clamp(0, var(--cs-p-grid-r, 0), calc(var(--f-row) - 1))
405
+ );
406
+
407
+ //
408
+ @include v2-pair(
409
+ "dir",
410
+ calc(var(--cs-grid-c, 0) - var(--cs-p-grid-c, 0)),
411
+ calc(var(--cs-grid-r, 0) - var(--cs-p-grid-r, 0))
412
+ );
413
+ }
414
+
415
+ //
416
+ & { @include v2-pair("rv-grid", var(--cs-grid-c, 1), var(--cs-grid-r, 1), ("c", "r")); }
417
+ &[data-dragging] { @include v2-pair("rv-grid", var(--cs-p-grid-c, 1), var(--cs-p-grid-r, 1), ("c", "r")); }
418
+
419
+ //
420
+ & {
421
+ @include v2-pair("os-grid", var(--grid-c, 1), var(--grid-r, 1), ("c", "r"));
422
+ @include v2-coord-num-pair(
423
+ "cs-grid",
424
+ (var(--os-grid-c, 1), var(--os-grid-r, 1), calc(var(--f-col, 1) - 1), calc(var(--f-row, 1) - 1)),
425
+ $axes: ("c", "r")
426
+ );
427
+ }
428
+
429
+ //
430
+ & {
431
+ @include v2-pair("os-p-grid", var(--p-cell-x, 0), var(--p-cell-y, 0), ("c", "r"));
432
+ @include v2-coord-num-pair(
433
+ "cs-p-grid",
434
+ (var(--os-p-grid-c, 0), var(--os-p-grid-r, 0), calc(var(--f-col, 1) - 1), calc(var(--f-row, 1) - 1)),
435
+ $axes: ("c", "r")
436
+ );
437
+ }
438
+
439
+ & {
440
+ @include v2-pair(
441
+ "ox",
442
+ calc(var(--os-size-x, 100cqi) / var(--os-layout-c, 1)),
443
+ calc(var(--os-size-y, 100cqb) / var(--os-layout-r, 1)),
444
+ ("c-unit", "r-unit")
445
+ );
446
+
447
+ //
448
+ @include v2-pair(
449
+ "os-inset",
450
+ calc((var(--grid-c, 1) + 0.5) * var(--ox-c-unit, 1px)),
451
+ calc((var(--grid-r, 1) + 0.5) * var(--ox-r-unit, 1px))
452
+ );
453
+ }
454
+ }
455
+
456
+ //
457
+ @mixin compute_orient_grid_layout() {
458
+ & {
459
+ @include v2-pair("os-layout", var(--layout-c, 4), var(--layout-r, 8), ("c", "r"));
460
+ @include v2-size-num-pair(
461
+ "cs-layout",
462
+ (var(--os-layout-c, 4), var(--os-layout-r, 8)),
463
+ $axes: ("c", "r")
464
+ );
465
+ }
466
+ }
467
+
468
+ // :root `--vv-*` is the visual viewport (IME may shrink it).
469
+ // `--lv-width` / `--lv-height` / `--view-height` stay on the layout viewport
470
+ // (fest/dom `getAvailSize()` / `updateVP()` — see `whenAnyScreenChanges`).