@versini/ui-toggle 6.2.3 → 6.3.0

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/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { JSX } from 'react/jsx-runtime';
2
2
 
3
- export declare const Toggle: ({ checked, onChange, label, labelHidden, name, mode, focusMode, labelMode, className, noBorder, narrow, noHaptic, labelPosition, subLabel, }: ToggleProps) => JSX.Element;
3
+ export declare const Toggle: ({ checked, onChange, label, labelHidden, name, mode, focusMode, labelMode, className, noBorder, narrow, noHaptic, labelPosition, subLabel, splitBackground, }: ToggleProps) => JSX.Element;
4
4
 
5
5
  export declare const TOGGLE_CLASSNAME = "av-toggle";
6
6
 
@@ -70,6 +70,12 @@ declare type ToggleProps = {
70
70
  * @default "right"
71
71
  */
72
72
  labelPosition?: "left" | "right";
73
+ /**
74
+ * Whether or not to render the toggle track with a split background
75
+ * gradient overlay (aqua-style).
76
+ * @default false
77
+ */
78
+ splitBackground?: boolean;
73
79
  };
74
80
 
75
81
  export { }
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- @versini/ui-toggle v6.2.3
2
+ @versini/ui-toggle v6.3.0
3
3
  © 2026 gizmette.com
4
4
  */
5
5
 
@@ -29,12 +29,17 @@ const getToggleKnobFocusClasses = ({ focusMode })=>{
29
29
  "peer-focus:outline-focus-dark dark:peer-focus:outline-focus-light": focusMode === "system"
30
30
  });
31
31
  };
32
- const getToggleKnobOnClasses = ({ narrow })=>{
32
+ // Aqua-style split background overlay for the toggle knob:
33
+ // - Top half: flat white overlay (light, uniform)
34
+ // - Bottom half: starts darker, gradually lightens toward the bottom edge
35
+ const KNOB_SPLIT_OVERLAY = "after:bg-[linear-gradient(to_bottom,oklch(1_0_0/0.2)_50%,oklch(0_0_0/0.1)_50%,oklch(1_0_0/0.05)_100%)]";
36
+ const getToggleKnobOnClasses = ({ narrow, splitBackground })=>{
33
37
  return clsx({
34
38
  "peer-checked:after:translate-x-full": !narrow,
35
39
  "peer-checked:after:translate-x-4": narrow
36
40
  }, // background color when checked
37
- "peer-checked:bg-action-light", // knob circle and border color when checked
41
+ "peer-checked:bg-action-light", // split background overlay on the knob (both states)
42
+ splitBackground && KNOB_SPLIT_OVERLAY, // knob circle and border color when checked
38
43
  "peer-checked:after:bg-white", "peer-checked:after:border-white");
39
44
  };
40
45
  const getToggleKnobOffClasses = ({ narrow })=>{
@@ -79,7 +84,7 @@ const getWrapperClasses = ({ className })=>{
79
84
  const getToggleWrapperClasses = ()=>{
80
85
  return "relative inline-block";
81
86
  };
82
- const getToggleClasses = ({ mode, focusMode, labelHidden, className, noBorder, narrow, labelMode, labelPosition = "right", subLabel })=>{
87
+ const getToggleClasses = ({ mode, focusMode, labelHidden, className, noBorder, narrow, labelMode, labelPosition = "right", subLabel, splitBackground })=>{
83
88
  return {
84
89
  toggle: clsx(getToggleBaseClasses({
85
90
  narrow
@@ -91,7 +96,8 @@ const getToggleClasses = ({ mode, focusMode, labelHidden, className, noBorder, n
91
96
  }), getToggleKnobOffClasses({
92
97
  narrow
93
98
  }), getToggleKnobOnClasses({
94
- narrow
99
+ narrow,
100
+ splitBackground
95
101
  })),
96
102
  label: getLabelClasses({
97
103
  labelHidden,
@@ -117,7 +123,7 @@ const getToggleClasses = ({ mode, focusMode, labelHidden, className, noBorder, n
117
123
 
118
124
 
119
125
 
120
- const Toggle = ({ checked = false, onChange, label, labelHidden = false, name, mode = "system", focusMode = "system", labelMode, className, noBorder = false, narrow = false, noHaptic = false, labelPosition = "right", subLabel })=>{
126
+ const Toggle = ({ checked = false, onChange, label, labelHidden = false, name, mode = "system", focusMode = "system", labelMode, className, noBorder = false, narrow = false, noHaptic = false, labelPosition = "right", subLabel, splitBackground = false })=>{
121
127
  const { haptic } = useHaptic();
122
128
  const toggleClasses = getToggleClasses({
123
129
  mode,
@@ -128,7 +134,8 @@ const Toggle = ({ checked = false, onChange, label, labelHidden = false, name, m
128
134
  narrow,
129
135
  labelMode,
130
136
  labelPosition,
131
- subLabel: !!subLabel
137
+ subLabel: !!subLabel,
138
+ splitBackground
132
139
  });
133
140
  const handleChange = (e)=>{
134
141
  if (!noHaptic) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@versini/ui-toggle",
3
- "version": "6.2.3",
3
+ "version": "6.3.0",
4
4
  "license": "MIT",
5
5
  "author": "Arno Versini",
6
6
  "publishConfig": {
@@ -47,5 +47,5 @@
47
47
  "sideEffects": [
48
48
  "**/*.css"
49
49
  ],
50
- "gitHead": "08f46d8b356d5cfbb4e58dca300428ed6bb03789"
50
+ "gitHead": "af3ee18b6fc3d57977ec331df0ce151794e29342"
51
51
  }