@fest-lib/veela 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 (78) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +533 -0
  3. package/dist/veela.js +878 -0
  4. package/package.json +83 -0
  5. package/src/scss/_layers.scss +16 -0
  6. package/src/scss/advanced/_index.scss +0 -0
  7. package/src/scss/advanced/animation/_motion.scss +317 -0
  8. package/src/scss/advanced/color/_color.scss +328 -0
  9. package/src/scss/advanced/color/_colorize.scss +325 -0
  10. package/src/scss/advanced/design/_design-tokens.scss +118 -0
  11. package/src/scss/advanced/design/_effects.scss +275 -0
  12. package/src/scss/advanced/design/_shadow.scss +359 -0
  13. package/src/scss/advanced/design/_surfaces.scss +76 -0
  14. package/src/scss/advanced/effects/_animations.scss +124 -0
  15. package/src/scss/advanced/effects/_shadows.scss +50 -0
  16. package/src/scss/advanced/font/_typography.scss +600 -0
  17. package/src/scss/advanced/index.scss +11 -0
  18. package/src/scss/advanced/index.ts +35 -0
  19. package/src/scss/advanced/layout/_content.scss +170 -0
  20. package/src/scss/advanced/layout/_index.scss +5 -0
  21. package/src/scss/advanced/layout/_normalize.scss +541 -0
  22. package/src/scss/advanced/layout/_shared-overlays.scss +162 -0
  23. package/src/scss/advanced/md3/_md3.scss +596 -0
  24. package/src/scss/advanced/md3/_utils.scss +114 -0
  25. package/src/scss/advanced/misc/_config.scss +119 -0
  26. package/src/scss/advanced/misc/_initials.scss +298 -0
  27. package/src/scss/advanced/misc/_mixins.scss +179 -0
  28. package/src/scss/advanced/misc/_queries.scss +34 -0
  29. package/src/scss/advanced/misc/_rendering.scss +82 -0
  30. package/src/scss/advanced/misc/_tokens.scss +74 -0
  31. package/src/scss/advanced/theme/_shared.scss +232 -0
  32. package/src/scss/advanced/theme/_states.scss +332 -0
  33. package/src/scss/advanced/theme/_variants.scss +354 -0
  34. package/src/scss/advanced/tokens/_material-color.scss +120 -0
  35. package/src/scss/advanced/tokens/_variables.scss +171 -0
  36. package/src/scss/basic/_layers.scss +0 -0
  37. package/src/scss/basic/design/_index.scss +3 -0
  38. package/src/scss/basic/design/_keyframes.scss +163 -0
  39. package/src/scss/basic/design/_shapes.scss +266 -0
  40. package/src/scss/basic/design/_wavy-runtime.scss +50 -0
  41. package/src/scss/basic/index.scss +19 -0
  42. package/src/scss/basic/index.ts +29 -0
  43. package/src/scss/basic/misc/_core-layout.scss +272 -0
  44. package/src/scss/basic/misc/_index.scss +18 -0
  45. package/src/scss/basic/misc/_layout.scss +1040 -0
  46. package/src/scss/basic/misc/_mixins.scss +179 -0
  47. package/src/scss/basic/misc/_motion.scss +28 -0
  48. package/src/scss/basic/misc/_normalize.scss +765 -0
  49. package/src/scss/basic/misc/_queries.scss +34 -0
  50. package/src/scss/basic/misc/_shared.scss +232 -0
  51. package/src/scss/basic/misc/_states.scss +135 -0
  52. package/src/scss/basic/misc/_tokens.scss +78 -0
  53. package/src/scss/basic/misc/_veela.scss +12 -0
  54. package/src/scss/core/index.scss +1 -0
  55. package/src/scss/core/interact/_draggable.scss +32 -0
  56. package/src/scss/core/interact/_position.scss +45 -0
  57. package/src/scss/core/interact/_ps-anchor.scss +28 -0
  58. package/src/scss/core/interact/_ps-centered.scss +28 -0
  59. package/src/scss/core/interact/_ps-cursor.scss +18 -0
  60. package/src/scss/core/interact/_ps-draggable.scss +25 -0
  61. package/src/scss/core/interact/_ps-mechanic.scss +0 -0
  62. package/src/scss/core/interact/_ps-properties.scss +54 -0
  63. package/src/scss/core/interact/_ps-resizable.scss +61 -0
  64. package/src/scss/core/interact/_resizable.scss +69 -0
  65. package/src/scss/core/interact/_viewport.scss +469 -0
  66. package/src/scss/core/misc/_color-properties.scss +64 -0
  67. package/src/scss/core/misc/_config.scss +110 -0
  68. package/src/scss/core/misc/_functions.scss +530 -0
  69. package/src/scss/core/misc/_icons.scss +109 -0
  70. package/src/scss/core/misc/_index.scss +6 -0
  71. package/src/scss/core/misc/_layout.scss +49 -0
  72. package/src/scss/core/misc/_mixins.scss +744 -0
  73. package/src/scss/core/misc/_properties.scss +245 -0
  74. package/src/scss/core/misc/_tokens.scss +947 -0
  75. package/src/scss/core/misc/_utilities.scss +941 -0
  76. package/src/scss/core/misc/_utils.scss +17 -0
  77. package/src/scss/index.scss +18 -0
  78. package/src/scss/index.ts +105 -0
@@ -0,0 +1,34 @@
1
+ // Query utilities: container and media helpers with shared breakpoints
2
+
3
+ $breakpoints: (
4
+ "sm": 480px,
5
+ "md": 640px,
6
+ "lg": 768px,
7
+ "xl": 1024px,
8
+ "2xl": 1280px
9
+ );
10
+
11
+ @mixin mq($cond) {
12
+ @media #{$cond} { @content; }
13
+ }
14
+
15
+ @mixin mq-up($key) {
16
+ $val: map-get($breakpoints, $key);
17
+ @media (min-width: $val) { @content; }
18
+ }
19
+
20
+ @mixin mq-down($key) {
21
+ $val: map-get($breakpoints, $key);
22
+ @media (max-width: $val) { @content; }
23
+ }
24
+
25
+ @mixin cq($cond) {
26
+ @container #{$cond} { @content; }
27
+ }
28
+
29
+ @mixin cq-size($min: null, $max: null) {
30
+ $parts: ();
31
+ @if $min != null { $parts: append($parts, '(min-inline-size: ' + $min + ')'); }
32
+ @if $max != null { $parts: append($parts, '(max-inline-size: ' + $max + ')'); }
33
+ @container #{join($parts, ' and ')} { @content; }
34
+ }
@@ -0,0 +1,232 @@
1
+ /**
2
+ * Veela CSS - Core Shared Utilities
3
+ *
4
+ * Reusable mixins, placeholders, and common patterns for core layout styles.
5
+ * Reduces duplication across normalize, states, layout, and gridbox modules.
6
+ */
7
+
8
+ /* ========================================================================
9
+ Meta-level: Placeholders for zero-specificity selector groups
10
+ ======================================================================== */
11
+
12
+ /**
13
+ * Reset border and outline styles (transparent, none, 0px)
14
+ * Use: @extend %reset-borders; or include in selectors
15
+ */
16
+ %reset-borders {
17
+ border: none 0px transparent;
18
+ outline: none 0px transparent;
19
+ }
20
+
21
+ /**
22
+ * Disable user interaction (pointer-events, touch-action, user-select)
23
+ * Use: @extend %disable-interaction;
24
+ */
25
+ %disable-interaction {
26
+ pointer-events: none;
27
+ touch-action: none;
28
+ user-select: none;
29
+ }
30
+
31
+ /**
32
+ * Lock interaction (pointer-events: none + touch + select disabled)
33
+ * Stronger version with explicit !important for state overrides
34
+ */
35
+ %lock-interaction {
36
+ pointer-events: none !important;
37
+ touch-action: none !important;
38
+ user-select: none !important;
39
+ }
40
+
41
+ /**
42
+ * Basic box-model reset: margin, padding, box-sizing
43
+ */
44
+ %reset-box-model {
45
+ margin: 0;
46
+ padding: 0;
47
+ box-sizing: border-box;
48
+ }
49
+
50
+ /* ========================================================================
51
+ Mixins: Common property/style groups
52
+ ======================================================================== */
53
+
54
+ /**
55
+ * Reset box model (margin, padding, sizing)
56
+ * @usage: @include reset-box-model();
57
+ */
58
+ @mixin reset-box-model {
59
+ /*margin: 0;
60
+ padding: 0;*/
61
+ box-sizing: border-box;
62
+ }
63
+
64
+ /**
65
+ * Reset borders and outlines
66
+ * @usage: @include reset-borders();
67
+ */
68
+ @mixin reset-borders {
69
+ border: none 0px transparent;
70
+ outline: none 0px transparent;
71
+ }
72
+
73
+ /**
74
+ * Disable interaction via pointer-events, touch-action, user-select
75
+ * @param $importance [false] - if true, use !important
76
+ * @usage: @include disable-interaction(); or @include disable-interaction(true);
77
+ */
78
+ @mixin disable-interaction($importance: false) {
79
+ $imp: if(sass($importance): !important; else: null);
80
+ pointer-events: none if(sass($imp != null): #{$imp}; else: null);
81
+ touch-action: none if(sass($imp != null): #{$imp}; else: null);
82
+ user-select: none if(sass($imp != null): #{$imp}; else: null);
83
+ }
84
+
85
+ /**
86
+ * Reset form element appearance (font, line-height, margin, text-transform)
87
+ * @usage: @include reset-form-appearance();
88
+ */
89
+ @mixin reset-form-appearance {
90
+ font: inherit;
91
+ color: inherit;
92
+ letter-spacing: inherit;
93
+ margin: 0;
94
+ border: none;
95
+ outline: none;
96
+ }
97
+
98
+ /**
99
+ * Scrollbar styling for webkit browsers
100
+ * @param $size [8px] - scrollbar width/height
101
+ * @param $color [var(--color-scrollbar, currentColor)] - thumb color
102
+ * @param $radius [var(--border-radius, 4px)] - thumb border-radius
103
+ * @usage: @include scrollbar-webkit(8px, var(--color-scrollbar));
104
+ */
105
+ @mixin scrollbar-webkit($size: 8px, $color: var(--color-scrollbar, currentColor), $radius: var(--border-radius, 4px)) {
106
+ &::-webkit-scrollbar {
107
+ inline-size: $size;
108
+ block-size: $size;
109
+ }
110
+
111
+ &::-webkit-scrollbar-track {
112
+ background: transparent;
113
+ }
114
+
115
+ &::-webkit-scrollbar-thumb {
116
+ background-color: $color;
117
+ border-radius: $radius;
118
+ }
119
+
120
+ &::-webkit-scrollbar-thumb:hover {
121
+ background: var(--color-outline, #9ca3af);
122
+ }
123
+ }
124
+
125
+ /**
126
+ * Scrollbar styling (both webkit and Firefox)
127
+ * @param $color [var(--color-scrollbar, currentColor)] - scrollbar color
128
+ * @usage: @include scrollbar-styling(var(--color-scrollbar));
129
+ */
130
+ @mixin scrollbar-styling($color: var(--color-scrollbar, currentColor)) {
131
+ scrollbar-width: thin;
132
+ scrollbar-color: $color transparent;
133
+
134
+ @include scrollbar-webkit(var(--scrollbar-size, 8px), $color);
135
+ }
136
+
137
+ /**
138
+ * Flex row layout with space-between and wrap
139
+ * Used for nav-like layouts
140
+ * @usage: @include flex-row-wrap();
141
+ */
142
+ @mixin flex-row-wrap {
143
+ display: flex;
144
+ align-items: center;
145
+ justify-content: space-between;
146
+ flex-wrap: wrap;
147
+ }
148
+
149
+ /**
150
+ * Flex column centered (used for labels, stacked content)
151
+ * @usage: @include flex-column-center();
152
+ */
153
+ @mixin flex-column-center {
154
+ display: flex;
155
+ flex-direction: column;
156
+ align-items: center;
157
+ justify-content: flex-start;
158
+ }
159
+
160
+ /**
161
+ * Stretch to viewport size (used for root/body containers)
162
+ * Combines inline-size, block-size with min/max constraints
163
+ * @usage: @include stretch-viewport();
164
+ */
165
+ @mixin stretch-viewport {
166
+ inline-size: stretch;
167
+ block-size: stretch;
168
+ min-inline-size: 0px;
169
+ min-block-size: 0px;
170
+ max-inline-size: min(100%, min(100cqi, 100dvi));
171
+ max-block-size: min(100%, min(100cqb, 100dvb));
172
+ }
173
+
174
+ /**
175
+ * Hidden state: display none + pointer/touch disabled
176
+ * @param $opacity [false] - if true, also apply opacity: 0
177
+ * @usage: @include hidden-state(); or @include hidden-state(true);
178
+ */
179
+ @mixin hidden-state($opacity: false) {
180
+ display: none !important;
181
+ pointer-events: none !important;
182
+ touch-action: none !important;
183
+ @if $opacity {
184
+ opacity: 0;
185
+ visibility: collapse;
186
+ }
187
+ }
188
+
189
+ /**
190
+ * Prevent dragging of element
191
+ * @usage: @include no-drag();
192
+ */
193
+ @mixin no-drag {
194
+ -webkit-user-drag: none;
195
+ -moz-user-drag: none;
196
+ user-select: none;
197
+ }
198
+
199
+ /**
200
+ * Focus ring without outline (M3-style)
201
+ * @param $color [var(--color-primary, #0066cc)] - focus color
202
+ * @param $radius [var(--radius-sm, 8px)] - border radius
203
+ * @usage: @include focus-ring(var(--color-primary));
204
+ */
205
+ @mixin focus-ring($color: var(--color-primary, #0066cc), $radius: var(--radius-sm, 8px)) {
206
+ outline: none;
207
+ box-shadow: 0 0 0 3px color-mix(in oklab, $color 35%, transparent);
208
+ border-radius: $radius;
209
+ }
210
+
211
+ /**
212
+ * Media element sizing (img, video, canvas, svg)
213
+ * @usage: @include media-sizing();
214
+ */
215
+ @mixin media-sizing {
216
+ display: block;
217
+ max-inline-size: 100%;
218
+ block-size: auto;
219
+ }
220
+
221
+ /**
222
+ * Code element font and sizing
223
+ * @param $font [var(--font-family-mono, 'SF Mono', 'Monaco', 'Roboto Mono', monospace)] - monospace font
224
+ * @usage: @include code-styling();
225
+ */
226
+ @mixin code-styling($font: var(--font-family-mono, 'SF Mono', 'Monaco', 'Roboto Mono', monospace)) {
227
+ font-family: $font;
228
+ background-color: var(--bgColor-muted);
229
+ border-radius: 0.3em;
230
+ padding: 0.2em 0.4em;
231
+ font-size: 85%;
232
+ }
@@ -0,0 +1,135 @@
1
+ @use "./shared" as *;
2
+
3
+ //
4
+ @layer ux-existence {
5
+ //
6
+ *[data-hidden]:not([data-hidden="false"]):not([data-opacity-animation]) {
7
+ &, * {
8
+ display: none !important;
9
+ pointer-events: none !important;
10
+ touch-action: none !important;
11
+ content-visibility: auto !important;
12
+ }
13
+ }
14
+
15
+ //
16
+ :host([data-hidden]:not([data-hidden="false"]:not([data-opacity-animation]))) {
17
+ &, *, ::slotted(*) {
18
+ display: none !important;
19
+ pointer-events: none !important;
20
+ touch-action: none !important;
21
+ content-visibility: auto !important;
22
+ }
23
+ }
24
+
25
+ //
26
+ :host([data-hidden]:not([data-hidden="false"])) {
27
+ &, *, ::slotted(*) {
28
+ pointer-events: none !important;
29
+ touch-action: none !important;
30
+ }
31
+ }
32
+
33
+ //
34
+ *[data-hidden]:not([data-hidden="false"]) {
35
+ &, * {
36
+ pointer-events: none !important;
37
+ touch-action: none !important;
38
+ }
39
+ }
40
+
41
+ //
42
+ *[data-hidden]:not([data-hidden="false"]):not([data-opacity-animation]) {
43
+ &, * {
44
+ @include hidden-state(true);
45
+ }
46
+ }
47
+
48
+ //
49
+ :host([data-hidden]:not([data-hidden="false"]:not([data-opacity-animation]))) {
50
+ &, *, ::slotted(*) {
51
+ @include hidden-state(true);
52
+ }
53
+ }
54
+
55
+ //
56
+ :host([data-hidden]:not([data-hidden="false"])) {
57
+ &, *, ::slotted(*) {
58
+ @include disable-interaction(true);
59
+ }
60
+ }
61
+
62
+ //
63
+ *[data-hidden]:not([data-hidden="false"]) {
64
+ &, * {
65
+ @include disable-interaction(true);
66
+ }
67
+ }
68
+
69
+ //
70
+ *[data-hidden]:not([data-hidden="false"]):not([data-opacity-animation]) {
71
+ &, * {
72
+ display: none !important;
73
+ pointer-events: none !important;
74
+ touch-action: none !important;
75
+ content-visibility: auto !important;
76
+ }
77
+ }
78
+
79
+ //
80
+ :host([data-hidden]:not([data-hidden="false"]:not([data-opacity-animation]))) {
81
+ &, *, ::slotted(*) {
82
+ display: none !important;
83
+ pointer-events: none !important;
84
+ touch-action: none !important;
85
+ content-visibility: auto !important;
86
+ }
87
+ }
88
+
89
+ //
90
+ :host([data-hidden]:not([data-hidden="false"])) {
91
+ &, *, ::slotted(*) {
92
+ pointer-events: none !important;
93
+ touch-action: none !important;
94
+ }
95
+ }
96
+
97
+ //
98
+ *[data-hidden]:not([data-hidden="false"]) {
99
+ &, * {
100
+ pointer-events: none !important;
101
+ touch-action: none !important;
102
+ }
103
+ }
104
+ }
105
+
106
+ //
107
+ @layer ux-existence {
108
+ //
109
+ *[data-hidden]:not([data-hidden="false"]):not([data-opacity-animation]) {
110
+ &, * {
111
+ @include hidden-state(true);
112
+ }
113
+ }
114
+
115
+ //
116
+ :host([data-hidden]:not([data-hidden="false"]:not([data-opacity-animation]))) {
117
+ &, *, ::slotted(*) {
118
+ @include hidden-state(true);
119
+ }
120
+ }
121
+
122
+ //
123
+ :host([data-hidden]:not([data-hidden="false"])) {
124
+ &, *, ::slotted(*) {
125
+ @include disable-interaction(true);
126
+ }
127
+ }
128
+
129
+ //
130
+ *[data-hidden]:not([data-hidden="false"]) {
131
+ &, * {
132
+ @include disable-interaction(true);
133
+ }
134
+ }
135
+ }
@@ -0,0 +1,78 @@
1
+ /*
2
+ * Filename: _tokens.scss
3
+ * FullPath: modules/projects/veela.css/src/scss/basic/misc/_tokens.scss
4
+ * Change date and time: 12.30.00_06.08.2026
5
+ * Reason for changes: Document canonical SoT for color tokens.
6
+ */
7
+ /*
8
+ * INVARIANT: Intentional per-bundle SCSS alias shim for the vl-basic bundle.
9
+ * Produces NO CSS output — only `$color-*` / `$space-*` / `$radius-*` / `$font-*` SCSS aliases.
10
+ * Canonical color-token source of truth: `core/misc/_tokens.scss` (full bundle).
11
+ * Do NOT `@forward` canonical here — would emit the full `@layer tokens` CSS into the
12
+ * lightweight vl-basic bundle and break its size semantics.
13
+ */
14
+
15
+ // Design tokens: SCSS aliases for CSS custom properties
16
+ // Keep aliases small and meaningful to encourage reuse
17
+
18
+ $space-2xs: var(--space-2xs);
19
+ $space-xs: var(--space-xs);
20
+ $space-sm: var(--space-sm);
21
+ $space-md: var(--space-md);
22
+ $space-lg: var(--space-lg);
23
+ $space-xl: var(--space-xl);
24
+ $space-2xl: var(--space-2xl);
25
+
26
+ $radius-xs: var(--radius-xs);
27
+ $radius-sm: var(--radius-sm);
28
+ $radius-md: var(--radius-md);
29
+ $radius-lg: var(--radius-lg);
30
+ $radius-xl: var(--radius-xl);
31
+ $radius-full: var(--radius-full);
32
+
33
+ $font-xs: var(--font-xs);
34
+ $font-sm: var(--font-sm);
35
+ $font-base: var(--font-base);
36
+ $font-md: var(--font-md);
37
+ $font-lg: var(--font-lg);
38
+ $font-xl: var(--font-xl);
39
+ $font-2xl: var(--font-2xl);
40
+
41
+ $font-weight-normal: var(--font-weight-normal);
42
+ $font-weight-medium: var(--font-weight-medium);
43
+ $font-weight-semibold: var(--font-weight-semibold);
44
+ $font-weight-bold: var(--font-weight-bold);
45
+ $font-weight-extrabold: var(--font-weight-extrabold);
46
+
47
+ $font-family-base: var(--font-family-base);
48
+ $font-family-mono: var(--font-family-mono);
49
+
50
+ $color-primary: var(--md3-primary);
51
+ $color-primary-container: var(--md3-primary-container);
52
+ $color-secondary: var(--md3-secondary);
53
+ $color-tertiary: var(--md3-tertiary);
54
+ $color-surface: var(--md3-surface);
55
+ $color-surface-variant: var(--md3-surface-variant);
56
+ $color-surface-container: var(--md3-surface-container);
57
+ $color-outline: var(--md3-outline);
58
+ $color-outline-variant: var(--md3-outline-variant);
59
+ $color-error: var(--md3-error);
60
+ $color-inverse-surface: var(--md3-inverse-surface);
61
+ $color-inverse-on-surface: var(--md3-inverse-on-surface);
62
+ $color-scrim: var(--md3-scrim);
63
+
64
+ // Common color variables (compat layer for reducing --c2-* usage)
65
+ $on-surface: var(--on-surface, currentColor);
66
+ $text-secondary: var(--text-secondary, color-mix(in oklch, var(--on-surface, currentColor) 74%, transparent));
67
+ $border-color: var(--border-color, color-mix(in oklch, var(--on-surface, currentColor) 18%, transparent));
68
+ $backdrop: var(--backdrop, oklch(from black l c h / 0.22));
69
+
70
+ // Scrollbar
71
+ $scrollbar-opacity: var(--scrollbar-opacity, 0.56);
72
+ $scrollbar-tint: var(--scrollbar-tint, 86%);
73
+
74
+ // Stacking (use with lib/basic/_position.scss — overlays, modals)
75
+ $z-modal-backdrop: var(--z-modal-backdrop);
76
+ $z-modal: var(--z-modal);
77
+
78
+
@@ -0,0 +1,12 @@
1
+ // FL.UI Lib - Veela integration
2
+ // This file provides full veela integration when available
3
+ //
4
+ // Usage: @use "fl-ui-lib" as m;
5
+ //
6
+ // Note: This requires veela.css to be installed and configured
7
+
8
+ // Import and forward veela-lib
9
+ @use "veela-lib" as *;
10
+ @forward "veela-lib";
11
+
12
+ // All veela mixins are now available through this facade
@@ -0,0 +1 @@
1
+ @forward "misc/index.scss";
@@ -0,0 +1,32 @@
1
+ // Draggable component mixins - veela-independent fallbacks
2
+
3
+ @mixin draggable-element {
4
+ cursor: grab;
5
+ user-select: none;
6
+ touch-action: none;
7
+ -webkit-user-drag: none;
8
+
9
+ &:active, &[data-dragging] {
10
+ cursor: grabbing;
11
+ }
12
+ }
13
+
14
+ @mixin drag-handle {
15
+ cursor: grab;
16
+ pointer-events: auto;
17
+ user-select: none;
18
+
19
+ &:active {
20
+ cursor: grabbing;
21
+ }
22
+ }
23
+
24
+ @mixin dragging-state {
25
+ cursor: grabbing;
26
+ user-select: none;
27
+
28
+ * {
29
+ user-select: none;
30
+ pointer-events: none;
31
+ }
32
+ }
@@ -0,0 +1,45 @@
1
+ // Position, inset & stacking-context helpers (veela-independent)
2
+ // Forwarded via lib/basic/_index.scss as part of the public veela-lib surface.
3
+
4
+ @mixin center-absolute {
5
+ position: absolute;
6
+ top: 50%;
7
+ left: 50%;
8
+ transform: translate(-50%, -50%);
9
+ }
10
+
11
+ @mixin absolute-fill {
12
+ position: absolute;
13
+ inset: 0;
14
+ }
15
+
16
+ @mixin fixed-fill {
17
+ position: fixed;
18
+ inset: 0;
19
+ }
20
+
21
+ @mixin position($type: "relative", $inset: null) {
22
+ position: #{$type};
23
+
24
+ @if $inset {
25
+ inset: $inset;
26
+ }
27
+ }
28
+
29
+ @mixin sticky($top: 0) {
30
+ position: sticky;
31
+ inset-block-start: $top;
32
+ }
33
+
34
+ /// Screen-reader only: visually hidden but still exposed to accessibility APIs
35
+ @mixin visually-hidden {
36
+ position: absolute;
37
+ inline-size: 1px;
38
+ block-size: 1px;
39
+ padding: 0;
40
+ margin: -1px;
41
+ overflow: hidden;
42
+ clip: rect(0, 0, 0, 0);
43
+ white-space: nowrap;
44
+ border: 0;
45
+ }
@@ -0,0 +1,28 @@
1
+ @mixin ps-anchor {
2
+ // fallback
3
+ & {
4
+ inset-inline-start: max(var(--client-x, 0px), 0px);
5
+ inset-block-start: max(var(--client-y, 0px), 0px);
6
+ inset-inline-end: auto;
7
+ inset-block-end: auto;
8
+
9
+ direction: ltr;
10
+ writing-mode: horizontal-tb;
11
+ translate: 0% 0% 0%;
12
+ transform: none;
13
+ };
14
+
15
+ //
16
+ & {
17
+ --translate-x: round(nearest, min(0px, calc(100cqi - (100% + var(--client-x, 0px)))), calc(1px / var(--pixel-ratio, 1))) !important;
18
+ --translate-y: round(nearest, min(0px, calc(100cqb - (100% + var(--client-y, 0px)))), calc(1px / var(--pixel-ratio, 1))) !important;
19
+ };
20
+
21
+ // from bottom side (without gap), by default
22
+ @supports(position-anchor: --example) {
23
+ position-anchor: var(--anchor-group);
24
+ inset-inline-start: anchor(var(--anchor-group) start);
25
+ inset-block-start: anchor(var(--anchor-group) end);
26
+ inline-size: anchor-size(var(--anchor-group) self-inline);
27
+ };
28
+ };
@@ -0,0 +1,28 @@
1
+ @mixin ps-centered {
2
+ & {
3
+ --shift-x: 50%;
4
+ --shift-y: 50%;
5
+ --drag-x: 0px;
6
+ --drag-y: 0px;
7
+ --translate-x: 0px;
8
+ --translate-y: 0px;
9
+
10
+
11
+ inset-inline-start: max(var(--shift-x), 0px);
12
+ inset-block-start: max(var(--shift-y), 0px);
13
+ inset-inline-end: auto;
14
+ inset-block-end: auto;
15
+
16
+
17
+ direction: ltr;
18
+ translate: 0% 0% 0%;
19
+ transform:
20
+ scale3d(var(--scale, 1), var(--scale, 1), var(--scale, 1))
21
+ translate3d(
22
+ round(nearest, -50%, calc(1px / var(--pixel-ratio, 1))),
23
+ round(nearest, -50%, calc(1px / var(--pixel-ratio, 1)))
24
+ , 0%);
25
+ transform-origin: 0% 0%;
26
+ writing-mode: horizontal-tb;
27
+ };
28
+ };
@@ -0,0 +1,18 @@
1
+ @mixin ps-cursor {
2
+ & {
3
+ --shift-x: var(--client-x, 0px);
4
+ --shift-y: var(--client-y, 0px);
5
+ --translate-x: round(nearest, min(0px, calc(100cqi - (100% + var(--shift-x, 0px)))), calc(1px / var(--pixel-ratio, 1))) !important;
6
+ --translate-y: round(nearest, min(0px, calc(100cqb - (100% + var(--shift-y, 0px)))), calc(1px / var(--pixel-ratio, 1))) !important;
7
+
8
+ inset-inline-start: max(var(--shift-x), 0px);
9
+ inset-block-start: max(var(--shift-y), var(--status-bar-padding, 0px));
10
+ inset-inline-end: auto;
11
+ inset-block-end: auto;
12
+
13
+ direction: ltr;
14
+ translate: 0% 0% 0%;
15
+ writing-mode: horizontal-tb;
16
+ transform: none;
17
+ };
18
+ };
@@ -0,0 +1,25 @@
1
+ @mixin ps-draggable {
2
+ & {
3
+ --shift-x: 0px;
4
+ --shift-y: 0px;
5
+ --drag-x: 0px;
6
+ --drag-y: 0px;
7
+ --translate-x: var(--drag-x, 0px);
8
+ --translate-y: var(--drag-y, 0px);
9
+
10
+ inset-inline-start: var(--shift-x, 0px);
11
+ inset-block-start : var(--shift-y, 0px);
12
+ transform-origin : 0% 0%;
13
+ inset-inline-end : auto;
14
+ inset-block-end : auto;
15
+ touch-action: none;
16
+ writing-mode: horizontal-tb;
17
+ translate: 0% 0% 0%;
18
+ direction: ltr;
19
+ position: fixed;
20
+
21
+ transform:
22
+ scale3d(var(--scale, 1), var(--scale, 1), var(--scale, 1))
23
+ translate3d(var(--drag-x, 0px), var(--drag-y, 0px), 0px);
24
+ };
25
+ };
File without changes