@mks2508/mks-ui 0.7.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 (214) 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/components/MorphingPopover/MorphingPopover.types.d.ts +8 -3
  44. package/dist/react-ui/components/MorphingPopover/MorphingPopover.types.d.ts.map +1 -1
  45. package/dist/react-ui/index.js +24 -1
  46. package/dist/react-ui/primitives/AutoHeight/index.d.ts +1 -1
  47. package/dist/react-ui/primitives/CountingNumber/index.d.ts +1 -1
  48. package/dist/react-ui/primitives/DotMatrix/DotMatrix.types.d.ts +109 -0
  49. package/dist/react-ui/primitives/DotMatrix/DotMatrix.types.d.ts.map +1 -0
  50. package/dist/react-ui/primitives/DotMatrix/dot-matrix-B8DHjPGb.css +364 -0
  51. package/dist/react-ui/primitives/DotMatrix/dot-matrix.js +0 -0
  52. package/dist/react-ui/primitives/DotMatrix/index.d.ts +7 -0
  53. package/dist/react-ui/primitives/DotMatrix/index.d.ts.map +1 -0
  54. package/dist/react-ui/primitives/DotMatrix/index.js +185 -0
  55. package/dist/react-ui/primitives/DotMatrix/patterns.d.ts +32 -0
  56. package/dist/react-ui/primitives/DotMatrix/patterns.d.ts.map +1 -0
  57. package/dist/react-ui/primitives/DotMatrix/patterns.js +175 -0
  58. package/dist/react-ui/primitives/GooeyMorphingSurface/GooeyMorphingSurface.types.d.ts +100 -0
  59. package/dist/react-ui/primitives/GooeyMorphingSurface/GooeyMorphingSurface.types.d.ts.map +1 -0
  60. package/dist/react-ui/primitives/GooeyMorphingSurface/GooeyMorphingSurface.types.js +20 -0
  61. package/dist/react-ui/primitives/GooeyMorphingSurface/gooey-morphing-surface-DfdjAg5U.css +112 -0
  62. package/dist/react-ui/primitives/GooeyMorphingSurface/gooey-morphing-surface.js +0 -0
  63. package/dist/react-ui/primitives/GooeyMorphingSurface/index.d.ts +36 -0
  64. package/dist/react-ui/primitives/GooeyMorphingSurface/index.d.ts.map +1 -0
  65. package/dist/react-ui/primitives/GooeyMorphingSurface/index.js +141 -0
  66. package/dist/react-ui/primitives/index.d.ts +2 -0
  67. package/dist/react-ui/primitives/index.d.ts.map +1 -1
  68. package/dist/react-ui/primitives/index.js +4 -0
  69. package/dist/react-ui/primitives/waapi/SlidingNumber/SlidingNumber.styles.d.ts +1 -1
  70. package/dist/react-ui/primitives/waapi/SlidingText/SlidingText.styles.d.ts +1 -1
  71. package/dist/react-ui/ui/Accordion/Accordion.styles.d.ts +1 -1
  72. package/dist/react-ui/ui/Accordion/Accordion.types.d.ts +1 -1
  73. package/dist/react-ui/ui/AlertDialog/AlertDialog.styles.d.ts +1 -1
  74. package/dist/react-ui/ui/AlertDialog/AlertDialog.types.d.ts +1 -1
  75. package/dist/react-ui/ui/Badge/Badge.styles.d.ts +2 -2
  76. package/dist/react-ui/ui/Badge/Badge.types.d.ts +1 -1
  77. package/dist/react-ui/ui/Button/Button.styles.d.ts +2 -2
  78. package/dist/react-ui/ui/Button/Button.types.d.ts +1 -1
  79. package/dist/react-ui/ui/Card/Card.styles.d.ts +1 -1
  80. package/dist/react-ui/ui/Card/Card.types.d.ts +1 -1
  81. package/dist/react-ui/ui/Checkbox/Checkbox.styles.d.ts +1 -1
  82. package/dist/react-ui/ui/Checkbox/Checkbox.types.d.ts +1 -1
  83. package/dist/react-ui/ui/Combobox/Combobox.styles.d.ts +1 -1
  84. package/dist/react-ui/ui/Combobox/Combobox.types.d.ts +1 -1
  85. package/dist/react-ui/ui/CornerBracket/CornerBracket.styles.d.ts +1 -1
  86. package/dist/react-ui/ui/CornerBracket/CornerBracket.types.d.ts +1 -1
  87. package/dist/react-ui/ui/DataCard/DataCard.styles.d.ts +2 -2
  88. package/dist/react-ui/ui/DataCard/DataCard.types.d.ts +1 -1
  89. package/dist/react-ui/ui/DataCard/index.d.ts +1 -1
  90. package/dist/react-ui/ui/Dialog/Dialog.styles.d.ts +1 -1
  91. package/dist/react-ui/ui/Dialog/Dialog.types.d.ts +1 -1
  92. package/dist/react-ui/ui/DropdownMenu/DropdownMenu.styles.d.ts +1 -1
  93. package/dist/react-ui/ui/DropdownMenu/DropdownMenu.types.d.ts +1 -1
  94. package/dist/react-ui/ui/DynamicToggle/DynamicToggle.styles.d.ts +1 -1
  95. package/dist/react-ui/ui/DynamicToggle/DynamicToggle.types.d.ts +1 -1
  96. package/dist/react-ui/ui/Field/Field.styles.d.ts +1 -1
  97. package/dist/react-ui/ui/Field/Field.types.d.ts +1 -1
  98. package/dist/react-ui/ui/FileIcon/FileIcon.styles.d.ts +25 -0
  99. package/dist/react-ui/ui/FileIcon/FileIcon.styles.d.ts.map +1 -0
  100. package/dist/react-ui/ui/FileIcon/FileIcon.styles.js +31 -0
  101. package/dist/react-ui/ui/FileIcon/FileIcon.types.d.ts +89 -0
  102. package/dist/react-ui/ui/FileIcon/FileIcon.types.d.ts.map +1 -0
  103. package/dist/react-ui/ui/FileIcon/index.d.ts +46 -0
  104. package/dist/react-ui/ui/FileIcon/index.d.ts.map +1 -0
  105. package/dist/react-ui/ui/FileIcon/index.js +138 -0
  106. package/dist/react-ui/ui/FileItem/FileItem.styles.d.ts +47 -0
  107. package/dist/react-ui/ui/FileItem/FileItem.styles.d.ts.map +1 -0
  108. package/dist/react-ui/ui/FileItem/FileItem.styles.js +60 -0
  109. package/dist/react-ui/ui/FileItem/FileItem.types.d.ts +84 -0
  110. package/dist/react-ui/ui/FileItem/FileItem.types.d.ts.map +1 -0
  111. package/dist/react-ui/ui/FileItem/index.d.ts +48 -0
  112. package/dist/react-ui/ui/FileItem/index.d.ts.map +1 -0
  113. package/dist/react-ui/ui/FileItem/index.js +124 -0
  114. package/dist/react-ui/ui/FilePanel/FilePanel.styles.d.ts +34 -0
  115. package/dist/react-ui/ui/FilePanel/FilePanel.styles.d.ts.map +1 -0
  116. package/dist/react-ui/ui/FilePanel/FilePanel.styles.js +57 -0
  117. package/dist/react-ui/ui/FilePanel/FilePanel.types.d.ts +55 -0
  118. package/dist/react-ui/ui/FilePanel/FilePanel.types.d.ts.map +1 -0
  119. package/dist/react-ui/ui/FilePanel/index.d.ts +55 -0
  120. package/dist/react-ui/ui/FilePanel/index.d.ts.map +1 -0
  121. package/dist/react-ui/ui/FilePanel/index.js +107 -0
  122. package/dist/react-ui/ui/FileTree/FileTree.styles.d.ts +31 -0
  123. package/dist/react-ui/ui/FileTree/FileTree.styles.d.ts.map +1 -0
  124. package/dist/react-ui/ui/FileTree/FileTree.styles.js +45 -0
  125. package/dist/react-ui/ui/FileTree/FileTree.types.d.ts +95 -0
  126. package/dist/react-ui/ui/FileTree/FileTree.types.d.ts.map +1 -0
  127. package/dist/react-ui/ui/FileTree/index.d.ts +60 -0
  128. package/dist/react-ui/ui/FileTree/index.d.ts.map +1 -0
  129. package/dist/react-ui/ui/FileTree/index.js +226 -0
  130. package/dist/react-ui/ui/GooeyButton/GooeyButton.types.d.ts +35 -0
  131. package/dist/react-ui/ui/GooeyButton/GooeyButton.types.d.ts.map +1 -0
  132. package/dist/react-ui/ui/GooeyButton/gooey-button-8rHWiw0w.css +47 -0
  133. package/dist/react-ui/ui/GooeyButton/gooey-button.js +0 -0
  134. package/dist/react-ui/ui/GooeyButton/index.d.ts +26 -0
  135. package/dist/react-ui/ui/GooeyButton/index.d.ts.map +1 -0
  136. package/dist/react-ui/ui/GooeyButton/index.js +118 -0
  137. package/dist/react-ui/ui/Input/Input.styles.d.ts +1 -1
  138. package/dist/react-ui/ui/Input/Input.types.d.ts +1 -1
  139. package/dist/react-ui/ui/InputGroup/InputGroup.styles.d.ts +1 -1
  140. package/dist/react-ui/ui/InputGroup/InputGroup.types.d.ts +1 -1
  141. package/dist/react-ui/ui/Label/Label.styles.d.ts +1 -1
  142. package/dist/react-ui/ui/Label/Label.types.d.ts +1 -1
  143. package/dist/react-ui/ui/Menu/Menu.styles.d.ts +1 -1
  144. package/dist/react-ui/ui/Menu/Menu.types.d.ts +2 -2
  145. package/dist/react-ui/ui/MiddleTruncatePath/MiddleTruncatePath.styles.d.ts +23 -0
  146. package/dist/react-ui/ui/MiddleTruncatePath/MiddleTruncatePath.styles.d.ts.map +1 -0
  147. package/dist/react-ui/ui/MiddleTruncatePath/MiddleTruncatePath.styles.js +32 -0
  148. package/dist/react-ui/ui/MiddleTruncatePath/MiddleTruncatePath.types.d.ts +43 -0
  149. package/dist/react-ui/ui/MiddleTruncatePath/MiddleTruncatePath.types.d.ts.map +1 -0
  150. package/dist/react-ui/ui/MiddleTruncatePath/index.d.ts +33 -0
  151. package/dist/react-ui/ui/MiddleTruncatePath/index.d.ts.map +1 -0
  152. package/dist/react-ui/ui/MiddleTruncatePath/index.js +60 -0
  153. package/dist/react-ui/ui/OperationCard/OperationCard.context.d.ts +17 -0
  154. package/dist/react-ui/ui/OperationCard/OperationCard.context.d.ts.map +1 -0
  155. package/dist/react-ui/ui/OperationCard/OperationCard.context.js +27 -0
  156. package/dist/react-ui/ui/OperationCard/OperationCard.styles.d.ts +19 -0
  157. package/dist/react-ui/ui/OperationCard/OperationCard.styles.d.ts.map +1 -0
  158. package/dist/react-ui/ui/OperationCard/OperationCard.styles.js +39 -0
  159. package/dist/react-ui/ui/OperationCard/OperationCard.types.d.ts +188 -0
  160. package/dist/react-ui/ui/OperationCard/OperationCard.types.d.ts.map +1 -0
  161. package/dist/react-ui/ui/OperationCard/index.d.ts +45 -0
  162. package/dist/react-ui/ui/OperationCard/index.d.ts.map +1 -0
  163. package/dist/react-ui/ui/OperationCard/index.js +118 -0
  164. package/dist/react-ui/ui/OperationCard/parts/OperationCardActions.d.ts +3 -0
  165. package/dist/react-ui/ui/OperationCard/parts/OperationCardActions.d.ts.map +1 -0
  166. package/dist/react-ui/ui/OperationCard/parts/OperationCardActions.js +86 -0
  167. package/dist/react-ui/ui/OperationCard/parts/OperationCardHeader.d.ts +14 -0
  168. package/dist/react-ui/ui/OperationCard/parts/OperationCardHeader.d.ts.map +1 -0
  169. package/dist/react-ui/ui/OperationCard/parts/OperationCardHeader.js +62 -0
  170. package/dist/react-ui/ui/OperationCard/parts/OperationCardProgress.d.ts +3 -0
  171. package/dist/react-ui/ui/OperationCard/parts/OperationCardProgress.d.ts.map +1 -0
  172. package/dist/react-ui/ui/OperationCard/parts/OperationCardProgress.js +37 -0
  173. package/dist/react-ui/ui/OperationCard/parts/OperationCardStats.d.ts +3 -0
  174. package/dist/react-ui/ui/OperationCard/parts/OperationCardStats.d.ts.map +1 -0
  175. package/dist/react-ui/ui/OperationCard/parts/OperationCardStats.js +42 -0
  176. package/dist/react-ui/ui/OperationCard/parts/OperationCardVisualizer.d.ts +3 -0
  177. package/dist/react-ui/ui/OperationCard/parts/OperationCardVisualizer.d.ts.map +1 -0
  178. package/dist/react-ui/ui/OperationCard/parts/OperationCardVisualizer.js +53 -0
  179. package/dist/react-ui/ui/Popover/Popover.styles.d.ts +1 -1
  180. package/dist/react-ui/ui/Popover/Popover.types.d.ts +1 -1
  181. package/dist/react-ui/ui/Progress/Progress.styles.d.ts +1 -1
  182. package/dist/react-ui/ui/Progress/Progress.types.d.ts +2 -2
  183. package/dist/react-ui/ui/Select/Select.styles.d.ts +1 -1
  184. package/dist/react-ui/ui/Select/Select.types.d.ts +1 -1
  185. package/dist/react-ui/ui/Separator/Separator.styles.d.ts +1 -1
  186. package/dist/react-ui/ui/Separator/Separator.types.d.ts +1 -1
  187. package/dist/react-ui/ui/Switch/Switch.styles.d.ts +1 -1
  188. package/dist/react-ui/ui/Switch/Switch.types.d.ts +1 -1
  189. package/dist/react-ui/ui/Tabs/Tabs.styles.d.ts +4 -4
  190. package/dist/react-ui/ui/Tabs/Tabs.types.d.ts +3 -3
  191. package/dist/react-ui/ui/TextFlow/TextFlow.styles.d.ts +1 -1
  192. package/dist/react-ui/ui/Textarea/Textarea.styles.d.ts +1 -1
  193. package/dist/react-ui/ui/Textarea/Textarea.types.d.ts +1 -1
  194. package/dist/react-ui/ui/Tooltip/Tooltip.styles.d.ts +1 -1
  195. package/dist/react-ui/ui/Tooltip/Tooltip.types.d.ts +1 -1
  196. package/dist/react-ui/ui/index.d.ts +7 -0
  197. package/dist/react-ui/ui/index.d.ts.map +1 -1
  198. package/dist/react-ui/ui/index.js +19 -0
  199. package/package.json +2 -2
  200. package/dist/index.css +0 -1059
  201. package/dist/react-ui/blocks/Sidebar/animations/tooltip.css +0 -330
  202. package/dist/react-ui/blocks/Terminal/panel/TerminalFilterDropdown/terminal-filter-dropdown.module.css +0 -60
  203. package/dist/react-ui/blocks/Terminal/panel/TerminalSessionTabs/terminal-session-tabs.module.css +0 -60
  204. package/dist/react-ui/components/MorphingPopover/morphing-popover.module.css +0 -154
  205. package/dist/react-ui/primitives/waapi/Morph/techniques/useViewTransitions.module.css +0 -20
  206. package/dist/react-ui/ui/DynamicToggle/DynamicToggle.css +0 -369
  207. package/dist/react-ui/ui/Tabs/Tabs.css +0 -38
  208. /package/dist/{css/blocks-Sidebar-animations-tooltip.css → react-ui/blocks/Sidebar/animations/tooltip-keyframes-DRT9W6Xj.css} +0 -0
  209. /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
  210. /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
  211. /package/dist/{css/components-MorphingPopover-morphing-popover.module.css → react-ui/components/MorphingPopover/morphing-popover.module-T3s-wJN-.css} +0 -0
  212. /package/dist/{css/primitives-waapi-Morph-techniques-useViewTransitions.module.css → react-ui/primitives/waapi/Morph/techniques/useViewTransitions.module-DNDWYN8q.css} +0 -0
  213. /package/dist/{css/ui-DynamicToggle-DynamicToggle.css → react-ui/ui/DynamicToggle/DynamicToggle-DY2Hle7P.css} +0 -0
  214. /package/dist/{css/ui-Tabs-Tabs.css → react-ui/ui/Tabs/Tabs-DqzZRGB3.css} +0 -0
package/dist/index.css DELETED
@@ -1,1059 +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/waapi/Morph/techniques/useViewTransitions.module.css */
624
-
625
- /**
626
- * View Transitions API - Default transition styles.
627
- *
628
- * These styles apply to all view-transition pseudo-elements by default,
629
- * eliminating the need for dynamic style injection based on transition names.
630
- *
631
- * Usage: Apply `view-transition-name` via inline style or CSS variable:
632
- * <div style={{ viewTransitionName: 'hero' }}>...</div>
633
- *
634
- * Or via CSS:
635
- * .my-element { view-transition-name: hero; }
636
- */
637
-
638
- /* Default animation for all view transitions */
639
- ::view-transition-old(*),
640
- ::view-transition-new(*) {
641
- animation-duration: 300ms;
642
- animation-timing-function: ease-out;
643
- }
644
-
645
-
646
-
647
- /* react-ui/ui/DynamicToggle/DynamicToggle.css */
648
-
649
- /**
650
- * DynamicToggle v2 — CSS state transitions.
651
- *
652
- * Rules requiring :has(), container queries, clip-path, or pseudo-elements.
653
- * Layout, colors, sizing in Tailwind (DynamicToggle.styles.ts).
654
- *
655
- * @import '@mks2508/mks-ui/react/ui/DynamicToggle/DynamicToggle.module.css';
656
- */
657
-
658
- /* ── Variables ── */
659
- [data-slot="dt-root"] {
660
- --dt-dur: 0.22s;
661
- --dt-ease: cubic-bezier(0.22, 0.61, 0.36, 1);
662
- --dt-fade: 0.45;
663
- --dt-indicator-dur: 0.3s;
664
- --dt-indicator-ease: cubic-bezier(0.4, 0, 0.2, 1);
665
- }
666
-
667
- /* ── Track: explicit row prevents h-full items from overflowing container ── */
668
- [data-slot="dt-root"] [data-slot="dt-track"] {
669
- grid-template-rows: minmax(0, 1fr);
670
- }
671
-
672
- /* ── Top-level option spans 2 grid cols ── */
673
- [data-slot="dt-root"] [data-slot="dt-track"] > label {
674
- grid-column: span 2;
675
- }
676
-
677
- /* ── Primary option text ── */
678
- [data-slot="dt-root"] [data-slot="dt-track"]:has(> input:checked) > label {
679
- color: var(--accent-foreground);
680
- z-index: 2;
681
- }
682
- [data-slot="dt-root"] [data-slot="dt-track"]:not(:has(> input:checked)) > label {
683
- color: var(--foreground);
684
- opacity: var(--dt-fade);
685
- }
686
-
687
- /* ── Group: container queries ── */
688
- [data-slot="dt-root"] [data-slot="dt-group"] {
689
- container-type: size;
690
- overflow: hidden;
691
- }
692
-
693
- /* ══════════════════════════════════════════════════════════
694
- * INDICATOR POSITIONING
695
- *
696
- * Modern: CSS Anchor Positioning — indicator follows active option
697
- * Fallback: translate-based positioning for older browsers
698
- * ══════════════════════════════════════════════════════════ */
699
-
700
- /* ── Anchor-based indicator (requires full anchor API) ── */
701
- @supports (anchor-scope: all) {
702
- /* Scope anchors per toggle instance */
703
- [data-slot="dt-root"]:not([data-indicator="translate"]) {
704
- anchor-scope: --dt-active;
705
- }
706
-
707
- /* Active option becomes the anchor via native :checked */
708
- [data-slot="dt-root"]:not([data-indicator="translate"]) [data-slot="dt-track"] > label:has(+ input:checked) {
709
- anchor-name: --dt-active;
710
- }
711
- [data-slot="dt-root"]:not([data-indicator="translate"]) [data-slot="dt-group"] > label:has(+ input:checked) {
712
- anchor-name: --dt-active;
713
- }
714
-
715
- /* Single unified indicator: morphs from full-width to half-width */
716
- [data-slot="dt-root"]:not([data-indicator="translate"]) [data-slot="dt-indicator"] {
717
- position-anchor: --dt-active;
718
- top: anchor(top);
719
- right: anchor(right);
720
- bottom: anchor(bottom);
721
- left: anchor(left);
722
- translate: none;
723
- width: auto;
724
- transition:
725
- top var(--dt-indicator-dur) var(--dt-indicator-ease),
726
- right var(--dt-indicator-dur) var(--dt-indicator-ease),
727
- bottom var(--dt-indicator-dur) var(--dt-indicator-ease),
728
- left var(--dt-indicator-dur) var(--dt-indicator-ease);
729
- }
730
-
731
- /* Hide the group indicator — unified indicator handles everything */
732
- [data-slot="dt-root"]:not([data-indicator="translate"]) [data-slot="dt-group-indicator"] {
733
- display: none;
734
- }
735
- }
736
-
737
- /* ── Inset-based fallback (older browsers) — same morph as anchor but hardcoded ── */
738
- @supports not (anchor-scope: all) {
739
- /* Unified indicator: left/right transition morphs width + position */
740
- [data-slot="dt-root"] [data-slot="dt-indicator"] {
741
- left: 50%;
742
- right: 0;
743
- width: auto;
744
- translate: none;
745
- transition:
746
- left var(--dt-indicator-dur) var(--dt-indicator-ease),
747
- right var(--dt-indicator-dur) var(--dt-indicator-ease);
748
- }
749
- /* Top-level checked: indicator covers left half */
750
- [data-slot="dt-root"] [data-slot="dt-track"]:has(> input:checked) [data-slot="dt-indicator"] {
751
- left: 0;
752
- right: 50%;
753
- }
754
- /* Group option 1 checked: indicator at 3rd quarter */
755
- [data-slot="dt-root"] [data-slot="dt-group"]:has(input:nth-of-type(1):checked) ~ [data-slot="dt-indicator"],
756
- [data-slot="dt-root"] [data-slot="dt-track"]:has([data-slot="dt-group"] input:nth-of-type(1):checked) [data-slot="dt-indicator"] {
757
- left: 50%;
758
- right: 25%;
759
- }
760
- /* Group option 2 checked: indicator at 4th quarter */
761
- [data-slot="dt-root"] [data-slot="dt-group"]:has(input:nth-of-type(2):checked) ~ [data-slot="dt-indicator"],
762
- [data-slot="dt-root"] [data-slot="dt-track"]:has([data-slot="dt-group"] input:nth-of-type(2):checked) [data-slot="dt-indicator"] {
763
- left: 75%;
764
- right: 0;
765
- }
766
- /* Hide group indicator — unified indicator handles everything */
767
- [data-slot="dt-root"] [data-slot="dt-group-indicator"] {
768
- display: none;
769
- }
770
- }
771
-
772
- /* ── Force inset mode via data-indicator="translate" (works regardless of @supports) ── */
773
- [data-slot="dt-root"][data-indicator="translate"] [data-slot="dt-indicator"] {
774
- left: 50%;
775
- right: 0;
776
- width: auto;
777
- translate: none;
778
- transition:
779
- left var(--dt-indicator-dur) var(--dt-indicator-ease),
780
- right var(--dt-indicator-dur) var(--dt-indicator-ease);
781
- }
782
- [data-slot="dt-root"][data-indicator="translate"] [data-slot="dt-track"]:has(> input:checked) [data-slot="dt-indicator"] {
783
- left: 0;
784
- right: 50%;
785
- }
786
- [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"] {
787
- left: 50%;
788
- right: 25%;
789
- }
790
- [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"] {
791
- left: 75%;
792
- right: 0;
793
- }
794
- [data-slot="dt-root"][data-indicator="translate"] [data-slot="dt-group-indicator"] {
795
- display: none;
796
- }
797
-
798
- /* ══════════════════════════════════════════════════════════
799
- * GROUP COLLAPSED STATE
800
- *
801
- * ::before = title text (via data-label attr)
802
- * ::after = combined opts text (via data-opts attr)
803
- * <label>s = controlled by data-collapsed mode
804
- *
805
- * 3 modes: title | opts | title-opts (default)
806
- * ══════════════════════════════════════════════════════════ */
807
-
808
- /* ── ::before — group title ── */
809
- [data-slot="dt-group"]::before {
810
- content: attr(data-label);
811
- position: absolute;
812
- left: 50%;
813
- top: 50%;
814
- translate: -50% -80%;
815
- color: var(--foreground);
816
- font-size: inherit;
817
- font-weight: 500;
818
- z-index: 2;
819
- white-space: nowrap;
820
- pointer-events: none;
821
- transition:
822
- scale var(--dt-dur) var(--dt-ease),
823
- translate var(--dt-dur) var(--dt-ease),
824
- opacity var(--dt-dur) var(--dt-ease);
825
- }
826
-
827
- /* ── ::after — combined opts text ── */
828
- [data-slot="dt-group"]::after {
829
- content: attr(data-opts);
830
- position: absolute;
831
- left: 50%;
832
- top: 50%;
833
- translate: -50% 20%;
834
- color: var(--muted-foreground);
835
- font-size: 0.85em;
836
- opacity: 0.6;
837
- z-index: 2;
838
- white-space: nowrap;
839
- pointer-events: none;
840
- transition: opacity var(--dt-dur) var(--dt-ease);
841
- }
842
- [data-slot="dt-group"]:not([data-opts])::after {
843
- content: none;
844
- }
845
-
846
- /* ── Group labels — transition props ── */
847
- [data-slot="dt-root"] [data-slot="dt-group"] label {
848
- color: var(--muted-foreground);
849
- cursor: pointer;
850
- z-index: 2;
851
- transition:
852
- color var(--dt-dur) var(--dt-ease),
853
- opacity var(--dt-dur) var(--dt-ease),
854
- translate var(--dt-dur) var(--dt-ease);
855
- }
856
- [data-slot="dt-root"] [data-slot="dt-group"] label span {
857
- display: grid;
858
- place-items: center;
859
- height: 100%;
860
- width: 100%;
861
- border-radius: var(--dt-radius, 9999px);
862
- transition: scale var(--dt-dur) var(--dt-ease);
863
- }
864
-
865
- /* ── Collapsed mode: "title" — only ::before, labels slide+scale out ── */
866
- [data-slot="dt-group"][data-collapsed="title"]::before {
867
- translate: -50% -50%;
868
- }
869
- [data-slot="dt-group"][data-collapsed="title"]::after {
870
- display: none;
871
- }
872
- [data-slot="dt-group"][data-collapsed="title"]:not(:has(input:checked)) label {
873
- opacity: 0;
874
- translate: 0 30%;
875
- }
876
- [data-slot="dt-group"][data-collapsed="title"]:not(:has(input:checked)) label span {
877
- scale: 0.5;
878
- }
879
-
880
- /* ── Collapsed mode: "opts" — only ::after, labels slide+scale out ── */
881
- [data-slot="dt-group"][data-collapsed="opts"]::before {
882
- display: none;
883
- }
884
- [data-slot="dt-group"][data-collapsed="opts"]::after {
885
- translate: -50% -50%;
886
- font-size: inherit;
887
- opacity: 0.7;
888
- }
889
- [data-slot="dt-group"][data-collapsed="opts"]:not(:has(input:checked)) label {
890
- opacity: 0;
891
- translate: 0 30%;
892
- }
893
- [data-slot="dt-group"][data-collapsed="opts"]:not(:has(input:checked)) label span {
894
- scale: 0.5;
895
- }
896
-
897
- /* ── Collapsed mode: "title-opts" — WIP: disabled, falls back to "title" behavior ── */
898
- /* TODO: title-opts needs a redesign — title (::before) and scaled labels overlap
899
- at all container sizes. The codepen original morph relied on specific dimensions
900
- that don't translate to the component's size variants. Needs a different approach
901
- (e.g., crossfade, flex layout, or JS-measured positions). */
902
- [data-slot="dt-group"][data-collapsed="title-opts"]::after {
903
- content: none;
904
- }
905
- [data-slot="dt-group"][data-collapsed="title-opts"]::before {
906
- translate: -50% -50%;
907
- }
908
- [data-slot="dt-group"][data-collapsed="title-opts"]:not(:has(input:checked)) label {
909
- opacity: 0;
910
- translate: 0 30%;
911
- }
912
-
913
- /* ── When group expanded ── */
914
- [data-slot="dt-group"]:has(input:checked)::before {
915
- translate: -50% -250%;
916
- scale: 0.85;
917
- }
918
- [data-slot="dt-group"]:has(input:checked)::after {
919
- opacity: 0;
920
- }
921
- [data-slot="dt-group"]:has(input:checked) label {
922
- opacity: 0.75;
923
- color: var(--muted-foreground);
924
- translate: 0 0;
925
- }
926
- [data-slot="dt-group"]:has(input:checked) label span {
927
- scale: 1;
928
- }
929
- [data-slot="dt-group"]:has(input:nth-of-type(1):checked) label:nth-of-type(1),
930
- [data-slot="dt-group"]:has(input:nth-of-type(2):checked) label:nth-of-type(2) {
931
- color: var(--foreground);
932
- opacity: 1;
933
- }
934
-
935
- /* ══════════════════════════════════════════════════════════
936
- * GROUP LABEL / BUBBLE (above or below the pill)
937
- *
938
- * Positioned via CSS. In filter/path morph modes, rendered with GooeyCanvas.
939
- * In none mode, simple CSS-driven show/hide.
940
- * bubblePosition: top | bottom (no left/right in v2)
941
- * ══════════════════════════════════════════════════════════ */
942
-
943
- [data-slot="dt-group-label"] {
944
- display: grid;
945
- grid-template-rows: 0fr;
946
- left: 20%;
947
- right: 20%;
948
- transition:
949
- grid-template-rows calc(var(--dt-dur) * 1.5) var(--dt-ease),
950
- opacity var(--dt-dur) var(--dt-ease);
951
- opacity: 0;
952
- background: var(--card);
953
- border: 1px solid var(--border);
954
- z-index: 3;
955
- transform: translateZ(0);
956
- -webkit-transform: translateZ(0);
957
- }
958
- [data-slot="dt-group-label"] > span {
959
- overflow: hidden;
960
- min-height: 0;
961
- display: flex;
962
- align-items: center;
963
- justify-content: center;
964
- padding: 0 0.75em;
965
- height: calc(var(--dt-h, 38px) * 0.4);
966
- box-sizing: border-box;
967
- }
968
-
969
- /* Top position */
970
- [data-slot="dt-group-label"][data-bubble-position="top"] {
971
- bottom: 100%;
972
- border-radius: calc(var(--dt-h, 38px) * 0.2) calc(var(--dt-h, 38px) * 0.2) 0 0;
973
- border-bottom: none;
974
- margin-bottom: -1px;
975
- }
976
-
977
- /* Bottom position */
978
- [data-slot="dt-group-label"][data-bubble-position="bottom"] {
979
- top: 100%;
980
- border-radius: 0 0 calc(var(--dt-h, 38px) * 0.2) calc(var(--dt-h, 38px) * 0.2);
981
- border-top: none;
982
- margin-top: -1px;
983
- }
984
-
985
- /* When group active → group label grows (vertical: top/bottom) */
986
- [data-slot="dt-root"]:not(:has([data-slot="dt-track"] > input:checked)) [data-slot="dt-group-label"][data-bubble-position="top"],
987
- [data-slot="dt-root"]:not(:has([data-slot="dt-track"] > input:checked)) [data-slot="dt-group-label"][data-bubble-position="bottom"] {
988
- grid-template-rows: 1fr;
989
- opacity: 1;
990
- }
991
- [data-slot="dt-root"]:not(:has([data-slot="dt-track"] > input:checked)) [data-slot="dt-group-label"][data-bubble-position="top"] > span,
992
- [data-slot="dt-root"]:not(:has([data-slot="dt-track"] > input:checked)) [data-slot="dt-group-label"][data-bubble-position="bottom"] > span {
993
- padding: 0.35em 0.75em;
994
- }
995
-
996
- /* ── Filter morph mode ── */
997
- [data-slot="dt-root"][data-morph="filter"] [data-slot="dt-group-label"] {
998
- border: none;
999
- }
1000
- [data-slot="dt-root"][data-morph="filter"] [data-slot="dt-track"] {
1001
- position: relative;
1002
- z-index: 1;
1003
- }
1004
-
1005
- /* ── Filter morph: ::before hides on expand, gooey canvas handles junction ── */
1006
- [data-slot="dt-root"][data-morph="filter"] [data-slot="dt-group"]:has(input:checked)::before {
1007
- opacity: 0;
1008
- translate: -50% -80%;
1009
- scale: 1;
1010
- }
1011
-
1012
- /* ── Path morph mode ── */
1013
- [data-slot="dt-root"][data-morph="path"] [data-slot="dt-track"] {
1014
- position: relative;
1015
- z-index: 1;
1016
- }
1017
-
1018
-
1019
-
1020
- /* react-ui/ui/Tabs/Tabs.css */
1021
-
1022
- /**
1023
- * Tabs CSS Anchor Positioning.
1024
- *
1025
- * Zero-JS position tracking for the sliding indicator using CSS Anchor API.
1026
- * The indicator automatically follows the active tab via anchor positioning.
1027
- */
1028
-
1029
- /* Scope anchors per Tabs instance */
1030
- [data-slot="tabs-list"] {
1031
- anchor-scope: --tabs-active;
1032
- }
1033
-
1034
- /* Active tab becomes the anchor */
1035
- [data-slot="tabs-tab"][data-active] {
1036
- anchor-name: --tabs-active;
1037
- }
1038
-
1039
- /* Indicator follows the active anchor */
1040
- [data-slot="tabs-indicator"] {
1041
- position-anchor: --tabs-active;
1042
- left: anchor(left);
1043
- right: anchor(right);
1044
- transition:
1045
- top 200ms cubic-bezier(0.25, 0.46, 0.45, 0.94),
1046
- left 200ms cubic-bezier(0.25, 0.46, 0.45, 0.94),
1047
- right 200ms cubic-bezier(0.25, 0.46, 0.45, 0.94),
1048
- bottom 200ms cubic-bezier(0.25, 0.46, 0.45, 0.94),
1049
- width 200ms cubic-bezier(0.25, 0.46, 0.45, 0.94),
1050
- height 200ms cubic-bezier(0.25, 0.46, 0.45, 0.94);
1051
- }
1052
-
1053
- /* Respect reduced motion preference */
1054
- @media (prefers-reduced-motion: reduce) {
1055
- [data-slot="tabs-indicator"] {
1056
- transition-duration: 0ms;
1057
- }
1058
- }
1059
-