@mks2508/mks-ui 0.5.7 → 0.5.8
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.
- package/dist/react-ui/primitives/waapi/Gooey/Gooey.types.d.ts +2 -0
- package/dist/react-ui/primitives/waapi/Gooey/Gooey.types.d.ts.map +1 -1
- package/dist/react-ui/primitives/waapi/Gooey/GooeyCanvas.d.ts +1 -1
- package/dist/react-ui/primitives/waapi/Gooey/GooeyCanvas.d.ts.map +1 -1
- package/dist/react-ui/primitives/waapi/Gooey/GooeyCanvas.js +173 -43
- package/dist/react-ui/ui/DynamicToggle/{DynamicToggle-DOR3Ld-k.css → DynamicToggle-DJLwEkHr.css} +12 -19
- package/dist/react-ui/ui/DynamicToggle/DynamicToggle.css +12 -20
- package/dist/react-ui/ui/DynamicToggle/DynamicToggle.styles.d.ts +1 -0
- package/dist/react-ui/ui/DynamicToggle/DynamicToggle.styles.d.ts.map +1 -1
- package/dist/react-ui/ui/DynamicToggle/DynamicToggle.styles.js +7 -1
- package/dist/react-ui/ui/DynamicToggle/DynamicToggle.types.d.ts +55 -31
- package/dist/react-ui/ui/DynamicToggle/DynamicToggle.types.d.ts.map +1 -1
- package/dist/react-ui/ui/DynamicToggle/index.d.ts +9 -3
- package/dist/react-ui/ui/DynamicToggle/index.d.ts.map +1 -1
- package/dist/react-ui/ui/DynamicToggle/index.js +47 -34
- package/package.json +52 -13
- package/src/assets/react.svg +0 -1
- package/src/core/index.ts +0 -7
- package/src/core/types.ts +0 -82
- package/src/css.d.ts +0 -7
- package/src/index.css +0 -129
- package/src/index.ts +0 -29
- package/src/react-ui/blocks/Terminal/ResttyAdapter.ts +0 -278
- package/src/react-ui/blocks/Terminal/Terminal.adapter.ts +0 -97
- package/src/react-ui/blocks/Terminal/Terminal.theme.restty.ts +0 -155
- package/src/react-ui/blocks/Terminal/Terminal.theme.ts +0 -80
- package/src/react-ui/blocks/Terminal/Terminal.types.ts +0 -438
- package/src/react-ui/blocks/Terminal/TerminalDisplay.styles.ts +0 -38
- package/src/react-ui/blocks/Terminal/TerminalDisplay.tsx +0 -254
- package/src/react-ui/blocks/Terminal/TerminalDisplay.types.ts +0 -73
- package/src/react-ui/blocks/Terminal/TerminalPanel.tsx +0 -269
- package/src/react-ui/blocks/Terminal/TerminalRestty.tsx +0 -326
- package/src/react-ui/blocks/Terminal/TerminalXterm.tsx +0 -230
- package/src/react-ui/blocks/Terminal/XTermAdapter.ts +0 -163
- package/src/react-ui/blocks/Terminal/chrome.ts +0 -25
- package/src/react-ui/blocks/Terminal/components/LogLineBadges.tsx +0 -316
- package/src/react-ui/blocks/Terminal/components/SpecializedSyntaxHighlighter.tsx +0 -218
- package/src/react-ui/blocks/Terminal/components/SyntaxHighlight.tsx +0 -386
- package/src/react-ui/blocks/Terminal/components/TerminalLogBadge.tsx +0 -67
- package/src/react-ui/blocks/Terminal/components/index.ts +0 -10
- package/src/react-ui/blocks/Terminal/display.ts +0 -46
- package/src/react-ui/blocks/Terminal/hooks/index.ts +0 -22
- package/src/react-ui/blocks/Terminal/hooks/useTerminalSettings.ts +0 -229
- package/src/react-ui/blocks/Terminal/hooks/useTerminalWebSocket.ts +0 -292
- package/src/react-ui/blocks/Terminal/index.ts +0 -111
- package/src/react-ui/blocks/Terminal/panel/LogLinesViewer.tsx +0 -330
- package/src/react-ui/blocks/Terminal/panel/TerminalDebugPanel.tsx +0 -242
- package/src/react-ui/blocks/Terminal/panel/TerminalFilterDropdown.tsx +0 -202
- package/src/react-ui/blocks/Terminal/panel/TerminalFilterTabs.tsx +0 -140
- package/src/react-ui/blocks/Terminal/panel/TerminalInteractivePanel.tsx +0 -68
- package/src/react-ui/blocks/Terminal/panel/TerminalInteractivePanel.types.ts +0 -85
- package/src/react-ui/blocks/Terminal/panel/TerminalInteractivePanelRestty.tsx +0 -383
- package/src/react-ui/blocks/Terminal/panel/TerminalInteractivePanelXterm.tsx +0 -439
- package/src/react-ui/blocks/Terminal/panel/TerminalLogsPanel.tsx +0 -550
- package/src/react-ui/blocks/Terminal/panel/TerminalLogsPanel.types.ts +0 -259
- package/src/react-ui/blocks/Terminal/panel/TerminalPanelChrome.styles.ts +0 -75
- package/src/react-ui/blocks/Terminal/panel/TerminalPanelChrome.tsx +0 -266
- package/src/react-ui/blocks/Terminal/panel/TerminalPanelChrome.types.ts +0 -82
- package/src/react-ui/blocks/Terminal/panel/TerminalPanelFooter.tsx +0 -112
- package/src/react-ui/blocks/Terminal/panel/TerminalPanelHeader.tsx +0 -178
- package/src/react-ui/blocks/Terminal/panel/TerminalPanelToolbar.tsx +0 -203
- package/src/react-ui/blocks/Terminal/panel/TerminalSessionControl.tsx +0 -252
- package/src/react-ui/blocks/Terminal/panel/TerminalSessionTabs.tsx +0 -334
- package/src/react-ui/blocks/Terminal/panel/TerminalSettingsPopover.tsx +0 -261
- package/src/react-ui/blocks/Terminal/panel/TerminalThemeSelector.tsx +0 -248
- package/src/react-ui/blocks/Terminal/panel/index.ts +0 -72
- package/src/react-ui/blocks/Terminal/panel/terminal-filter-dropdown.module.css +0 -59
- package/src/react-ui/blocks/Terminal/panel/terminal-session-tabs.module.css +0 -59
- package/src/react-ui/blocks/Terminal/parsing/BadgeFormatter.ts +0 -180
- package/src/react-ui/blocks/Terminal/parsing/HttpLogParser.ts +0 -248
- package/src/react-ui/blocks/Terminal/parsing/LogParser.types.ts +0 -283
- package/src/react-ui/blocks/Terminal/parsing/LogParserService.ts +0 -686
- package/src/react-ui/blocks/Terminal/parsing/MultilineAggregator.ts +0 -466
- package/src/react-ui/blocks/Terminal/parsing/PersistentLogBuffer.ts +0 -343
- package/src/react-ui/blocks/Terminal/parsing/SyntaxHighlighter.ts +0 -167
- package/src/react-ui/blocks/Terminal/parsing/TableParser.ts +0 -348
- package/src/react-ui/blocks/Terminal/parsing/ansi/AnsiColorMapper.ts +0 -251
- package/src/react-ui/blocks/Terminal/parsing/ansi/AnsiParser.ts +0 -390
- package/src/react-ui/blocks/Terminal/parsing/ansi/ansi.constants.ts +0 -320
- package/src/react-ui/blocks/Terminal/parsing/ansi/index.ts +0 -20
- package/src/react-ui/blocks/Terminal/parsing/index.ts +0 -69
- package/src/react-ui/blocks/Terminal/parsing/levels/LogLevel.types.ts +0 -68
- package/src/react-ui/blocks/Terminal/parsing/levels/LogLevelDetector.ts +0 -436
- package/src/react-ui/blocks/Terminal/parsing/levels/index.ts +0 -14
- package/src/react-ui/blocks/index.ts +0 -11
- package/src/react-ui/components/MorphingPopover/MorphingPopover.types.ts +0 -49
- package/src/react-ui/components/MorphingPopover/index.tsx +0 -186
- package/src/react-ui/components/MorphingPopover/morphing-popover.module.css +0 -153
- package/src/react-ui/components/index.ts +0 -9
- package/src/react-ui/hooks/Animation/UseAutoHeight.tsx +0 -123
- package/src/react-ui/hooks/DOM/UseIsInView.tsx +0 -44
- package/src/react-ui/hooks/Formatting/UseListFormat.ts +0 -134
- package/src/react-ui/hooks/State/UseControlledState.tsx +0 -57
- package/src/react-ui/hooks/State/UseDataState.tsx +0 -76
- package/src/react-ui/hooks/index.ts +0 -20
- package/src/react-ui/icons/index.ts +0 -12
- package/src/react-ui/icons/lucide-animated/activity.tsx +0 -109
- package/src/react-ui/icons/lucide-animated/arrow-down-to-line.tsx +0 -51
- package/src/react-ui/icons/lucide-animated/arrow-up.tsx +0 -50
- package/src/react-ui/icons/lucide-animated/bell-electric.tsx +0 -124
- package/src/react-ui/icons/lucide-animated/bell.tsx +0 -93
- package/src/react-ui/icons/lucide-animated/bot.tsx +0 -122
- package/src/react-ui/icons/lucide-animated/box.tsx +0 -117
- package/src/react-ui/icons/lucide-animated/check.tsx +0 -21
- package/src/react-ui/icons/lucide-animated/circle-check.tsx +0 -107
- package/src/react-ui/icons/lucide-animated/delete.tsx +0 -133
- package/src/react-ui/icons/lucide-animated/download.tsx +0 -99
- package/src/react-ui/icons/lucide-animated/edit-2.tsx +0 -21
- package/src/react-ui/icons/lucide-animated/globe.tsx +0 -23
- package/src/react-ui/icons/lucide-animated/home.tsx +0 -103
- package/src/react-ui/icons/lucide-animated/index.ts +0 -38
- package/src/react-ui/icons/lucide-animated/layers.tsx +0 -23
- package/src/react-ui/icons/lucide-animated/layout-panel-top.tsx +0 -143
- package/src/react-ui/icons/lucide-animated/list.tsx +0 -54
- package/src/react-ui/icons/lucide-animated/package.tsx +0 -24
- package/src/react-ui/icons/lucide-animated/palette.tsx +0 -25
- package/src/react-ui/icons/lucide-animated/plus.tsx +0 -92
- package/src/react-ui/icons/lucide-animated/refresh-cw.tsx +0 -24
- package/src/react-ui/icons/lucide-animated/rocket.tsx +0 -24
- package/src/react-ui/icons/lucide-animated/save.tsx +0 -23
- package/src/react-ui/icons/lucide-animated/search.tsx +0 -94
- package/src/react-ui/icons/lucide-animated/settings.tsx +0 -92
- package/src/react-ui/icons/lucide-animated/terminal.tsx +0 -46
- package/src/react-ui/icons/lucide-animated/trash-2.tsx +0 -25
- package/src/react-ui/icons/lucide-animated/trending-down.tsx +0 -151
- package/src/react-ui/icons/lucide-animated/trending-up.tsx +0 -150
- package/src/react-ui/icons/lucide-animated/type.tsx +0 -23
- package/src/react-ui/icons/lucide-animated/upload.tsx +0 -23
- package/src/react-ui/icons/lucide-animated/x.tsx +0 -102
- package/src/react-ui/index.ts +0 -30
- package/src/react-ui/lib/get-strict-context.tsx +0 -56
- package/src/react-ui/lib/icon-wrapper.tsx +0 -70
- package/src/react-ui/lib/index.ts +0 -9
- package/src/react-ui/lib/utils.ts +0 -24
- package/src/react-ui/primitives/AutoHeight/index.tsx +0 -74
- package/src/react-ui/primitives/CountingNumber/index.tsx +0 -147
- package/src/react-ui/primitives/Highlight/Highlight.types.ts +0 -136
- package/src/react-ui/primitives/Highlight/index.tsx +0 -577
- package/src/react-ui/primitives/Slot/index.tsx +0 -128
- package/src/react-ui/primitives/index.ts +0 -16
- package/src/react-ui/primitives/waapi/Gooey/Gooey.types.ts +0 -141
- package/src/react-ui/primitives/waapi/Gooey/GooeyCanvas.tsx +0 -217
- package/src/react-ui/primitives/waapi/Gooey/GooeyFilter.tsx +0 -77
- package/src/react-ui/primitives/waapi/Gooey/MorphPath.tsx +0 -58
- package/src/react-ui/primitives/waapi/Gooey/gooey-utils.ts +0 -253
- package/src/react-ui/primitives/waapi/Gooey/index.ts +0 -50
- package/src/react-ui/primitives/waapi/Gooey/useMorphPath.ts +0 -48
- package/src/react-ui/primitives/waapi/Morph/Morph.types.ts +0 -106
- package/src/react-ui/primitives/waapi/Morph/MorphContext.tsx +0 -21
- package/src/react-ui/primitives/waapi/Morph/index.tsx +0 -56
- package/src/react-ui/primitives/waapi/Morph/techniques/index.ts +0 -12
- package/src/react-ui/primitives/waapi/Morph/techniques/useCSSGridMorph.ts +0 -89
- package/src/react-ui/primitives/waapi/Morph/techniques/useFLIPClipPath.ts +0 -176
- package/src/react-ui/primitives/waapi/Morph/techniques/useViewTransitions.ts +0 -87
- package/src/react-ui/primitives/waapi/Morph/useMorph.ts +0 -101
- package/src/react-ui/primitives/waapi/Reorder/Reorder.types.ts +0 -177
- package/src/react-ui/primitives/waapi/Reorder/index.tsx +0 -260
- package/src/react-ui/primitives/waapi/Reorder/useReorder.ts +0 -47
- package/src/react-ui/primitives/waapi/Reorder/useReorderPresence.ts +0 -209
- package/src/react-ui/primitives/waapi/Reorder/utils/separatorCoordination.ts +0 -104
- package/src/react-ui/primitives/waapi/SlidingNumber/SlidingNumber.styles.ts +0 -14
- package/src/react-ui/primitives/waapi/SlidingNumber/SlidingNumber.types.ts +0 -84
- package/src/react-ui/primitives/waapi/SlidingNumber/index.tsx +0 -474
- package/src/react-ui/primitives/waapi/SlidingText/SlidingText.styles.ts +0 -32
- package/src/react-ui/primitives/waapi/SlidingText/SlidingText.types.ts +0 -69
- package/src/react-ui/primitives/waapi/SlidingText/index.tsx +0 -140
- package/src/react-ui/primitives/waapi/core/animationConstants.ts +0 -215
- package/src/react-ui/primitives/waapi/core/index.ts +0 -53
- package/src/react-ui/primitives/waapi/core/types.ts +0 -200
- package/src/react-ui/primitives/waapi/core/useAnimationOrchestrator.ts +0 -430
- package/src/react-ui/primitives/waapi/core/useElementRegistry.ts +0 -81
- package/src/react-ui/primitives/waapi/core/useFLIPAnimation.ts +0 -138
- package/src/react-ui/primitives/waapi/core/usePositionCapture.ts +0 -106
- package/src/react-ui/primitives/waapi/index.ts +0 -139
- package/src/react-ui/styles/animations.css +0 -369
- package/src/react-ui/ui/Accordion/Accordion.styles.ts +0 -72
- package/src/react-ui/ui/Accordion/Accordion.types.ts +0 -199
- package/src/react-ui/ui/Accordion/index.tsx +0 -362
- package/src/react-ui/ui/AlertDialog/AlertDialog.styles.ts +0 -38
- package/src/react-ui/ui/AlertDialog/AlertDialog.types.ts +0 -296
- package/src/react-ui/ui/AlertDialog/index.tsx +0 -540
- package/src/react-ui/ui/Badge/Badge.styles.ts +0 -43
- package/src/react-ui/ui/Badge/Badge.types.ts +0 -26
- package/src/react-ui/ui/Badge/index.tsx +0 -34
- package/src/react-ui/ui/Button/Button.styles.ts +0 -57
- package/src/react-ui/ui/Button/Button.types.ts +0 -63
- package/src/react-ui/ui/Button/index.tsx +0 -155
- package/src/react-ui/ui/Card/Card.styles.ts +0 -32
- package/src/react-ui/ui/Card/Card.types.ts +0 -39
- package/src/react-ui/ui/Card/index.tsx +0 -130
- package/src/react-ui/ui/Checkbox/Checkbox.styles.ts +0 -40
- package/src/react-ui/ui/Checkbox/Checkbox.types.ts +0 -98
- package/src/react-ui/ui/Checkbox/index.tsx +0 -233
- package/src/react-ui/ui/Combobox/Combobox.styles.ts +0 -34
- package/src/react-ui/ui/Combobox/Combobox.types.ts +0 -89
- package/src/react-ui/ui/Combobox/index.tsx +0 -331
- package/src/react-ui/ui/CornerBracket/CornerBracket.styles.ts +0 -38
- package/src/react-ui/ui/CornerBracket/CornerBracket.types.ts +0 -15
- package/src/react-ui/ui/CornerBracket/index.tsx +0 -49
- package/src/react-ui/ui/DataCard/DataCard.styles.ts +0 -94
- package/src/react-ui/ui/DataCard/DataCard.types.ts +0 -125
- package/src/react-ui/ui/DataCard/index.tsx +0 -340
- package/src/react-ui/ui/Dialog/Dialog.styles.ts +0 -59
- package/src/react-ui/ui/Dialog/Dialog.types.ts +0 -284
- package/src/react-ui/ui/Dialog/index.tsx +0 -452
- package/src/react-ui/ui/DropdownMenu/DropdownMenu.styles.ts +0 -35
- package/src/react-ui/ui/DropdownMenu/DropdownMenu.types.ts +0 -81
- package/src/react-ui/ui/DropdownMenu/index.tsx +0 -300
- package/src/react-ui/ui/DynamicToggle/DynamicToggle.css +0 -376
- package/src/react-ui/ui/DynamicToggle/DynamicToggle.styles.ts +0 -85
- package/src/react-ui/ui/DynamicToggle/DynamicToggle.types.ts +0 -180
- package/src/react-ui/ui/DynamicToggle/index.tsx +0 -316
- package/src/react-ui/ui/DynamicToggle/prototype-v7-ios.html +0 -413
- package/src/react-ui/ui/DynamicToggle/prototype-v7.html +0 -615
- package/src/react-ui/ui/DynamicToggle/prototype-v8-gooey-safari.html +0 -560
- package/src/react-ui/ui/DynamicToggle/prototype-v8b-react-structure.html +0 -227
- package/src/react-ui/ui/DynamicToggle/prototype.html +0 -419
- package/src/react-ui/ui/Field/Field.styles.ts +0 -47
- package/src/react-ui/ui/Field/Field.types.ts +0 -60
- package/src/react-ui/ui/Field/index.tsx +0 -254
- package/src/react-ui/ui/Input/Input.styles.ts +0 -11
- package/src/react-ui/ui/Input/Input.types.ts +0 -10
- package/src/react-ui/ui/Input/index.tsx +0 -32
- package/src/react-ui/ui/InputGroup/InputGroup.styles.ts +0 -53
- package/src/react-ui/ui/InputGroup/InputGroup.types.ts +0 -44
- package/src/react-ui/ui/InputGroup/index.tsx +0 -149
- package/src/react-ui/ui/Label/Label.styles.ts +0 -10
- package/src/react-ui/ui/Label/Label.types.ts +0 -9
- package/src/react-ui/ui/Label/index.tsx +0 -27
- package/src/react-ui/ui/Menu/Menu.styles.ts +0 -71
- package/src/react-ui/ui/Menu/Menu.types.ts +0 -425
- package/src/react-ui/ui/Menu/index.tsx +0 -900
- package/src/react-ui/ui/Popover/Popover.styles.ts +0 -55
- package/src/react-ui/ui/Popover/Popover.types.ts +0 -261
- package/src/react-ui/ui/Popover/index.tsx +0 -422
- package/src/react-ui/ui/Progress/Progress.styles.ts +0 -36
- package/src/react-ui/ui/Progress/Progress.types.ts +0 -162
- package/src/react-ui/ui/Progress/index.tsx +0 -254
- package/src/react-ui/ui/Select/Select.styles.ts +0 -30
- package/src/react-ui/ui/Select/Select.types.ts +0 -51
- package/src/react-ui/ui/Select/index.tsx +0 -225
- package/src/react-ui/ui/Separator/Separator.styles.ts +0 -10
- package/src/react-ui/ui/Separator/Separator.types.ts +0 -10
- package/src/react-ui/ui/Separator/index.tsx +0 -37
- package/src/react-ui/ui/Switch/Switch.styles.ts +0 -50
- package/src/react-ui/ui/Switch/Switch.types.ts +0 -155
- package/src/react-ui/ui/Switch/index.tsx +0 -253
- package/src/react-ui/ui/Tabs/Tabs.css +0 -39
- package/src/react-ui/ui/Tabs/Tabs.styles.ts +0 -148
- package/src/react-ui/ui/Tabs/Tabs.types.ts +0 -255
- package/src/react-ui/ui/Tabs/index.tsx +0 -529
- package/src/react-ui/ui/TextFlow/TextFlow.styles.ts +0 -36
- package/src/react-ui/ui/TextFlow/TextFlow.types.ts +0 -118
- package/src/react-ui/ui/TextFlow/index.tsx +0 -276
- package/src/react-ui/ui/Textarea/Textarea.styles.ts +0 -10
- package/src/react-ui/ui/Textarea/Textarea.types.ts +0 -9
- package/src/react-ui/ui/Textarea/index.tsx +0 -27
- package/src/react-ui/ui/Tooltip/Tooltip.styles.ts +0 -43
- package/src/react-ui/ui/Tooltip/Tooltip.types.ts +0 -253
- package/src/react-ui/ui/Tooltip/index.tsx +0 -394
- package/src/react-ui/ui/index.ts +0 -41
- package/src/types/css-modules.d.ts +0 -18
|
@@ -1,615 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html lang="en">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="UTF-8">
|
|
5
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
-
<title>DynamicToggle Prototype v7 — Gooey Morphing</title>
|
|
7
|
-
<style>
|
|
8
|
-
:root {
|
|
9
|
-
--fg: #e2e8f0;
|
|
10
|
-
--bg: #0f172a;
|
|
11
|
-
--card: #1e293b;
|
|
12
|
-
--muted: #64748b;
|
|
13
|
-
--border: #334155;
|
|
14
|
-
--duration: 0.22;
|
|
15
|
-
--ease: cubic-bezier(0.22, 0.61, 0.36, 1);
|
|
16
|
-
--drop-off: 0.4;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
* { box-sizing: border-box; margin: 0; }
|
|
20
|
-
body {
|
|
21
|
-
min-height: 100vh;
|
|
22
|
-
display: flex; flex-direction: column; align-items: center;
|
|
23
|
-
padding: 4rem 1rem; gap: 2rem;
|
|
24
|
-
background: var(--bg);
|
|
25
|
-
font-family: system-ui, -apple-system, sans-serif;
|
|
26
|
-
color: var(--fg);
|
|
27
|
-
}
|
|
28
|
-
h3 { color: var(--muted); font-size: 11px; text-transform: uppercase; letter-spacing: 2px; }
|
|
29
|
-
.row { display: flex; gap: 2rem; align-items: end; flex-wrap: wrap; justify-content: center; }
|
|
30
|
-
.sr-only {
|
|
31
|
-
position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
|
|
32
|
-
overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border-width: 0;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
/* ================================================================
|
|
36
|
-
* SHARED: CONTROL BASE (pill toggle)
|
|
37
|
-
* ================================================================ */
|
|
38
|
-
.control {
|
|
39
|
-
--w: 260px;
|
|
40
|
-
--h: 38px;
|
|
41
|
-
--radius: 9999px;
|
|
42
|
-
--font: 0.75rem;
|
|
43
|
-
--_r: min(var(--radius), calc(var(--h) / 2));
|
|
44
|
-
|
|
45
|
-
position: relative;
|
|
46
|
-
width: var(--w);
|
|
47
|
-
height: var(--h);
|
|
48
|
-
background: var(--card);
|
|
49
|
-
border-radius: var(--radius);
|
|
50
|
-
border: 1px solid var(--border);
|
|
51
|
-
padding: 2px;
|
|
52
|
-
margin-top: calc(var(--h) * 0.8);
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
.control__track {
|
|
56
|
-
display: grid; place-items: center;
|
|
57
|
-
grid-template-columns: repeat(4, 1fr);
|
|
58
|
-
width: 100%; height: 100%;
|
|
59
|
-
position: relative;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
.indicator {
|
|
63
|
-
position: absolute;
|
|
64
|
-
width: 50%; left: 0; top: 0; bottom: 0;
|
|
65
|
-
background: var(--fg);
|
|
66
|
-
border-radius: var(--radius);
|
|
67
|
-
transition: translate calc(var(--duration) * 1s) var(--ease);
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
label {
|
|
71
|
-
display: inline-grid; place-items: center;
|
|
72
|
-
height: 100%; width: 100%;
|
|
73
|
-
cursor: pointer; font-size: var(--font);
|
|
74
|
-
color: var(--fg); z-index: 2; font-weight: 500;
|
|
75
|
-
}
|
|
76
|
-
.control__track > label { color: var(--card); }
|
|
77
|
-
|
|
78
|
-
.group {
|
|
79
|
-
width: 100%; height: 100%;
|
|
80
|
-
display: grid; position: relative;
|
|
81
|
-
grid-template-columns: 1fr 1fr;
|
|
82
|
-
container-type: size;
|
|
83
|
-
overflow: hidden;
|
|
84
|
-
}
|
|
85
|
-
.group, .control__track > label:nth-of-type(1) { grid-column: span 2; }
|
|
86
|
-
/* premium::before styled in the flip section below via data-label */
|
|
87
|
-
|
|
88
|
-
.group .indicator {
|
|
89
|
-
background: var(--fg); left: 50%; top: 0;
|
|
90
|
-
translate: -50% 0;
|
|
91
|
-
pointer-events: none;
|
|
92
|
-
transition: translate calc(var(--duration) * 1s) var(--ease),
|
|
93
|
-
clip-path calc(var(--duration) * 1s) var(--ease),
|
|
94
|
-
background calc(var(--duration) * 1s) var(--ease);
|
|
95
|
-
clip-path: inset(73cqh calc(50% + 1px) calc(27cqh - 2px) calc(50% - 3px) round var(--radius));
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
/* ══════════════════════════════════════════════
|
|
99
|
-
* GROUP COLLAPSED STATE
|
|
100
|
-
* ::before = title (data-label)
|
|
101
|
-
* ::after = combined opts (data-opts)
|
|
102
|
-
* <label>s = hidden when collapsed, shown when expanded
|
|
103
|
-
* ══════════════════════════════════════════════ */
|
|
104
|
-
|
|
105
|
-
/* Title — ::before */
|
|
106
|
-
.group::before {
|
|
107
|
-
content: attr(data-label);
|
|
108
|
-
position: absolute;
|
|
109
|
-
left: 50%; top: 50%;
|
|
110
|
-
translate: -50% -80%;
|
|
111
|
-
color: var(--fg);
|
|
112
|
-
font-size: var(--font);
|
|
113
|
-
font-weight: 500;
|
|
114
|
-
z-index: 2;
|
|
115
|
-
white-space: nowrap;
|
|
116
|
-
pointer-events: none;
|
|
117
|
-
transition: scale calc(var(--duration) * 1s) var(--ease),
|
|
118
|
-
translate calc(var(--duration) * 1s) var(--ease),
|
|
119
|
-
opacity calc(var(--duration) * 1s) var(--ease);
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
/* Combined opts — ::after (only if data-opts exists) */
|
|
123
|
-
.group::after {
|
|
124
|
-
content: attr(data-opts);
|
|
125
|
-
position: absolute;
|
|
126
|
-
left: 50%; top: 50%;
|
|
127
|
-
translate: -50% 20%;
|
|
128
|
-
color: var(--muted);
|
|
129
|
-
font-size: calc(var(--font) * 0.85);
|
|
130
|
-
opacity: 0.6;
|
|
131
|
-
z-index: 2;
|
|
132
|
-
white-space: nowrap;
|
|
133
|
-
pointer-events: none;
|
|
134
|
-
transition: opacity calc(var(--duration) * 1s) var(--ease);
|
|
135
|
-
}
|
|
136
|
-
/* Hide ::after completely when no data-opts (prevents stale dot) */
|
|
137
|
-
.group:not([data-opts])::after { content: none; }
|
|
138
|
-
|
|
139
|
-
/* Labels — morph position via scale + transform-origin (from original codepen) */
|
|
140
|
-
.group label {
|
|
141
|
-
color: var(--muted);
|
|
142
|
-
cursor: pointer;
|
|
143
|
-
z-index: 2;
|
|
144
|
-
transition: color calc(var(--duration) * 1s) var(--ease),
|
|
145
|
-
opacity calc(var(--duration) * 1s) var(--ease),
|
|
146
|
-
translate calc(var(--duration) * 1s) var(--ease);
|
|
147
|
-
}
|
|
148
|
-
.group label span {
|
|
149
|
-
display: grid; place-items: center; height: 100%; width: 100%;
|
|
150
|
-
border-radius: var(--radius);
|
|
151
|
-
transition: scale calc(var(--duration) * 1s) var(--ease);
|
|
152
|
-
}
|
|
153
|
-
/* Collapsed: labels scaled down + container-query origins (scales with size) */
|
|
154
|
-
.group label:nth-of-type(1) span { scale: 0.75; transform-origin: 60cqw 80cqh; }
|
|
155
|
-
.group label:nth-of-type(2) span { scale: 0.75; transform-origin: 40cqw 80cqh; }
|
|
156
|
-
|
|
157
|
-
/* ── Collapsed modes ── */
|
|
158
|
-
|
|
159
|
-
/* "title": only ::before, no opts, labels slide-in from below on expand */
|
|
160
|
-
.group[data-collapsed="title"]::before { translate: -50% -50%; }
|
|
161
|
-
.group[data-collapsed="title"]::after { display: none; }
|
|
162
|
-
.group[data-collapsed="title"]:not(:has(:checked)) label { opacity: 0; translate: 0 30%; }
|
|
163
|
-
|
|
164
|
-
/* "opts": only ::after, no title, labels slide-in from below on expand */
|
|
165
|
-
.group[data-collapsed="opts"]::before { display: none; }
|
|
166
|
-
.group[data-collapsed="opts"]::after { translate: -50% -50%; font-size: var(--font); opacity: 0.7; }
|
|
167
|
-
.group[data-collapsed="opts"]:not(:has(:checked)) label { opacity: 0; translate: 0 30%; }
|
|
168
|
-
|
|
169
|
-
/* default (title-opts): labels visible at 0.75 + ::after hidden */
|
|
170
|
-
.group:not([data-collapsed])::after { content: none; }
|
|
171
|
-
|
|
172
|
-
/* ── Track states ── */
|
|
173
|
-
.control__track:has(> :checked) > label { color: var(--card); }
|
|
174
|
-
.control__track:not(:has(> :checked)) > label { color: var(--fg); opacity: var(--drop-off); }
|
|
175
|
-
.control__track:not(:has(> :checked)) > .indicator { translate: 100% 0; }
|
|
176
|
-
.control__track:has(> :checked) .group .indicator { background: transparent; }
|
|
177
|
-
|
|
178
|
-
/* ── When group expanded ── */
|
|
179
|
-
.group:has(:checked)::before {
|
|
180
|
-
translate: -50% -250%;
|
|
181
|
-
scale: 0.85;
|
|
182
|
-
}
|
|
183
|
-
.group:has(:checked)::after {
|
|
184
|
-
opacity: 0;
|
|
185
|
-
}
|
|
186
|
-
.group:has(:checked) label {
|
|
187
|
-
opacity: 0.75;
|
|
188
|
-
color: var(--muted);
|
|
189
|
-
pointer-events: auto;
|
|
190
|
-
translate: 0 0;
|
|
191
|
-
}
|
|
192
|
-
.group:has(:checked) label span {
|
|
193
|
-
scale: 1;
|
|
194
|
-
}
|
|
195
|
-
.group:has(:checked) .indicator { background: var(--card); clip-path: inset(0 0 0 0 round var(--radius)); }
|
|
196
|
-
.group:has(:nth-of-type(1):checked) label:nth-of-type(1),
|
|
197
|
-
.group:has(:nth-of-type(2):checked) label:nth-of-type(2) { color: var(--fg); opacity: 1; }
|
|
198
|
-
.group:has(:nth-of-type(1):checked) .indicator { translate: -100% 0; }
|
|
199
|
-
.group:has(:nth-of-type(2):checked) .indicator { translate: 0 0; }
|
|
200
|
-
|
|
201
|
-
/* ── Gooey mode: ::before hides on expand, bubble text takes over ── */
|
|
202
|
-
.control--filter .group:has(:checked)::before {
|
|
203
|
-
opacity: 0;
|
|
204
|
-
translate: -50% -80%;
|
|
205
|
-
scale: 1;
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
/* ================================================================
|
|
209
|
-
* TECHNIQUE 1: SVG FILTER GOOEY
|
|
210
|
-
* Filter ONLY on .goo-bg layer (pill bg + bubble bg).
|
|
211
|
-
* Content (indicator, labels) sits on top, unfiltered.
|
|
212
|
-
* ================================================================ */
|
|
213
|
-
.control--filter {
|
|
214
|
-
background: transparent;
|
|
215
|
-
border-color: transparent;
|
|
216
|
-
overflow: visible;
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
/* Background layer — gooey filtered */
|
|
220
|
-
.control--filter > .goo-bg {
|
|
221
|
-
position: absolute;
|
|
222
|
-
inset: 0;
|
|
223
|
-
border-radius: inherit;
|
|
224
|
-
background: var(--card);
|
|
225
|
-
pointer-events: none;
|
|
226
|
-
z-index: 0;
|
|
227
|
-
filter: url(#goo) drop-shadow(0 0 var(--outline-blur, 0.5px) var(--outline-color, #334155)) drop-shadow(0 0 var(--outline-blur, 0.5px) var(--outline-color, #334155));
|
|
228
|
-
overflow: visible;
|
|
229
|
-
}
|
|
230
|
-
.control--filter.xs > .goo-bg { filter: url(#goo-xs) drop-shadow(0 0 var(--outline-blur, 0.5px) var(--outline-color, #334155)) drop-shadow(0 0 var(--outline-blur, 0.5px) var(--outline-color, #334155)); }
|
|
231
|
-
.control--filter.sm > .goo-bg { filter: url(#goo-sm) drop-shadow(0 0 var(--outline-blur, 0.5px) var(--outline-color, #334155)) drop-shadow(0 0 var(--outline-blur, 0.5px) var(--outline-color, #334155)); }
|
|
232
|
-
.control--filter.lg > .goo-bg { filter: url(#goo-lg) drop-shadow(0 0 var(--outline-blur, 0.5px) var(--outline-color, #334155)) drop-shadow(0 0 var(--outline-blur, 0.5px) var(--outline-color, #334155)); }
|
|
233
|
-
.control--filter.xl > .goo-bg { filter: url(#goo-xl) drop-shadow(0 0 var(--outline-blur, 0.5px) var(--outline-color, #334155)) drop-shadow(0 0 var(--outline-blur, 0.5px) var(--outline-color, #334155)); }
|
|
234
|
-
|
|
235
|
-
/* Bubble — lives inside .goo-bg so it gets filtered */
|
|
236
|
-
.control--filter .bubble {
|
|
237
|
-
position: absolute;
|
|
238
|
-
left: var(--bubble-inset, 20%); right: var(--bubble-inset, 20%);
|
|
239
|
-
bottom: 100%;
|
|
240
|
-
|
|
241
|
-
display: flex;
|
|
242
|
-
align-items: center;
|
|
243
|
-
justify-content: center;
|
|
244
|
-
|
|
245
|
-
background: var(--card);
|
|
246
|
-
border-radius: calc(var(--_r) * var(--bubble-br-pct, 40) / 100);
|
|
247
|
-
|
|
248
|
-
font-size: var(--font);
|
|
249
|
-
font-weight: 500;
|
|
250
|
-
color: var(--fg);
|
|
251
|
-
white-space: nowrap;
|
|
252
|
-
pointer-events: none;
|
|
253
|
-
|
|
254
|
-
height: 0;
|
|
255
|
-
padding: 0;
|
|
256
|
-
opacity: 0;
|
|
257
|
-
overflow: hidden;
|
|
258
|
-
|
|
259
|
-
transition:
|
|
260
|
-
height calc(var(--duration) * 1.5s) var(--ease),
|
|
261
|
-
padding calc(var(--duration) * 1.5s) var(--ease),
|
|
262
|
-
opacity calc(var(--duration) * 1s) var(--ease);
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
.control--filter:has(.group :checked) .goo-bg .bubble {
|
|
266
|
-
height: calc(var(--h) * var(--bubble-h-pct, 40) / 100);
|
|
267
|
-
padding: 0 0.75em;
|
|
268
|
-
opacity: 1;
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
/* Content layer — on top, NOT filtered */
|
|
272
|
-
.control--filter > .control__track {
|
|
273
|
-
position: relative;
|
|
274
|
-
z-index: 1;
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
/* ================================================================
|
|
278
|
-
* TECHNIQUE 2: PARAMETRIC SVG PATH
|
|
279
|
-
* An SVG <path> draws the merged shape. No filter needed.
|
|
280
|
-
* ================================================================ */
|
|
281
|
-
.control--path {
|
|
282
|
-
background: transparent;
|
|
283
|
-
border-color: transparent;
|
|
284
|
-
}
|
|
285
|
-
|
|
286
|
-
.control--path .path-svg {
|
|
287
|
-
position: absolute;
|
|
288
|
-
top: 0; left: 0;
|
|
289
|
-
overflow: visible;
|
|
290
|
-
pointer-events: none;
|
|
291
|
-
z-index: -1;
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
.control--path .bubble {
|
|
295
|
-
position: absolute;
|
|
296
|
-
left: 0; right: 0;
|
|
297
|
-
bottom: 100%;
|
|
298
|
-
display: flex;
|
|
299
|
-
align-items: center;
|
|
300
|
-
justify-content: center;
|
|
301
|
-
font-size: var(--font);
|
|
302
|
-
font-weight: 500;
|
|
303
|
-
color: var(--fg);
|
|
304
|
-
white-space: nowrap;
|
|
305
|
-
pointer-events: none;
|
|
306
|
-
height: 0;
|
|
307
|
-
opacity: 0;
|
|
308
|
-
transition:
|
|
309
|
-
height calc(var(--duration) * 1.5s) var(--ease),
|
|
310
|
-
opacity calc(var(--duration) * 1s) var(--ease);
|
|
311
|
-
}
|
|
312
|
-
|
|
313
|
-
.control--path:has(.group :checked) .bubble {
|
|
314
|
-
height: calc(var(--h) * 0.7);
|
|
315
|
-
opacity: 1;
|
|
316
|
-
}
|
|
317
|
-
|
|
318
|
-
/* SIZES */
|
|
319
|
-
.control.xs { --w: 170px; --h: 26px; --font: 9px; }
|
|
320
|
-
.control.sm { --w: 210px; --h: 30px; --font: 10px; }
|
|
321
|
-
.control.lg { --w: 320px; --h: 44px; --font: 14px; }
|
|
322
|
-
.control.xl { --w: 400px; --h: 52px; --font: 16px; }
|
|
323
|
-
|
|
324
|
-
/* SHAPES */
|
|
325
|
-
.control.rounded { --radius: 12px; }
|
|
326
|
-
.control.square { --radius: 6px; }
|
|
327
|
-
|
|
328
|
-
/* Controls panel */
|
|
329
|
-
#controls {
|
|
330
|
-
position: fixed; top: 1rem; right: 1rem; z-index: 999;
|
|
331
|
-
background: #1e293b; border: 1px solid #475569; border-radius: 12px;
|
|
332
|
-
padding: 1rem; display: flex; flex-direction: column; gap: 0.5rem;
|
|
333
|
-
font-size: 11px; color: #94a3b8; min-width: 240px;
|
|
334
|
-
}
|
|
335
|
-
#controls strong { color: #e2e8f0; }
|
|
336
|
-
#controls input[type="range"] { width: 100%; }
|
|
337
|
-
</style>
|
|
338
|
-
</head>
|
|
339
|
-
<body>
|
|
340
|
-
|
|
341
|
-
<!-- SVG Filter Definitions — blur scales with size (blur ≈ height * 0.15) -->
|
|
342
|
-
<svg style="position:absolute;width:0;height:0;overflow:hidden" aria-hidden="true">
|
|
343
|
-
<defs>
|
|
344
|
-
<!-- XS h=26 → blur 4 -->
|
|
345
|
-
<filter id="goo-xs" x="-20%" y="-20%" width="140%" height="140%" color-interpolation-filters="sRGB">
|
|
346
|
-
<feGaussianBlur in="SourceGraphic" stdDeviation="4" result="blur"/>
|
|
347
|
-
<feColorMatrix in="blur" mode="matrix" values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 20 -10" result="goo"/>
|
|
348
|
-
<feComposite in="SourceGraphic" in2="goo" operator="atop"/>
|
|
349
|
-
</filter>
|
|
350
|
-
<!-- SM h=30 → blur 5 -->
|
|
351
|
-
<filter id="goo-sm" x="-20%" y="-20%" width="140%" height="140%" color-interpolation-filters="sRGB">
|
|
352
|
-
<feGaussianBlur in="SourceGraphic" stdDeviation="5" result="blur"/>
|
|
353
|
-
<feColorMatrix in="blur" mode="matrix" values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 20 -10" result="goo"/>
|
|
354
|
-
<feComposite in="SourceGraphic" in2="goo" operator="atop"/>
|
|
355
|
-
</filter>
|
|
356
|
-
<!-- Default h=38 → blur 6 -->
|
|
357
|
-
<filter id="goo" x="-20%" y="-20%" width="140%" height="140%" color-interpolation-filters="sRGB">
|
|
358
|
-
<feGaussianBlur in="SourceGraphic" stdDeviation="6" result="blur"/>
|
|
359
|
-
<feColorMatrix in="blur" mode="matrix" values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 20 -10" result="goo"/>
|
|
360
|
-
<feComposite in="SourceGraphic" in2="goo" operator="atop"/>
|
|
361
|
-
</filter>
|
|
362
|
-
<!-- LG h=44 → blur 7 -->
|
|
363
|
-
<filter id="goo-lg" x="-20%" y="-20%" width="140%" height="140%" color-interpolation-filters="sRGB">
|
|
364
|
-
<feGaussianBlur in="SourceGraphic" stdDeviation="7" result="blur"/>
|
|
365
|
-
<feColorMatrix in="blur" mode="matrix" values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 20 -10" result="goo"/>
|
|
366
|
-
<feComposite in="SourceGraphic" in2="goo" operator="atop"/>
|
|
367
|
-
</filter>
|
|
368
|
-
<!-- XL h=52 → blur 8 -->
|
|
369
|
-
<filter id="goo-xl" x="-20%" y="-20%" width="140%" height="140%" color-interpolation-filters="sRGB">
|
|
370
|
-
<feGaussianBlur in="SourceGraphic" stdDeviation="8" result="blur"/>
|
|
371
|
-
<feColorMatrix in="blur" mode="matrix" values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 20 -10" result="goo"/>
|
|
372
|
-
<feComposite in="SourceGraphic" in2="goo" operator="atop"/>
|
|
373
|
-
</filter>
|
|
374
|
-
</defs>
|
|
375
|
-
</svg>
|
|
376
|
-
|
|
377
|
-
<!-- Controls -->
|
|
378
|
-
<div id="controls">
|
|
379
|
-
<strong>Gooey Filter Controls</strong>
|
|
380
|
-
<label>Blur: <span id="v-blur">8</span>
|
|
381
|
-
<input type="range" min="1" max="20" value="8"
|
|
382
|
-
oninput="document.querySelector('#goo feGaussianBlur').setAttribute('stdDeviation',this.value);document.getElementById('v-blur').textContent=this.value">
|
|
383
|
-
</label>
|
|
384
|
-
<label>Alpha Gain: <span id="v-gain">20</span>
|
|
385
|
-
<input type="range" min="5" max="40" value="20"
|
|
386
|
-
oninput="var g=this.value,o=document.getElementById('v-offset-r').value;document.querySelector('#goo feColorMatrix').setAttribute('values','1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 '+g+' '+o);document.getElementById('v-gain').textContent=g">
|
|
387
|
-
</label>
|
|
388
|
-
<div style="margin-top:0.25rem;border-top:1px solid #334155;padding-top:0.25rem">
|
|
389
|
-
<strong>Bubble Shape</strong>
|
|
390
|
-
</div>
|
|
391
|
-
<label>Inset (width): <span id="v-inset">20</span>%
|
|
392
|
-
<input type="range" min="0" max="45" value="20"
|
|
393
|
-
oninput="document.documentElement.style.setProperty('--bubble-inset',this.value+'%');document.getElementById('v-inset').textContent=this.value">
|
|
394
|
-
</label>
|
|
395
|
-
<label>Overlap: <span id="v-overlap">0</span>px
|
|
396
|
-
<input type="range" min="0" max="20" value="0"
|
|
397
|
-
oninput="document.documentElement.style.setProperty('--bubble-overlap',this.value+'px');document.getElementById('v-overlap').textContent=this.value">
|
|
398
|
-
</label>
|
|
399
|
-
<label>Height: <span id="v-bh">40</span>%
|
|
400
|
-
<input type="range" min="20" max="120" value="40"
|
|
401
|
-
oninput="document.documentElement.style.setProperty('--bubble-h-pct',this.value);document.getElementById('v-bh').textContent=this.value">
|
|
402
|
-
</label>
|
|
403
|
-
<label>Border-radius: <span id="v-br">40</span>%
|
|
404
|
-
<input type="range" min="0" max="100" value="40"
|
|
405
|
-
oninput="document.documentElement.style.setProperty('--bubble-br-pct',this.value);document.getElementById('v-br').textContent=this.value">
|
|
406
|
-
</label>
|
|
407
|
-
<div style="margin-top:0.25rem;border-top:1px solid #334155;padding-top:0.25rem">
|
|
408
|
-
<strong>Outline</strong>
|
|
409
|
-
</div>
|
|
410
|
-
<label>Blur: <span id="v-ol">0.5</span>px
|
|
411
|
-
<input type="range" min="0" max="3" step="0.1" value="0.5"
|
|
412
|
-
oninput="document.documentElement.style.setProperty('--outline-blur',this.value+'px');document.getElementById('v-ol').textContent=this.value">
|
|
413
|
-
</label>
|
|
414
|
-
<label>Layers: <span id="v-layers">2</span>
|
|
415
|
-
<input type="range" min="1" max="4" value="2"
|
|
416
|
-
oninput="var n=+this.value,b='var(--outline-blur, 0.5px)',c='var(--outline-color, #334155)',s=Array(n).fill('drop-shadow(0 0 '+b+' '+c+')').join(' ');document.documentElement.style.setProperty('--outline-stack',s);document.querySelectorAll('.control--filter').forEach(function(el){el.style.filter='url(#goo) '+s});document.getElementById('v-layers').textContent=n">
|
|
417
|
-
</label>
|
|
418
|
-
<label>Color:
|
|
419
|
-
<input type="color" value="#334155"
|
|
420
|
-
oninput="document.documentElement.style.setProperty('--outline-color',this.value);document.querySelectorAll('.control--filter').forEach(function(el){var s=el.style.filter;el.style.filter=s})" style="width:100%;height:24px;border:1px solid #475569;border-radius:4px;background:#0f172a;cursor:pointer">
|
|
421
|
-
</label>
|
|
422
|
-
<div style="margin-top:0.25rem;border-top:1px solid #334155;padding-top:0.25rem">
|
|
423
|
-
<strong>Filter</strong>
|
|
424
|
-
</div>
|
|
425
|
-
<label>Alpha Offset: <span id="v-offset">-10</span>
|
|
426
|
-
<input type="range" id="v-offset-r" min="-20" max="0" value="-10"
|
|
427
|
-
oninput="var g=document.getElementById('v-gain').parentElement.querySelector('input').value,o=this.value;document.querySelector('#goo feColorMatrix').setAttribute('values','1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 '+g+' '+o);document.getElementById('v-offset').textContent=o">
|
|
428
|
-
</label>
|
|
429
|
-
</div>
|
|
430
|
-
|
|
431
|
-
<!-- ============================================================
|
|
432
|
-
TECHNIQUE 1: SVG FILTER GOOEY
|
|
433
|
-
============================================================ -->
|
|
434
|
-
<h3>Technique 1: SVG Filter Gooey</h3>
|
|
435
|
-
<p style="color:var(--muted);font-size:12px;max-width:600px;text-align:center">
|
|
436
|
-
<code>filter: url(#goo)</code> on the control. Bubble + pill same bg color = automatic organic merge. No pseudo-elements, no path math.
|
|
437
|
-
</p>
|
|
438
|
-
|
|
439
|
-
<h3>collapsed="opts" — Solo opciones</h3>
|
|
440
|
-
<div class="row">
|
|
441
|
-
<div><h3>SM</h3>
|
|
442
|
-
<div class="control sm control--filter">
|
|
443
|
-
<div class="goo-bg"><div class="bubble">Changes</div></div>
|
|
444
|
-
<div class="control__track"><div class="indicator"></div>
|
|
445
|
-
<label for="m1s-a">Tree</label><input class="sr-only" type="radio" name="m1s" id="m1s-a" checked>
|
|
446
|
-
<div class="group" data-collapsed="opts" data-label="Changes" data-opts="Flat · Grp"><div class="indicator"></div>
|
|
447
|
-
<label for="m1s-b"><span>Flat</span></label><input class="sr-only" type="radio" name="m1s" id="m1s-b">
|
|
448
|
-
<label for="m1s-c"><span>Grp</span></label><input class="sr-only" type="radio" name="m1s" id="m1s-c">
|
|
449
|
-
</div></div></div></div>
|
|
450
|
-
<div><h3>Default</h3>
|
|
451
|
-
<div class="control control--filter">
|
|
452
|
-
<div class="goo-bg"><div class="bubble">Premium</div></div>
|
|
453
|
-
<div class="control__track"><div class="indicator"></div>
|
|
454
|
-
<label for="m1d-a">Free</label><input class="sr-only" type="radio" name="m1d" id="m1d-a" checked>
|
|
455
|
-
<div class="group" data-collapsed="opts" data-label="Premium" data-opts="Solo · Team"><div class="indicator"></div>
|
|
456
|
-
<label for="m1d-b"><span>Solo</span></label><input class="sr-only" type="radio" name="m1d" id="m1d-b">
|
|
457
|
-
<label for="m1d-c"><span>Team</span></label><input class="sr-only" type="radio" name="m1d" id="m1d-c">
|
|
458
|
-
</div></div></div></div>
|
|
459
|
-
<div><h3>LG</h3>
|
|
460
|
-
<div class="control lg control--filter">
|
|
461
|
-
<div class="goo-bg"><div class="bubble">Billing</div></div>
|
|
462
|
-
<div class="control__track"><div class="indicator"></div>
|
|
463
|
-
<label for="m1l-a">Annual</label><input class="sr-only" type="radio" name="m1l" id="m1l-a" checked>
|
|
464
|
-
<div class="group" data-collapsed="opts" data-label="Billing" data-opts="Monthly · Weekly"><div class="indicator"></div>
|
|
465
|
-
<label for="m1l-b"><span>Monthly</span></label><input class="sr-only" type="radio" name="m1l" id="m1l-b">
|
|
466
|
-
<label for="m1l-c"><span>Weekly</span></label><input class="sr-only" type="radio" name="m1l" id="m1l-c">
|
|
467
|
-
</div></div></div></div>
|
|
468
|
-
<div><h3>XL</h3>
|
|
469
|
-
<div class="control xl control--filter">
|
|
470
|
-
<div class="goo-bg"><div class="bubble">Enterprise</div></div>
|
|
471
|
-
<div class="control__track"><div class="indicator"></div>
|
|
472
|
-
<label for="m1x-a">Standard</label><input class="sr-only" type="radio" name="m1x" id="m1x-a" checked>
|
|
473
|
-
<div class="group" data-collapsed="opts" data-label="Enterprise" data-opts="Business · Custom"><div class="indicator"></div>
|
|
474
|
-
<label for="m1x-b"><span>Business</span></label><input class="sr-only" type="radio" name="m1x" id="m1x-b">
|
|
475
|
-
<label for="m1x-c"><span>Custom</span></label><input class="sr-only" type="radio" name="m1x" id="m1x-c">
|
|
476
|
-
</div></div></div></div>
|
|
477
|
-
</div>
|
|
478
|
-
|
|
479
|
-
<h3>default — Title + labels morphing (codepen original)</h3>
|
|
480
|
-
<div class="row">
|
|
481
|
-
<div><h3>SM</h3>
|
|
482
|
-
<div class="control sm control--filter">
|
|
483
|
-
<div class="goo-bg"><div class="bubble">Changes</div></div>
|
|
484
|
-
<div class="control__track"><div class="indicator"></div>
|
|
485
|
-
<label for="m2s-a">Tree</label><input class="sr-only" type="radio" name="m2s" id="m2s-a" checked>
|
|
486
|
-
<div class="group" data-label="Changes" data-opts="Flat · Grp"><div class="indicator"></div>
|
|
487
|
-
<label for="m2s-b"><span>Flat</span></label><input class="sr-only" type="radio" name="m2s" id="m2s-b">
|
|
488
|
-
<label for="m2s-c"><span>Grp</span></label><input class="sr-only" type="radio" name="m2s" id="m2s-c">
|
|
489
|
-
</div></div></div></div>
|
|
490
|
-
<div><h3>Default</h3>
|
|
491
|
-
<div class="control control--filter">
|
|
492
|
-
<div class="goo-bg"><div class="bubble">Premium</div></div>
|
|
493
|
-
<div class="control__track"><div class="indicator"></div>
|
|
494
|
-
<label for="m2d-a">Free</label><input class="sr-only" type="radio" name="m2d" id="m2d-a" checked>
|
|
495
|
-
<div class="group" data-label="Premium" data-opts="Solo · Team"><div class="indicator"></div>
|
|
496
|
-
<label for="m2d-b"><span>Solo</span></label><input class="sr-only" type="radio" name="m2d" id="m2d-b">
|
|
497
|
-
<label for="m2d-c"><span>Team</span></label><input class="sr-only" type="radio" name="m2d" id="m2d-c">
|
|
498
|
-
</div></div></div></div>
|
|
499
|
-
<div><h3>LG</h3>
|
|
500
|
-
<div class="control lg control--filter">
|
|
501
|
-
<div class="goo-bg"><div class="bubble">Billing</div></div>
|
|
502
|
-
<div class="control__track"><div class="indicator"></div>
|
|
503
|
-
<label for="m2l-a">Annual</label><input class="sr-only" type="radio" name="m2l" id="m2l-a" checked>
|
|
504
|
-
<div class="group" data-label="Billing" data-opts="Monthly · Weekly"><div class="indicator"></div>
|
|
505
|
-
<label for="m2l-b"><span>Monthly</span></label><input class="sr-only" type="radio" name="m2l" id="m2l-b">
|
|
506
|
-
<label for="m2l-c"><span>Weekly</span></label><input class="sr-only" type="radio" name="m2l" id="m2l-c">
|
|
507
|
-
</div></div></div></div>
|
|
508
|
-
<div><h3>XL</h3>
|
|
509
|
-
<div class="control xl control--filter">
|
|
510
|
-
<div class="goo-bg"><div class="bubble">Enterprise</div></div>
|
|
511
|
-
<div class="control__track"><div class="indicator"></div>
|
|
512
|
-
<label for="m2x-a">Standard</label><input class="sr-only" type="radio" name="m2x" id="m2x-a" checked>
|
|
513
|
-
<div class="group" data-label="Enterprise" data-opts="Business · Custom"><div class="indicator"></div>
|
|
514
|
-
<label for="m2x-b"><span>Business</span></label><input class="sr-only" type="radio" name="m2x" id="m2x-b">
|
|
515
|
-
<label for="m2x-c"><span>Custom</span></label><input class="sr-only" type="radio" name="m2x" id="m2x-c">
|
|
516
|
-
</div></div></div></div>
|
|
517
|
-
</div>
|
|
518
|
-
|
|
519
|
-
<h3>collapsed="title" — Solo titulo</h3>
|
|
520
|
-
<div class="row">
|
|
521
|
-
<div><h3>Default</h3>
|
|
522
|
-
<div class="control control--filter">
|
|
523
|
-
<div class="goo-bg"><div class="bubble">Theme</div></div>
|
|
524
|
-
<div class="control__track"><div class="indicator"></div>
|
|
525
|
-
<label for="m3d-a">System</label><input class="sr-only" type="radio" name="m3d" id="m3d-a" checked>
|
|
526
|
-
<div class="group" data-collapsed="title" data-label="Theme" data-opts="Light · Dark"><div class="indicator"></div>
|
|
527
|
-
<label for="m3d-b"><span>Light</span></label><input class="sr-only" type="radio" name="m3d" id="m3d-b">
|
|
528
|
-
<label for="m3d-c"><span>Dark</span></label><input class="sr-only" type="radio" name="m3d" id="m3d-c">
|
|
529
|
-
</div></div></div></div>
|
|
530
|
-
<div><h3>LG</h3>
|
|
531
|
-
<div class="control lg control--filter">
|
|
532
|
-
<div class="goo-bg"><div class="bubble">Billing</div></div>
|
|
533
|
-
<div class="control__track"><div class="indicator"></div>
|
|
534
|
-
<label for="m3l-a">Annual</label><input class="sr-only" type="radio" name="m3l" id="m3l-a" checked>
|
|
535
|
-
<div class="group" data-collapsed="title" data-label="Billing" data-opts="Monthly · Weekly"><div class="indicator"></div>
|
|
536
|
-
<label for="m3l-b"><span>Monthly</span></label><input class="sr-only" type="radio" name="m3l" id="m3l-b">
|
|
537
|
-
<label for="m3l-c"><span>Weekly</span></label><input class="sr-only" type="radio" name="m3l" id="m3l-c">
|
|
538
|
-
</div></div></div></div>
|
|
539
|
-
<div><h3>XL</h3>
|
|
540
|
-
<div class="control xl control--filter">
|
|
541
|
-
<div class="goo-bg"><div class="bubble">Enterprise</div></div>
|
|
542
|
-
<div class="control__track"><div class="indicator"></div>
|
|
543
|
-
<label for="m3x-a">Standard</label><input class="sr-only" type="radio" name="m3x" id="m3x-a" checked>
|
|
544
|
-
<div class="group" data-collapsed="title" data-label="Enterprise" data-opts="Business · Custom"><div class="indicator"></div>
|
|
545
|
-
<label for="m3x-b"><span>Business</span></label><input class="sr-only" type="radio" name="m3x" id="m3x-b">
|
|
546
|
-
<label for="m3x-c"><span>Custom</span></label><input class="sr-only" type="radio" name="m3x" id="m3x-c">
|
|
547
|
-
</div></div></div></div>
|
|
548
|
-
</div>
|
|
549
|
-
|
|
550
|
-
<h3>Filter: Rounded + Square</h3>
|
|
551
|
-
<div class="row">
|
|
552
|
-
<div class="control sm rounded control--filter">
|
|
553
|
-
<div class="goo-bg"><div class="bubble">Mode</div></div>
|
|
554
|
-
<div class="control__track"><div class="indicator"></div>
|
|
555
|
-
<label for="fr1-a">Off</label><input class="sr-only" type="radio" name="fr1" id="fr1-a">
|
|
556
|
-
<div class="group" data-label="Mode" data-opts="Auto · Manual"><div class="indicator"></div>
|
|
557
|
-
<label for="fr1-b"><span>Auto</span></label><input class="sr-only" type="radio" name="fr1" id="fr1-b" checked>
|
|
558
|
-
<label for="fr1-c"><span>Manual</span></label><input class="sr-only" type="radio" name="fr1" id="fr1-c">
|
|
559
|
-
</div></div></div>
|
|
560
|
-
<div class="control rounded control--filter">
|
|
561
|
-
<div class="goo-bg"><div class="bubble">Theme</div></div>
|
|
562
|
-
<div class="control__track"><div class="indicator"></div>
|
|
563
|
-
<label for="fr2-a">System</label><input class="sr-only" type="radio" name="fr2" id="fr2-a">
|
|
564
|
-
<div class="group" data-label="Theme" data-opts="Light · Dark"><div class="indicator"></div>
|
|
565
|
-
<label for="fr2-b"><span>Light</span></label><input class="sr-only" type="radio" name="fr2" id="fr2-b" checked>
|
|
566
|
-
<label for="fr2-c"><span>Dark</span></label><input class="sr-only" type="radio" name="fr2" id="fr2-c">
|
|
567
|
-
</div></div></div>
|
|
568
|
-
<div class="control sm square control--filter">
|
|
569
|
-
<div class="goo-bg"><div class="bubble">Group</div></div>
|
|
570
|
-
<div class="control__track"><div class="indicator"></div>
|
|
571
|
-
<label for="fs1-a">A</label><input class="sr-only" type="radio" name="fs1" id="fs1-a">
|
|
572
|
-
<div class="group" data-label="Group" data-opts="B · C"><div class="indicator"></div>
|
|
573
|
-
<label for="fs1-b"><span>B</span></label><input class="sr-only" type="radio" name="fs1" id="fs1-b" checked>
|
|
574
|
-
<label for="fs1-c"><span>C</span></label><input class="sr-only" type="radio" name="fs1" id="fs1-c">
|
|
575
|
-
</div></div></div>
|
|
576
|
-
<div class="control square control--filter">
|
|
577
|
-
<div class="goo-bg"><div class="bubble">Output</div></div>
|
|
578
|
-
<div class="control__track"><div class="indicator"></div>
|
|
579
|
-
<label for="fs2-a">Input</label><input class="sr-only" type="radio" name="fs2" id="fs2-a">
|
|
580
|
-
<div class="group" data-label="Output" data-opts="JSON · XML"><div class="indicator"></div>
|
|
581
|
-
<label for="fs2-b"><span>JSON</span></label><input class="sr-only" type="radio" name="fs2" id="fs2-b" checked>
|
|
582
|
-
<label for="fs2-c"><span>XML</span></label><input class="sr-only" type="radio" name="fs2" id="fs2-c">
|
|
583
|
-
</div></div></div>
|
|
584
|
-
</div>
|
|
585
|
-
|
|
586
|
-
<h3>Filter: Collapsed (click left option)</h3>
|
|
587
|
-
<div class="row">
|
|
588
|
-
<div class="control control--filter">
|
|
589
|
-
<div class="goo-bg"><div class="bubble">Premium</div></div>
|
|
590
|
-
<div class="control__track"><div class="indicator"></div>
|
|
591
|
-
<label for="fc-a">Free</label><input class="sr-only" type="radio" name="fc" id="fc-a" checked>
|
|
592
|
-
<div class="group" data-label="Premium" data-opts="Solo · Team"><div class="indicator"></div>
|
|
593
|
-
<label for="fc-b"><span>Solo</span></label><input class="sr-only" type="radio" name="fc" id="fc-b">
|
|
594
|
-
<label for="fc-c"><span>Team</span></label><input class="sr-only" type="radio" name="fc" id="fc-c">
|
|
595
|
-
</div></div></div>
|
|
596
|
-
<div class="control rounded control--filter">
|
|
597
|
-
<div class="goo-bg"><div class="bubble">Premium</div></div>
|
|
598
|
-
<div class="control__track"><div class="indicator"></div>
|
|
599
|
-
<label for="fc2-a">Free</label><input class="sr-only" type="radio" name="fc2" id="fc2-a" checked>
|
|
600
|
-
<div class="group" data-label="Premium" data-opts="Solo · Team"><div class="indicator"></div>
|
|
601
|
-
<label for="fc2-b"><span>Solo</span></label><input class="sr-only" type="radio" name="fc2" id="fc2-b">
|
|
602
|
-
<label for="fc2-c"><span>Team</span></label><input class="sr-only" type="radio" name="fc2" id="fc2-c">
|
|
603
|
-
</div></div></div>
|
|
604
|
-
<div class="control square control--filter">
|
|
605
|
-
<div class="goo-bg"><div class="bubble">Premium</div></div>
|
|
606
|
-
<div class="control__track"><div class="indicator"></div>
|
|
607
|
-
<label for="fc3-a">Free</label><input class="sr-only" type="radio" name="fc3" id="fc3-a" checked>
|
|
608
|
-
<div class="group" data-label="Premium" data-opts="Solo · Team"><div class="indicator"></div>
|
|
609
|
-
<label for="fc3-b"><span>Solo</span></label><input class="sr-only" type="radio" name="fc3" id="fc3-b">
|
|
610
|
-
<label for="fc3-c"><span>Team</span></label><input class="sr-only" type="radio" name="fc3" id="fc3-c">
|
|
611
|
-
</div></div></div>
|
|
612
|
-
</div>
|
|
613
|
-
|
|
614
|
-
</body>
|
|
615
|
-
</html>
|