@cdx-ui/primitives 0.0.1-beta.132 → 0.0.1-beta.134

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright © 2026 Candescent
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -92,3 +92,9 @@ Several modules export context providers and hooks for reading component state f
92
92
  | select | — | `useSelectContext`, `useSelectItemContext` | `ISelectContextValue`, `ISelectItemContextValue` |
93
93
  | slider | — | `useSliderContext` | `SliderContextValue` |
94
94
  | tile | `TileProvider` | `useTileContext` | `ITileContextValue`, `ITileGroupContextValue` |
95
+
96
+ ## License
97
+
98
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](./LICENSE)
99
+
100
+ MIT © 2026 Candescent. See [LICENSE](./LICENSE) for details.
@@ -50,10 +50,46 @@ const ButtonRoot = exports.ButtonRoot = /*#__PURE__*/(0, _react.forwardRef)(({
50
50
  focusVisible: isFocusVisibleProp || isFocusVisible
51
51
  };
52
52
  }, [isHovered, isHoveredProp, isFocused, isFocusedProp, isActive, isActiveProp, isDisabled, isFocusVisible, isFocusVisibleProp]);
53
- const Comp = asChild ? _slot.Slot : _reactNative.Pressable;
53
+ if (asChild) {
54
+ // Dedicated asChild path: composing Button onto a child (e.g. `<Link>`) must not
55
+ // force `role="button"` or leak ButtonRoot's internal usePress/useHover/useFocus
56
+ // handlers onto it — doing so overrides the child's own role and behavior (DEVEX-6442).
57
+ // The hooks above still run unconditionally (rules of hooks) so ButtonProvider can
58
+ // expose interaction state to sub-components, but their handler props are
59
+ // intentionally not spread onto the child here.
60
+ const {
61
+ onPress,
62
+ ...restProps
63
+ } = props;
64
+ const slotProps = {
65
+ ...restProps,
66
+ disabled: isDisabled
67
+ };
68
+
69
+ // Only pass onPress when Button itself was given one — preserves the child's own
70
+ // handler (e.g. Link's navigation onPress) when Button has none of its own.
71
+ if (onPress) {
72
+ slotProps.onPress = onPress;
73
+ }
74
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_context.ButtonProvider, {
75
+ value: contextValue,
76
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_slot.Slot, {
77
+ ref: ref,
78
+ ...slotProps,
79
+ ...(0, _dataAttributes.mergeDataAttributes)(props, (0, _dataAttributes.dataAttributes)({
80
+ hover: isHoveredProp || isHovered,
81
+ focus: isFocusedProp || isFocused,
82
+ active: isActiveProp || isActive,
83
+ disabled: !!isDisabled,
84
+ focusVisible: isFocusVisibleProp || isFocusVisible
85
+ })),
86
+ children: typeof children === 'function' ? children(contextValue) : children
87
+ })
88
+ });
89
+ }
54
90
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_context.ButtonProvider, {
55
91
  value: contextValue,
56
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(Comp, {
92
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Pressable, {
57
93
  ref: ref,
58
94
  role: props?.role || 'button',
59
95
  disabled: isDisabled,
@@ -1 +1 @@
1
- {"version":3,"names":["_react","require","_reactNative","_utils","_focus","_interactions","_slot","_dataAttributes","_context","_jsxRuntime","ButtonRoot","exports","forwardRef","asChild","children","isDisabled","isHovered","isHoveredProp","isActive","isActiveProp","isFocused","isFocusedProp","isFocusVisible","isFocusVisibleProp","props","ref","focusProps","useFocus","focusRingProps","useFocusRing","pressProps","pressableProps","isPressed","usePress","hoverProps","useHover","contextValue","useMemo","hover","focus","active","disabled","focusVisible","Comp","Slot","Pressable","jsx","ButtonProvider","value","role","mergeDataAttributes","dataAttributes","onPressIn","composeEventHandlers","onPressOut","onHoverIn","onHoverOut","onFocus","onBlur","displayName"],"sourceRoot":"../../../src","sources":["button/ButtonRoot.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_react","require","_reactNative","_utils","_focus","_interactions","_slot","_dataAttributes","_context","_jsxRuntime","ButtonRoot","exports","forwardRef","asChild","children","isDisabled","isHovered","isHoveredProp","isActive","isActiveProp","isFocused","isFocusedProp","isFocusVisible","isFocusVisibleProp","props","ref","focusProps","useFocus","focusRingProps","useFocusRing","pressProps","pressableProps","isPressed","usePress","hoverProps","useHover","contextValue","useMemo","hover","focus","active","disabled","focusVisible","onPress","restProps","slotProps","jsx","ButtonProvider","value","Slot","mergeDataAttributes","dataAttributes","Pressable","role","onPressIn","composeEventHandlers","onPressOut","onHoverIn","onHoverOut","onFocus","onBlur","displayName"],"sourceRoot":"../../../src","sources":["button/ButtonRoot.tsx"],"mappings":"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","ignoreList":[]}
@@ -46,10 +46,46 @@ export const ButtonRoot = /*#__PURE__*/forwardRef(({
46
46
  focusVisible: isFocusVisibleProp || isFocusVisible
47
47
  };
48
48
  }, [isHovered, isHoveredProp, isFocused, isFocusedProp, isActive, isActiveProp, isDisabled, isFocusVisible, isFocusVisibleProp]);
49
- const Comp = asChild ? Slot : Pressable;
49
+ if (asChild) {
50
+ // Dedicated asChild path: composing Button onto a child (e.g. `<Link>`) must not
51
+ // force `role="button"` or leak ButtonRoot's internal usePress/useHover/useFocus
52
+ // handlers onto it — doing so overrides the child's own role and behavior (DEVEX-6442).
53
+ // The hooks above still run unconditionally (rules of hooks) so ButtonProvider can
54
+ // expose interaction state to sub-components, but their handler props are
55
+ // intentionally not spread onto the child here.
56
+ const {
57
+ onPress,
58
+ ...restProps
59
+ } = props;
60
+ const slotProps = {
61
+ ...restProps,
62
+ disabled: isDisabled
63
+ };
64
+
65
+ // Only pass onPress when Button itself was given one — preserves the child's own
66
+ // handler (e.g. Link's navigation onPress) when Button has none of its own.
67
+ if (onPress) {
68
+ slotProps.onPress = onPress;
69
+ }
70
+ return /*#__PURE__*/_jsx(ButtonProvider, {
71
+ value: contextValue,
72
+ children: /*#__PURE__*/_jsx(Slot, {
73
+ ref: ref,
74
+ ...slotProps,
75
+ ...mergeDataAttributes(props, dataAttributes({
76
+ hover: isHoveredProp || isHovered,
77
+ focus: isFocusedProp || isFocused,
78
+ active: isActiveProp || isActive,
79
+ disabled: !!isDisabled,
80
+ focusVisible: isFocusVisibleProp || isFocusVisible
81
+ })),
82
+ children: typeof children === 'function' ? children(contextValue) : children
83
+ })
84
+ });
85
+ }
50
86
  return /*#__PURE__*/_jsx(ButtonProvider, {
51
87
  value: contextValue,
52
- children: /*#__PURE__*/_jsx(Comp, {
88
+ children: /*#__PURE__*/_jsx(Pressable, {
53
89
  ref: ref,
54
90
  role: props?.role || 'button',
55
91
  disabled: isDisabled,
@@ -1 +1 @@
1
- {"version":3,"names":["forwardRef","useMemo","Pressable","composeEventHandlers","useFocus","useFocusRing","useHover","usePress","Slot","dataAttributes","mergeDataAttributes","ButtonProvider","jsx","_jsx","ButtonRoot","asChild","children","isDisabled","isHovered","isHoveredProp","isActive","isActiveProp","isFocused","isFocusedProp","isFocusVisible","isFocusVisibleProp","props","ref","focusProps","focusRingProps","pressProps","pressableProps","isPressed","hoverProps","contextValue","hover","focus","active","disabled","focusVisible","Comp","value","role","onPressIn","onPressOut","onHoverIn","onHoverOut","onFocus","onBlur","displayName"],"sourceRoot":"../../../src","sources":["button/ButtonRoot.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["forwardRef","useMemo","Pressable","composeEventHandlers","useFocus","useFocusRing","useHover","usePress","Slot","dataAttributes","mergeDataAttributes","ButtonProvider","jsx","_jsx","ButtonRoot","asChild","children","isDisabled","isHovered","isHoveredProp","isActive","isActiveProp","isFocused","isFocusedProp","isFocusVisible","isFocusVisibleProp","props","ref","focusProps","focusRingProps","pressProps","pressableProps","isPressed","hoverProps","contextValue","hover","focus","active","disabled","focusVisible","onPress","restProps","slotProps","value","role","onPressIn","onPressOut","onHoverIn","onHoverOut","onFocus","onBlur","displayName"],"sourceRoot":"../../../src","sources":["button/ButtonRoot.tsx"],"mappings":";;AACA,SAASA,UAAU,EAAEC,OAAO,QAAQ,OAAO;AAC3C,SAASC,SAAS,QAA6B,cAAc;AAC7D,SAASC,oBAAoB,QAAQ,eAAe;AACpD,SAASC,QAAQ,EAAEC,YAAY,QAAQ,0BAA0B;AACjE,SAASC,QAAQ,EAAEC,QAAQ,QAAQ,iCAAiC;AAEpE,SAASC,IAAI,QAAQ,SAAS;AAC9B,SAASC,cAAc,EAAEC,mBAAmB,QAAQ,yBAAyB;AAC7E,SAASC,cAAc,QAAQ,WAAW;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAQ3C,OAAO,MAAMC,UAAU,gBAAGd,UAAU,CAClC,CACE;EACEe,OAAO;EACPC,QAAQ;EACRC,UAAU;EACVC,SAAS,EAAEC,aAAa;EACxBC,QAAQ,EAAEC,YAAY;EACtBC,SAAS,EAAEC,aAAa;EACxBC,cAAc,EAAEC,kBAAkB;EAClC,GAAGC;AACL,CAAC,EACDC,GAAG,KACA;EACH,MAAM;IAAEL,SAAS;IAAEM;EAAW,CAAC,GAAGxB,QAAQ,CAAC,CAAC;EAC5C,MAAM;IAAEoB,cAAc;IAAEI,UAAU,EAAEC;EAAe,CAAC,GAAGxB,YAAY,CAAC,CAGnE;EACD,MAAM;IAAEyB,UAAU,EAAEC,cAAc;IAAEC,SAAS,EAAEZ;EAAS,CAAC,GAAGb,QAAQ,CAAC;IACnEU;EACF,CAAC,CAAC;EACF,MAAM;IAAEC,SAAS;IAAEe;EAAW,CAAC,GAAG3B,QAAQ,CAAC,CAAC;EAE5C,MAAM4B,YAAY,GAAGjC,OAAO,CAAC,MAAM;IACjC,OAAO;MACLkC,KAAK,EAAEhB,aAAa,IAAID,SAAS;MACjCkB,KAAK,EAAEb,aAAa,IAAID,SAAS;MACjCe,MAAM,EAAEhB,YAAY,IAAID,QAAQ;MAChCkB,QAAQ,EAAE,CAAC,CAACrB,UAAU;MACtBsB,YAAY,EAAEd,kBAAkB,IAAID;IACtC,CAAC;EACH,CAAC,EAAE,CACDN,SAAS,EACTC,aAAa,EACbG,SAAS,EACTC,aAAa,EACbH,QAAQ,EACRC,YAAY,EACZJ,UAAU,EACVO,cAAc,EACdC,kBAAkB,CACnB,CAAC;EAEF,IAAIV,OAAO,EAAE;IACX;IACA;IACA;IACA;IACA;IACA;IACA,MAAM;MAAEyB,OAAO;MAAE,GAAGC;IAAU,CAAC,GAAGf,KAAK;IAEvC,MAAMgB,SAAkC,GAAG;MACzC,GAAGD,SAAS;MACZH,QAAQ,EAAErB;IACZ,CAAC;;IAED;IACA;IACA,IAAIuB,OAAO,EAAE;MACXE,SAAS,CAACF,OAAO,GAAGA,OAAO;IAC7B;IAEA,oBACE3B,IAAA,CAACF,cAAc;MAACgC,KAAK,EAAET,YAAa;MAAAlB,QAAA,eAClCH,IAAA,CAACL,IAAI;QACHmB,GAAG,EAAEA,GAAI;QAAA,GACJe,SAAS;QAAA,GACVhC,mBAAmB,CACrBgB,KAAK,EACLjB,cAAc,CAAC;UACb0B,KAAK,EAAEhB,aAAa,IAAID,SAAS;UACjCkB,KAAK,EAAEb,aAAa,IAAID,SAAS;UACjCe,MAAM,EAAEhB,YAAY,IAAID,QAAQ;UAChCkB,QAAQ,EAAE,CAAC,CAACrB,UAAU;UACtBsB,YAAY,EAAEd,kBAAkB,IAAID;QACtC,CAAC,CACH,CAAC;QAAAR,QAAA,EAEA,OAAOA,QAAQ,KAAK,UAAU,GAAGA,QAAQ,CAACkB,YAAY,CAAC,GAAGlB;MAAQ,CAC/D;IAAC,CACO,CAAC;EAErB;EAEA,oBACEH,IAAA,CAACF,cAAc;IAACgC,KAAK,EAAET,YAAa;IAAAlB,QAAA,eAClCH,IAAA,CAACX,SAAS;MACRyB,GAAG,EAAEA,GAAI;MACTiB,IAAI,EAAElB,KAAK,EAAEkB,IAAI,IAAI,QAAS;MAC9BN,QAAQ,EAAErB,UAAW;MAAA,GAChBS,KAAK;MAAA,GACNhB,mBAAmB,CACrBgB,KAAK,EACLjB,cAAc,CAAC;QACb0B,KAAK,EAAEhB,aAAa,IAAID,SAAS;QACjCkB,KAAK,EAAEb,aAAa,IAAID,SAAS;QACjCe,MAAM,EAAEhB,YAAY,IAAID,QAAQ;QAChCkB,QAAQ,EAAE,CAAC,CAACrB,UAAU;QACtBsB,YAAY,EAAEd,kBAAkB,IAAID;MACtC,CAAC,CACH,CAAC;MACDqB,SAAS,EAAE1C,oBAAoB,CAACuB,KAAK,EAAEmB,SAAS,EAAEd,cAAc,CAACc,SAAS,CAAE;MAC5EC,UAAU,EAAE3C,oBAAoB,CAACuB,KAAK,EAAEoB,UAAU,EAAEf,cAAc,CAACe,UAAU,CAAE;MAC/EC,SAAS,EAAE5C,oBAAoB,CAACuB,KAAK,EAAEqB,SAAS,EAAEd,UAAU,CAACc,SAAS,CAAE;MACxEC,UAAU,EAAE7C,oBAAoB,CAACuB,KAAK,EAAEsB,UAAU,EAAEf,UAAU,CAACe,UAAU,CAAE;MAC3EC,OAAO,EAAE9C,oBAAoB,CAC3BA,oBAAoB,CAClBuB,KAAK,EAAEuB,OAAO,EACdrB,UAAU,CAACqB,OACb,CAAC,EACDpB,cAAc,CAACoB,OACjB,CAAE;MACFC,MAAM,EAAE/C,oBAAoB,CAC1BA,oBAAoB,CAClBuB,KAAK,EAAEwB,MAAM,EACbtB,UAAU,CAACsB,MACb,CAAC,EACDrB,cAAc,CAACqB,MACjB,CAAE;MAAAlC,QAAA,EAED,OAAOA,QAAQ,KAAK,UAAU,GAC3BA,QAAQ,CAAC;QACPmB,KAAK,EAAEhB,aAAa,IAAID,SAAS;QACjCkB,KAAK,EAAEb,aAAa,IAAID,SAAS;QACjCe,MAAM,EAAEhB,YAAY,IAAID,QAAQ;QAChCkB,QAAQ,EAAE,CAAC,CAACrB,UAAU;QACtBsB,YAAY,EAAEd,kBAAkB,IAAID;MACtC,CAAC,CAAC,GACFR;IAAQ,CACH;EAAC,CACE,CAAC;AAErB,CACF,CAAC;AAEDF,UAAU,CAACqC,WAAW,GAAG,YAAY","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"ButtonRoot.d.ts","sourceRoot":"","sources":["../../../src/button/ButtonRoot.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAIjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC;IACrE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,gBAAgB,KAAK,KAAK,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC;CAC7E;AAED,eAAO,MAAM,UAAU,qGA+FtB,CAAC"}
1
+ {"version":3,"file":"ButtonRoot.d.ts","sourceRoot":"","sources":["../../../src/button/ButtonRoot.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAIjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC;IACrE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,gBAAgB,KAAK,KAAK,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC;CAC7E;AAED,eAAO,MAAM,UAAU,qGAuItB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "name": "@cdx-ui/primitives",
3
- "version": "0.0.1-beta.132",
3
+ "version": "0.0.1-beta.134",
4
+ "license": "MIT",
4
5
  "main": "lib/commonjs/index.js",
5
6
  "module": "lib/module/index.js",
6
7
  "react-native": "src/index.ts",
@@ -60,7 +61,7 @@
60
61
  "@react-stately/checkbox": "3.7.4",
61
62
  "@react-stately/radio": "3.12.0",
62
63
  "@react-stately/toggle": "3.9.4",
63
- "@cdx-ui/utils": "0.0.1-beta.132"
64
+ "@cdx-ui/utils": "0.0.1-beta.134"
64
65
  },
65
66
  "devDependencies": {
66
67
  "@types/react": "19.1.17",
@@ -59,11 +59,51 @@ export const ButtonRoot = forwardRef<React.ComponentRef<typeof Pressable>, Butto
59
59
  isFocusVisibleProp,
60
60
  ]);
61
61
 
62
- const Comp = asChild ? Slot : Pressable;
62
+ if (asChild) {
63
+ // Dedicated asChild path: composing Button onto a child (e.g. `<Link>`) must not
64
+ // force `role="button"` or leak ButtonRoot's internal usePress/useHover/useFocus
65
+ // handlers onto it — doing so overrides the child's own role and behavior (DEVEX-6442).
66
+ // The hooks above still run unconditionally (rules of hooks) so ButtonProvider can
67
+ // expose interaction state to sub-components, but their handler props are
68
+ // intentionally not spread onto the child here.
69
+ const { onPress, ...restProps } = props;
70
+
71
+ const slotProps: Record<string, unknown> = {
72
+ ...restProps,
73
+ disabled: isDisabled,
74
+ };
75
+
76
+ // Only pass onPress when Button itself was given one — preserves the child's own
77
+ // handler (e.g. Link's navigation onPress) when Button has none of its own.
78
+ if (onPress) {
79
+ slotProps.onPress = onPress;
80
+ }
81
+
82
+ return (
83
+ <ButtonProvider value={contextValue}>
84
+ <Slot
85
+ ref={ref}
86
+ {...(slotProps as PressableProps)}
87
+ {...mergeDataAttributes(
88
+ props,
89
+ dataAttributes({
90
+ hover: isHoveredProp || isHovered,
91
+ focus: isFocusedProp || isFocused,
92
+ active: isActiveProp || isActive,
93
+ disabled: !!isDisabled,
94
+ focusVisible: isFocusVisibleProp || isFocusVisible,
95
+ }),
96
+ )}
97
+ >
98
+ {typeof children === 'function' ? children(contextValue) : children}
99
+ </Slot>
100
+ </ButtonProvider>
101
+ );
102
+ }
63
103
 
64
104
  return (
65
105
  <ButtonProvider value={contextValue}>
66
- <Comp
106
+ <Pressable
67
107
  ref={ref}
68
108
  role={props?.role || 'button'}
69
109
  disabled={isDisabled}
@@ -106,7 +146,7 @@ export const ButtonRoot = forwardRef<React.ComponentRef<typeof Pressable>, Butto
106
146
  focusVisible: isFocusVisibleProp || isFocusVisible,
107
147
  })
108
148
  : children}
109
- </Comp>
149
+ </Pressable>
110
150
  </ButtonProvider>
111
151
  );
112
152
  },