@tamagui/radio-headless 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/LICENSE +21 -0
  2. package/dist/cjs/BubbleInput.cjs +82 -0
  3. package/dist/cjs/BubbleInput.js +65 -0
  4. package/dist/cjs/BubbleInput.js.map +6 -0
  5. package/dist/cjs/BubbleInput.native.js +86 -0
  6. package/dist/cjs/BubbleInput.native.js.map +1 -0
  7. package/dist/cjs/index.cjs +19 -0
  8. package/dist/cjs/index.js +16 -0
  9. package/dist/cjs/index.js.map +6 -0
  10. package/dist/cjs/index.native.js +22 -0
  11. package/dist/cjs/index.native.js.map +1 -0
  12. package/dist/cjs/useRadioGroup.cjs +191 -0
  13. package/dist/cjs/useRadioGroup.js +160 -0
  14. package/dist/cjs/useRadioGroup.js.map +6 -0
  15. package/dist/cjs/useRadioGroup.native.js +206 -0
  16. package/dist/cjs/useRadioGroup.native.js.map +1 -0
  17. package/dist/cjs/utils.cjs +28 -0
  18. package/dist/cjs/utils.js +23 -0
  19. package/dist/cjs/utils.js.map +6 -0
  20. package/dist/cjs/utils.native.js +31 -0
  21. package/dist/cjs/utils.native.js.map +1 -0
  22. package/dist/esm/BubbleInput.js +43 -0
  23. package/dist/esm/BubbleInput.js.map +6 -0
  24. package/dist/esm/BubbleInput.mjs +48 -0
  25. package/dist/esm/BubbleInput.mjs.map +1 -0
  26. package/dist/esm/BubbleInput.native.js +49 -0
  27. package/dist/esm/BubbleInput.native.js.map +1 -0
  28. package/dist/esm/index.js +3 -0
  29. package/dist/esm/index.js.map +6 -0
  30. package/dist/esm/index.mjs +3 -0
  31. package/dist/esm/index.mjs.map +1 -0
  32. package/dist/esm/index.native.js +3 -0
  33. package/dist/esm/index.native.js.map +1 -0
  34. package/dist/esm/useRadioGroup.js +153 -0
  35. package/dist/esm/useRadioGroup.js.map +6 -0
  36. package/dist/esm/useRadioGroup.mjs +165 -0
  37. package/dist/esm/useRadioGroup.mjs.map +1 -0
  38. package/dist/esm/useRadioGroup.native.js +178 -0
  39. package/dist/esm/useRadioGroup.native.js.map +1 -0
  40. package/dist/esm/utils.js +7 -0
  41. package/dist/esm/utils.js.map +6 -0
  42. package/dist/esm/utils.mjs +5 -0
  43. package/dist/esm/utils.mjs.map +1 -0
  44. package/dist/esm/utils.native.js +5 -0
  45. package/dist/esm/utils.native.js.map +1 -0
  46. package/dist/jsx/BubbleInput.js +43 -0
  47. package/dist/jsx/BubbleInput.js.map +6 -0
  48. package/dist/jsx/BubbleInput.mjs +48 -0
  49. package/dist/jsx/BubbleInput.mjs.map +1 -0
  50. package/dist/jsx/BubbleInput.native.js +86 -0
  51. package/dist/jsx/BubbleInput.native.js.map +1 -0
  52. package/dist/jsx/index.js +3 -0
  53. package/dist/jsx/index.js.map +6 -0
  54. package/dist/jsx/index.mjs +3 -0
  55. package/dist/jsx/index.mjs.map +1 -0
  56. package/dist/jsx/index.native.js +22 -0
  57. package/dist/jsx/index.native.js.map +1 -0
  58. package/dist/jsx/useRadioGroup.js +153 -0
  59. package/dist/jsx/useRadioGroup.js.map +6 -0
  60. package/dist/jsx/useRadioGroup.mjs +165 -0
  61. package/dist/jsx/useRadioGroup.mjs.map +1 -0
  62. package/dist/jsx/useRadioGroup.native.js +206 -0
  63. package/dist/jsx/useRadioGroup.native.js.map +1 -0
  64. package/dist/jsx/utils.js +7 -0
  65. package/dist/jsx/utils.js.map +6 -0
  66. package/dist/jsx/utils.mjs +5 -0
  67. package/dist/jsx/utils.mjs.map +1 -0
  68. package/dist/jsx/utils.native.js +31 -0
  69. package/dist/jsx/utils.native.js.map +1 -0
  70. package/package.json +61 -0
  71. package/src/BubbleInput.tsx +59 -0
  72. package/src/index.ts +2 -0
  73. package/src/useRadioGroup.tsx +260 -0
  74. package/src/utils.tsx +3 -0
  75. package/types/BubbleInput.d.ts +11 -0
  76. package/types/BubbleInput.d.ts.map +1 -0
  77. package/types/index.d.ts +3 -0
  78. package/types/index.d.ts.map +1 -0
  79. package/types/useRadioGroup.d.ts +100 -0
  80. package/types/useRadioGroup.d.ts.map +1 -0
  81. package/types/utils.d.ts +2 -0
  82. package/types/utils.d.ts.map +1 -0
@@ -0,0 +1,48 @@
1
+ import React from "react";
2
+ import { usePrevious } from "@tamagui/use-previous";
3
+ import { jsx } from "react/jsx-runtime";
4
+ const BubbleInput = props => {
5
+ const {
6
+ checked,
7
+ bubbles = !0,
8
+ control,
9
+ isHidden,
10
+ accentColor,
11
+ ...inputProps
12
+ } = props,
13
+ ref = React.useRef(null),
14
+ prevChecked = usePrevious(checked);
15
+ return React.useEffect(() => {
16
+ const input = ref.current,
17
+ inputProto = window.HTMLInputElement.prototype,
18
+ setChecked = Object.getOwnPropertyDescriptor(inputProto, "checked").set;
19
+ if (prevChecked !== checked && setChecked) {
20
+ const event = new Event("click", {
21
+ bubbles
22
+ });
23
+ setChecked.call(input, checked), input.dispatchEvent(event);
24
+ }
25
+ }, [prevChecked, checked, bubbles]), /* @__PURE__ */jsx("input", {
26
+ type: "radio",
27
+ defaultChecked: checked,
28
+ ...inputProps,
29
+ tabIndex: -1,
30
+ ref,
31
+ "aria-hidden": isHidden,
32
+ style: {
33
+ ...(isHidden ? {
34
+ // ...controlSize,
35
+ position: "absolute",
36
+ pointerEvents: "none",
37
+ opacity: 0,
38
+ margin: 0
39
+ } : {
40
+ appearance: "auto",
41
+ accentColor
42
+ }),
43
+ ...props.style
44
+ }
45
+ });
46
+ };
47
+ export { BubbleInput };
48
+ //# sourceMappingURL=BubbleInput.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","usePrevious","jsx","BubbleInput","props","checked","bubbles","control","isHidden","accentColor","inputProps","ref","useRef","prevChecked","useEffect","input","current","inputProto","window","HTMLInputElement","prototype","setChecked","Object","getOwnPropertyDescriptor","set","event","Event","call","dispatchEvent","type","defaultChecked","tabIndex","style","position","pointerEvents","opacity","margin","appearance"],"sources":["../../src/BubbleInput.tsx"],"sourcesContent":[null],"mappings":"AAAA,OAAOA,KAAA,MAAW;AAClB,SAASC,WAAA,QAAmB;AAgCxB,SAAAC,GAAA;AAtBG,MAAMC,WAAA,GAAeC,KAAA,IAA4B;EACtD,MAAM;MAAEC,OAAA;MAASC,OAAA,GAAU;MAAMC,OAAA;MAASC,QAAA;MAAUC,WAAA;MAAa,GAAGC;IAAW,IAAIN,KAAA;IAC7EO,GAAA,GAAMX,KAAA,CAAMY,MAAA,CAAyB,IAAI;IACzCC,WAAA,GAAcZ,WAAA,CAAYI,OAAO;EAGvC,OAAAL,KAAA,CAAMc,SAAA,CAAU,MAAM;IACpB,MAAMC,KAAA,GAAQJ,GAAA,CAAIK,OAAA;MACZC,UAAA,GAAaC,MAAA,CAAOC,gBAAA,CAAiBC,SAAA;MAKrCC,UAAA,GAJaC,MAAA,CAAOC,wBAAA,CACxBN,UAAA,EACA,SACF,EAC8BO,GAAA;IAC9B,IAAIX,WAAA,KAAgBR,OAAA,IAAWgB,UAAA,EAAY;MACzC,MAAMI,KAAA,GAAQ,IAAIC,KAAA,CAAM,SAAS;QAAEpB;MAAQ,CAAC;MAC5Ce,UAAA,CAAWM,IAAA,CAAKZ,KAAA,EAAOV,OAAO,GAC9BU,KAAA,CAAMa,aAAA,CAAcH,KAAK;IAC3B;EACF,GAAG,CAACZ,WAAA,EAAaR,OAAA,EAASC,OAAO,CAAC,GAGhC,eAAAJ,GAAA,CAAC;IACC2B,IAAA,EAAK;IACLC,cAAA,EAAgBzB,OAAA;IACf,GAAGK,UAAA;IACJqB,QAAA,EAAU;IACVpB,GAAA;IACA,eAAaH,QAAA;IACbwB,KAAA,EAAO;MACL,IAAIxB,QAAA,GACA;QAAA;QAEEyB,QAAA,EAAU;QACVC,aAAA,EAAe;QACfC,OAAA,EAAS;QACTC,MAAA,EAAQ;MACV,IACA;QACEC,UAAA,EAAY;QACZ5B;MACF;MAEJ,GAAGL,KAAA,CAAM4B;IACX;EAAA,CACF;AAEJ","ignoreList":[]}
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+
3
+ var __create = Object.create;
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __getProtoOf = Object.getPrototypeOf,
8
+ __hasOwnProp = Object.prototype.hasOwnProperty;
9
+ var __export = (target, all) => {
10
+ for (var name in all) __defProp(target, name, {
11
+ get: all[name],
12
+ enumerable: !0
13
+ });
14
+ },
15
+ __copyProps = (to, from, except, desc) => {
16
+ if (from && typeof from == "object" || typeof from == "function") for (let key of __getOwnPropNames(from)) !__hasOwnProp.call(to, key) && key !== except && __defProp(to, key, {
17
+ get: () => from[key],
18
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
19
+ });
20
+ return to;
21
+ };
22
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
23
+ // If the importer is in node compatibility mode or this is not an ESM
24
+ // file that has been converted to a CommonJS file using a Babel-
25
+ // compatible transform (i.e. "__esModule" has not been set), then set
26
+ // "default" to the CommonJS "module.exports" for node compatibility.
27
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
28
+ value: mod,
29
+ enumerable: !0
30
+ }) : target, mod)),
31
+ __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
32
+ value: !0
33
+ }), mod);
34
+ var BubbleInput_exports = {};
35
+ __export(BubbleInput_exports, {
36
+ BubbleInput: () => BubbleInput
37
+ });
38
+ module.exports = __toCommonJS(BubbleInput_exports);
39
+ var import_jsx_runtime = require("react/jsx-runtime"),
40
+ import_react = __toESM(require("react"), 1),
41
+ import_use_previous = require("@tamagui/use-previous"),
42
+ BubbleInput = function (props) {
43
+ var {
44
+ checked,
45
+ bubbles = !0,
46
+ control,
47
+ isHidden,
48
+ accentColor,
49
+ ...inputProps
50
+ } = props,
51
+ ref = import_react.default.useRef(null),
52
+ prevChecked = (0, import_use_previous.usePrevious)(checked);
53
+ return import_react.default.useEffect(function () {
54
+ var input = ref.current,
55
+ inputProto = window.HTMLInputElement.prototype,
56
+ descriptor = Object.getOwnPropertyDescriptor(inputProto, "checked"),
57
+ setChecked = descriptor.set;
58
+ if (prevChecked !== checked && setChecked) {
59
+ var event = new Event("click", {
60
+ bubbles
61
+ });
62
+ setChecked.call(input, checked), input.dispatchEvent(event);
63
+ }
64
+ }, [prevChecked, checked, bubbles]), /* @__PURE__ */(0, import_jsx_runtime.jsx)("input", {
65
+ type: "radio",
66
+ defaultChecked: checked,
67
+ ...inputProps,
68
+ tabIndex: -1,
69
+ ref,
70
+ "aria-hidden": isHidden,
71
+ style: {
72
+ ...(isHidden ? {
73
+ // ...controlSize,
74
+ position: "absolute",
75
+ pointerEvents: "none",
76
+ opacity: 0,
77
+ margin: 0
78
+ } : {
79
+ appearance: "auto",
80
+ accentColor
81
+ }),
82
+ ...props.style
83
+ }
84
+ });
85
+ };
86
+ //# sourceMappingURL=BubbleInput.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["__create","Object","create","__defProp","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__getProtoOf","getPrototypeOf","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toESM","mod","isNodeMode","__esModule","value","__toCommonJS","BubbleInput_exports","BubbleInput","module","exports","import_jsx_runtime","require","import_react","import_use_previous","props","checked","bubbles","control","isHidden","accentColor","inputProps","ref","default","useRef","prevChecked","usePrevious","useEffect","input","current","inputProto","window","HTMLInputElement","descriptor","setChecked","set","event","Event","dispatchEvent"],"sources":["../../src/BubbleInput.tsx"],"sourcesContent":[null],"mappings":"AAAA,YAAO;;AACP,IAAAA,QAAS,GAAAC,MAAA,CAAAC,MAAmB;AAgCxB,IAAAC,SAAA,GAAAF,MAAA,CAAAG,cAAA;AAtBG,IAAAC,gBAAoB,GAACJ,MAAA,CAAAK,wBAA4B;AACtD,IAAAC,iBAAiB,GAAAN,MAAU,CAAAO,mBAAe;AAK1C,IAAAC,YAAM,GAAAR,MAAU,CAAAS,cAAM;EAAAC,YAAA,GAAAV,MAAA,CAAAW,SAAA,CAAAC,cAAA;AACpB,IAAAC,QAAM,GAAAA,CAAAC,MAAY,EAAAC,GAAA,KACZ;IACoB,KACxB,IAAAC,IAAA,IAAAD,GAAA,EAAAb,SACA,CAAAY,MAAA,EAAAE,IAAA;MAAAC,GAAA,EAAAF,GAAA,CAAAC,IAAA;MAAAE,UAAA;IAAA;EAAA;EAAAC,WAE4B,GAAAA,CAAAC,EAAA,EAAAC,IAAA,EAAAC,MAAA,EAAAC,IAAA;IAC9B,IAAAF,IAAI,WAAAA,IAAgB,YAAW,WAAYA,IAAA,gBACzC,SAAMG,GAAA,IAAQlB,iBAAU,CAAAe,IAAW,GACnC,CAAAX,YAAW,CAAAe,IAAK,CAAAL,EAAA,EAAOI,GAAA,KAAOA,GAC9B,KAAMF,MAAA,IAAApB,SAAmB,CAAAkB,EAAA,EAAAI,GAAA;MAAAP,GAAA,EAAAA,CAAA,KAAAI,IAAA,CAAAG,GAAA;MAAAN,UAAA,IAAAK,IAAA,GAAAnB,gBAAA,CAAAiB,IAAA,EAAAG,GAAA,MAAAD,IAAA,CAAAL;IAAA;IAAA,OAC3BE,EAAA;EAAA;AAIA,IAACM,OAAA,GAAAA,CAAAC,GAAA,EAAAC,UAAA,EAAAd,MAAA,MAAAA,MAAA,GAAAa,GAAA,WAAA5B,QAAA,CAAAS,YAAA,CAAAmB,GAAA,SAAAR,WAAA;EAAA;EAAA;EACM;EACW;EACZS,UACJ,IAAU,CAAAD,GAAA,KAAAA,GAAA,CAAAE,UAAA,GAAA3B,SAAA,CAAAY,MAAA;IAAAgB,KAAA,EAAAH,GAAA;IAAAT,UAAA;EAAA,KAAAJ,MAAA,EAAAa,GACV;EAAAI,YACA,GAAAJ,GAAa,IAAAR,WAAA,CAAAjB,SAAA;IAAA4B,KAAA;EAAA,IAAAH,GAAA;AAAA,IAAAK,mBACN;AAAAnB,QACL,CAAAmB,mBACI;EAAAC,WAAA,EAAAA,CAAA,KAAAA;AAAA;AAEYC,MAAA,CAAAC,OACV,GAAAJ,YAAe,CAAAC,mBAAA;AAAA,IAAAI,kBACN,GAAAC,OAAA;EAAAC,YAAA,GAAAZ,OAAA,CAAAW,OAAA;EAAAE,mBAAA,GAAAF,OAAA;EAAAJ,WAAA,YAAAA,CAAAO,KAAA;IAAA;QAAAC,OACT;QAAAC,OAAQ;QAAAC,OAAA;QAAAC,QAAA;QAAAC,WAAA;QAAA,GAAAC;MAAA,IAAAN,KAAA;MAAAO,GAAA,GAAAT,YAAA,CAAAU,OAAA,CAAAC,MAAA;MAAAC,WAAA,OAAAX,mBAAA,CAAAY,WAAA,EAAAV,OAAA;IAAA,OACVH,YACA,CAAAU,OAAA,CAAAI,SAAA;MAAA,IAAAC,KACE,GAAAN,GAAA,CAAAO,OAAY;QAAAC,UAAA,GAAAC,MAAA,CAAAC,gBAAA,CAAA9C,SAAA;QAAA+C,UAAA,GAAA1D,MAAA,CAAAK,wBAAA,CAAAkD,UAAA;QAAAI,UAAA,GAAAD,UAAA,CAAAE,GAAA;MAAA,IAAAV,WACZ,KAAAT,OAAA,IAAAkB,UAAA;QAAA,IACFE,KAAA,OAAAC,KAAA;UAEJpB;QACF;QAAAiB,UAAA,CAAAlC,IAAA,CAAA4B,KAAA,EAAAZ,OAAA,GAAAY,KAAA,CAAAU,aAAA,CAAAF,KAAA;MACF;IAEJ,I","ignoreList":[]}
@@ -0,0 +1,3 @@
1
+ export * from "./useRadioGroup";
2
+ export * from "./utils";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/index.ts"],
4
+ "mappings": "AAAA,cAAc;AACd,cAAc;",
5
+ "names": []
6
+ }
@@ -0,0 +1,3 @@
1
+ export * from "./useRadioGroup.mjs";
2
+ export * from "./utils.mjs";
3
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA,cAAc;AACd,cAAc","ignoreList":[]}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __copyProps = (to, from, except, desc) => {
8
+ if (from && typeof from == "object" || typeof from == "function") for (let key of __getOwnPropNames(from)) !__hasOwnProp.call(to, key) && key !== except && __defProp(to, key, {
9
+ get: () => from[key],
10
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
11
+ });
12
+ return to;
13
+ },
14
+ __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
15
+ var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
16
+ value: !0
17
+ }), mod);
18
+ var index_exports = {};
19
+ module.exports = __toCommonJS(index_exports);
20
+ __reExport(index_exports, require("./useRadioGroup.native.js"), module.exports);
21
+ __reExport(index_exports, require("./utils.native.js"), module.exports);
22
+ //# sourceMappingURL=index.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["__defProp","Object","defineProperty"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA;;AACA,IAAAA,SAAA,GAAcC,MAAA,CAAAC,cAAA","ignoreList":[]}
@@ -0,0 +1,153 @@
1
+ import { useComposedRefs } from "@tamagui/compose-refs";
2
+ import { isWeb } from "@tamagui/constants";
3
+
4
+ import { composeEventHandlers } from "@tamagui/helpers";
5
+ import { useLabelContext } from "@tamagui/label";
6
+ import { useControllableState } from "@tamagui/use-controllable-state";
7
+ import { useContext, useEffect, useRef, useState } from "react";
8
+ import { BubbleInput } from "./BubbleInput";
9
+ import { getState } from "./utils";
10
+ import { jsx } from "react/jsx-runtime";
11
+ function useRadioGroup(params) {
12
+ const {
13
+ value: valueProp,
14
+ onValueChange,
15
+ defaultValue,
16
+ required,
17
+ disabled,
18
+ name,
19
+ native,
20
+ accentColor,
21
+ orientation,
22
+ ref
23
+ } = params, [value, setValue] = useControllableState({
24
+ prop: valueProp,
25
+ defaultProp: defaultValue,
26
+ onChange: onValueChange
27
+ });
28
+ return {
29
+ providerValue: {
30
+ value,
31
+ onChange: setValue,
32
+ required,
33
+ disabled,
34
+ name,
35
+ native,
36
+ accentColor
37
+ },
38
+ frameAttrs: {
39
+ role: "radiogroup",
40
+ "aria-orientation": orientation,
41
+ "data-disabled": disabled ? "" : void 0
42
+ },
43
+ rovingFocusGroupAttrs: {
44
+ orientation,
45
+ loop: !0
46
+ }
47
+ };
48
+ }
49
+ const ARROW_KEYS = ["ArrowUp", "ArrowDown", "ArrowLeft", "ArrowRight"], useRadioGroupItem = (params) => {
50
+ const {
51
+ radioGroupContext,
52
+ value,
53
+ labelledBy: ariaLabelledby,
54
+ disabled: itemDisabled,
55
+ ref: refProp,
56
+ id,
57
+ onPress,
58
+ onKeyDown,
59
+ onFocus
60
+ } = params, {
61
+ value: groupValue,
62
+ disabled,
63
+ required,
64
+ onChange,
65
+ name,
66
+ native,
67
+ accentColor
68
+ } = useContext(radioGroupContext), [button, setButton] = useState(null), hasConsumerStoppedPropagationRef = useRef(!1), ref = useRef(null), composedRefs = useComposedRefs(refProp, (node) => setButton(node), ref), isArrowKeyPressedRef = useRef(!1), isFormControl = isWeb ? button ? !!button.closest("form") : !0 : !1, checked = groupValue === value, labelId = useLabelContext(button), labelledBy = ariaLabelledby || labelId;
69
+ useEffect(() => {
70
+ if (isWeb) {
71
+ const handleKeyDown = (event) => {
72
+ ARROW_KEYS.includes(event.key) && (isArrowKeyPressedRef.current = !0);
73
+ }, handleKeyUp = () => {
74
+ isArrowKeyPressedRef.current = !1;
75
+ };
76
+ return document.addEventListener("keydown", handleKeyDown), document.addEventListener("keyup", handleKeyUp), () => {
77
+ document.removeEventListener("keydown", handleKeyDown), document.removeEventListener("keyup", handleKeyUp);
78
+ };
79
+ }
80
+ }, []);
81
+ const isDisabled = disabled || itemDisabled;
82
+ return {
83
+ providerValue: {
84
+ checked
85
+ },
86
+ checked,
87
+ isFormControl,
88
+ bubbleInput: /* @__PURE__ */ jsx(
89
+ BubbleInput,
90
+ {
91
+ isHidden: !native,
92
+ control: button,
93
+ bubbles: !hasConsumerStoppedPropagationRef.current,
94
+ name,
95
+ value,
96
+ checked,
97
+ required,
98
+ disabled: isDisabled,
99
+ ...isWeb && native && {
100
+ accentColor,
101
+ id
102
+ }
103
+ }
104
+ ),
105
+ native,
106
+ frameAttrs: {
107
+ "data-state": getState(checked),
108
+ "data-disabled": isDisabled ? "" : void 0,
109
+ role: "radio",
110
+ "aria-labelledby": labelledBy,
111
+ "aria-checked": checked,
112
+ "aria-required": required,
113
+ disabled: isDisabled,
114
+ ref: composedRefs,
115
+ ...isWeb && {
116
+ type: "button",
117
+ value
118
+ },
119
+ id,
120
+ onPress: composeEventHandlers(onPress, (event) => {
121
+ checked || onChange?.(value), isFormControl && (hasConsumerStoppedPropagationRef.current = event.isPropagationStopped(), hasConsumerStoppedPropagationRef.current || event.stopPropagation());
122
+ }),
123
+ ...isWeb && {
124
+ onKeyDown: composeEventHandlers(onKeyDown, (event) => {
125
+ (event.key === "Enter" || event.key === " ") && (checked || onChange?.(value));
126
+ }),
127
+ onFocus: composeEventHandlers(onFocus, () => {
128
+ isArrowKeyPressedRef.current && ref.current?.click();
129
+ })
130
+ }
131
+ },
132
+ rovingFocusGroupAttrs: {
133
+ asChild: "except-style",
134
+ focusable: !isDisabled,
135
+ active: checked
136
+ }
137
+ };
138
+ };
139
+ function useRadioGroupItemIndicator(params) {
140
+ const { radioGroupItemContext, disabled, ...rest } = params, { checked } = useContext(radioGroupItemContext);
141
+ return {
142
+ checked,
143
+ "data-state": getState(checked),
144
+ "data-disabled": disabled ? "" : void 0,
145
+ ...rest
146
+ };
147
+ }
148
+ export {
149
+ useRadioGroup,
150
+ useRadioGroupItem,
151
+ useRadioGroupItemIndicator
152
+ };
153
+ //# sourceMappingURL=useRadioGroup.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/useRadioGroup.tsx"],
4
+ "mappings": "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",
5
+ "names": []
6
+ }
@@ -0,0 +1,165 @@
1
+ import { useComposedRefs } from "@tamagui/compose-refs";
2
+ import { isWeb } from "@tamagui/constants";
3
+ import { composeEventHandlers } from "@tamagui/helpers";
4
+ import { useLabelContext } from "@tamagui/label";
5
+ import { useControllableState } from "@tamagui/use-controllable-state";
6
+ import { useContext, useEffect, useRef, useState } from "react";
7
+ import { BubbleInput } from "./BubbleInput.mjs";
8
+ import { getState } from "./utils.mjs";
9
+ import { jsx } from "react/jsx-runtime";
10
+ function useRadioGroup(params) {
11
+ const {
12
+ value: valueProp,
13
+ onValueChange,
14
+ defaultValue,
15
+ required,
16
+ disabled,
17
+ name,
18
+ native,
19
+ accentColor,
20
+ orientation,
21
+ ref
22
+ } = params,
23
+ [value, setValue] = useControllableState({
24
+ prop: valueProp,
25
+ defaultProp: defaultValue,
26
+ onChange: onValueChange
27
+ });
28
+ return {
29
+ providerValue: {
30
+ value,
31
+ onChange: setValue,
32
+ required,
33
+ disabled,
34
+ name,
35
+ native,
36
+ accentColor
37
+ },
38
+ frameAttrs: {
39
+ role: "radiogroup",
40
+ "aria-orientation": orientation,
41
+ "data-disabled": disabled ? "" : void 0
42
+ },
43
+ rovingFocusGroupAttrs: {
44
+ orientation,
45
+ loop: !0
46
+ }
47
+ };
48
+ }
49
+ const ARROW_KEYS = ["ArrowUp", "ArrowDown", "ArrowLeft", "ArrowRight"],
50
+ useRadioGroupItem = params => {
51
+ const {
52
+ radioGroupContext,
53
+ value,
54
+ labelledBy: ariaLabelledby,
55
+ disabled: itemDisabled,
56
+ ref: refProp,
57
+ id,
58
+ onPress,
59
+ onKeyDown,
60
+ onFocus
61
+ } = params,
62
+ {
63
+ value: groupValue,
64
+ disabled,
65
+ required,
66
+ onChange,
67
+ name,
68
+ native,
69
+ accentColor
70
+ } = useContext(radioGroupContext),
71
+ [button, setButton] = useState(null),
72
+ hasConsumerStoppedPropagationRef = useRef(!1),
73
+ ref = useRef(null),
74
+ composedRefs = useComposedRefs(refProp, node => setButton(node), ref),
75
+ isArrowKeyPressedRef = useRef(!1),
76
+ isFormControl = isWeb ? button ? !!button.closest("form") : !0 : !1,
77
+ checked = groupValue === value,
78
+ labelId = useLabelContext(button),
79
+ labelledBy = ariaLabelledby || labelId;
80
+ useEffect(() => {
81
+ if (isWeb) {
82
+ const handleKeyDown = event => {
83
+ ARROW_KEYS.includes(event.key) && (isArrowKeyPressedRef.current = !0);
84
+ },
85
+ handleKeyUp = () => {
86
+ isArrowKeyPressedRef.current = !1;
87
+ };
88
+ return document.addEventListener("keydown", handleKeyDown), document.addEventListener("keyup", handleKeyUp), () => {
89
+ document.removeEventListener("keydown", handleKeyDown), document.removeEventListener("keyup", handleKeyUp);
90
+ };
91
+ }
92
+ }, []);
93
+ const isDisabled = disabled || itemDisabled;
94
+ return {
95
+ providerValue: {
96
+ checked
97
+ },
98
+ checked,
99
+ isFormControl,
100
+ bubbleInput: /* @__PURE__ */jsx(BubbleInput, {
101
+ isHidden: !native,
102
+ control: button,
103
+ bubbles: !hasConsumerStoppedPropagationRef.current,
104
+ name,
105
+ value,
106
+ checked,
107
+ required,
108
+ disabled: isDisabled,
109
+ ...(isWeb && native && {
110
+ accentColor,
111
+ id
112
+ })
113
+ }),
114
+ native,
115
+ frameAttrs: {
116
+ "data-state": getState(checked),
117
+ "data-disabled": isDisabled ? "" : void 0,
118
+ role: "radio",
119
+ "aria-labelledby": labelledBy,
120
+ "aria-checked": checked,
121
+ "aria-required": required,
122
+ disabled: isDisabled,
123
+ ref: composedRefs,
124
+ ...(isWeb && {
125
+ type: "button",
126
+ value
127
+ }),
128
+ id,
129
+ onPress: composeEventHandlers(onPress, event => {
130
+ checked || onChange?.(value), isFormControl && (hasConsumerStoppedPropagationRef.current = event.isPropagationStopped(), hasConsumerStoppedPropagationRef.current || event.stopPropagation());
131
+ }),
132
+ ...(isWeb && {
133
+ onKeyDown: composeEventHandlers(onKeyDown, event => {
134
+ (event.key === "Enter" || event.key === " ") && (checked || onChange?.(value));
135
+ }),
136
+ onFocus: composeEventHandlers(onFocus, () => {
137
+ isArrowKeyPressedRef.current && ref.current?.click();
138
+ })
139
+ })
140
+ },
141
+ rovingFocusGroupAttrs: {
142
+ asChild: "except-style",
143
+ focusable: !isDisabled,
144
+ active: checked
145
+ }
146
+ };
147
+ };
148
+ function useRadioGroupItemIndicator(params) {
149
+ const {
150
+ radioGroupItemContext,
151
+ disabled,
152
+ ...rest
153
+ } = params,
154
+ {
155
+ checked
156
+ } = useContext(radioGroupItemContext);
157
+ return {
158
+ checked,
159
+ "data-state": getState(checked),
160
+ "data-disabled": disabled ? "" : void 0,
161
+ ...rest
162
+ };
163
+ }
164
+ export { useRadioGroup, useRadioGroupItem, useRadioGroupItemIndicator };
165
+ //# sourceMappingURL=useRadioGroup.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useComposedRefs","isWeb","composeEventHandlers","useLabelContext","useControllableState","useContext","useEffect","useRef","useState","BubbleInput","getState","jsx","useRadioGroup","params","value","valueProp","onValueChange","defaultValue","required","disabled","name","native","accentColor","orientation","ref","setValue","prop","defaultProp","onChange","providerValue","frameAttrs","role","rovingFocusGroupAttrs","loop","ARROW_KEYS","useRadioGroupItem","radioGroupContext","labelledBy","ariaLabelledby","itemDisabled","refProp","id","onPress","onKeyDown","onFocus","groupValue","button","setButton","hasConsumerStoppedPropagationRef","composedRefs","node","isArrowKeyPressedRef","isFormControl","closest","checked","labelId","handleKeyDown","event","includes","key","current","handleKeyUp","document","addEventListener","removeEventListener","isDisabled","bubbleInput","isHidden","control","bubbles","type","isPropagationStopped","stopPropagation","click","asChild","focusable","active","useRadioGroupItemIndicator","radioGroupItemContext","rest"],"sources":["../../src/useRadioGroup.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}