@mks2508/mks-ui 0.8.0 → 0.8.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 (136) hide show
  1. package/dist/react-ui/blocks/Terminal/TerminalDisplay.styles.d.ts +1 -1
  2. package/dist/react-ui/blocks/Terminal/TerminalDisplay.types.d.ts +1 -1
  3. package/dist/react-ui/blocks/Terminal/components/LogLineBadges/LogLineBadges.styles.d.ts +1 -1
  4. package/dist/react-ui/blocks/Terminal/components/TerminalLogBadge/TerminalLogBadge.styles.d.ts +1 -1
  5. package/dist/react-ui/blocks/Terminal/components/TerminalLogBadge/TerminalLogBadge.types.d.ts +1 -1
  6. package/dist/react-ui/blocks/Terminal/controls/TerminalActionBar/TerminalActionBar.styles.d.ts +1 -1
  7. package/dist/react-ui/blocks/Terminal/controls/TerminalActionBar/TerminalActionBar.types.d.ts +1 -1
  8. package/dist/react-ui/blocks/Terminal/controls/TerminalConnectionStatus/TerminalConnectionStatus.styles.d.ts +1 -1
  9. package/dist/react-ui/blocks/Terminal/controls/TerminalConnectionStatus/TerminalConnectionStatus.types.d.ts +1 -1
  10. package/dist/react-ui/blocks/Terminal/controls/TerminalFontControls/TerminalFontControls.styles.d.ts +1 -1
  11. package/dist/react-ui/blocks/Terminal/controls/TerminalFontControls/TerminalFontControls.types.d.ts +1 -1
  12. package/dist/react-ui/blocks/Terminal/controls/TerminalSplitButton/TerminalSplitButton.styles.d.ts +1 -1
  13. package/dist/react-ui/blocks/Terminal/controls/TerminalSplitButton/TerminalSplitButton.types.d.ts +1 -1
  14. package/dist/react-ui/blocks/Terminal/controls/TerminalStatusBar/TerminalStatusBar.styles.d.ts +1 -1
  15. package/dist/react-ui/blocks/Terminal/controls/TerminalStatusBar/TerminalStatusBar.types.d.ts +1 -1
  16. package/dist/react-ui/blocks/Terminal/panel/TerminalDebugPanel/TerminalDebugPanel.styles.d.ts +1 -1
  17. package/dist/react-ui/blocks/Terminal/panel/TerminalDebugPanel/TerminalDebugPanel.types.d.ts +1 -1
  18. package/dist/react-ui/blocks/Terminal/panel/TerminalFilterDropdown/TerminalFilterDropdown.styles.d.ts +1 -1
  19. package/dist/react-ui/blocks/Terminal/panel/TerminalFilterDropdown/TerminalFilterDropdown.types.d.ts +1 -1
  20. package/dist/react-ui/blocks/Terminal/panel/TerminalFilterTabs/TerminalFilterTabs.styles.d.ts +1 -1
  21. package/dist/react-ui/blocks/Terminal/panel/TerminalFilterTabs/TerminalFilterTabs.types.d.ts +1 -1
  22. package/dist/react-ui/blocks/Terminal/panel/TerminalInteractivePanelWterm.d.ts +0 -1
  23. package/dist/react-ui/blocks/Terminal/panel/TerminalInteractivePanelWterm.d.ts.map +1 -1
  24. package/dist/react-ui/blocks/Terminal/panel/TerminalInteractivePanelWterm.js +56 -18
  25. package/dist/react-ui/blocks/Terminal/panel/TerminalLogsPanel/TerminalLogsPanel.styles.d.ts +1 -1
  26. package/dist/react-ui/blocks/Terminal/panel/TerminalLogsPanel/TerminalLogsPanel.types.d.ts +1 -1
  27. package/dist/react-ui/blocks/Terminal/panel/TerminalPanelChrome.styles.d.ts +1 -1
  28. package/dist/react-ui/blocks/Terminal/panel/TerminalPanelChrome.types.d.ts +1 -1
  29. package/dist/react-ui/blocks/Terminal/panel/TerminalPanelFooter/TerminalPanelFooter.styles.d.ts +1 -1
  30. package/dist/react-ui/blocks/Terminal/panel/TerminalPanelFooter/TerminalPanelFooter.types.d.ts +1 -1
  31. package/dist/react-ui/blocks/Terminal/panel/TerminalPanelHeader/TerminalPanelHeader.styles.d.ts +1 -1
  32. package/dist/react-ui/blocks/Terminal/panel/TerminalPanelHeader/TerminalPanelHeader.types.d.ts +1 -1
  33. package/dist/react-ui/blocks/Terminal/panel/TerminalPanelToolbar/TerminalPanelToolbar.styles.d.ts +1 -1
  34. package/dist/react-ui/blocks/Terminal/panel/TerminalPanelToolbar/TerminalPanelToolbar.types.d.ts +1 -1
  35. package/dist/react-ui/blocks/Terminal/panel/TerminalSessionControl/TerminalSessionControl.styles.d.ts +1 -1
  36. package/dist/react-ui/blocks/Terminal/panel/TerminalSessionControl/TerminalSessionControl.types.d.ts +1 -1
  37. package/dist/react-ui/blocks/Terminal/panel/TerminalSessionTabs/TerminalSessionTabs.styles.d.ts +1 -1
  38. package/dist/react-ui/blocks/Terminal/panel/TerminalSessionTabs/TerminalSessionTabs.types.d.ts +1 -1
  39. package/dist/react-ui/blocks/Terminal/panel/TerminalSettingsPopover/TerminalSettingsPopover.styles.d.ts +1 -1
  40. package/dist/react-ui/blocks/Terminal/panel/TerminalSettingsPopover/TerminalSettingsPopover.types.d.ts +1 -1
  41. package/dist/react-ui/blocks/Terminal/panel/TerminalThemeSelector/TerminalThemeSelector.styles.d.ts +1 -1
  42. package/dist/react-ui/blocks/Terminal/panel/TerminalThemeSelector/TerminalThemeSelector.types.d.ts +1 -1
  43. package/dist/react-ui/primitives/AutoHeight/index.d.ts +1 -1
  44. package/dist/react-ui/primitives/CountingNumber/index.d.ts +1 -1
  45. package/dist/react-ui/primitives/DotMatrix/DotMatrix.types.d.ts +1 -1
  46. package/dist/react-ui/primitives/waapi/SlidingNumber/SlidingNumber.styles.d.ts +1 -1
  47. package/dist/react-ui/primitives/waapi/SlidingText/SlidingText.styles.d.ts +1 -1
  48. package/dist/react-ui/ui/Accordion/Accordion.styles.d.ts +1 -1
  49. package/dist/react-ui/ui/Accordion/Accordion.types.d.ts +1 -1
  50. package/dist/react-ui/ui/AlertDialog/AlertDialog.styles.d.ts +1 -1
  51. package/dist/react-ui/ui/AlertDialog/AlertDialog.types.d.ts +1 -1
  52. package/dist/react-ui/ui/Badge/Badge.styles.d.ts +1 -1
  53. package/dist/react-ui/ui/Badge/Badge.types.d.ts +1 -1
  54. package/dist/react-ui/ui/Button/Button.styles.d.ts +1 -1
  55. package/dist/react-ui/ui/Button/Button.types.d.ts +1 -1
  56. package/dist/react-ui/ui/Card/Card.styles.d.ts +1 -1
  57. package/dist/react-ui/ui/Card/Card.types.d.ts +1 -1
  58. package/dist/react-ui/ui/Checkbox/Checkbox.styles.d.ts +1 -1
  59. package/dist/react-ui/ui/Checkbox/Checkbox.types.d.ts +1 -1
  60. package/dist/react-ui/ui/Combobox/Combobox.styles.d.ts +1 -1
  61. package/dist/react-ui/ui/Combobox/Combobox.types.d.ts +1 -1
  62. package/dist/react-ui/ui/CornerBracket/CornerBracket.styles.d.ts +1 -1
  63. package/dist/react-ui/ui/CornerBracket/CornerBracket.types.d.ts +1 -1
  64. package/dist/react-ui/ui/DataCard/DataCard.styles.d.ts +1 -1
  65. package/dist/react-ui/ui/DataCard/DataCard.types.d.ts +1 -1
  66. package/dist/react-ui/ui/DataCard/index.d.ts +1 -1
  67. package/dist/react-ui/ui/Dialog/Dialog.styles.d.ts +1 -1
  68. package/dist/react-ui/ui/Dialog/Dialog.types.d.ts +1 -1
  69. package/dist/react-ui/ui/DropdownMenu/DropdownMenu.styles.d.ts +1 -1
  70. package/dist/react-ui/ui/DropdownMenu/DropdownMenu.types.d.ts +1 -1
  71. package/dist/react-ui/ui/DynamicToggle/DynamicToggle.styles.d.ts +1 -1
  72. package/dist/react-ui/ui/DynamicToggle/DynamicToggle.types.d.ts +1 -1
  73. package/dist/react-ui/ui/Field/Field.styles.d.ts +1 -1
  74. package/dist/react-ui/ui/Field/Field.types.d.ts +1 -1
  75. package/dist/react-ui/ui/FileIcon/FileIcon.styles.d.ts +1 -1
  76. package/dist/react-ui/ui/FileIcon/FileIcon.types.d.ts +1 -1
  77. package/dist/react-ui/ui/FileItem/FileItem.styles.d.ts +1 -1
  78. package/dist/react-ui/ui/FileItem/FileItem.types.d.ts +1 -1
  79. package/dist/react-ui/ui/FilePanel/FilePanel.styles.d.ts +1 -1
  80. package/dist/react-ui/ui/FilePanel/FilePanel.types.d.ts +1 -1
  81. package/dist/react-ui/ui/FileTree/FileTree.styles.d.ts +1 -1
  82. package/dist/react-ui/ui/FileTree/FileTree.types.d.ts +1 -1
  83. package/dist/react-ui/ui/GooeyButton/GooeyButton.types.d.ts +1 -1
  84. package/dist/{css/ui-GooeyButton-gooey.css → react-ui/ui/GooeyButton/gooey-button-8rHWiw0w.css} +6 -2
  85. package/dist/react-ui/ui/GooeyButton/index.d.ts.map +1 -1
  86. package/dist/react-ui/ui/GooeyButton/index.js +11 -2
  87. package/dist/react-ui/ui/Input/Input.styles.d.ts +1 -1
  88. package/dist/react-ui/ui/Input/Input.types.d.ts +1 -1
  89. package/dist/react-ui/ui/InputGroup/InputGroup.styles.d.ts +1 -1
  90. package/dist/react-ui/ui/InputGroup/InputGroup.types.d.ts +1 -1
  91. package/dist/react-ui/ui/Label/Label.styles.d.ts +1 -1
  92. package/dist/react-ui/ui/Label/Label.types.d.ts +1 -1
  93. package/dist/react-ui/ui/Menu/Menu.styles.d.ts +1 -1
  94. package/dist/react-ui/ui/Menu/Menu.types.d.ts +2 -2
  95. package/dist/react-ui/ui/MiddleTruncatePath/MiddleTruncatePath.styles.d.ts +1 -1
  96. package/dist/react-ui/ui/MiddleTruncatePath/MiddleTruncatePath.types.d.ts +1 -1
  97. package/dist/react-ui/ui/OperationCard/OperationCard.styles.d.ts +1 -1
  98. package/dist/react-ui/ui/OperationCard/OperationCard.types.d.ts +2 -2
  99. package/dist/react-ui/ui/Popover/Popover.styles.d.ts +1 -1
  100. package/dist/react-ui/ui/Popover/Popover.types.d.ts +1 -1
  101. package/dist/react-ui/ui/Progress/Progress.styles.d.ts +1 -1
  102. package/dist/react-ui/ui/Progress/Progress.types.d.ts +2 -2
  103. package/dist/react-ui/ui/Select/Select.styles.d.ts +1 -1
  104. package/dist/react-ui/ui/Select/Select.types.d.ts +1 -1
  105. package/dist/react-ui/ui/Separator/Separator.styles.d.ts +1 -1
  106. package/dist/react-ui/ui/Separator/Separator.types.d.ts +1 -1
  107. package/dist/react-ui/ui/Switch/Switch.styles.d.ts +1 -1
  108. package/dist/react-ui/ui/Switch/Switch.types.d.ts +1 -1
  109. package/dist/react-ui/ui/Tabs/Tabs.styles.d.ts +1 -1
  110. package/dist/react-ui/ui/Tabs/Tabs.types.d.ts +3 -3
  111. package/dist/react-ui/ui/TextFlow/TextFlow.styles.d.ts +1 -1
  112. package/dist/react-ui/ui/Textarea/Textarea.styles.d.ts +1 -1
  113. package/dist/react-ui/ui/Textarea/Textarea.types.d.ts +1 -1
  114. package/dist/react-ui/ui/Tooltip/Tooltip.styles.d.ts +1 -1
  115. package/dist/react-ui/ui/Tooltip/Tooltip.types.d.ts +1 -1
  116. package/package.json +2 -2
  117. package/dist/index.css +0 -1590
  118. package/dist/react-ui/blocks/Sidebar/animations/tooltip.css +0 -330
  119. package/dist/react-ui/blocks/Terminal/panel/TerminalFilterDropdown/terminal-filter-dropdown.module.css +0 -60
  120. package/dist/react-ui/blocks/Terminal/panel/TerminalSessionTabs/terminal-session-tabs.module.css +0 -60
  121. package/dist/react-ui/components/MorphingPopover/morphing-popover.module.css +0 -154
  122. package/dist/react-ui/primitives/DotMatrix/dot.css +0 -364
  123. package/dist/react-ui/primitives/GooeyMorphingSurface/gooey-morphing.css +0 -112
  124. package/dist/react-ui/primitives/waapi/Morph/techniques/useViewTransitions.module.css +0 -20
  125. package/dist/react-ui/ui/DynamicToggle/DynamicToggle.css +0 -369
  126. package/dist/react-ui/ui/GooeyButton/gooey.css +0 -43
  127. package/dist/react-ui/ui/Tabs/Tabs.css +0 -38
  128. /package/dist/{css/blocks-Sidebar-animations-tooltip.css → react-ui/blocks/Sidebar/animations/tooltip-keyframes-DRT9W6Xj.css} +0 -0
  129. /package/dist/{css/blocks-Terminal-panel-TerminalFilterDropdown-terminal-filter-dropdown.module.css → react-ui/blocks/Terminal/panel/TerminalFilterDropdown/terminal-filter-dropdown.module-G5zpw08N.css} +0 -0
  130. /package/dist/{css/blocks-Terminal-panel-TerminalSessionTabs-terminal-session-tabs.module.css → react-ui/blocks/Terminal/panel/TerminalSessionTabs/terminal-session-tabs.module-BAOuAeiX.css} +0 -0
  131. /package/dist/{css/components-MorphingPopover-morphing-popover.module.css → react-ui/components/MorphingPopover/morphing-popover.module-T3s-wJN-.css} +0 -0
  132. /package/dist/{css/primitives-DotMatrix-dot.css → react-ui/primitives/DotMatrix/dot-matrix-B8DHjPGb.css} +0 -0
  133. /package/dist/{css/primitives-GooeyMorphingSurface-gooey.css → react-ui/primitives/GooeyMorphingSurface/gooey-morphing-surface-DfdjAg5U.css} +0 -0
  134. /package/dist/{css/primitives-waapi-Morph-techniques-useViewTransitions.module.css → react-ui/primitives/waapi/Morph/techniques/useViewTransitions.module-DNDWYN8q.css} +0 -0
  135. /package/dist/{css/ui-DynamicToggle-DynamicToggle.css → react-ui/ui/DynamicToggle/DynamicToggle-DY2Hle7P.css} +0 -0
  136. /package/dist/{css/ui-Tabs-Tabs.css → react-ui/ui/Tabs/Tabs-DqzZRGB3.css} +0 -0
package/dist/index.css DELETED
@@ -1,1590 +0,0 @@
1
-
2
-
3
- /* react-ui/blocks/Sidebar/animations/tooltip.css */
4
-
5
- /**
6
- * Tooltip Transition Keyframes
7
- *
8
- * Sistema de animaciones CSS para transiciones de tooltip con:
9
- * - Items staggered enter/exit
10
- * - Grid-based height transitions
11
- * - 3D title rotations
12
- *
13
- * Performance: GPU-accelerated (transform + opacity only)
14
- */
15
-
16
- /* ============================================================================
17
- ITEMS ANIMATIONS - Staggered Enter/Exit
18
- ============================================================================ */
19
-
20
- @keyframes tooltip-item-enter {
21
- from {
22
- opacity: 0;
23
- transform: translateX(-8px);
24
- }
25
- to {
26
- opacity: 1;
27
- transform: translateX(0);
28
- }
29
- }
30
-
31
- @keyframes tooltip-item-exit {
32
- from {
33
- opacity: 1;
34
- transform: translateX(0);
35
- }
36
- to {
37
- opacity: 0;
38
- transform: translateX(-4px);
39
- }
40
- }
41
-
42
- /**
43
- * Item States con CSS Custom Properties
44
- *
45
- * Uso: <div style="--animation-order: 0" data-state="entering">
46
- */
47
- .sidebar-sublink[data-state="entering"] {
48
- animation: tooltip-item-enter 150ms cubic-bezier(0.4, 0, 0.2, 1);
49
- animation-delay: calc(var(--animation-order, 0) * 30ms + 150ms);
50
- animation-fill-mode: both;
51
- }
52
-
53
- .sidebar-sublink[data-state="leaving"] {
54
- animation: tooltip-item-exit 100ms cubic-bezier(0.4, 0, 0.6, 1);
55
- animation-delay: calc(var(--animation-order, 0) * 20ms);
56
- animation-fill-mode: both;
57
- }
58
-
59
- /* ============================================================================
60
- TITLE 3D ROTATIONS
61
- ============================================================================ */
62
-
63
- /**
64
- * Title Rotate Up (direction-aware)
65
- * Usado cuando navegamos hacia arriba en el sidebar
66
- */
67
- @keyframes tooltip-title-rotate-up {
68
- from {
69
- transform: rotateX(0deg);
70
- opacity: 1;
71
- }
72
- to {
73
- transform: rotateX(-90deg);
74
- opacity: 0;
75
- }
76
- }
77
-
78
- @keyframes tooltip-title-enter-from-below {
79
- from {
80
- transform: rotateX(90deg);
81
- opacity: 0;
82
- }
83
- to {
84
- transform: rotateX(0deg);
85
- opacity: 1;
86
- }
87
- }
88
-
89
- /**
90
- * Title Rotate Down (direction-aware)
91
- * Usado cuando navegamos hacia abajo en el sidebar
92
- */
93
- @keyframes tooltip-title-rotate-down {
94
- from {
95
- transform: rotateX(0deg);
96
- opacity: 1;
97
- }
98
- to {
99
- transform: rotateX(90deg);
100
- opacity: 0;
101
- }
102
- }
103
-
104
- @keyframes tooltip-title-enter-from-above {
105
- from {
106
- transform: rotateX(-90deg);
107
- opacity: 0;
108
- }
109
- to {
110
- transform: rotateX(0deg);
111
- opacity: 1;
112
- }
113
- }
114
-
115
- /**
116
- * Title States
117
- */
118
- .tooltip-title[data-direction="up"][data-state="leaving"] {
119
- animation: tooltip-title-rotate-up 250ms cubic-bezier(0.4, 0, 0.2, 1) forwards;
120
- }
121
-
122
- .tooltip-title[data-direction="up"][data-state="entering"] {
123
- animation: tooltip-title-enter-from-below 250ms cubic-bezier(0.4, 0, 0.2, 1) forwards;
124
- }
125
-
126
- .tooltip-title[data-direction="down"][data-state="leaving"] {
127
- animation: tooltip-title-rotate-down 250ms cubic-bezier(0.4, 0, 0.2, 1) forwards;
128
- }
129
-
130
- .tooltip-title[data-direction="down"][data-state="entering"] {
131
- animation: tooltip-title-enter-from-above 250ms cubic-bezier(0.4, 0, 0.2, 1) forwards;
132
- }
133
-
134
- /* ============================================================================
135
- 3D CUBE FACES (Enfoque A: Multi-cara)
136
- ============================================================================ */
137
-
138
- /**
139
- * Cubo 3D con 6 caras para títulos
140
- *
141
- * Estructura:
142
- * .title-scene (perspective)
143
- * └─ .title-cube (preserve-3d)
144
- * ├─ .title-face--front
145
- * ├─ .title-face--back
146
- * ├─ .title-face--top
147
- * ├─ .title-face--bottom
148
- * ├─ .title-face--left
149
- * └─ .title-face--right
150
- */
151
-
152
- .title-scene {
153
- perspective: 600px;
154
- position: relative;
155
- width: 100%;
156
- height: 2rem;
157
- }
158
-
159
- .title-cube {
160
- width: 100%;
161
- height: 100%;
162
- position: relative;
163
- transform-style: preserve-3d;
164
- transition: transform 250ms cubic-bezier(0.4, 0, 0.2, 1);
165
- /* Empujar hacia atrás para evitar blur en texto */
166
- transform: translateZ(-1rem);
167
- }
168
-
169
- .title-face {
170
- position: absolute;
171
- width: 100%;
172
- height: 100%;
173
- backface-visibility: hidden;
174
- display: flex;
175
- align-items: center;
176
- justify-content: flex-start;
177
- padding: 0 1rem;
178
- font-weight: 500;
179
- }
180
-
181
- /* Posicionamiento de caras - Vertical rotation (rotateX) */
182
- .title-face--front {
183
- transform: rotateX(0deg) translateZ(1rem);
184
- }
185
-
186
- .title-face--top {
187
- transform: rotateX(90deg) translateZ(1rem);
188
- }
189
-
190
- .title-face--bottom {
191
- transform: rotateX(-90deg) translateZ(1rem);
192
- }
193
-
194
- .title-face--back {
195
- transform: rotateX(180deg) translateZ(1rem);
196
- }
197
-
198
- /* Estados del cubo - Direction-aware */
199
- .title-cube[data-face="front"] {
200
- transform: translateZ(-1rem) rotateX(0deg);
201
- }
202
-
203
- .title-cube[data-face="top"] {
204
- transform: translateZ(-1rem) rotateX(-90deg);
205
- }
206
-
207
- .title-cube[data-face="bottom"] {
208
- transform: translateZ(-1rem) rotateX(90deg);
209
- }
210
-
211
- .title-cube[data-face="back"] {
212
- transform: translateZ(-1rem) rotateX(180deg);
213
- }
214
-
215
- /* ============================================================================
216
- GRID HEIGHT TRANSITION (Grid Trick)
217
- ============================================================================ */
218
-
219
- /**
220
- * Grid trick para height: auto transitions
221
- *
222
- * Técnica: grid-template-rows: 0fr → 1fr
223
- * Browser support: Chrome 107+, Firefox 117+, Safari 16.4+
224
- */
225
-
226
- .tooltip-content-grid {
227
- display: grid;
228
- grid-template-rows: 0fr;
229
- transition: grid-template-rows 200ms cubic-bezier(0.4, 0, 0.2, 1);
230
- transition-delay: 50ms; /* Empieza después del fade-out de items */
231
- }
232
-
233
- .tooltip-content-grid[data-state="open"] {
234
- grid-template-rows: 1fr;
235
- }
236
-
237
- .tooltip-content-inner {
238
- overflow: hidden;
239
- min-height: 0; /* Crítico para que grid trick funcione */
240
- }
241
-
242
- /* ============================================================================
243
- UTILITY CLASSES
244
- ============================================================================ */
245
-
246
- /**
247
- * Contenedor con perspective para títulos crossfade
248
- */
249
- .tooltip-title-perspective {
250
- perspective: 600px;
251
- position: relative;
252
- width: 100%;
253
- height: 2rem;
254
- overflow: hidden;
255
- }
256
-
257
- /**
258
- * Disable animations durante hover rápido (opcional)
259
- * Usar con cuidado: puede causar flickering
260
- */
261
- .tooltip-no-animations * {
262
- animation: none !important;
263
- transition: none !important;
264
- }
265
-
266
- /* ============================================================================
267
- DEBUG HELPERS
268
- ============================================================================ */
269
-
270
- /**
271
- * Visualización de estados en debug mode
272
- */
273
- [data-tooltip-debug="true"] .sidebar-sublink[data-state]::before {
274
- content: attr(data-state);
275
- position: absolute;
276
- top: 0;
277
- right: 0;
278
- font-size: 8px;
279
- background: rgba(255, 0, 0, 0.8);
280
- color: white;
281
- padding: 2px 4px;
282
- border-radius: 2px;
283
- pointer-events: none;
284
- z-index: 1000;
285
- }
286
-
287
- [data-tooltip-debug="true"] .tooltip-title[data-direction]::after {
288
- content: "dir:" attr(data-direction);
289
- position: absolute;
290
- bottom: 0;
291
- left: 0;
292
- font-size: 8px;
293
- background: rgba(0, 0, 255, 0.8);
294
- color: white;
295
- padding: 2px 4px;
296
- border-radius: 2px;
297
- pointer-events: none;
298
- z-index: 1000;
299
- }
300
-
301
- /* ============================================================================
302
- PERFORMANCE OPTIMIZATIONS
303
- ============================================================================ */
304
-
305
- /**
306
- * GPU acceleration hints
307
- */
308
- .sidebar-sublink[data-state],
309
- .tooltip-title[data-state],
310
- .title-cube {
311
- will-change: transform, opacity;
312
- }
313
-
314
- /**
315
- * Contain layout/paint/style para mejor performance
316
- */
317
- .tooltip-content-grid {
318
- contain: layout style paint;
319
- }
320
-
321
- /**
322
- * Reduce motion para accesibilidad
323
- */
324
- @media (prefers-reduced-motion: reduce) {
325
- .sidebar-sublink[data-state],
326
- .tooltip-title[data-state],
327
- .title-cube,
328
- .tooltip-content-grid {
329
- animation-duration: 0.01ms !important;
330
- animation-iteration-count: 1 !important;
331
- transition-duration: 0.01ms !important;
332
- }
333
- }
334
-
335
-
336
-
337
- /* react-ui/blocks/Terminal/panel/TerminalFilterDropdown/terminal-filter-dropdown.module.css */
338
-
339
- /**
340
- * TerminalFilterDropdown Styles.
341
- *
342
- * Uses CSS Anchor Positioning API for dropdown placement.
343
- * Button acts as anchor, dropdown is positioned relative to it
344
- * with automatic flip behavior at viewport edges.
345
- *
346
- * @module components/devenv/terminal/panel/terminal-filter-dropdown/styles
347
- */
348
-
349
- /* Trigger button - acts as CSS anchor */
350
- .triggerButton {
351
- anchor-name: --filter-dropdown-anchor;
352
- }
353
-
354
- /* Dropdown menu - anchored to trigger button */
355
- .dropdownMenu {
356
- position-anchor: --filter-dropdown-anchor;
357
- position: fixed;
358
-
359
- /* Position below and left-aligned */
360
- left: anchor(left);
361
- top: anchor(bottom);
362
- margin-top: 4px;
363
-
364
- /* Flip to above if no room below */
365
- position-try-fallbacks: flip-block, flip-inline;
366
-
367
- min-width: 180px;
368
- z-index: 50;
369
-
370
- /* Hidden by default */
371
- display: none;
372
- opacity: 0;
373
- transform: translateY(-4px);
374
- transition: opacity 0.15s ease-out, transform 0.15s ease-out;
375
- pointer-events: none;
376
- }
377
-
378
- .dropdownMenu[data-open="true"] {
379
- display: block;
380
- opacity: 1;
381
- transform: translateY(0);
382
- pointer-events: auto;
383
- }
384
-
385
- /* Fallback for browsers without CSS Anchor Positioning */
386
- @supports not (anchor-name: none) {
387
- .dropdownMenu {
388
- position: absolute;
389
- left: 0;
390
- top: calc(100% + 4px);
391
- z-index: 50;
392
- }
393
-
394
- .dropdownMenu[data-open="true"] {
395
- display: block;
396
- }
397
- }
398
-
399
-
400
-
401
- /* react-ui/blocks/Terminal/panel/TerminalSessionTabs/terminal-session-tabs.module.css */
402
-
403
- /**
404
- * TerminalSessionTabs Dropdown Styles.
405
- *
406
- * Uses CSS Anchor Positioning API for the "add container" dropdown.
407
- * The + button acts as anchor, dropdown is positioned below it
408
- * with automatic flip behavior at viewport edges.
409
- *
410
- * @module components/devenv/terminal/panel/terminal-session-tabs/styles
411
- */
412
-
413
- /* + button - acts as CSS anchor */
414
- .addButton {
415
- anchor-name: --session-tabs-add-anchor;
416
- }
417
-
418
- /* Container dropdown - anchored to + button */
419
- .containerDropdown {
420
- position-anchor: --session-tabs-add-anchor;
421
- position: fixed;
422
-
423
- /* Position below and left-aligned */
424
- left: anchor(left);
425
- top: anchor(bottom);
426
- margin-top: 4px;
427
-
428
- /* Flip to above if no room below */
429
- position-try-fallbacks: flip-block, flip-inline;
430
-
431
- min-width: 200px;
432
- z-index: 50;
433
-
434
- /* Hidden by default */
435
- display: none;
436
- opacity: 0;
437
- transform: translateY(-4px);
438
- transition: opacity 0.15s ease-out, transform 0.15s ease-out;
439
- pointer-events: none;
440
- }
441
-
442
- .containerDropdown[data-open="true"] {
443
- display: block;
444
- opacity: 1;
445
- transform: translateY(0);
446
- pointer-events: auto;
447
- }
448
-
449
- /* Fallback for browsers without CSS Anchor Positioning */
450
- @supports not (anchor-name: none) {
451
- .containerDropdown {
452
- position: absolute;
453
- left: 0;
454
- top: calc(100% + 4px);
455
- z-index: 50;
456
- }
457
-
458
- .containerDropdown[data-open="true"] {
459
- display: block;
460
- }
461
- }
462
-
463
-
464
-
465
- /* react-ui/components/MorphingPopover/morphing-popover.module.css */
466
-
467
- /* CSS Variables for anchor positioning */
468
- .morphingPopoverContainer {
469
- position: relative;
470
- display: inline-block;
471
- --anchor-name: morphing-trigger;
472
- --target-width: 220px;
473
- --target-height: 120px;
474
- --transition-duration: 0.2s;
475
- }
476
-
477
- /* Trigger button styles */
478
- .morphingTrigger {
479
- anchor-name: var(--anchor-name);
480
- width: 44px;
481
- aspect-ratio: 1;
482
- border-radius: 50%;
483
- display: grid;
484
- place-items: center;
485
- font-size: 24px;
486
- cursor: pointer;
487
- border: none;
488
- background: transparent;
489
- transition: background-color 0.2s;
490
- }
491
-
492
- .morphingTrigger:hover {
493
- background-color: hsl(var(--muted) / 0.5);
494
- }
495
-
496
- /* Popover styles - anchored to trigger by default */
497
- .morphingPopover {
498
- position-anchor: var(--anchor-name);
499
- left: anchor(left);
500
- top: anchor(top);
501
- width: anchor-size(width);
502
- min-height: 0;
503
- border-radius: 50%;
504
- overflow: hidden;
505
- padding: 0;
506
- height: anchor-size(height);
507
- transition-behavior: allow-discrete;
508
- transition-property: display, overlay, width, height, top,
509
- border-radius, left, position-anchor, transform, opacity;
510
- transition-duration: var(--transition-duration);
511
- transition-timing-function: ease-out;
512
- transform-origin: center center;
513
- opacity: 0;
514
- }
515
-
516
- /* When popover is open - expand to target size */
517
- .morphingPopover:popover-open {
518
- position-anchor: fixed;
519
- left: 50%;
520
- top: 50%;
521
- transform: translate(-50%, -50%);
522
- width: var(--target-width);
523
- height: var(--target-height);
524
- border-radius: 12px;
525
- opacity: 1;
526
- border: 1px solid hsl(var(--border));
527
- background: hsl(var(--background));
528
- box-shadow: 0 10px 40px -10px hsl(var(--foreground) / 0.3);
529
- }
530
-
531
- /* Starting style for animation - browser support required */
532
- @starting-style {
533
- .morphingPopover:popover-open {
534
- position-anchor: var(--anchor-name);
535
- left: anchor(left);
536
- top: anchor(top);
537
- transform: none;
538
- border-radius: 50%;
539
- width: anchor-size(width);
540
- height: anchor-size(height);
541
- opacity: 0;
542
- }
543
- }
544
-
545
- /* Fallback for browsers without anchor positioning */
546
- @supports not (anchor-name: none) {
547
- .morphingPopover {
548
- position: fixed;
549
- left: 50%;
550
- top: 50%;
551
- transform: translate(-50%, -50%) scale(0.8);
552
- opacity: 0;
553
- pointer-events: none;
554
- }
555
-
556
- .morphingPopover:popover-open {
557
- transform: translate(-50%, -50%) scale(1);
558
- opacity: 1;
559
- pointer-events: auto;
560
- }
561
-
562
- @starting-style {
563
- .morphingPopover:popover-open {
564
- transform: translate(-50%, -50%) scale(0.8);
565
- opacity: 0;
566
- }
567
- }
568
- }
569
-
570
- /* Variant: Morphing to a specific target element */
571
- .morphingPopoverTargetContainer {
572
- position: relative;
573
- display: inline-block;
574
- --anchor-name: morphing-trigger;
575
- --target-anchor-name: morphing-target;
576
- --transition-duration: 0.2s;
577
- }
578
-
579
- .morphingPopoverTarget {
580
- position-anchor: var(--anchor-name);
581
- left: anchor(left);
582
- top: anchor(top);
583
- width: anchor-size(width);
584
- min-height: 0;
585
- border-radius: 50%;
586
- overflow: hidden;
587
- padding: 0;
588
- height: anchor-size(height);
589
- transition-behavior: allow-discrete;
590
- transition-property: display, overlay, width, height, top,
591
- border-radius, left, position-anchor, transform, opacity;
592
- transition-duration: var(--transition-duration);
593
- transition-timing-function: ease-out;
594
- }
595
-
596
- .morphingPopoverTarget:popover-open {
597
- position-anchor: var(--target-anchor-name);
598
- left: anchor(left);
599
- top: anchor(top);
600
- border-radius: 12px;
601
- min-width: 200px;
602
- min-height: 120px;
603
- border: 1px solid hsl(var(--border));
604
- background: hsl(var(--background));
605
- box-shadow: 0 10px 40px -10px hsl(var(--foreground) / 0.3);
606
- opacity: 1;
607
- }
608
-
609
- @starting-style {
610
- .morphingPopoverTarget:popover-open {
611
- position-anchor: var(--anchor-name);
612
- left: anchor(left);
613
- top: anchor(top);
614
- border-radius: 50%;
615
- width: anchor-size(width);
616
- height: anchor-size(height);
617
- opacity: 0;
618
- }
619
- }
620
-
621
-
622
-
623
- /* react-ui/primitives/DotMatrix/dot.css */
624
-
625
- /* =============================================================================
626
- * DotMatrix — progressive fill model.
627
- *
628
- * Cells light up one at a time in `pattern` order, stay lit until the
629
- * cycle resets, then repeat. Implementation uses ONE CSS animation per
630
- * matrix that drives a registered custom property `--dm-phase` from
631
- * 0 → 1 (fill), holds it at 1 (hold), then snaps back to 0 (reset)
632
- * for a rest period.
633
- *
634
- * Each cell carries a `--dm-threshold` (its position in the fill
635
- * sequence, 0..1) and computes its own `::before` opacity as a step
636
- * across `phase - threshold`, multiplied by `--dm-edge-sharpness` so
637
- * the edge can range from "instant snap" to "warm fade".
638
- *
639
- * Perf shape: N matrices = N animations total (not N × cells). Cell
640
- * opacity is computed at paint time by calc(); the compositor batches
641
- * updates via the shared phase var. With `contain: layout style paint`
642
- * each cell is isolated so work doesn't cascade.
643
- * ============================================================================= */
644
-
645
- @property --dm-phase {
646
- syntax: '<number>';
647
- initial-value: 0;
648
- inherits: true;
649
- }
650
-
651
- .dm-root {
652
- display: grid;
653
- width: 100%;
654
- gap: var(--dm-gap, 5px);
655
- padding: var(--dm-pad, 0.25rem);
656
- border-radius: 0.5rem;
657
- background-color: transparent;
658
-
659
- /* Skip render work when the matrix is offscreen. */
660
- content-visibility: auto;
661
- contain-intrinsic-size: auto 200px;
662
- transform: translateZ(0);
663
-
664
- --dm-on: var(--foreground);
665
- --dm-off: color-mix(in oklch, var(--foreground) 12%, transparent);
666
- --dm-glow: color-mix(in oklch, var(--foreground) 50%, transparent);
667
- }
668
-
669
- /* ─── Cell: base OFF layer — neutral dim ──────────────────────────────── */
670
-
671
- .dm-cell {
672
- position: relative;
673
- aspect-ratio: 1 / 1;
674
- min-width: 4px;
675
- min-height: 4px;
676
- border-radius: var(--dm-radius, 32%);
677
- background-color: color-mix(in oklch, var(--foreground) 10%, transparent);
678
- opacity: var(--dm-off-opacity, 0.45);
679
- transform: scale(var(--dm-off-scale, 0.9));
680
- contain: layout style paint;
681
-
682
- --dm-threshold: 0;
683
- --dm-stagger-delay: 0ms;
684
- }
685
-
686
- /* ─── Pseudo: ON layer — LED look, fades in as phase crosses threshold ─ */
687
-
688
- .dm-cell::before {
689
- content: '';
690
- position: absolute;
691
- inset: 0;
692
- border-radius: inherit;
693
- background-color: var(--dm-on);
694
- background-image:
695
- radial-gradient(
696
- circle at 32% 26%,
697
- rgb(255 255 255 / 0.35) 0%,
698
- rgb(255 255 255 / 0.12) 18%,
699
- transparent 48%
700
- ),
701
- radial-gradient(
702
- circle at 70% 78%,
703
- rgb(0 0 0 / 0.22) 0%,
704
- transparent 60%
705
- );
706
- box-shadow:
707
- inset 0 0 1px rgb(255 255 255 / 0.55),
708
- inset 0 0 0 1px color-mix(in oklch, var(--dm-on) 65%, transparent),
709
- inset 0 -1px 2px color-mix(in oklch, var(--dm-on) 40%, black 20%);
710
- opacity: 0;
711
- pointer-events: none;
712
- }
713
-
714
- .dm-root[data-variant='glow'] .dm-cell::before {
715
- box-shadow:
716
- inset 0 0 1px rgb(255 255 255 / 0.55),
717
- inset 0 0 0 1px color-mix(in oklch, var(--dm-on) 65%, transparent),
718
- inset 0 -1px 2px color-mix(in oklch, var(--dm-on) 40%, black 20%),
719
- 0 0 2px var(--dm-glow),
720
- 0 0 6px var(--dm-glow),
721
- 0 0 12px color-mix(in oklch, var(--dm-glow) 55%, transparent);
722
- }
723
-
724
- /* ─── Running: phase animates on root, cells derive state from it ────── */
725
-
726
- .dm-root[data-status='running'] {
727
- animation-name: var(--dm-anim-phase);
728
- animation-duration: var(--dm-cycle-total, 2600ms);
729
- animation-iteration-count: infinite;
730
- animation-timing-function: linear;
731
- animation-fill-mode: both;
732
- }
733
-
734
- /* Lit fraction for THIS cell — 0 when off, 1 when fully filled, ramped
735
- * near the threshold by `--dm-edge-sharpness`. Reused by both the pseudo
736
- * opacity (the LED glow) and the cell's scale (grows when lit). */
737
- .dm-root[data-status='running'] .dm-cell {
738
- opacity: 1;
739
- transform: scale(
740
- calc(
741
- var(--dm-off-scale, 0.88) +
742
- (var(--dm-on-scale, 1) - var(--dm-off-scale, 0.88)) *
743
- clamp(
744
- 0,
745
- (var(--dm-phase) - var(--dm-threshold)) *
746
- var(--dm-edge-sharpness, 50),
747
- 1
748
- )
749
- )
750
- );
751
- }
752
-
753
- .dm-root[data-status='running'] .dm-cell::before {
754
- opacity: clamp(
755
- 0,
756
- calc(
757
- (var(--dm-phase) - var(--dm-threshold)) *
758
- var(--dm-edge-sharpness, 50)
759
- ),
760
- 1
761
- );
762
- }
763
-
764
- /* ─── Accent cells ────────────────────────────────────────────────────── */
765
-
766
- .dm-cell[data-accent='true'] {
767
- opacity: 1;
768
- transform: scale(1);
769
- }
770
-
771
- .dm-cell[data-accent='true']::before {
772
- background-color: var(--primary);
773
- background-image: none;
774
- box-shadow:
775
- inset 0 0 1px rgb(255 255 255 / 0.5),
776
- 0 0 3px color-mix(in oklch, var(--primary) 70%, transparent),
777
- 0 0 7px color-mix(in oklch, var(--primary) 50%, transparent);
778
- opacity: 1 !important;
779
- }
780
-
781
- /* ─── Lifecycle FINAL animations ──────────────────────────────────────── */
782
-
783
- @keyframes dm-success-pop {
784
- 0% {
785
- transform: scale(0.94);
786
- filter: brightness(0.7);
787
- }
788
- 45% {
789
- transform: scale(1.18);
790
- filter: brightness(1.4);
791
- }
792
- 100% {
793
- transform: scale(1);
794
- filter: brightness(1);
795
- }
796
- }
797
-
798
- @keyframes dm-fail-strobe {
799
- 0% {
800
- transform: scale(1);
801
- filter: brightness(1);
802
- }
803
- 22% {
804
- transform: scale(1.22);
805
- filter: brightness(1.55) saturate(1.4);
806
- }
807
- 55% {
808
- transform: scale(0.92);
809
- filter: brightness(0.75);
810
- }
811
- 100% {
812
- transform: scale(0.97);
813
- filter: brightness(1);
814
- }
815
- }
816
-
817
- @keyframes dm-cancelled-dim {
818
- 0% {
819
- transform: scale(1);
820
- opacity: 1;
821
- }
822
- 100% {
823
- transform: scale(0.9);
824
- opacity: 0.55;
825
- }
826
- }
827
-
828
- .dm-root[data-status='success'] {
829
- animation: none;
830
- }
831
- .dm-root[data-status='success'] .dm-cell {
832
- opacity: 1;
833
- transform: scale(1);
834
- animation: dm-success-pop 520ms cubic-bezier(0.2, 0, 0.2, 1) both;
835
- animation-delay: var(--dm-stagger-delay, 0ms);
836
- }
837
- .dm-root[data-status='success'] .dm-cell::before {
838
- opacity: 1;
839
- }
840
-
841
- .dm-root[data-status='failed'] {
842
- animation: none;
843
- }
844
- .dm-root[data-status='failed'] .dm-cell {
845
- opacity: 1;
846
- animation: dm-fail-strobe 560ms cubic-bezier(0.2, 0, 0.2, 1) both;
847
- animation-delay: var(--dm-stagger-delay, 0ms);
848
- }
849
- .dm-root[data-status='failed'] .dm-cell::before {
850
- background-color: var(--destructive);
851
- box-shadow:
852
- inset 0 0 1px rgb(255 255 255 / 0.5),
853
- inset 0 0 0 1px color-mix(in oklch, var(--destructive) 55%, transparent),
854
- inset 0 -1px 2px color-mix(in oklch, var(--destructive) 40%, black 20%);
855
- opacity: 1;
856
- }
857
- .dm-root[data-status='failed'][data-variant='glow'] .dm-cell::before {
858
- box-shadow:
859
- inset 0 0 1px rgb(255 255 255 / 0.55),
860
- inset 0 0 0 1px color-mix(in oklch, var(--destructive) 55%, transparent),
861
- inset 0 -1px 2px color-mix(in oklch, var(--destructive) 40%, black 20%),
862
- 0 0 3px color-mix(in oklch, var(--destructive) 70%, transparent),
863
- 0 0 9px color-mix(in oklch, var(--destructive) 55%, transparent);
864
- }
865
-
866
- .dm-root[data-status='cancelled'] {
867
- animation: none;
868
- }
869
- .dm-root[data-status='cancelled'] .dm-cell {
870
- background-color: color-mix(in oklch, var(--foreground) 22%, transparent);
871
- opacity: 0.65;
872
- animation: dm-cancelled-dim 380ms cubic-bezier(0.4, 0, 0.8, 0.6) both;
873
- animation-delay: var(--dm-stagger-delay, 0ms);
874
- }
875
- .dm-root[data-status='cancelled'] .dm-cell::before {
876
- opacity: 0;
877
- }
878
-
879
- .dm-root[data-status='idle'] {
880
- animation: none;
881
- }
882
- .dm-root[data-status='idle'] .dm-cell::before {
883
- opacity: 0;
884
- }
885
-
886
- /* ─── Theme-token palettes ────────────────────────────────────────────── */
887
-
888
- .dm--foreground {
889
- --dm-on: var(--foreground);
890
- --dm-off: color-mix(in oklch, var(--foreground) 12%, transparent);
891
- --dm-glow: color-mix(in oklch, var(--foreground) 55%, transparent);
892
- }
893
-
894
- .dm--primary {
895
- --dm-on: var(--primary);
896
- --dm-off: color-mix(in oklch, var(--primary) 14%, transparent);
897
- --dm-glow: color-mix(in oklch, var(--primary) 65%, transparent);
898
- }
899
-
900
- .dm--destructive {
901
- --dm-on: var(--destructive);
902
- --dm-off: color-mix(in oklch, var(--destructive) 14%, transparent);
903
- --dm-glow: color-mix(in oklch, var(--destructive) 65%, transparent);
904
- }
905
-
906
- .dm--warning {
907
- --dm-on: var(--warning);
908
- --dm-off: color-mix(in oklch, var(--warning) 14%, transparent);
909
- --dm-glow: color-mix(in oklch, var(--warning) 65%, transparent);
910
- }
911
-
912
- /* ─── Named palettes (OKLCH for stability) ────────────────────────────── */
913
-
914
- .dm--cyan {
915
- --dm-on: oklch(90% 0.2 195);
916
- --dm-off: oklch(40% 0.08 195 / 0.4);
917
- --dm-glow: oklch(80% 0.25 195 / 0.95);
918
- }
919
- .dm--magenta {
920
- --dm-on: oklch(85% 0.25 330);
921
- --dm-off: oklch(40% 0.08 330 / 0.4);
922
- --dm-glow: oklch(75% 0.3 330 / 0.95);
923
- }
924
- .dm--yellow {
925
- --dm-on: oklch(95% 0.2 90);
926
- --dm-off: oklch(50% 0.08 90 / 0.4);
927
- --dm-glow: oklch(90% 0.25 90 / 0.95);
928
- }
929
- .dm--green {
930
- --dm-on: oklch(90% 0.25 145);
931
- --dm-off: oklch(40% 0.08 145 / 0.4);
932
- --dm-glow: oklch(80% 0.3 145 / 0.95);
933
- }
934
- .dm--orange {
935
- --dm-on: oklch(85% 0.22 50);
936
- --dm-off: oklch(45% 0.08 50 / 0.4);
937
- --dm-glow: oklch(75% 0.28 50 / 0.95);
938
- }
939
- .dm--blue {
940
- --dm-on: oklch(80% 0.22 260);
941
- --dm-off: oklch(40% 0.08 260 / 0.4);
942
- --dm-glow: oklch(70% 0.28 260 / 0.95);
943
- }
944
- .dm--red {
945
- --dm-on: oklch(70% 0.25 25);
946
- --dm-off: oklch(40% 0.08 25 / 0.4);
947
- --dm-glow: oklch(60% 0.3 25 / 0.95);
948
- }
949
- .dm--purple {
950
- --dm-on: oklch(75% 0.22 300);
951
- --dm-off: oklch(40% 0.08 300 / 0.4);
952
- --dm-glow: oklch(65% 0.28 300 / 0.95);
953
- }
954
- .dm--teal {
955
- --dm-on: oklch(82% 0.18 175);
956
- --dm-off: oklch(40% 0.08 175 / 0.4);
957
- --dm-glow: oklch(72% 0.24 175 / 0.95);
958
- }
959
- .dm--pink {
960
- --dm-on: oklch(80% 0.2 350);
961
- --dm-off: oklch(45% 0.08 350 / 0.4);
962
- --dm-glow: oklch(70% 0.26 350 / 0.95);
963
- }
964
- .dm--lime {
965
- --dm-on: oklch(88% 0.22 120);
966
- --dm-off: oklch(45% 0.08 120 / 0.4);
967
- --dm-glow: oklch(80% 0.28 120 / 0.95);
968
- }
969
- .dm--white {
970
- --dm-on: oklch(98% 0 0);
971
- --dm-off: oklch(50% 0 0 / 0.3);
972
- --dm-glow: oklch(95% 0 0 / 0.85);
973
- }
974
-
975
- /* ─── Reduced motion — freeze animations ─────────────────────────────── */
976
-
977
- @media (prefers-reduced-motion: reduce) {
978
- .dm-root[data-status='running'],
979
- .dm-root[data-status='success'] .dm-cell,
980
- .dm-root[data-status='failed'] .dm-cell,
981
- .dm-root[data-status='cancelled'] .dm-cell {
982
- animation: none !important;
983
- }
984
- .dm-cell {
985
- transform: none;
986
- }
987
- }
988
-
989
-
990
-
991
- /* react-ui/primitives/GooeyMorphingSurface/gooey-morphing.css */
992
-
993
- /* =============================================================================
994
- * GooeyMorphingSurface — CSS layer for the SVG rect morph + HTML overlays.
995
- *
996
- * Classes are prefixed `.gms-*` so they act as a manual scope (mks-ui's
997
- * rolldown build produces empty default-exports for CSS modules, so we use
998
- * plain CSS with explicit classnames referenced as string literals from
999
- * the component).
1000
- *
1001
- * Every tunable value comes from inline CSS custom props set by the React
1002
- * component at the root element. No hard-coded dimensions or timings here.
1003
- *
1004
- * Technique recap: two <rect>s inside a <g filter="url(#gooey)">. Body rect
1005
- * is a geometric CLONE of the pill when closed, and morphs into the card
1006
- * geometry (x, y, width, height, rx, ry all interpolate) when open. The
1007
- * gaussian-blur + alpha-threshold filter bends the overlapping silhouettes
1008
- * into a single shape with a soft metaball throat.
1009
- * ============================================================================= */
1010
-
1011
- .gms-root {
1012
- position: relative;
1013
- display: inline-block;
1014
- }
1015
-
1016
- .gms-shell {
1017
- position: relative;
1018
- width: var(--gms-card-w);
1019
- height: var(--gms-pill-h);
1020
- color: var(--gms-fill);
1021
- transition: height var(--gms-duration) var(--gms-ease);
1022
- /* Drop-shadow follows the fused silhouette. Chained filters = additive
1023
- * shadow layers for depth without a hard box-shadow. */
1024
- filter: drop-shadow(0 16px 38px rgb(0 0 0 / 0.35))
1025
- drop-shadow(0 4px 10px rgb(0 0 0 / 0.18));
1026
- }
1027
-
1028
- .gms-shell[data-open='true'] {
1029
- height: calc(var(--gms-pill-h) + var(--gms-card-h));
1030
- }
1031
-
1032
- .gms-svg {
1033
- position: absolute;
1034
- top: 0;
1035
- left: 50%;
1036
- transform: translateX(-50%);
1037
- display: block;
1038
- overflow: visible;
1039
- pointer-events: none;
1040
- }
1041
-
1042
- .gms-body-rect {
1043
- will-change: x, y, width, height;
1044
- transition:
1045
- x var(--gms-duration) var(--gms-ease),
1046
- y var(--gms-duration) var(--gms-ease),
1047
- width var(--gms-duration) var(--gms-ease),
1048
- height var(--gms-duration) var(--gms-ease),
1049
- rx var(--gms-duration) var(--gms-ease),
1050
- ry var(--gms-duration) var(--gms-ease);
1051
- }
1052
-
1053
- .gms-pill {
1054
- position: absolute;
1055
- top: 0;
1056
- left: var(--gms-pill-x);
1057
- width: var(--gms-pill-w);
1058
- height: var(--gms-pill-h);
1059
- display: inline-flex;
1060
- align-items: center;
1061
- justify-content: center;
1062
- gap: 0.5rem;
1063
- color: var(--card-foreground);
1064
- pointer-events: none;
1065
- z-index: 2;
1066
- }
1067
-
1068
- .gms-card {
1069
- position: absolute;
1070
- top: calc(var(--gms-pill-h) - var(--gms-overlap));
1071
- left: 0;
1072
- width: var(--gms-card-w);
1073
- height: var(--gms-card-h);
1074
- color: var(--card-foreground);
1075
- opacity: 0;
1076
- transform: translateY(4px);
1077
- pointer-events: none;
1078
- z-index: 2;
1079
- overflow: hidden;
1080
- border-radius: var(--gms-card-r);
1081
- transition:
1082
- opacity calc(var(--gms-duration) * 0.35) var(--gms-ease),
1083
- transform calc(var(--gms-duration) * 0.35) var(--gms-ease);
1084
- }
1085
-
1086
- .gms-shell[data-open='true'] .gms-card {
1087
- opacity: 1;
1088
- transform: translateY(0);
1089
- pointer-events: auto;
1090
- transition:
1091
- opacity calc(var(--gms-duration) * 0.55) var(--gms-ease)
1092
- calc(var(--gms-duration) * 0.45),
1093
- transform calc(var(--gms-duration) * 0.55) var(--gms-ease)
1094
- calc(var(--gms-duration) * 0.45);
1095
- }
1096
-
1097
- @media (prefers-reduced-motion: reduce) {
1098
- .gms-shell,
1099
- .gms-body-rect,
1100
- .gms-card {
1101
- transition-duration: 0.01ms !important;
1102
- }
1103
- }
1104
-
1105
-
1106
-
1107
- /* react-ui/primitives/waapi/Morph/techniques/useViewTransitions.module.css */
1108
-
1109
- /**
1110
- * View Transitions API - Default transition styles.
1111
- *
1112
- * These styles apply to all view-transition pseudo-elements by default,
1113
- * eliminating the need for dynamic style injection based on transition names.
1114
- *
1115
- * Usage: Apply `view-transition-name` via inline style or CSS variable:
1116
- * <div style={{ viewTransitionName: 'hero' }}>...</div>
1117
- *
1118
- * Or via CSS:
1119
- * .my-element { view-transition-name: hero; }
1120
- */
1121
-
1122
- /* Default animation for all view transitions */
1123
- ::view-transition-old(*),
1124
- ::view-transition-new(*) {
1125
- animation-duration: 300ms;
1126
- animation-timing-function: ease-out;
1127
- }
1128
-
1129
-
1130
-
1131
- /* react-ui/ui/DynamicToggle/DynamicToggle.css */
1132
-
1133
- /**
1134
- * DynamicToggle v2 — CSS state transitions.
1135
- *
1136
- * Rules requiring :has(), container queries, clip-path, or pseudo-elements.
1137
- * Layout, colors, sizing in Tailwind (DynamicToggle.styles.ts).
1138
- *
1139
- * @import '@mks2508/mks-ui/react/ui/DynamicToggle/DynamicToggle.module.css';
1140
- */
1141
-
1142
- /* ── Variables ── */
1143
- [data-slot="dt-root"] {
1144
- --dt-dur: 0.22s;
1145
- --dt-ease: cubic-bezier(0.22, 0.61, 0.36, 1);
1146
- --dt-fade: 0.45;
1147
- --dt-indicator-dur: 0.3s;
1148
- --dt-indicator-ease: cubic-bezier(0.4, 0, 0.2, 1);
1149
- }
1150
-
1151
- /* ── Track: explicit row prevents h-full items from overflowing container ── */
1152
- [data-slot="dt-root"] [data-slot="dt-track"] {
1153
- grid-template-rows: minmax(0, 1fr);
1154
- }
1155
-
1156
- /* ── Top-level option spans 2 grid cols ── */
1157
- [data-slot="dt-root"] [data-slot="dt-track"] > label {
1158
- grid-column: span 2;
1159
- }
1160
-
1161
- /* ── Primary option text ── */
1162
- [data-slot="dt-root"] [data-slot="dt-track"]:has(> input:checked) > label {
1163
- color: var(--accent-foreground);
1164
- z-index: 2;
1165
- }
1166
- [data-slot="dt-root"] [data-slot="dt-track"]:not(:has(> input:checked)) > label {
1167
- color: var(--foreground);
1168
- opacity: var(--dt-fade);
1169
- }
1170
-
1171
- /* ── Group: container queries ── */
1172
- [data-slot="dt-root"] [data-slot="dt-group"] {
1173
- container-type: size;
1174
- overflow: hidden;
1175
- }
1176
-
1177
- /* ══════════════════════════════════════════════════════════
1178
- * INDICATOR POSITIONING
1179
- *
1180
- * Modern: CSS Anchor Positioning — indicator follows active option
1181
- * Fallback: translate-based positioning for older browsers
1182
- * ══════════════════════════════════════════════════════════ */
1183
-
1184
- /* ── Anchor-based indicator (requires full anchor API) ── */
1185
- @supports (anchor-scope: all) {
1186
- /* Scope anchors per toggle instance */
1187
- [data-slot="dt-root"]:not([data-indicator="translate"]) {
1188
- anchor-scope: --dt-active;
1189
- }
1190
-
1191
- /* Active option becomes the anchor via native :checked */
1192
- [data-slot="dt-root"]:not([data-indicator="translate"]) [data-slot="dt-track"] > label:has(+ input:checked) {
1193
- anchor-name: --dt-active;
1194
- }
1195
- [data-slot="dt-root"]:not([data-indicator="translate"]) [data-slot="dt-group"] > label:has(+ input:checked) {
1196
- anchor-name: --dt-active;
1197
- }
1198
-
1199
- /* Single unified indicator: morphs from full-width to half-width */
1200
- [data-slot="dt-root"]:not([data-indicator="translate"]) [data-slot="dt-indicator"] {
1201
- position-anchor: --dt-active;
1202
- top: anchor(top);
1203
- right: anchor(right);
1204
- bottom: anchor(bottom);
1205
- left: anchor(left);
1206
- translate: none;
1207
- width: auto;
1208
- transition:
1209
- top var(--dt-indicator-dur) var(--dt-indicator-ease),
1210
- right var(--dt-indicator-dur) var(--dt-indicator-ease),
1211
- bottom var(--dt-indicator-dur) var(--dt-indicator-ease),
1212
- left var(--dt-indicator-dur) var(--dt-indicator-ease);
1213
- }
1214
-
1215
- /* Hide the group indicator — unified indicator handles everything */
1216
- [data-slot="dt-root"]:not([data-indicator="translate"]) [data-slot="dt-group-indicator"] {
1217
- display: none;
1218
- }
1219
- }
1220
-
1221
- /* ── Inset-based fallback (older browsers) — same morph as anchor but hardcoded ── */
1222
- @supports not (anchor-scope: all) {
1223
- /* Unified indicator: left/right transition morphs width + position */
1224
- [data-slot="dt-root"] [data-slot="dt-indicator"] {
1225
- left: 50%;
1226
- right: 0;
1227
- width: auto;
1228
- translate: none;
1229
- transition:
1230
- left var(--dt-indicator-dur) var(--dt-indicator-ease),
1231
- right var(--dt-indicator-dur) var(--dt-indicator-ease);
1232
- }
1233
- /* Top-level checked: indicator covers left half */
1234
- [data-slot="dt-root"] [data-slot="dt-track"]:has(> input:checked) [data-slot="dt-indicator"] {
1235
- left: 0;
1236
- right: 50%;
1237
- }
1238
- /* Group option 1 checked: indicator at 3rd quarter */
1239
- [data-slot="dt-root"] [data-slot="dt-group"]:has(input:nth-of-type(1):checked) ~ [data-slot="dt-indicator"],
1240
- [data-slot="dt-root"] [data-slot="dt-track"]:has([data-slot="dt-group"] input:nth-of-type(1):checked) [data-slot="dt-indicator"] {
1241
- left: 50%;
1242
- right: 25%;
1243
- }
1244
- /* Group option 2 checked: indicator at 4th quarter */
1245
- [data-slot="dt-root"] [data-slot="dt-group"]:has(input:nth-of-type(2):checked) ~ [data-slot="dt-indicator"],
1246
- [data-slot="dt-root"] [data-slot="dt-track"]:has([data-slot="dt-group"] input:nth-of-type(2):checked) [data-slot="dt-indicator"] {
1247
- left: 75%;
1248
- right: 0;
1249
- }
1250
- /* Hide group indicator — unified indicator handles everything */
1251
- [data-slot="dt-root"] [data-slot="dt-group-indicator"] {
1252
- display: none;
1253
- }
1254
- }
1255
-
1256
- /* ── Force inset mode via data-indicator="translate" (works regardless of @supports) ── */
1257
- [data-slot="dt-root"][data-indicator="translate"] [data-slot="dt-indicator"] {
1258
- left: 50%;
1259
- right: 0;
1260
- width: auto;
1261
- translate: none;
1262
- transition:
1263
- left var(--dt-indicator-dur) var(--dt-indicator-ease),
1264
- right var(--dt-indicator-dur) var(--dt-indicator-ease);
1265
- }
1266
- [data-slot="dt-root"][data-indicator="translate"] [data-slot="dt-track"]:has(> input:checked) [data-slot="dt-indicator"] {
1267
- left: 0;
1268
- right: 50%;
1269
- }
1270
- [data-slot="dt-root"][data-indicator="translate"] [data-slot="dt-track"]:has([data-slot="dt-group"] input:nth-of-type(1):checked) [data-slot="dt-indicator"] {
1271
- left: 50%;
1272
- right: 25%;
1273
- }
1274
- [data-slot="dt-root"][data-indicator="translate"] [data-slot="dt-track"]:has([data-slot="dt-group"] input:nth-of-type(2):checked) [data-slot="dt-indicator"] {
1275
- left: 75%;
1276
- right: 0;
1277
- }
1278
- [data-slot="dt-root"][data-indicator="translate"] [data-slot="dt-group-indicator"] {
1279
- display: none;
1280
- }
1281
-
1282
- /* ══════════════════════════════════════════════════════════
1283
- * GROUP COLLAPSED STATE
1284
- *
1285
- * ::before = title text (via data-label attr)
1286
- * ::after = combined opts text (via data-opts attr)
1287
- * <label>s = controlled by data-collapsed mode
1288
- *
1289
- * 3 modes: title | opts | title-opts (default)
1290
- * ══════════════════════════════════════════════════════════ */
1291
-
1292
- /* ── ::before — group title ── */
1293
- [data-slot="dt-group"]::before {
1294
- content: attr(data-label);
1295
- position: absolute;
1296
- left: 50%;
1297
- top: 50%;
1298
- translate: -50% -80%;
1299
- color: var(--foreground);
1300
- font-size: inherit;
1301
- font-weight: 500;
1302
- z-index: 2;
1303
- white-space: nowrap;
1304
- pointer-events: none;
1305
- transition:
1306
- scale var(--dt-dur) var(--dt-ease),
1307
- translate var(--dt-dur) var(--dt-ease),
1308
- opacity var(--dt-dur) var(--dt-ease);
1309
- }
1310
-
1311
- /* ── ::after — combined opts text ── */
1312
- [data-slot="dt-group"]::after {
1313
- content: attr(data-opts);
1314
- position: absolute;
1315
- left: 50%;
1316
- top: 50%;
1317
- translate: -50% 20%;
1318
- color: var(--muted-foreground);
1319
- font-size: 0.85em;
1320
- opacity: 0.6;
1321
- z-index: 2;
1322
- white-space: nowrap;
1323
- pointer-events: none;
1324
- transition: opacity var(--dt-dur) var(--dt-ease);
1325
- }
1326
- [data-slot="dt-group"]:not([data-opts])::after {
1327
- content: none;
1328
- }
1329
-
1330
- /* ── Group labels — transition props ── */
1331
- [data-slot="dt-root"] [data-slot="dt-group"] label {
1332
- color: var(--muted-foreground);
1333
- cursor: pointer;
1334
- z-index: 2;
1335
- transition:
1336
- color var(--dt-dur) var(--dt-ease),
1337
- opacity var(--dt-dur) var(--dt-ease),
1338
- translate var(--dt-dur) var(--dt-ease);
1339
- }
1340
- [data-slot="dt-root"] [data-slot="dt-group"] label span {
1341
- display: grid;
1342
- place-items: center;
1343
- height: 100%;
1344
- width: 100%;
1345
- border-radius: var(--dt-radius, 9999px);
1346
- transition: scale var(--dt-dur) var(--dt-ease);
1347
- }
1348
-
1349
- /* ── Collapsed mode: "title" — only ::before, labels slide+scale out ── */
1350
- [data-slot="dt-group"][data-collapsed="title"]::before {
1351
- translate: -50% -50%;
1352
- }
1353
- [data-slot="dt-group"][data-collapsed="title"]::after {
1354
- display: none;
1355
- }
1356
- [data-slot="dt-group"][data-collapsed="title"]:not(:has(input:checked)) label {
1357
- opacity: 0;
1358
- translate: 0 30%;
1359
- }
1360
- [data-slot="dt-group"][data-collapsed="title"]:not(:has(input:checked)) label span {
1361
- scale: 0.5;
1362
- }
1363
-
1364
- /* ── Collapsed mode: "opts" — only ::after, labels slide+scale out ── */
1365
- [data-slot="dt-group"][data-collapsed="opts"]::before {
1366
- display: none;
1367
- }
1368
- [data-slot="dt-group"][data-collapsed="opts"]::after {
1369
- translate: -50% -50%;
1370
- font-size: inherit;
1371
- opacity: 0.7;
1372
- }
1373
- [data-slot="dt-group"][data-collapsed="opts"]:not(:has(input:checked)) label {
1374
- opacity: 0;
1375
- translate: 0 30%;
1376
- }
1377
- [data-slot="dt-group"][data-collapsed="opts"]:not(:has(input:checked)) label span {
1378
- scale: 0.5;
1379
- }
1380
-
1381
- /* ── Collapsed mode: "title-opts" — WIP: disabled, falls back to "title" behavior ── */
1382
- /* TODO: title-opts needs a redesign — title (::before) and scaled labels overlap
1383
- at all container sizes. The codepen original morph relied on specific dimensions
1384
- that don't translate to the component's size variants. Needs a different approach
1385
- (e.g., crossfade, flex layout, or JS-measured positions). */
1386
- [data-slot="dt-group"][data-collapsed="title-opts"]::after {
1387
- content: none;
1388
- }
1389
- [data-slot="dt-group"][data-collapsed="title-opts"]::before {
1390
- translate: -50% -50%;
1391
- }
1392
- [data-slot="dt-group"][data-collapsed="title-opts"]:not(:has(input:checked)) label {
1393
- opacity: 0;
1394
- translate: 0 30%;
1395
- }
1396
-
1397
- /* ── When group expanded ── */
1398
- [data-slot="dt-group"]:has(input:checked)::before {
1399
- translate: -50% -250%;
1400
- scale: 0.85;
1401
- }
1402
- [data-slot="dt-group"]:has(input:checked)::after {
1403
- opacity: 0;
1404
- }
1405
- [data-slot="dt-group"]:has(input:checked) label {
1406
- opacity: 0.75;
1407
- color: var(--muted-foreground);
1408
- translate: 0 0;
1409
- }
1410
- [data-slot="dt-group"]:has(input:checked) label span {
1411
- scale: 1;
1412
- }
1413
- [data-slot="dt-group"]:has(input:nth-of-type(1):checked) label:nth-of-type(1),
1414
- [data-slot="dt-group"]:has(input:nth-of-type(2):checked) label:nth-of-type(2) {
1415
- color: var(--foreground);
1416
- opacity: 1;
1417
- }
1418
-
1419
- /* ══════════════════════════════════════════════════════════
1420
- * GROUP LABEL / BUBBLE (above or below the pill)
1421
- *
1422
- * Positioned via CSS. In filter/path morph modes, rendered with GooeyCanvas.
1423
- * In none mode, simple CSS-driven show/hide.
1424
- * bubblePosition: top | bottom (no left/right in v2)
1425
- * ══════════════════════════════════════════════════════════ */
1426
-
1427
- [data-slot="dt-group-label"] {
1428
- display: grid;
1429
- grid-template-rows: 0fr;
1430
- left: 20%;
1431
- right: 20%;
1432
- transition:
1433
- grid-template-rows calc(var(--dt-dur) * 1.5) var(--dt-ease),
1434
- opacity var(--dt-dur) var(--dt-ease);
1435
- opacity: 0;
1436
- background: var(--card);
1437
- border: 1px solid var(--border);
1438
- z-index: 3;
1439
- transform: translateZ(0);
1440
- -webkit-transform: translateZ(0);
1441
- }
1442
- [data-slot="dt-group-label"] > span {
1443
- overflow: hidden;
1444
- min-height: 0;
1445
- display: flex;
1446
- align-items: center;
1447
- justify-content: center;
1448
- padding: 0 0.75em;
1449
- height: calc(var(--dt-h, 38px) * 0.4);
1450
- box-sizing: border-box;
1451
- }
1452
-
1453
- /* Top position */
1454
- [data-slot="dt-group-label"][data-bubble-position="top"] {
1455
- bottom: 100%;
1456
- border-radius: calc(var(--dt-h, 38px) * 0.2) calc(var(--dt-h, 38px) * 0.2) 0 0;
1457
- border-bottom: none;
1458
- margin-bottom: -1px;
1459
- }
1460
-
1461
- /* Bottom position */
1462
- [data-slot="dt-group-label"][data-bubble-position="bottom"] {
1463
- top: 100%;
1464
- border-radius: 0 0 calc(var(--dt-h, 38px) * 0.2) calc(var(--dt-h, 38px) * 0.2);
1465
- border-top: none;
1466
- margin-top: -1px;
1467
- }
1468
-
1469
- /* When group active → group label grows (vertical: top/bottom) */
1470
- [data-slot="dt-root"]:not(:has([data-slot="dt-track"] > input:checked)) [data-slot="dt-group-label"][data-bubble-position="top"],
1471
- [data-slot="dt-root"]:not(:has([data-slot="dt-track"] > input:checked)) [data-slot="dt-group-label"][data-bubble-position="bottom"] {
1472
- grid-template-rows: 1fr;
1473
- opacity: 1;
1474
- }
1475
- [data-slot="dt-root"]:not(:has([data-slot="dt-track"] > input:checked)) [data-slot="dt-group-label"][data-bubble-position="top"] > span,
1476
- [data-slot="dt-root"]:not(:has([data-slot="dt-track"] > input:checked)) [data-slot="dt-group-label"][data-bubble-position="bottom"] > span {
1477
- padding: 0.35em 0.75em;
1478
- }
1479
-
1480
- /* ── Filter morph mode ── */
1481
- [data-slot="dt-root"][data-morph="filter"] [data-slot="dt-group-label"] {
1482
- border: none;
1483
- }
1484
- [data-slot="dt-root"][data-morph="filter"] [data-slot="dt-track"] {
1485
- position: relative;
1486
- z-index: 1;
1487
- }
1488
-
1489
- /* ── Filter morph: ::before hides on expand, gooey canvas handles junction ── */
1490
- [data-slot="dt-root"][data-morph="filter"] [data-slot="dt-group"]:has(input:checked)::before {
1491
- opacity: 0;
1492
- translate: -50% -80%;
1493
- scale: 1;
1494
- }
1495
-
1496
- /* ── Path morph mode ── */
1497
- [data-slot="dt-root"][data-morph="path"] [data-slot="dt-track"] {
1498
- position: relative;
1499
- z-index: 1;
1500
- }
1501
-
1502
-
1503
-
1504
- /* react-ui/ui/GooeyButton/gooey.css */
1505
-
1506
- /* =============================================================================
1507
- * GooeyButton — transparent hit area over the pill region.
1508
- *
1509
- * The visual pill is drawn by the <GooeyMorphingSurface> primitive; this
1510
- * layer is a single button that captures clicks in both open and closed
1511
- * states without painting anything. All layout math comes from the
1512
- * primitive's CSS custom props (--gms-pill-w, --gms-pill-h).
1513
- * ============================================================================= */
1514
-
1515
- .gbtn-host {
1516
- position: relative;
1517
- display: inline-block;
1518
- }
1519
-
1520
- .gbtn-trigger {
1521
- position: absolute;
1522
- top: 0;
1523
- left: 50%;
1524
- transform: translateX(-50%);
1525
- z-index: 3;
1526
- width: var(--gms-pill-w);
1527
- height: var(--gms-pill-h);
1528
- padding: 0;
1529
- margin: 0;
1530
- border: 0;
1531
- background: transparent;
1532
- cursor: pointer;
1533
- font: inherit;
1534
- color: inherit;
1535
- /* Pill-shaped focus ring. */
1536
- border-radius: 9999px;
1537
- }
1538
-
1539
- .gbtn-trigger:focus-visible {
1540
- outline: 2px solid var(--ring, currentColor);
1541
- outline-offset: 2px;
1542
- }
1543
-
1544
- .gbtn-trigger:disabled {
1545
- cursor: not-allowed;
1546
- pointer-events: none;
1547
- }
1548
-
1549
-
1550
-
1551
- /* react-ui/ui/Tabs/Tabs.css */
1552
-
1553
- /**
1554
- * Tabs CSS Anchor Positioning.
1555
- *
1556
- * Zero-JS position tracking for the sliding indicator using CSS Anchor API.
1557
- * The indicator automatically follows the active tab via anchor positioning.
1558
- */
1559
-
1560
- /* Scope anchors per Tabs instance */
1561
- [data-slot="tabs-list"] {
1562
- anchor-scope: --tabs-active;
1563
- }
1564
-
1565
- /* Active tab becomes the anchor */
1566
- [data-slot="tabs-tab"][data-active] {
1567
- anchor-name: --tabs-active;
1568
- }
1569
-
1570
- /* Indicator follows the active anchor */
1571
- [data-slot="tabs-indicator"] {
1572
- position-anchor: --tabs-active;
1573
- left: anchor(left);
1574
- right: anchor(right);
1575
- transition:
1576
- top 200ms cubic-bezier(0.25, 0.46, 0.45, 0.94),
1577
- left 200ms cubic-bezier(0.25, 0.46, 0.45, 0.94),
1578
- right 200ms cubic-bezier(0.25, 0.46, 0.45, 0.94),
1579
- bottom 200ms cubic-bezier(0.25, 0.46, 0.45, 0.94),
1580
- width 200ms cubic-bezier(0.25, 0.46, 0.45, 0.94),
1581
- height 200ms cubic-bezier(0.25, 0.46, 0.45, 0.94);
1582
- }
1583
-
1584
- /* Respect reduced motion preference */
1585
- @media (prefers-reduced-motion: reduce) {
1586
- [data-slot="tabs-indicator"] {
1587
- transition-duration: 0ms;
1588
- }
1589
- }
1590
-