@mks2508/mks-ui 0.8.1 → 0.8.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (132) hide show
  1. package/dist/index.css +1594 -0
  2. package/dist/react-ui/blocks/Sidebar/animations/tooltip.css +330 -0
  3. package/dist/react-ui/blocks/Terminal/TerminalDisplay.styles.d.ts +1 -1
  4. package/dist/react-ui/blocks/Terminal/TerminalDisplay.types.d.ts +1 -1
  5. package/dist/react-ui/blocks/Terminal/components/LogLineBadges/LogLineBadges.styles.d.ts +1 -1
  6. package/dist/react-ui/blocks/Terminal/components/TerminalLogBadge/TerminalLogBadge.styles.d.ts +1 -1
  7. package/dist/react-ui/blocks/Terminal/components/TerminalLogBadge/TerminalLogBadge.types.d.ts +1 -1
  8. package/dist/react-ui/blocks/Terminal/controls/TerminalActionBar/TerminalActionBar.styles.d.ts +1 -1
  9. package/dist/react-ui/blocks/Terminal/controls/TerminalActionBar/TerminalActionBar.types.d.ts +1 -1
  10. package/dist/react-ui/blocks/Terminal/controls/TerminalConnectionStatus/TerminalConnectionStatus.styles.d.ts +1 -1
  11. package/dist/react-ui/blocks/Terminal/controls/TerminalConnectionStatus/TerminalConnectionStatus.types.d.ts +1 -1
  12. package/dist/react-ui/blocks/Terminal/controls/TerminalFontControls/TerminalFontControls.styles.d.ts +1 -1
  13. package/dist/react-ui/blocks/Terminal/controls/TerminalFontControls/TerminalFontControls.types.d.ts +1 -1
  14. package/dist/react-ui/blocks/Terminal/controls/TerminalSplitButton/TerminalSplitButton.styles.d.ts +1 -1
  15. package/dist/react-ui/blocks/Terminal/controls/TerminalSplitButton/TerminalSplitButton.types.d.ts +1 -1
  16. package/dist/react-ui/blocks/Terminal/controls/TerminalStatusBar/TerminalStatusBar.styles.d.ts +1 -1
  17. package/dist/react-ui/blocks/Terminal/controls/TerminalStatusBar/TerminalStatusBar.types.d.ts +1 -1
  18. package/dist/react-ui/blocks/Terminal/panel/TerminalDebugPanel/TerminalDebugPanel.styles.d.ts +1 -1
  19. package/dist/react-ui/blocks/Terminal/panel/TerminalDebugPanel/TerminalDebugPanel.types.d.ts +1 -1
  20. package/dist/react-ui/blocks/Terminal/panel/TerminalFilterDropdown/TerminalFilterDropdown.styles.d.ts +1 -1
  21. package/dist/react-ui/blocks/Terminal/panel/TerminalFilterDropdown/TerminalFilterDropdown.types.d.ts +1 -1
  22. package/dist/react-ui/blocks/Terminal/panel/TerminalFilterDropdown/terminal-filter-dropdown.module.css +60 -0
  23. package/dist/react-ui/blocks/Terminal/panel/TerminalFilterTabs/TerminalFilterTabs.styles.d.ts +1 -1
  24. package/dist/react-ui/blocks/Terminal/panel/TerminalFilterTabs/TerminalFilterTabs.types.d.ts +1 -1
  25. package/dist/react-ui/blocks/Terminal/panel/TerminalInteractivePanelWterm.d.ts.map +1 -1
  26. package/dist/react-ui/blocks/Terminal/panel/TerminalLogsPanel/TerminalLogsPanel.styles.d.ts +1 -1
  27. package/dist/react-ui/blocks/Terminal/panel/TerminalLogsPanel/TerminalLogsPanel.types.d.ts +1 -1
  28. package/dist/react-ui/blocks/Terminal/panel/TerminalPanelChrome.styles.d.ts +1 -1
  29. package/dist/react-ui/blocks/Terminal/panel/TerminalPanelChrome.types.d.ts +1 -1
  30. package/dist/react-ui/blocks/Terminal/panel/TerminalPanelFooter/TerminalPanelFooter.styles.d.ts +1 -1
  31. package/dist/react-ui/blocks/Terminal/panel/TerminalPanelFooter/TerminalPanelFooter.types.d.ts +1 -1
  32. package/dist/react-ui/blocks/Terminal/panel/TerminalPanelHeader/TerminalPanelHeader.styles.d.ts +1 -1
  33. package/dist/react-ui/blocks/Terminal/panel/TerminalPanelHeader/TerminalPanelHeader.types.d.ts +1 -1
  34. package/dist/react-ui/blocks/Terminal/panel/TerminalPanelToolbar/TerminalPanelToolbar.styles.d.ts +1 -1
  35. package/dist/react-ui/blocks/Terminal/panel/TerminalPanelToolbar/TerminalPanelToolbar.types.d.ts +1 -1
  36. package/dist/react-ui/blocks/Terminal/panel/TerminalSessionControl/TerminalSessionControl.styles.d.ts +1 -1
  37. package/dist/react-ui/blocks/Terminal/panel/TerminalSessionControl/TerminalSessionControl.types.d.ts +1 -1
  38. package/dist/react-ui/blocks/Terminal/panel/TerminalSessionTabs/TerminalSessionTabs.styles.d.ts +1 -1
  39. package/dist/react-ui/blocks/Terminal/panel/TerminalSessionTabs/TerminalSessionTabs.types.d.ts +1 -1
  40. package/dist/react-ui/blocks/Terminal/panel/TerminalSessionTabs/terminal-session-tabs.module.css +60 -0
  41. package/dist/react-ui/blocks/Terminal/panel/TerminalSettingsPopover/TerminalSettingsPopover.styles.d.ts +1 -1
  42. package/dist/react-ui/blocks/Terminal/panel/TerminalSettingsPopover/TerminalSettingsPopover.types.d.ts +1 -1
  43. package/dist/react-ui/blocks/Terminal/panel/TerminalThemeSelector/TerminalThemeSelector.styles.d.ts +1 -1
  44. package/dist/react-ui/blocks/Terminal/panel/TerminalThemeSelector/TerminalThemeSelector.types.d.ts +1 -1
  45. package/dist/react-ui/components/MorphingPopover/morphing-popover.module.css +154 -0
  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 +1 -1
  49. package/dist/react-ui/primitives/DotMatrix/dot.css +364 -0
  50. package/dist/react-ui/primitives/GooeyMorphingSurface/gooey-morphing.css +112 -0
  51. package/dist/react-ui/primitives/waapi/Morph/techniques/useViewTransitions.module.css +20 -0
  52. package/dist/react-ui/primitives/waapi/SlidingNumber/SlidingNumber.styles.d.ts +1 -1
  53. package/dist/react-ui/primitives/waapi/SlidingText/SlidingText.styles.d.ts +1 -1
  54. package/dist/react-ui/ui/Accordion/Accordion.styles.d.ts +1 -1
  55. package/dist/react-ui/ui/Accordion/Accordion.types.d.ts +1 -1
  56. package/dist/react-ui/ui/AlertDialog/AlertDialog.styles.d.ts +1 -1
  57. package/dist/react-ui/ui/AlertDialog/AlertDialog.types.d.ts +1 -1
  58. package/dist/react-ui/ui/Badge/Badge.styles.d.ts +1 -1
  59. package/dist/react-ui/ui/Badge/Badge.types.d.ts +1 -1
  60. package/dist/react-ui/ui/Button/Button.styles.d.ts +1 -1
  61. package/dist/react-ui/ui/Button/Button.types.d.ts +1 -1
  62. package/dist/react-ui/ui/Card/Card.styles.d.ts +1 -1
  63. package/dist/react-ui/ui/Card/Card.types.d.ts +1 -1
  64. package/dist/react-ui/ui/Checkbox/Checkbox.styles.d.ts +1 -1
  65. package/dist/react-ui/ui/Checkbox/Checkbox.types.d.ts +1 -1
  66. package/dist/react-ui/ui/Combobox/Combobox.styles.d.ts +1 -1
  67. package/dist/react-ui/ui/Combobox/Combobox.types.d.ts +1 -1
  68. package/dist/react-ui/ui/CornerBracket/CornerBracket.styles.d.ts +1 -1
  69. package/dist/react-ui/ui/CornerBracket/CornerBracket.types.d.ts +1 -1
  70. package/dist/react-ui/ui/DataCard/DataCard.styles.d.ts +1 -1
  71. package/dist/react-ui/ui/DataCard/DataCard.types.d.ts +1 -1
  72. package/dist/react-ui/ui/DataCard/index.d.ts +1 -1
  73. package/dist/react-ui/ui/Dialog/Dialog.styles.d.ts +1 -1
  74. package/dist/react-ui/ui/Dialog/Dialog.types.d.ts +1 -1
  75. package/dist/react-ui/ui/DropdownMenu/DropdownMenu.styles.d.ts +1 -1
  76. package/dist/react-ui/ui/DropdownMenu/DropdownMenu.types.d.ts +1 -1
  77. package/dist/react-ui/ui/DynamicToggle/DynamicToggle.css +369 -0
  78. package/dist/react-ui/ui/DynamicToggle/DynamicToggle.styles.d.ts +1 -1
  79. package/dist/react-ui/ui/DynamicToggle/DynamicToggle.types.d.ts +1 -1
  80. package/dist/react-ui/ui/Field/Field.styles.d.ts +1 -1
  81. package/dist/react-ui/ui/Field/Field.types.d.ts +1 -1
  82. package/dist/react-ui/ui/FileIcon/FileIcon.styles.d.ts +1 -1
  83. package/dist/react-ui/ui/FileIcon/FileIcon.types.d.ts +1 -1
  84. package/dist/react-ui/ui/FileItem/FileItem.styles.d.ts +1 -1
  85. package/dist/react-ui/ui/FileItem/FileItem.types.d.ts +1 -1
  86. package/dist/react-ui/ui/FilePanel/FilePanel.styles.d.ts +1 -1
  87. package/dist/react-ui/ui/FilePanel/FilePanel.types.d.ts +1 -1
  88. package/dist/react-ui/ui/FileTree/FileTree.styles.d.ts +1 -1
  89. package/dist/react-ui/ui/FileTree/FileTree.types.d.ts +1 -1
  90. package/dist/react-ui/ui/GooeyButton/GooeyButton.types.d.ts +1 -1
  91. package/dist/react-ui/ui/GooeyButton/gooey.css +47 -0
  92. package/dist/react-ui/ui/Input/Input.styles.d.ts +1 -1
  93. package/dist/react-ui/ui/Input/Input.types.d.ts +1 -1
  94. package/dist/react-ui/ui/InputGroup/InputGroup.styles.d.ts +1 -1
  95. package/dist/react-ui/ui/InputGroup/InputGroup.types.d.ts +1 -1
  96. package/dist/react-ui/ui/Label/Label.styles.d.ts +1 -1
  97. package/dist/react-ui/ui/Label/Label.types.d.ts +1 -1
  98. package/dist/react-ui/ui/Menu/Menu.styles.d.ts +1 -1
  99. package/dist/react-ui/ui/Menu/Menu.types.d.ts +2 -2
  100. package/dist/react-ui/ui/MiddleTruncatePath/MiddleTruncatePath.styles.d.ts +1 -1
  101. package/dist/react-ui/ui/MiddleTruncatePath/MiddleTruncatePath.types.d.ts +1 -1
  102. package/dist/react-ui/ui/OperationCard/OperationCard.styles.d.ts +1 -1
  103. package/dist/react-ui/ui/OperationCard/OperationCard.types.d.ts +2 -2
  104. package/dist/react-ui/ui/Popover/Popover.styles.d.ts +1 -1
  105. package/dist/react-ui/ui/Popover/Popover.types.d.ts +1 -1
  106. package/dist/react-ui/ui/Progress/Progress.styles.d.ts +1 -1
  107. package/dist/react-ui/ui/Progress/Progress.types.d.ts +2 -2
  108. package/dist/react-ui/ui/Select/Select.styles.d.ts +1 -1
  109. package/dist/react-ui/ui/Select/Select.types.d.ts +1 -1
  110. package/dist/react-ui/ui/Separator/Separator.styles.d.ts +1 -1
  111. package/dist/react-ui/ui/Separator/Separator.types.d.ts +1 -1
  112. package/dist/react-ui/ui/Switch/Switch.styles.d.ts +1 -1
  113. package/dist/react-ui/ui/Switch/Switch.types.d.ts +1 -1
  114. package/dist/react-ui/ui/Tabs/Tabs.css +38 -0
  115. package/dist/react-ui/ui/Tabs/Tabs.styles.d.ts +1 -1
  116. package/dist/react-ui/ui/Tabs/Tabs.types.d.ts +3 -3
  117. package/dist/react-ui/ui/TextFlow/TextFlow.styles.d.ts +1 -1
  118. package/dist/react-ui/ui/Textarea/Textarea.styles.d.ts +1 -1
  119. package/dist/react-ui/ui/Textarea/Textarea.types.d.ts +1 -1
  120. package/dist/react-ui/ui/Tooltip/Tooltip.styles.d.ts +1 -1
  121. package/dist/react-ui/ui/Tooltip/Tooltip.types.d.ts +1 -1
  122. package/package.json +1 -1
  123. /package/dist/{react-ui/blocks/Sidebar/animations/tooltip-keyframes-DRT9W6Xj.css → css/blocks-Sidebar-animations-tooltip.css} +0 -0
  124. /package/dist/{react-ui/blocks/Terminal/panel/TerminalFilterDropdown/terminal-filter-dropdown.module-G5zpw08N.css → css/blocks-Terminal-panel-TerminalFilterDropdown-terminal-filter-dropdown.module.css} +0 -0
  125. /package/dist/{react-ui/blocks/Terminal/panel/TerminalSessionTabs/terminal-session-tabs.module-BAOuAeiX.css → css/blocks-Terminal-panel-TerminalSessionTabs-terminal-session-tabs.module.css} +0 -0
  126. /package/dist/{react-ui/components/MorphingPopover/morphing-popover.module-T3s-wJN-.css → css/components-MorphingPopover-morphing-popover.module.css} +0 -0
  127. /package/dist/{react-ui/primitives/DotMatrix/dot-matrix-B8DHjPGb.css → css/primitives-DotMatrix-dot.css} +0 -0
  128. /package/dist/{react-ui/primitives/GooeyMorphingSurface/gooey-morphing-surface-DfdjAg5U.css → css/primitives-GooeyMorphingSurface-gooey.css} +0 -0
  129. /package/dist/{react-ui/primitives/waapi/Morph/techniques/useViewTransitions.module-DNDWYN8q.css → css/primitives-waapi-Morph-techniques-useViewTransitions.module.css} +0 -0
  130. /package/dist/{react-ui/ui/DynamicToggle/DynamicToggle-DY2Hle7P.css → css/ui-DynamicToggle-DynamicToggle.css} +0 -0
  131. /package/dist/{react-ui/ui/GooeyButton/gooey-button-8rHWiw0w.css → css/ui-GooeyButton-gooey.css} +0 -0
  132. /package/dist/{react-ui/ui/Tabs/Tabs-DqzZRGB3.css → css/ui-Tabs-Tabs.css} +0 -0
@@ -7,7 +7,7 @@
7
7
  *
8
8
  * @module @mks2508/mks-ui/react/ui/Dialog/Dialog.styles
9
9
  */
10
- import type { StyleSlots } from '@/core/types';
10
+ import type { StyleSlots } from '../../../core/types';
11
11
  import type { DialogSlot } from './Dialog.types';
12
12
  /**
13
13
  * Default Tailwind classes for each Dialog visual region.
@@ -9,7 +9,7 @@
9
9
  import type * as React from 'react';
10
10
  import type { Dialog as DialogPrimitive } from '@base-ui/react/dialog';
11
11
  import type { HTMLMotionProps } from 'motion/react';
12
- import type { SlotOverrides, IBaseConfig } from '@/core/types';
12
+ import type { SlotOverrides, IBaseConfig } from '../../../core/types';
13
13
  /**
14
14
  * Visual regions available for class-name overrides via the `slots` prop.
15
15
  *
@@ -1,4 +1,4 @@
1
- import type { StyleSlots } from '@/core/types';
1
+ import type { StyleSlots } from '../../../core/types';
2
2
  /** Visual regions for the DropdownMenu component family. */
3
3
  type DropdownMenuSlot = 'root' | 'content' | 'item' | 'label' | 'separator' | 'shortcut' | 'subTrigger' | 'subContent' | 'checkboxItem' | 'radioItem';
4
4
  declare const dropdownMenuStyles: StyleSlots<DropdownMenuSlot>;
@@ -1,5 +1,5 @@
1
1
  import type { Menu as MenuPrimitive } from '@base-ui/react/menu';
2
- import type { SlotOverrides } from '@/core/types';
2
+ import type { SlotOverrides } from '../../../core/types';
3
3
  import type { DropdownMenuSlot } from './DropdownMenu.styles';
4
4
  /** Props for the DropdownMenu root. */
5
5
  type IDropdownMenuProps = MenuPrimitive.Root.Props;
@@ -0,0 +1,369 @@
1
+ /**
2
+ * DynamicToggle v2 — CSS state transitions.
3
+ *
4
+ * Rules requiring :has(), container queries, clip-path, or pseudo-elements.
5
+ * Layout, colors, sizing in Tailwind (DynamicToggle.styles.ts).
6
+ *
7
+ * @import '@mks2508/mks-ui/react/ui/DynamicToggle/DynamicToggle.module.css';
8
+ */
9
+
10
+ /* ── Variables ── */
11
+ [data-slot="dt-root"] {
12
+ --dt-dur: 0.22s;
13
+ --dt-ease: cubic-bezier(0.22, 0.61, 0.36, 1);
14
+ --dt-fade: 0.45;
15
+ --dt-indicator-dur: 0.3s;
16
+ --dt-indicator-ease: cubic-bezier(0.4, 0, 0.2, 1);
17
+ }
18
+
19
+ /* ── Track: explicit row prevents h-full items from overflowing container ── */
20
+ [data-slot="dt-root"] [data-slot="dt-track"] {
21
+ grid-template-rows: minmax(0, 1fr);
22
+ }
23
+
24
+ /* ── Top-level option spans 2 grid cols ── */
25
+ [data-slot="dt-root"] [data-slot="dt-track"] > label {
26
+ grid-column: span 2;
27
+ }
28
+
29
+ /* ── Primary option text ── */
30
+ [data-slot="dt-root"] [data-slot="dt-track"]:has(> input:checked) > label {
31
+ color: var(--accent-foreground);
32
+ z-index: 2;
33
+ }
34
+ [data-slot="dt-root"] [data-slot="dt-track"]:not(:has(> input:checked)) > label {
35
+ color: var(--foreground);
36
+ opacity: var(--dt-fade);
37
+ }
38
+
39
+ /* ── Group: container queries ── */
40
+ [data-slot="dt-root"] [data-slot="dt-group"] {
41
+ container-type: size;
42
+ overflow: hidden;
43
+ }
44
+
45
+ /* ══════════════════════════════════════════════════════════
46
+ * INDICATOR POSITIONING
47
+ *
48
+ * Modern: CSS Anchor Positioning — indicator follows active option
49
+ * Fallback: translate-based positioning for older browsers
50
+ * ══════════════════════════════════════════════════════════ */
51
+
52
+ /* ── Anchor-based indicator (requires full anchor API) ── */
53
+ @supports (anchor-scope: all) {
54
+ /* Scope anchors per toggle instance */
55
+ [data-slot="dt-root"]:not([data-indicator="translate"]) {
56
+ anchor-scope: --dt-active;
57
+ }
58
+
59
+ /* Active option becomes the anchor via native :checked */
60
+ [data-slot="dt-root"]:not([data-indicator="translate"]) [data-slot="dt-track"] > label:has(+ input:checked) {
61
+ anchor-name: --dt-active;
62
+ }
63
+ [data-slot="dt-root"]:not([data-indicator="translate"]) [data-slot="dt-group"] > label:has(+ input:checked) {
64
+ anchor-name: --dt-active;
65
+ }
66
+
67
+ /* Single unified indicator: morphs from full-width to half-width */
68
+ [data-slot="dt-root"]:not([data-indicator="translate"]) [data-slot="dt-indicator"] {
69
+ position-anchor: --dt-active;
70
+ top: anchor(top);
71
+ right: anchor(right);
72
+ bottom: anchor(bottom);
73
+ left: anchor(left);
74
+ translate: none;
75
+ width: auto;
76
+ transition:
77
+ top var(--dt-indicator-dur) var(--dt-indicator-ease),
78
+ right var(--dt-indicator-dur) var(--dt-indicator-ease),
79
+ bottom var(--dt-indicator-dur) var(--dt-indicator-ease),
80
+ left var(--dt-indicator-dur) var(--dt-indicator-ease);
81
+ }
82
+
83
+ /* Hide the group indicator — unified indicator handles everything */
84
+ [data-slot="dt-root"]:not([data-indicator="translate"]) [data-slot="dt-group-indicator"] {
85
+ display: none;
86
+ }
87
+ }
88
+
89
+ /* ── Inset-based fallback (older browsers) — same morph as anchor but hardcoded ── */
90
+ @supports not (anchor-scope: all) {
91
+ /* Unified indicator: left/right transition morphs width + position */
92
+ [data-slot="dt-root"] [data-slot="dt-indicator"] {
93
+ left: 50%;
94
+ right: 0;
95
+ width: auto;
96
+ translate: none;
97
+ transition:
98
+ left var(--dt-indicator-dur) var(--dt-indicator-ease),
99
+ right var(--dt-indicator-dur) var(--dt-indicator-ease);
100
+ }
101
+ /* Top-level checked: indicator covers left half */
102
+ [data-slot="dt-root"] [data-slot="dt-track"]:has(> input:checked) [data-slot="dt-indicator"] {
103
+ left: 0;
104
+ right: 50%;
105
+ }
106
+ /* Group option 1 checked: indicator at 3rd quarter */
107
+ [data-slot="dt-root"] [data-slot="dt-group"]:has(input:nth-of-type(1):checked) ~ [data-slot="dt-indicator"],
108
+ [data-slot="dt-root"] [data-slot="dt-track"]:has([data-slot="dt-group"] input:nth-of-type(1):checked) [data-slot="dt-indicator"] {
109
+ left: 50%;
110
+ right: 25%;
111
+ }
112
+ /* Group option 2 checked: indicator at 4th quarter */
113
+ [data-slot="dt-root"] [data-slot="dt-group"]:has(input:nth-of-type(2):checked) ~ [data-slot="dt-indicator"],
114
+ [data-slot="dt-root"] [data-slot="dt-track"]:has([data-slot="dt-group"] input:nth-of-type(2):checked) [data-slot="dt-indicator"] {
115
+ left: 75%;
116
+ right: 0;
117
+ }
118
+ /* Hide group indicator — unified indicator handles everything */
119
+ [data-slot="dt-root"] [data-slot="dt-group-indicator"] {
120
+ display: none;
121
+ }
122
+ }
123
+
124
+ /* ── Force inset mode via data-indicator="translate" (works regardless of @supports) ── */
125
+ [data-slot="dt-root"][data-indicator="translate"] [data-slot="dt-indicator"] {
126
+ left: 50%;
127
+ right: 0;
128
+ width: auto;
129
+ translate: none;
130
+ transition:
131
+ left var(--dt-indicator-dur) var(--dt-indicator-ease),
132
+ right var(--dt-indicator-dur) var(--dt-indicator-ease);
133
+ }
134
+ [data-slot="dt-root"][data-indicator="translate"] [data-slot="dt-track"]:has(> input:checked) [data-slot="dt-indicator"] {
135
+ left: 0;
136
+ right: 50%;
137
+ }
138
+ [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"] {
139
+ left: 50%;
140
+ right: 25%;
141
+ }
142
+ [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"] {
143
+ left: 75%;
144
+ right: 0;
145
+ }
146
+ [data-slot="dt-root"][data-indicator="translate"] [data-slot="dt-group-indicator"] {
147
+ display: none;
148
+ }
149
+
150
+ /* ══════════════════════════════════════════════════════════
151
+ * GROUP COLLAPSED STATE
152
+ *
153
+ * ::before = title text (via data-label attr)
154
+ * ::after = combined opts text (via data-opts attr)
155
+ * <label>s = controlled by data-collapsed mode
156
+ *
157
+ * 3 modes: title | opts | title-opts (default)
158
+ * ══════════════════════════════════════════════════════════ */
159
+
160
+ /* ── ::before — group title ── */
161
+ [data-slot="dt-group"]::before {
162
+ content: attr(data-label);
163
+ position: absolute;
164
+ left: 50%;
165
+ top: 50%;
166
+ translate: -50% -80%;
167
+ color: var(--foreground);
168
+ font-size: inherit;
169
+ font-weight: 500;
170
+ z-index: 2;
171
+ white-space: nowrap;
172
+ pointer-events: none;
173
+ transition:
174
+ scale var(--dt-dur) var(--dt-ease),
175
+ translate var(--dt-dur) var(--dt-ease),
176
+ opacity var(--dt-dur) var(--dt-ease);
177
+ }
178
+
179
+ /* ── ::after — combined opts text ── */
180
+ [data-slot="dt-group"]::after {
181
+ content: attr(data-opts);
182
+ position: absolute;
183
+ left: 50%;
184
+ top: 50%;
185
+ translate: -50% 20%;
186
+ color: var(--muted-foreground);
187
+ font-size: 0.85em;
188
+ opacity: 0.6;
189
+ z-index: 2;
190
+ white-space: nowrap;
191
+ pointer-events: none;
192
+ transition: opacity var(--dt-dur) var(--dt-ease);
193
+ }
194
+ [data-slot="dt-group"]:not([data-opts])::after {
195
+ content: none;
196
+ }
197
+
198
+ /* ── Group labels — transition props ── */
199
+ [data-slot="dt-root"] [data-slot="dt-group"] label {
200
+ color: var(--muted-foreground);
201
+ cursor: pointer;
202
+ z-index: 2;
203
+ transition:
204
+ color var(--dt-dur) var(--dt-ease),
205
+ opacity var(--dt-dur) var(--dt-ease),
206
+ translate var(--dt-dur) var(--dt-ease);
207
+ }
208
+ [data-slot="dt-root"] [data-slot="dt-group"] label span {
209
+ display: grid;
210
+ place-items: center;
211
+ height: 100%;
212
+ width: 100%;
213
+ border-radius: var(--dt-radius, 9999px);
214
+ transition: scale var(--dt-dur) var(--dt-ease);
215
+ }
216
+
217
+ /* ── Collapsed mode: "title" — only ::before, labels slide+scale out ── */
218
+ [data-slot="dt-group"][data-collapsed="title"]::before {
219
+ translate: -50% -50%;
220
+ }
221
+ [data-slot="dt-group"][data-collapsed="title"]::after {
222
+ display: none;
223
+ }
224
+ [data-slot="dt-group"][data-collapsed="title"]:not(:has(input:checked)) label {
225
+ opacity: 0;
226
+ translate: 0 30%;
227
+ }
228
+ [data-slot="dt-group"][data-collapsed="title"]:not(:has(input:checked)) label span {
229
+ scale: 0.5;
230
+ }
231
+
232
+ /* ── Collapsed mode: "opts" — only ::after, labels slide+scale out ── */
233
+ [data-slot="dt-group"][data-collapsed="opts"]::before {
234
+ display: none;
235
+ }
236
+ [data-slot="dt-group"][data-collapsed="opts"]::after {
237
+ translate: -50% -50%;
238
+ font-size: inherit;
239
+ opacity: 0.7;
240
+ }
241
+ [data-slot="dt-group"][data-collapsed="opts"]:not(:has(input:checked)) label {
242
+ opacity: 0;
243
+ translate: 0 30%;
244
+ }
245
+ [data-slot="dt-group"][data-collapsed="opts"]:not(:has(input:checked)) label span {
246
+ scale: 0.5;
247
+ }
248
+
249
+ /* ── Collapsed mode: "title-opts" — WIP: disabled, falls back to "title" behavior ── */
250
+ /* TODO: title-opts needs a redesign — title (::before) and scaled labels overlap
251
+ at all container sizes. The codepen original morph relied on specific dimensions
252
+ that don't translate to the component's size variants. Needs a different approach
253
+ (e.g., crossfade, flex layout, or JS-measured positions). */
254
+ [data-slot="dt-group"][data-collapsed="title-opts"]::after {
255
+ content: none;
256
+ }
257
+ [data-slot="dt-group"][data-collapsed="title-opts"]::before {
258
+ translate: -50% -50%;
259
+ }
260
+ [data-slot="dt-group"][data-collapsed="title-opts"]:not(:has(input:checked)) label {
261
+ opacity: 0;
262
+ translate: 0 30%;
263
+ }
264
+
265
+ /* ── When group expanded ── */
266
+ [data-slot="dt-group"]:has(input:checked)::before {
267
+ translate: -50% -250%;
268
+ scale: 0.85;
269
+ }
270
+ [data-slot="dt-group"]:has(input:checked)::after {
271
+ opacity: 0;
272
+ }
273
+ [data-slot="dt-group"]:has(input:checked) label {
274
+ opacity: 0.75;
275
+ color: var(--muted-foreground);
276
+ translate: 0 0;
277
+ }
278
+ [data-slot="dt-group"]:has(input:checked) label span {
279
+ scale: 1;
280
+ }
281
+ [data-slot="dt-group"]:has(input:nth-of-type(1):checked) label:nth-of-type(1),
282
+ [data-slot="dt-group"]:has(input:nth-of-type(2):checked) label:nth-of-type(2) {
283
+ color: var(--foreground);
284
+ opacity: 1;
285
+ }
286
+
287
+ /* ══════════════════════════════════════════════════════════
288
+ * GROUP LABEL / BUBBLE (above or below the pill)
289
+ *
290
+ * Positioned via CSS. In filter/path morph modes, rendered with GooeyCanvas.
291
+ * In none mode, simple CSS-driven show/hide.
292
+ * bubblePosition: top | bottom (no left/right in v2)
293
+ * ══════════════════════════════════════════════════════════ */
294
+
295
+ [data-slot="dt-group-label"] {
296
+ display: grid;
297
+ grid-template-rows: 0fr;
298
+ left: 20%;
299
+ right: 20%;
300
+ transition:
301
+ grid-template-rows calc(var(--dt-dur) * 1.5) var(--dt-ease),
302
+ opacity var(--dt-dur) var(--dt-ease);
303
+ opacity: 0;
304
+ background: var(--card);
305
+ border: 1px solid var(--border);
306
+ z-index: 3;
307
+ transform: translateZ(0);
308
+ -webkit-transform: translateZ(0);
309
+ }
310
+ [data-slot="dt-group-label"] > span {
311
+ overflow: hidden;
312
+ min-height: 0;
313
+ display: flex;
314
+ align-items: center;
315
+ justify-content: center;
316
+ padding: 0 0.75em;
317
+ height: calc(var(--dt-h, 38px) * 0.4);
318
+ box-sizing: border-box;
319
+ }
320
+
321
+ /* Top position */
322
+ [data-slot="dt-group-label"][data-bubble-position="top"] {
323
+ bottom: 100%;
324
+ border-radius: calc(var(--dt-h, 38px) * 0.2) calc(var(--dt-h, 38px) * 0.2) 0 0;
325
+ border-bottom: none;
326
+ margin-bottom: -1px;
327
+ }
328
+
329
+ /* Bottom position */
330
+ [data-slot="dt-group-label"][data-bubble-position="bottom"] {
331
+ top: 100%;
332
+ border-radius: 0 0 calc(var(--dt-h, 38px) * 0.2) calc(var(--dt-h, 38px) * 0.2);
333
+ border-top: none;
334
+ margin-top: -1px;
335
+ }
336
+
337
+ /* When group active → group label grows (vertical: top/bottom) */
338
+ [data-slot="dt-root"]:not(:has([data-slot="dt-track"] > input:checked)) [data-slot="dt-group-label"][data-bubble-position="top"],
339
+ [data-slot="dt-root"]:not(:has([data-slot="dt-track"] > input:checked)) [data-slot="dt-group-label"][data-bubble-position="bottom"] {
340
+ grid-template-rows: 1fr;
341
+ opacity: 1;
342
+ }
343
+ [data-slot="dt-root"]:not(:has([data-slot="dt-track"] > input:checked)) [data-slot="dt-group-label"][data-bubble-position="top"] > span,
344
+ [data-slot="dt-root"]:not(:has([data-slot="dt-track"] > input:checked)) [data-slot="dt-group-label"][data-bubble-position="bottom"] > span {
345
+ padding: 0.35em 0.75em;
346
+ }
347
+
348
+ /* ── Filter morph mode ── */
349
+ [data-slot="dt-root"][data-morph="filter"] [data-slot="dt-group-label"] {
350
+ border: none;
351
+ }
352
+ [data-slot="dt-root"][data-morph="filter"] [data-slot="dt-track"] {
353
+ position: relative;
354
+ z-index: 1;
355
+ }
356
+
357
+ /* ── Filter morph: ::before hides on expand, gooey canvas handles junction ── */
358
+ [data-slot="dt-root"][data-morph="filter"] [data-slot="dt-group"]:has(input:checked)::before {
359
+ opacity: 0;
360
+ translate: -50% -80%;
361
+ scale: 1;
362
+ }
363
+
364
+ /* ── Path morph mode ── */
365
+ [data-slot="dt-root"][data-morph="path"] [data-slot="dt-track"] {
366
+ position: relative;
367
+ z-index: 1;
368
+ }
369
+
@@ -7,7 +7,7 @@
7
7
  * @module @mks2508/mks-ui/react/ui/DynamicToggle
8
8
  */
9
9
  import { type VariantProps } from 'class-variance-authority';
10
- import type { StyleSlots } from '@/core/types';
10
+ import type { StyleSlots } from '../../../core/types';
11
11
  /** Slot names for DynamicToggle */
12
12
  export type DynamicToggleSlot = 'root' | 'track' | 'option' | 'indicator' | 'group' | 'groupIndicator' | 'groupLabel';
13
13
  /**
@@ -7,7 +7,7 @@
7
7
  *
8
8
  * @module @mks2508/mks-ui/react/ui/DynamicToggle
9
9
  */
10
- import type { SlotOverrides, IBaseConfig } from '@/core/types';
10
+ import type { SlotOverrides, IBaseConfig } from '../../../core/types';
11
11
  import type { DynamicToggleSlot, DynamicToggleVariantProps } from './DynamicToggle.styles';
12
12
  /** How the group appears when collapsed (standalone option active). */
13
13
  export type DynamicToggleCollapsedMode = 'title' | 'opts' | 'title-opts';
@@ -1,4 +1,4 @@
1
- import type { StyleSlots } from '@/core/types';
1
+ import type { StyleSlots } from '../../../core/types';
2
2
  /** Visual regions for the Field component family. */
3
3
  type FieldSlot = 'root' | 'set' | 'legend' | 'group' | 'content' | 'label' | 'title' | 'description' | 'separator' | 'error';
4
4
  declare const fieldStyles: StyleSlots<FieldSlot>;
@@ -1,5 +1,5 @@
1
1
  import type { VariantProps } from 'class-variance-authority';
2
- import type { SlotOverrides } from '@/core/types';
2
+ import type { SlotOverrides } from '../../../core/types';
3
3
  import type { fieldVariants, FieldSlot } from './Field.styles';
4
4
  /** Props for the FieldSet component. */
5
5
  interface IFieldSetProps extends React.ComponentProps<'fieldset'> {
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * @module @mks2508/mks-ui/react/ui/FileIcon
5
5
  */
6
- import type { StyleSlots } from '@/core/types';
6
+ import type { StyleSlots } from '../../../core/types';
7
7
  /** Visual regions for the FileIcon component. */
8
8
  export type FileIconSlot = 'root';
9
9
  /**
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * @module @mks2508/mks-ui/react/ui/FileIcon
5
5
  */
6
- import type { SlotOverrides } from '@/core/types';
6
+ import type { SlotOverrides } from '../../../core/types';
7
7
  import type { FileIconSlot, FolderIconSlot } from './FileIcon.styles';
8
8
  /**
9
9
  * Function that resolves a filename to an icon asset identifier.
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * @module @mks2508/mks-ui/react/ui/FileItem
5
5
  */
6
- import type { StyleSlots } from '@/core/types';
6
+ import type { StyleSlots } from '../../../core/types';
7
7
  /** Visual regions of the FileItem component. */
8
8
  export type FileItemSlot = 'root' | 'icon' | 'path' | 'modifiedChip' | 'boost' | 'gitStatus';
9
9
  /**
@@ -4,7 +4,7 @@
4
4
  * @module @mks2508/mks-ui/react/ui/FileItem
5
5
  */
6
6
  import type { VariantProps } from 'class-variance-authority';
7
- import type { SlotOverrides } from '@/core/types';
7
+ import type { SlotOverrides } from '../../../core/types';
8
8
  import type { FileIconResolver } from '../FileIcon/FileIcon.types';
9
9
  import type { FileItemSlot, fileItemVariants } from './FileItem.styles';
10
10
  /** What kind of filesystem entry this row represents. */
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * @module @mks2508/mks-ui/react/ui/FilePanel
5
5
  */
6
- import type { StyleSlots } from '@/core/types';
6
+ import type { StyleSlots } from '../../../core/types';
7
7
  /** Visual regions of the FilePanel component. */
8
8
  export type FilePanelSlot = 'root' | 'header' | 'title' | 'toolbar' | 'search' | 'body' | 'footer' | 'status';
9
9
  /**
@@ -5,7 +5,7 @@
5
5
  */
6
6
  import type { ReactNode } from 'react';
7
7
  import type { VariantProps } from 'class-variance-authority';
8
- import type { SlotOverrides } from '@/core/types';
8
+ import type { SlotOverrides } from '../../../core/types';
9
9
  import type { FilePanelSlot, filePanelVariants } from './FilePanel.styles';
10
10
  /** Visual density for the panel frame. */
11
11
  export type FilePanelDensity = NonNullable<VariantProps<typeof filePanelVariants>['density']>;
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * @module @mks2508/mks-ui/react/ui/FileTree
5
5
  */
6
- import type { StyleSlots } from '@/core/types';
6
+ import type { StyleSlots } from '../../../core/types';
7
7
  /** Visual regions of the FileTree component. */
8
8
  export type FileTreeSlot = 'root' | 'list' | 'node' | 'row' | 'indent' | 'chevron' | 'empty';
9
9
  /**
@@ -4,7 +4,7 @@
4
4
  * @module @mks2508/mks-ui/react/ui/FileTree
5
5
  */
6
6
  import type { VariantProps } from 'class-variance-authority';
7
- import type { SlotOverrides } from '@/core/types';
7
+ import type { SlotOverrides } from '../../../core/types';
8
8
  import type { FileIconResolver } from '../FileIcon/FileIcon.types';
9
9
  import type { FileItemChangeStatus } from '../FileItem/FileItem.types';
10
10
  import type { FileTreeSlot, fileTreeVariants } from './FileTree.styles';
@@ -5,7 +5,7 @@
5
5
  * @module @mks2508/mks-ui/react/ui/GooeyButton
6
6
  */
7
7
  import type { ReactNode } from 'react';
8
- import type { IGooeyMorphConfig, IGooeyMorphSlots } from '@/react-ui/primitives/GooeyMorphingSurface';
8
+ import type { IGooeyMorphConfig, IGooeyMorphSlots } from '../../../react-ui/primitives/GooeyMorphingSurface';
9
9
  export interface IGooeyButtonProps {
10
10
  /** Controlled open state. */
11
11
  open?: boolean;
@@ -0,0 +1,47 @@
1
+ /* =============================================================================
2
+ * GooeyButton — transparent hit area over the pill region.
3
+ *
4
+ * The visual pill is drawn by the <GooeyMorphingSurface> primitive; this
5
+ * layer is a single button that captures clicks in both open and closed
6
+ * states without painting anything. All layout math comes from the
7
+ * primitive's CSS custom props (--gms-pill-w, --gms-pill-h).
8
+ * ============================================================================= */
9
+
10
+ .gbtn-host {
11
+ position: relative;
12
+ display: inline-block;
13
+ }
14
+
15
+ .gbtn-trigger {
16
+ position: absolute;
17
+ top: 0;
18
+ /* Follow the pill's computed X (which honours `pillOffsetX`) instead of
19
+ * centring the hit-area in the host. Centring worked only while
20
+ * `pillOffsetX === 0`; any non-zero offset drifted the visual pill away
21
+ * from the invisible trigger. See `GooeyButton/index.tsx` — the host
22
+ * exposes `--gms-pill-x` identical to the primitive's internal value. */
23
+ left: var(--gms-pill-x);
24
+ z-index: 3;
25
+ width: var(--gms-pill-w);
26
+ height: var(--gms-pill-h);
27
+ padding: 0;
28
+ margin: 0;
29
+ border: 0;
30
+ background: transparent;
31
+ cursor: pointer;
32
+ font: inherit;
33
+ color: inherit;
34
+ /* Pill-shaped focus ring. */
35
+ border-radius: 9999px;
36
+ }
37
+
38
+ .gbtn-trigger:focus-visible {
39
+ outline: 2px solid var(--ring, currentColor);
40
+ outline-offset: 2px;
41
+ }
42
+
43
+ .gbtn-trigger:disabled {
44
+ cursor: not-allowed;
45
+ pointer-events: none;
46
+ }
47
+
@@ -1,4 +1,4 @@
1
- import type { StyleSlots } from '@/core/types';
1
+ import type { StyleSlots } from '../../../core/types';
2
2
  /** Visual regions for the Input component. */
3
3
  type InputSlot = 'root';
4
4
  declare const inputStyles: StyleSlots<InputSlot>;
@@ -1,4 +1,4 @@
1
- import type { SlotOverrides } from '@/core/types';
1
+ import type { SlotOverrides } from '../../../core/types';
2
2
  import type { InputSlot } from './Input.styles';
3
3
  /** Props for the Input component. */
4
4
  interface IInputProps extends React.ComponentProps<'input'> {
@@ -1,4 +1,4 @@
1
- import type { StyleSlots } from '@/core/types';
1
+ import type { StyleSlots } from '../../../core/types';
2
2
  /** Visual regions for the InputGroup component family. */
3
3
  type InputGroupSlot = 'root' | 'addon' | 'button' | 'text' | 'input' | 'textarea';
4
4
  declare const inputGroupStyles: StyleSlots<InputGroupSlot>;
@@ -1,5 +1,5 @@
1
1
  import type { VariantProps } from 'class-variance-authority';
2
- import type { SlotOverrides } from '@/core/types';
2
+ import type { SlotOverrides } from '../../../core/types';
3
3
  import type { inputGroupAddonVariants, inputGroupButtonVariants, InputGroupSlot } from './InputGroup.styles';
4
4
  /** Props for the InputGroup container. */
5
5
  interface IInputGroupProps extends React.ComponentProps<'div'> {
@@ -1,4 +1,4 @@
1
- import type { StyleSlots } from '@/core/types';
1
+ import type { StyleSlots } from '../../../core/types';
2
2
  type LabelSlot = 'root';
3
3
  declare const labelStyles: StyleSlots<LabelSlot>;
4
4
  export { labelStyles };
@@ -1,4 +1,4 @@
1
- import type { SlotOverrides } from '@/core/types';
1
+ import type { SlotOverrides } from '../../../core/types';
2
2
  import type { LabelSlot } from './Label.styles';
3
3
  /** Props for the Label component. */
4
4
  interface ILabelProps extends React.ComponentProps<'label'> {
@@ -12,7 +12,7 @@
12
12
  * // menuStyles.popup => default popup classes
13
13
  * ```
14
14
  */
15
- import type { StyleSlots } from '@/core/types';
15
+ import type { StyleSlots } from '../../../core/types';
16
16
  /**
17
17
  * Union of all visual regions (slots) in the Menu component tree.
18
18
  *
@@ -10,8 +10,8 @@
10
10
  import type * as React from 'react';
11
11
  import type { Menu as MenuPrimitive } from '@base-ui/react/menu';
12
12
  import type { HTMLMotionProps, Transition } from 'motion/react';
13
- import type { IBaseConfig, SlotOverrides } from '@/core/types';
14
- import type { IHighlightProps, IHighlightItemProps } from '@/react-ui/primitives/Highlight';
13
+ import type { IBaseConfig, SlotOverrides } from '../../../core/types';
14
+ import type { IHighlightProps, IHighlightItemProps } from '../../../react-ui/primitives/Highlight';
15
15
  import type { MenuSlot } from './Menu.styles';
16
16
  /**
17
17
  * Configuration interface for Menu behavior and animation.
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * @module @mks2508/mks-ui/react/ui/MiddleTruncatePath
5
5
  */
6
- import type { StyleSlots } from '@/core/types';
6
+ import type { StyleSlots } from '../../../core/types';
7
7
  /** Visual regions of the MiddleTruncatePath component. */
8
8
  export type MiddleTruncatePathSlot = 'root' | 'start' | 'end';
9
9
  /**