@zag-js/radio-group 0.49.0 → 0.51.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.mts CHANGED
@@ -135,8 +135,8 @@ declare function connect<T extends PropTypes>(state: State, send: Send, normaliz
135
135
 
136
136
  declare function machine(userContext: UserDefinedContext): _zag_js_core.Machine<MachineContext, MachineState, _zag_js_core.StateMachine.AnyEventObject>;
137
137
 
138
- declare const props: ("value" | "name" | "form" | "dir" | "disabled" | "id" | "orientation" | "ids" | "readOnly" | "onValueChange" | "getRootNode")[];
139
- declare const splitProps: <Props extends Partial<UserDefinedContext>>(props: Props) => [Partial<UserDefinedContext>, Omit<Props, "value" | "name" | "form" | "dir" | "disabled" | "id" | "orientation" | "ids" | "readOnly" | "onValueChange" | "getRootNode">];
138
+ declare const props: ("value" | "dir" | "id" | "getRootNode" | "form" | "name" | "disabled" | "orientation" | "ids" | "readOnly" | "onValueChange")[];
139
+ declare const splitProps: <Props extends Partial<UserDefinedContext>>(props: Props) => [Partial<UserDefinedContext>, Omit<Props, "value" | "dir" | "id" | "getRootNode" | "form" | "name" | "disabled" | "orientation" | "ids" | "readOnly" | "onValueChange">];
140
140
  declare const itemProps: (keyof ItemProps)[];
141
141
  declare const splitItemProps: <Props extends ItemProps>(props: Props) => [ItemProps, Omit<Props, keyof ItemProps>];
142
142
 
package/dist/index.d.ts CHANGED
@@ -135,8 +135,8 @@ declare function connect<T extends PropTypes>(state: State, send: Send, normaliz
135
135
 
136
136
  declare function machine(userContext: UserDefinedContext): _zag_js_core.Machine<MachineContext, MachineState, _zag_js_core.StateMachine.AnyEventObject>;
137
137
 
138
- declare const props: ("value" | "name" | "form" | "dir" | "disabled" | "id" | "orientation" | "ids" | "readOnly" | "onValueChange" | "getRootNode")[];
139
- declare const splitProps: <Props extends Partial<UserDefinedContext>>(props: Props) => [Partial<UserDefinedContext>, Omit<Props, "value" | "name" | "form" | "dir" | "disabled" | "id" | "orientation" | "ids" | "readOnly" | "onValueChange" | "getRootNode">];
138
+ declare const props: ("value" | "dir" | "id" | "getRootNode" | "form" | "name" | "disabled" | "orientation" | "ids" | "readOnly" | "onValueChange")[];
139
+ declare const splitProps: <Props extends Partial<UserDefinedContext>>(props: Props) => [Partial<UserDefinedContext>, Omit<Props, "value" | "dir" | "id" | "getRootNode" | "form" | "name" | "disabled" | "orientation" | "ids" | "readOnly" | "onValueChange">];
140
140
  declare const itemProps: (keyof ItemProps)[];
141
141
  declare const splitItemProps: <Props extends ItemProps>(props: Props) => [ItemProps, Omit<Props, keyof ItemProps>];
142
142
 
package/dist/index.js CHANGED
@@ -1,457 +1,2 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
-
20
- // src/index.ts
21
- var src_exports = {};
22
- __export(src_exports, {
23
- anatomy: () => anatomy,
24
- connect: () => connect,
25
- itemProps: () => itemProps,
26
- machine: () => machine,
27
- props: () => props,
28
- splitItemProps: () => splitItemProps,
29
- splitProps: () => splitProps
30
- });
31
- module.exports = __toCommonJS(src_exports);
32
-
33
- // src/radio-group.anatomy.ts
34
- var import_anatomy = require("@zag-js/anatomy");
35
- var anatomy = (0, import_anatomy.createAnatomy)("radio-group").parts(
36
- "root",
37
- "label",
38
- "item",
39
- "itemText",
40
- "itemControl",
41
- "indicator"
42
- );
43
- var parts = anatomy.build();
44
-
45
- // src/radio-group.connect.ts
46
- var import_dom_query2 = require("@zag-js/dom-query");
47
-
48
- // src/radio-group.dom.ts
49
- var import_dom_query = require("@zag-js/dom-query");
50
- var dom = (0, import_dom_query.createScope)({
51
- getRootId: (ctx) => ctx.ids?.root ?? `radio-group:${ctx.id}`,
52
- getLabelId: (ctx) => ctx.ids?.label ?? `radio-group:${ctx.id}:label`,
53
- getItemId: (ctx, value) => ctx.ids?.item?.(value) ?? `radio-group:${ctx.id}:radio:${value}`,
54
- getItemHiddenInputId: (ctx, value) => ctx.ids?.itemHiddenInput?.(value) ?? `radio-group:${ctx.id}:radio:input:${value}`,
55
- getItemControlId: (ctx, value) => ctx.ids?.itemControl?.(value) ?? `radio-group:${ctx.id}:radio:control:${value}`,
56
- getItemLabelId: (ctx, value) => ctx.ids?.itemLabel?.(value) ?? `radio-group:${ctx.id}:radio:label:${value}`,
57
- getIndicatorId: (ctx) => ctx.ids?.indicator ?? `radio-group:${ctx.id}:indicator`,
58
- getRootEl: (ctx) => dom.getById(ctx, dom.getRootId(ctx)),
59
- getItemHiddenInputEl: (ctx, value) => dom.getById(ctx, dom.getItemHiddenInputId(ctx, value)),
60
- getIndicatorEl: (ctx) => dom.getById(ctx, dom.getIndicatorId(ctx)),
61
- getFirstEnabledInputEl: (ctx) => dom.getRootEl(ctx)?.querySelector("input:not(:disabled)"),
62
- getFirstEnabledAndCheckedInputEl: (ctx) => dom.getRootEl(ctx)?.querySelector("input:not(:disabled):checked"),
63
- getInputEls: (ctx) => {
64
- const ownerId = CSS.escape(dom.getRootId(ctx));
65
- const selector = `input[type=radio][data-ownedby='${ownerId}']:not([disabled])`;
66
- return (0, import_dom_query.queryAll)(dom.getRootEl(ctx), selector);
67
- },
68
- getActiveRadioEl: (ctx) => {
69
- if (!ctx.value)
70
- return;
71
- return dom.getById(ctx, dom.getItemId(ctx, ctx.value));
72
- },
73
- getOffsetRect: (el) => ({
74
- left: el?.offsetLeft ?? 0,
75
- top: el?.offsetTop ?? 0,
76
- width: el?.offsetWidth ?? 0,
77
- height: el?.offsetHeight ?? 0
78
- }),
79
- getRectById: (ctx, id) => {
80
- const radioEl = dom.getById(ctx, dom.getItemId(ctx, id));
81
- if (!radioEl)
82
- return;
83
- return dom.resolveRect(dom.getOffsetRect(radioEl));
84
- },
85
- resolveRect: (rect) => ({
86
- width: `${rect.width}px`,
87
- height: `${rect.height}px`,
88
- left: `${rect.left}px`,
89
- top: `${rect.top}px`
90
- })
91
- });
92
-
93
- // src/radio-group.connect.ts
94
- function connect(state, send, normalize) {
95
- const groupDisabled = state.context.isDisabled;
96
- const readOnly = state.context.readOnly;
97
- function getItemState(props2) {
98
- return {
99
- invalid: !!props2.invalid,
100
- disabled: !!props2.disabled || groupDisabled,
101
- checked: state.context.value === props2.value,
102
- focused: state.context.focusedValue === props2.value,
103
- hovered: state.context.hoveredValue === props2.value,
104
- active: state.context.activeValue === props2.value
105
- };
106
- }
107
- function getItemDataAttrs(props2) {
108
- const radioState = getItemState(props2);
109
- return {
110
- "data-focus": (0, import_dom_query2.dataAttr)(radioState.focused),
111
- "data-disabled": (0, import_dom_query2.dataAttr)(radioState.disabled),
112
- "dats-readonly": (0, import_dom_query2.dataAttr)(readOnly),
113
- "data-state": radioState.checked ? "checked" : "unchecked",
114
- "data-hover": (0, import_dom_query2.dataAttr)(radioState.hovered),
115
- "data-invalid": (0, import_dom_query2.dataAttr)(radioState.invalid),
116
- "data-orientation": state.context.orientation
117
- };
118
- }
119
- const focus = () => {
120
- const firstEnabledAndCheckedInput = dom.getFirstEnabledAndCheckedInputEl(state.context);
121
- if (firstEnabledAndCheckedInput) {
122
- firstEnabledAndCheckedInput.focus();
123
- return;
124
- }
125
- const firstEnabledInput = dom.getFirstEnabledInputEl(state.context);
126
- firstEnabledInput?.focus();
127
- };
128
- return {
129
- focus,
130
- value: state.context.value,
131
- setValue(value) {
132
- send({ type: "SET_VALUE", value, isTrusted: false });
133
- },
134
- clearValue() {
135
- send({ type: "SET_VALUE", value: null, isTrusted: false });
136
- },
137
- getItemState,
138
- rootProps: normalize.element({
139
- ...parts.root.attrs,
140
- role: "radiogroup",
141
- id: dom.getRootId(state.context),
142
- "aria-labelledby": dom.getLabelId(state.context),
143
- "data-orientation": state.context.orientation,
144
- "data-disabled": (0, import_dom_query2.dataAttr)(groupDisabled),
145
- "aria-orientation": state.context.orientation,
146
- dir: state.context.dir,
147
- style: {
148
- position: "relative"
149
- }
150
- }),
151
- labelProps: normalize.element({
152
- ...parts.label.attrs,
153
- dir: state.context.dir,
154
- "data-orientation": state.context.orientation,
155
- "data-disabled": (0, import_dom_query2.dataAttr)(groupDisabled),
156
- id: dom.getLabelId(state.context),
157
- onClick: focus
158
- }),
159
- getItemProps(props2) {
160
- const rootState = getItemState(props2);
161
- return normalize.label({
162
- ...parts.item.attrs,
163
- dir: state.context.dir,
164
- id: dom.getItemId(state.context, props2.value),
165
- htmlFor: dom.getItemHiddenInputId(state.context, props2.value),
166
- ...getItemDataAttrs(props2),
167
- onPointerMove() {
168
- if (rootState.disabled)
169
- return;
170
- send({ type: "SET_HOVERED", value: props2.value, hovered: true });
171
- },
172
- onPointerLeave() {
173
- if (rootState.disabled)
174
- return;
175
- send({ type: "SET_HOVERED", value: null });
176
- },
177
- onPointerDown(event) {
178
- if (rootState.disabled)
179
- return;
180
- if (rootState.focused && event.pointerType === "mouse") {
181
- event.preventDefault();
182
- }
183
- send({ type: "SET_ACTIVE", value: props2.value, active: true });
184
- },
185
- onPointerUp() {
186
- if (rootState.disabled)
187
- return;
188
- send({ type: "SET_ACTIVE", value: null });
189
- }
190
- });
191
- },
192
- getItemTextProps(props2) {
193
- return normalize.element({
194
- ...parts.itemText.attrs,
195
- dir: state.context.dir,
196
- id: dom.getItemLabelId(state.context, props2.value),
197
- ...getItemDataAttrs(props2)
198
- });
199
- },
200
- getItemControlProps(props2) {
201
- const controlState = getItemState(props2);
202
- return normalize.element({
203
- ...parts.itemControl.attrs,
204
- dir: state.context.dir,
205
- id: dom.getItemControlId(state.context, props2.value),
206
- "data-active": (0, import_dom_query2.dataAttr)(controlState.active),
207
- "aria-hidden": true,
208
- ...getItemDataAttrs(props2)
209
- });
210
- },
211
- getItemHiddenInputProps(props2) {
212
- const inputState = getItemState(props2);
213
- return normalize.input({
214
- "data-ownedby": dom.getRootId(state.context),
215
- id: dom.getItemHiddenInputId(state.context, props2.value),
216
- type: "radio",
217
- name: state.context.name || state.context.id,
218
- form: state.context.form,
219
- value: props2.value,
220
- onChange(event) {
221
- if (readOnly) {
222
- event.preventDefault();
223
- return;
224
- }
225
- if (event.target.checked) {
226
- send({ type: "SET_VALUE", value: props2.value, isTrusted: true });
227
- }
228
- },
229
- onBlur() {
230
- send({ type: "SET_FOCUSED", value: null });
231
- },
232
- onFocus() {
233
- send({ type: "SET_FOCUSED", value: props2.value, focused: true });
234
- },
235
- onKeyDown(event) {
236
- if (event.defaultPrevented)
237
- return;
238
- if (event.key === " ") {
239
- send({ type: "SET_ACTIVE", value: props2.value, active: true });
240
- }
241
- },
242
- onKeyUp(event) {
243
- if (event.defaultPrevented)
244
- return;
245
- if (event.key === " ") {
246
- send({ type: "SET_ACTIVE", value: null });
247
- }
248
- },
249
- disabled: inputState.disabled,
250
- defaultChecked: inputState.checked,
251
- style: import_dom_query2.visuallyHiddenStyle
252
- });
253
- },
254
- indicatorProps: normalize.element({
255
- id: dom.getIndicatorId(state.context),
256
- ...parts.indicator.attrs,
257
- dir: state.context.dir,
258
- hidden: state.context.value == null,
259
- "data-disabled": (0, import_dom_query2.dataAttr)(groupDisabled),
260
- "data-orientation": state.context.orientation,
261
- style: {
262
- "--transition-property": "left, top, width, height",
263
- "--left": state.context.indicatorRect?.left,
264
- "--top": state.context.indicatorRect?.top,
265
- "--width": state.context.indicatorRect?.width,
266
- "--height": state.context.indicatorRect?.height,
267
- position: "absolute",
268
- willChange: "var(--transition-property)",
269
- transitionProperty: "var(--transition-property)",
270
- transitionDuration: state.context.canIndicatorTransition ? "var(--transition-duration, 150ms)" : "0ms",
271
- transitionTimingFunction: "var(--transition-timing-function)",
272
- [state.context.orientation === "horizontal" ? "left" : "top"]: state.context.orientation === "horizontal" ? "var(--left)" : "var(--top)"
273
- }
274
- })
275
- };
276
- }
277
-
278
- // src/radio-group.machine.ts
279
- var import_core = require("@zag-js/core");
280
- var import_dom_query3 = require("@zag-js/dom-query");
281
- var import_element_rect = require("@zag-js/element-rect");
282
- var import_form_utils = require("@zag-js/form-utils");
283
- var import_utils = require("@zag-js/utils");
284
- var { not } = import_core.guards;
285
- function machine(userContext) {
286
- const ctx = (0, import_utils.compact)(userContext);
287
- return (0, import_core.createMachine)(
288
- {
289
- id: "radio",
290
- initial: "idle",
291
- context: {
292
- value: null,
293
- activeValue: null,
294
- focusedValue: null,
295
- hoveredValue: null,
296
- disabled: false,
297
- orientation: "vertical",
298
- ...ctx,
299
- indicatorRect: {},
300
- canIndicatorTransition: false,
301
- fieldsetDisabled: false
302
- },
303
- computed: {
304
- isDisabled: (ctx2) => !!ctx2.disabled || ctx2.fieldsetDisabled
305
- },
306
- entry: ["syncIndicatorRect"],
307
- exit: ["cleanupObserver"],
308
- activities: ["trackFormControlState"],
309
- watch: {
310
- value: ["setIndicatorTransition", "syncIndicatorRect", "syncInputElements"]
311
- },
312
- on: {
313
- SET_VALUE: [
314
- {
315
- guard: not("isTrusted"),
316
- actions: ["setValue", "dispatchChangeEvent"]
317
- },
318
- {
319
- actions: ["setValue"]
320
- }
321
- ],
322
- SET_HOVERED: {
323
- actions: "setHovered"
324
- },
325
- SET_ACTIVE: {
326
- actions: "setActive"
327
- },
328
- SET_FOCUSED: {
329
- actions: "setFocused"
330
- }
331
- },
332
- states: {
333
- idle: {}
334
- }
335
- },
336
- {
337
- guards: {
338
- isTrusted: (_ctx, evt) => !!evt.isTrusted
339
- },
340
- activities: {
341
- trackFormControlState(ctx2, _evt, { send, initialContext }) {
342
- return (0, import_form_utils.trackFormControl)(dom.getRootEl(ctx2), {
343
- onFieldsetDisabledChange(disabled) {
344
- ctx2.fieldsetDisabled = disabled;
345
- },
346
- onFormReset() {
347
- send({ type: "SET_VALUE", value: initialContext.value });
348
- }
349
- });
350
- }
351
- },
352
- actions: {
353
- setValue(ctx2, evt) {
354
- set.value(ctx2, evt.value);
355
- },
356
- setHovered(ctx2, evt) {
357
- ctx2.hoveredValue = evt.value;
358
- },
359
- setActive(ctx2, evt) {
360
- ctx2.activeValue = evt.value;
361
- },
362
- setFocused(ctx2, evt) {
363
- ctx2.focusedValue = evt.value;
364
- },
365
- syncInputElements(ctx2) {
366
- const inputs = dom.getInputEls(ctx2);
367
- inputs.forEach((input) => {
368
- input.checked = input.value === ctx2.value;
369
- });
370
- },
371
- setIndicatorTransition(ctx2) {
372
- ctx2.canIndicatorTransition = (0, import_utils.isString)(ctx2.value);
373
- },
374
- cleanupObserver(ctx2) {
375
- ctx2.indicatorCleanup?.();
376
- },
377
- syncIndicatorRect(ctx2) {
378
- ctx2.indicatorCleanup?.();
379
- if (!dom.getIndicatorEl(ctx2))
380
- return;
381
- const value = ctx2.value;
382
- const radioEl = dom.getActiveRadioEl(ctx2);
383
- if (value == null || !radioEl) {
384
- ctx2.indicatorRect = {};
385
- return;
386
- }
387
- ctx2.indicatorCleanup = (0, import_element_rect.trackElementRect)(radioEl, {
388
- getRect(el) {
389
- return dom.getOffsetRect(el);
390
- },
391
- onChange(rect) {
392
- ctx2.indicatorRect = dom.resolveRect(rect);
393
- (0, import_dom_query3.nextTick)(() => {
394
- ctx2.canIndicatorTransition = false;
395
- });
396
- }
397
- });
398
- },
399
- dispatchChangeEvent(ctx2) {
400
- const inputEls = dom.getInputEls(ctx2);
401
- inputEls.forEach((inputEl) => {
402
- const checked = inputEl.value === ctx2.value;
403
- if (checked === inputEl.checked)
404
- return;
405
- (0, import_form_utils.dispatchInputCheckedEvent)(inputEl, { checked });
406
- });
407
- }
408
- }
409
- }
410
- );
411
- }
412
- var invoke = {
413
- change: (ctx) => {
414
- if (ctx.value == null)
415
- return;
416
- ctx.onValueChange?.({ value: ctx.value });
417
- }
418
- };
419
- var set = {
420
- value: (ctx, value) => {
421
- if ((0, import_utils.isEqual)(ctx.value, value))
422
- return;
423
- ctx.value = value;
424
- invoke.change(ctx);
425
- }
426
- };
427
-
428
- // src/radio-group.props.ts
429
- var import_types = require("@zag-js/types");
430
- var import_utils2 = require("@zag-js/utils");
431
- var props = (0, import_types.createProps)()([
432
- "dir",
433
- "disabled",
434
- "form",
435
- "getRootNode",
436
- "id",
437
- "ids",
438
- "name",
439
- "onValueChange",
440
- "orientation",
441
- "readOnly",
442
- "value"
443
- ]);
444
- var splitProps = (0, import_utils2.createSplitProps)(props);
445
- var itemProps = (0, import_types.createProps)()(["value", "disabled", "invalid"]);
446
- var splitItemProps = (0, import_utils2.createSplitProps)(itemProps);
447
- // Annotate the CommonJS export names for ESM import in node:
448
- 0 && (module.exports = {
449
- anatomy,
450
- connect,
451
- itemProps,
452
- machine,
453
- props,
454
- splitItemProps,
455
- splitProps
456
- });
1
+ "use strict";var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDescriptor;var __getOwnPropNames=Object.getOwnPropertyNames;var __hasOwnProp=Object.prototype.hasOwnProperty;var __export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:true})};var __copyProps=(to,from,except,desc)=>{if(from&&typeof from==="object"||typeof from==="function"){for(let key of __getOwnPropNames(from))if(!__hasOwnProp.call(to,key)&&key!==except)__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable})}return to};var __toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:true}),mod);var src_exports={};__export(src_exports,{anatomy:()=>anatomy,connect:()=>connect,itemProps:()=>itemProps,machine:()=>machine,props:()=>props,splitItemProps:()=>splitItemProps,splitProps:()=>splitProps});module.exports=__toCommonJS(src_exports);var import_anatomy=require("@zag-js/anatomy");var anatomy=(0,import_anatomy.createAnatomy)("radio-group").parts("root","label","item","itemText","itemControl","indicator");var parts=anatomy.build();var import_dom_query2=require("@zag-js/dom-query");var import_dom_query=require("@zag-js/dom-query");var dom=(0,import_dom_query.createScope)({getRootId:ctx=>ctx.ids?.root??`radio-group:${ctx.id}`,getLabelId:ctx=>ctx.ids?.label??`radio-group:${ctx.id}:label`,getItemId:(ctx,value)=>ctx.ids?.item?.(value)??`radio-group:${ctx.id}:radio:${value}`,getItemHiddenInputId:(ctx,value)=>ctx.ids?.itemHiddenInput?.(value)??`radio-group:${ctx.id}:radio:input:${value}`,getItemControlId:(ctx,value)=>ctx.ids?.itemControl?.(value)??`radio-group:${ctx.id}:radio:control:${value}`,getItemLabelId:(ctx,value)=>ctx.ids?.itemLabel?.(value)??`radio-group:${ctx.id}:radio:label:${value}`,getIndicatorId:ctx=>ctx.ids?.indicator??`radio-group:${ctx.id}:indicator`,getRootEl:ctx=>dom.getById(ctx,dom.getRootId(ctx)),getItemHiddenInputEl:(ctx,value)=>dom.getById(ctx,dom.getItemHiddenInputId(ctx,value)),getIndicatorEl:ctx=>dom.getById(ctx,dom.getIndicatorId(ctx)),getFirstEnabledInputEl:ctx=>dom.getRootEl(ctx)?.querySelector("input:not(:disabled)"),getFirstEnabledAndCheckedInputEl:ctx=>dom.getRootEl(ctx)?.querySelector("input:not(:disabled):checked"),getInputEls:ctx=>{const ownerId=CSS.escape(dom.getRootId(ctx));const selector=`input[type=radio][data-ownedby='${ownerId}']:not([disabled])`;return(0,import_dom_query.queryAll)(dom.getRootEl(ctx),selector)},getActiveRadioEl:ctx=>{if(!ctx.value)return;return dom.getById(ctx,dom.getItemId(ctx,ctx.value))},getOffsetRect:el=>({left:el?.offsetLeft??0,top:el?.offsetTop??0,width:el?.offsetWidth??0,height:el?.offsetHeight??0}),getRectById:(ctx,id)=>{const radioEl=dom.getById(ctx,dom.getItemId(ctx,id));if(!radioEl)return;return dom.resolveRect(dom.getOffsetRect(radioEl))},resolveRect:rect=>({width:`${rect.width}px`,height:`${rect.height}px`,left:`${rect.left}px`,top:`${rect.top}px`})});function connect(state,send,normalize){const groupDisabled=state.context.isDisabled;const readOnly=state.context.readOnly;function getItemState(props2){return{invalid:!!props2.invalid,disabled:!!props2.disabled||groupDisabled,checked:state.context.value===props2.value,focused:state.context.focusedValue===props2.value,hovered:state.context.hoveredValue===props2.value,active:state.context.activeValue===props2.value}}function getItemDataAttrs(props2){const radioState=getItemState(props2);return{"data-focus":(0,import_dom_query2.dataAttr)(radioState.focused),"data-disabled":(0,import_dom_query2.dataAttr)(radioState.disabled),"dats-readonly":(0,import_dom_query2.dataAttr)(readOnly),"data-state":radioState.checked?"checked":"unchecked","data-hover":(0,import_dom_query2.dataAttr)(radioState.hovered),"data-invalid":(0,import_dom_query2.dataAttr)(radioState.invalid),"data-orientation":state.context.orientation}}const focus=()=>{const firstEnabledAndCheckedInput=dom.getFirstEnabledAndCheckedInputEl(state.context);if(firstEnabledAndCheckedInput){firstEnabledAndCheckedInput.focus();return}const firstEnabledInput=dom.getFirstEnabledInputEl(state.context);firstEnabledInput?.focus()};return{focus,value:state.context.value,setValue(value){send({type:"SET_VALUE",value,isTrusted:false})},clearValue(){send({type:"SET_VALUE",value:null,isTrusted:false})},getItemState,rootProps:normalize.element({...parts.root.attrs,role:"radiogroup",id:dom.getRootId(state.context),"aria-labelledby":dom.getLabelId(state.context),"data-orientation":state.context.orientation,"data-disabled":(0,import_dom_query2.dataAttr)(groupDisabled),"aria-orientation":state.context.orientation,dir:state.context.dir,style:{position:"relative"}}),labelProps:normalize.element({...parts.label.attrs,dir:state.context.dir,"data-orientation":state.context.orientation,"data-disabled":(0,import_dom_query2.dataAttr)(groupDisabled),id:dom.getLabelId(state.context),onClick:focus}),getItemProps(props2){const itemState=getItemState(props2);return normalize.label({...parts.item.attrs,dir:state.context.dir,id:dom.getItemId(state.context,props2.value),htmlFor:dom.getItemHiddenInputId(state.context,props2.value),...getItemDataAttrs(props2),onPointerMove(){if(itemState.disabled)return;if(itemState.hovered)return;send({type:"SET_HOVERED",value:props2.value,hovered:true})},onPointerLeave(){if(itemState.disabled)return;send({type:"SET_HOVERED",value:null})},onPointerDown(event){if(itemState.disabled)return;if(itemState.focused&&event.pointerType==="mouse"){event.preventDefault()}send({type:"SET_ACTIVE",value:props2.value,active:true})},onPointerUp(){if(itemState.disabled)return;send({type:"SET_ACTIVE",value:null})}})},getItemTextProps(props2){return normalize.element({...parts.itemText.attrs,dir:state.context.dir,id:dom.getItemLabelId(state.context,props2.value),...getItemDataAttrs(props2)})},getItemControlProps(props2){const controlState=getItemState(props2);return normalize.element({...parts.itemControl.attrs,dir:state.context.dir,id:dom.getItemControlId(state.context,props2.value),"data-active":(0,import_dom_query2.dataAttr)(controlState.active),"aria-hidden":true,...getItemDataAttrs(props2)})},getItemHiddenInputProps(props2){const inputState=getItemState(props2);return normalize.input({"data-ownedby":dom.getRootId(state.context),id:dom.getItemHiddenInputId(state.context,props2.value),type:"radio",name:state.context.name||state.context.id,form:state.context.form,value:props2.value,onChange(event){if(readOnly){event.preventDefault();return}if(event.target.checked){send({type:"SET_VALUE",value:props2.value,isTrusted:true})}},onBlur(){send({type:"SET_FOCUSED",value:null})},onFocus(){send({type:"SET_FOCUSED",value:props2.value,focused:true})},onKeyDown(event){if(event.defaultPrevented)return;if(event.key===" "){send({type:"SET_ACTIVE",value:props2.value,active:true})}},onKeyUp(event){if(event.defaultPrevented)return;if(event.key===" "){send({type:"SET_ACTIVE",value:null})}},disabled:inputState.disabled,defaultChecked:inputState.checked,style:import_dom_query2.visuallyHiddenStyle})},indicatorProps:normalize.element({id:dom.getIndicatorId(state.context),...parts.indicator.attrs,dir:state.context.dir,hidden:state.context.value==null,"data-disabled":(0,import_dom_query2.dataAttr)(groupDisabled),"data-orientation":state.context.orientation,style:{"--transition-property":"left, top, width, height","--left":state.context.indicatorRect?.left,"--top":state.context.indicatorRect?.top,"--width":state.context.indicatorRect?.width,"--height":state.context.indicatorRect?.height,position:"absolute",willChange:"var(--transition-property)",transitionProperty:"var(--transition-property)",transitionDuration:state.context.canIndicatorTransition?"var(--transition-duration, 150ms)":"0ms",transitionTimingFunction:"var(--transition-timing-function)",[state.context.orientation==="horizontal"?"left":"top"]:state.context.orientation==="horizontal"?"var(--left)":"var(--top)"}})}}var import_core=require("@zag-js/core");var import_dom_query3=require("@zag-js/dom-query");var import_element_rect=require("@zag-js/element-rect");var import_form_utils=require("@zag-js/form-utils");var import_utils=require("@zag-js/utils");var{not}=import_core.guards;function machine(userContext){const ctx=(0,import_utils.compact)(userContext);return(0,import_core.createMachine)({id:"radio",initial:"idle",context:{value:null,activeValue:null,focusedValue:null,hoveredValue:null,disabled:false,orientation:"vertical",...ctx,indicatorRect:{},canIndicatorTransition:false,fieldsetDisabled:false},computed:{isDisabled:ctx2=>!!ctx2.disabled||ctx2.fieldsetDisabled},entry:["syncIndicatorRect"],exit:["cleanupObserver"],activities:["trackFormControlState"],watch:{value:["setIndicatorTransition","syncIndicatorRect","syncInputElements"]},on:{SET_VALUE:[{guard:not("isTrusted"),actions:["setValue","dispatchChangeEvent"]},{actions:["setValue"]}],SET_HOVERED:{actions:"setHovered"},SET_ACTIVE:{actions:"setActive"},SET_FOCUSED:{actions:"setFocused"}},states:{idle:{}}},{guards:{isTrusted:(_ctx,evt)=>!!evt.isTrusted},activities:{trackFormControlState(ctx2,_evt,{send,initialContext}){return(0,import_form_utils.trackFormControl)(dom.getRootEl(ctx2),{onFieldsetDisabledChange(disabled){ctx2.fieldsetDisabled=disabled},onFormReset(){send({type:"SET_VALUE",value:initialContext.value})}})}},actions:{setValue(ctx2,evt){set.value(ctx2,evt.value)},setHovered(ctx2,evt){ctx2.hoveredValue=evt.value},setActive(ctx2,evt){ctx2.activeValue=evt.value},setFocused(ctx2,evt){ctx2.focusedValue=evt.value},syncInputElements(ctx2){const inputs=dom.getInputEls(ctx2);inputs.forEach(input=>{input.checked=input.value===ctx2.value})},setIndicatorTransition(ctx2){ctx2.canIndicatorTransition=(0,import_utils.isString)(ctx2.value)},cleanupObserver(ctx2){ctx2.indicatorCleanup?.()},syncIndicatorRect(ctx2){ctx2.indicatorCleanup?.();if(!dom.getIndicatorEl(ctx2))return;const value=ctx2.value;const radioEl=dom.getActiveRadioEl(ctx2);if(value==null||!radioEl){ctx2.indicatorRect={};return}ctx2.indicatorCleanup=(0,import_element_rect.trackElementRect)(radioEl,{getRect(el){return dom.getOffsetRect(el)},onChange(rect){ctx2.indicatorRect=dom.resolveRect(rect);(0,import_dom_query3.nextTick)(()=>{ctx2.canIndicatorTransition=false})}})},dispatchChangeEvent(ctx2){const inputEls=dom.getInputEls(ctx2);inputEls.forEach(inputEl=>{const checked=inputEl.value===ctx2.value;if(checked===inputEl.checked)return;(0,import_form_utils.dispatchInputCheckedEvent)(inputEl,{checked})})}}})}var invoke={change:ctx=>{if(ctx.value==null)return;ctx.onValueChange?.({value:ctx.value})}};var set={value:(ctx,value)=>{if((0,import_utils.isEqual)(ctx.value,value))return;ctx.value=value;invoke.change(ctx)}};var import_types=require("@zag-js/types");var import_utils2=require("@zag-js/utils");var props=(0,import_types.createProps)()(["dir","disabled","form","getRootNode","id","ids","name","onValueChange","orientation","readOnly","value"]);var splitProps=(0,import_utils2.createSplitProps)(props);var itemProps=(0,import_types.createProps)()(["value","disabled","invalid"]);var splitItemProps=(0,import_utils2.createSplitProps)(itemProps);0&&(module.exports={anatomy,connect,itemProps,machine,props,splitItemProps,splitProps});
457
2
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/radio-group.anatomy.ts","../src/radio-group.connect.ts","../src/radio-group.dom.ts","../src/radio-group.machine.ts","../src/radio-group.props.ts"],"sourcesContent":["export { anatomy } from \"./radio-group.anatomy\"\nexport { connect } from \"./radio-group.connect\"\nexport { machine } from \"./radio-group.machine\"\nexport * from \"./radio-group.props\"\nexport type {\n MachineApi as Api,\n UserDefinedContext as Context,\n ElementIds,\n ItemProps,\n ItemState,\n ValueChangeDetails,\n} from \"./radio-group.types\"\n","import { createAnatomy } from \"@zag-js/anatomy\"\n\nexport const anatomy = createAnatomy(\"radio-group\").parts(\n \"root\",\n \"label\",\n \"item\",\n \"itemText\",\n \"itemControl\",\n \"indicator\",\n)\n\nexport const parts = anatomy.build()\n","import { dataAttr, visuallyHiddenStyle } from \"@zag-js/dom-query\"\nimport type { NormalizeProps, PropTypes } from \"@zag-js/types\"\nimport { parts } from \"./radio-group.anatomy\"\nimport { dom } from \"./radio-group.dom\"\nimport type { ItemProps, ItemState, MachineApi, Send, State } from \"./radio-group.types\"\n\nexport function connect<T extends PropTypes>(state: State, send: Send, normalize: NormalizeProps<T>): MachineApi<T> {\n const groupDisabled = state.context.isDisabled\n const readOnly = state.context.readOnly\n\n function getItemState(props: ItemProps): ItemState {\n return {\n invalid: !!props.invalid,\n disabled: !!props.disabled || groupDisabled,\n checked: state.context.value === props.value,\n focused: state.context.focusedValue === props.value,\n hovered: state.context.hoveredValue === props.value,\n active: state.context.activeValue === props.value,\n }\n }\n\n function getItemDataAttrs<T extends ItemProps>(props: T) {\n const radioState = getItemState(props)\n return {\n \"data-focus\": dataAttr(radioState.focused),\n \"data-disabled\": dataAttr(radioState.disabled),\n \"dats-readonly\": dataAttr(readOnly),\n \"data-state\": radioState.checked ? \"checked\" : \"unchecked\",\n \"data-hover\": dataAttr(radioState.hovered),\n \"data-invalid\": dataAttr(radioState.invalid),\n \"data-orientation\": state.context.orientation,\n }\n }\n\n const focus = () => {\n const firstEnabledAndCheckedInput = dom.getFirstEnabledAndCheckedInputEl(state.context)\n\n if (firstEnabledAndCheckedInput) {\n firstEnabledAndCheckedInput.focus()\n return\n }\n\n const firstEnabledInput = dom.getFirstEnabledInputEl(state.context)\n firstEnabledInput?.focus()\n }\n\n return {\n focus,\n value: state.context.value,\n setValue(value) {\n send({ type: \"SET_VALUE\", value, isTrusted: false })\n },\n clearValue() {\n send({ type: \"SET_VALUE\", value: null, isTrusted: false })\n },\n getItemState,\n\n rootProps: normalize.element({\n ...parts.root.attrs,\n role: \"radiogroup\",\n id: dom.getRootId(state.context),\n \"aria-labelledby\": dom.getLabelId(state.context),\n \"data-orientation\": state.context.orientation,\n \"data-disabled\": dataAttr(groupDisabled),\n \"aria-orientation\": state.context.orientation,\n dir: state.context.dir,\n style: {\n position: \"relative\",\n },\n }),\n\n labelProps: normalize.element({\n ...parts.label.attrs,\n dir: state.context.dir,\n \"data-orientation\": state.context.orientation,\n \"data-disabled\": dataAttr(groupDisabled),\n id: dom.getLabelId(state.context),\n onClick: focus,\n }),\n\n getItemProps(props: ItemProps) {\n const rootState = getItemState(props)\n\n return normalize.label({\n ...parts.item.attrs,\n dir: state.context.dir,\n id: dom.getItemId(state.context, props.value),\n htmlFor: dom.getItemHiddenInputId(state.context, props.value),\n ...getItemDataAttrs(props),\n onPointerMove() {\n if (rootState.disabled) return\n send({ type: \"SET_HOVERED\", value: props.value, hovered: true })\n },\n onPointerLeave() {\n if (rootState.disabled) return\n send({ type: \"SET_HOVERED\", value: null })\n },\n onPointerDown(event) {\n if (rootState.disabled) return\n // On pointerdown, the input blurs and returns focus to the `body`,\n // we need to prevent this.\n if (rootState.focused && event.pointerType === \"mouse\") {\n event.preventDefault()\n }\n send({ type: \"SET_ACTIVE\", value: props.value, active: true })\n },\n onPointerUp() {\n if (rootState.disabled) return\n send({ type: \"SET_ACTIVE\", value: null })\n },\n })\n },\n\n getItemTextProps(props: ItemProps) {\n return normalize.element({\n ...parts.itemText.attrs,\n dir: state.context.dir,\n id: dom.getItemLabelId(state.context, props.value),\n ...getItemDataAttrs(props),\n })\n },\n\n getItemControlProps(props: ItemProps) {\n const controlState = getItemState(props)\n\n return normalize.element({\n ...parts.itemControl.attrs,\n dir: state.context.dir,\n id: dom.getItemControlId(state.context, props.value),\n \"data-active\": dataAttr(controlState.active),\n \"aria-hidden\": true,\n ...getItemDataAttrs(props),\n })\n },\n\n getItemHiddenInputProps(props: ItemProps) {\n const inputState = getItemState(props)\n\n return normalize.input({\n \"data-ownedby\": dom.getRootId(state.context),\n id: dom.getItemHiddenInputId(state.context, props.value),\n type: \"radio\",\n name: state.context.name || state.context.id,\n form: state.context.form,\n value: props.value,\n onChange(event) {\n if (readOnly) {\n event.preventDefault()\n return\n }\n\n if (event.target.checked) {\n send({ type: \"SET_VALUE\", value: props.value, isTrusted: true })\n }\n },\n onBlur() {\n send({ type: \"SET_FOCUSED\", value: null })\n },\n onFocus() {\n send({ type: \"SET_FOCUSED\", value: props.value, focused: true })\n },\n onKeyDown(event) {\n if (event.defaultPrevented) return\n if (event.key === \" \") {\n send({ type: \"SET_ACTIVE\", value: props.value, active: true })\n }\n },\n onKeyUp(event) {\n if (event.defaultPrevented) return\n if (event.key === \" \") {\n send({ type: \"SET_ACTIVE\", value: null })\n }\n },\n disabled: inputState.disabled,\n defaultChecked: inputState.checked,\n style: visuallyHiddenStyle,\n })\n },\n\n indicatorProps: normalize.element({\n id: dom.getIndicatorId(state.context),\n ...parts.indicator.attrs,\n dir: state.context.dir,\n hidden: state.context.value == null,\n \"data-disabled\": dataAttr(groupDisabled),\n \"data-orientation\": state.context.orientation,\n style: {\n \"--transition-property\": \"left, top, width, height\",\n \"--left\": state.context.indicatorRect?.left,\n \"--top\": state.context.indicatorRect?.top,\n \"--width\": state.context.indicatorRect?.width,\n \"--height\": state.context.indicatorRect?.height,\n position: \"absolute\",\n willChange: \"var(--transition-property)\",\n transitionProperty: \"var(--transition-property)\",\n transitionDuration: state.context.canIndicatorTransition ? \"var(--transition-duration, 150ms)\" : \"0ms\",\n transitionTimingFunction: \"var(--transition-timing-function)\",\n [state.context.orientation === \"horizontal\" ? \"left\" : \"top\"]:\n state.context.orientation === \"horizontal\" ? \"var(--left)\" : \"var(--top)\",\n },\n }),\n }\n}\n","import { createScope, queryAll } from \"@zag-js/dom-query\"\nimport type { MachineContext as Ctx } from \"./radio-group.types\"\n\nexport const dom = createScope({\n getRootId: (ctx: Ctx) => ctx.ids?.root ?? `radio-group:${ctx.id}`,\n getLabelId: (ctx: Ctx) => ctx.ids?.label ?? `radio-group:${ctx.id}:label`,\n getItemId: (ctx: Ctx, value: string) => ctx.ids?.item?.(value) ?? `radio-group:${ctx.id}:radio:${value}`,\n getItemHiddenInputId: (ctx: Ctx, value: string) =>\n ctx.ids?.itemHiddenInput?.(value) ?? `radio-group:${ctx.id}:radio:input:${value}`,\n getItemControlId: (ctx: Ctx, value: string) =>\n ctx.ids?.itemControl?.(value) ?? `radio-group:${ctx.id}:radio:control:${value}`,\n getItemLabelId: (ctx: Ctx, value: string) =>\n ctx.ids?.itemLabel?.(value) ?? `radio-group:${ctx.id}:radio:label:${value}`,\n getIndicatorId: (ctx: Ctx) => ctx.ids?.indicator ?? `radio-group:${ctx.id}:indicator`,\n\n getRootEl: (ctx: Ctx) => dom.getById(ctx, dom.getRootId(ctx)),\n getItemHiddenInputEl: (ctx: Ctx, value: string) =>\n dom.getById<HTMLInputElement>(ctx, dom.getItemHiddenInputId(ctx, value)),\n getIndicatorEl: (ctx: Ctx) => dom.getById(ctx, dom.getIndicatorId(ctx)),\n\n getFirstEnabledInputEl: (ctx: Ctx) => dom.getRootEl(ctx)?.querySelector<HTMLInputElement>(\"input:not(:disabled)\"),\n getFirstEnabledAndCheckedInputEl: (ctx: Ctx) =>\n dom.getRootEl(ctx)?.querySelector<HTMLInputElement>(\"input:not(:disabled):checked\"),\n\n getInputEls: (ctx: Ctx) => {\n const ownerId = CSS.escape(dom.getRootId(ctx))\n const selector = `input[type=radio][data-ownedby='${ownerId}']:not([disabled])`\n return queryAll<HTMLInputElement>(dom.getRootEl(ctx), selector)\n },\n\n getActiveRadioEl: (ctx: Ctx) => {\n if (!ctx.value) return\n return dom.getById(ctx, dom.getItemId(ctx, ctx.value))\n },\n\n getOffsetRect: (el: HTMLElement | undefined) => ({\n left: el?.offsetLeft ?? 0,\n top: el?.offsetTop ?? 0,\n width: el?.offsetWidth ?? 0,\n height: el?.offsetHeight ?? 0,\n }),\n\n getRectById: (ctx: Ctx, id: string) => {\n const radioEl = dom.getById(ctx, dom.getItemId(ctx, id))\n if (!radioEl) return\n return dom.resolveRect(dom.getOffsetRect(radioEl))\n },\n\n resolveRect: (rect: Record<\"width\" | \"height\" | \"left\" | \"top\", number>) => ({\n width: `${rect.width}px`,\n height: `${rect.height}px`,\n left: `${rect.left}px`,\n top: `${rect.top}px`,\n }),\n})\n","import { createMachine, guards } from \"@zag-js/core\"\nimport { nextTick } from \"@zag-js/dom-query\"\nimport { trackElementRect } from \"@zag-js/element-rect\"\nimport { dispatchInputCheckedEvent, trackFormControl } from \"@zag-js/form-utils\"\nimport { compact, isEqual, isString } from \"@zag-js/utils\"\nimport { dom } from \"./radio-group.dom\"\nimport type { MachineContext, MachineState, UserDefinedContext } from \"./radio-group.types\"\n\nconst { not } = guards\n\nexport function machine(userContext: UserDefinedContext) {\n const ctx = compact(userContext)\n return createMachine<MachineContext, MachineState>(\n {\n id: \"radio\",\n initial: \"idle\",\n context: {\n value: null,\n activeValue: null,\n focusedValue: null,\n hoveredValue: null,\n disabled: false,\n orientation: \"vertical\",\n ...ctx,\n indicatorRect: {},\n canIndicatorTransition: false,\n fieldsetDisabled: false,\n },\n\n computed: {\n isDisabled: (ctx) => !!ctx.disabled || ctx.fieldsetDisabled,\n },\n\n entry: [\"syncIndicatorRect\"],\n\n exit: [\"cleanupObserver\"],\n\n activities: [\"trackFormControlState\"],\n\n watch: {\n value: [\"setIndicatorTransition\", \"syncIndicatorRect\", \"syncInputElements\"],\n },\n\n on: {\n SET_VALUE: [\n {\n guard: not(\"isTrusted\"),\n actions: [\"setValue\", \"dispatchChangeEvent\"],\n },\n {\n actions: [\"setValue\"],\n },\n ],\n SET_HOVERED: {\n actions: \"setHovered\",\n },\n SET_ACTIVE: {\n actions: \"setActive\",\n },\n SET_FOCUSED: {\n actions: \"setFocused\",\n },\n },\n\n states: {\n idle: {},\n },\n },\n\n {\n guards: {\n isTrusted: (_ctx, evt) => !!evt.isTrusted,\n },\n activities: {\n trackFormControlState(ctx, _evt, { send, initialContext }) {\n return trackFormControl(dom.getRootEl(ctx), {\n onFieldsetDisabledChange(disabled) {\n ctx.fieldsetDisabled = disabled\n },\n onFormReset() {\n send({ type: \"SET_VALUE\", value: initialContext.value })\n },\n })\n },\n },\n\n actions: {\n setValue(ctx, evt) {\n set.value(ctx, evt.value)\n },\n setHovered(ctx, evt) {\n ctx.hoveredValue = evt.value\n },\n setActive(ctx, evt) {\n ctx.activeValue = evt.value\n },\n setFocused(ctx, evt) {\n ctx.focusedValue = evt.value\n },\n syncInputElements(ctx) {\n const inputs = dom.getInputEls(ctx)\n inputs.forEach((input) => {\n input.checked = input.value === ctx.value\n })\n },\n setIndicatorTransition(ctx) {\n ctx.canIndicatorTransition = isString(ctx.value)\n },\n cleanupObserver(ctx) {\n ctx.indicatorCleanup?.()\n },\n syncIndicatorRect(ctx) {\n ctx.indicatorCleanup?.()\n\n if (!dom.getIndicatorEl(ctx)) return\n\n const value = ctx.value\n\n const radioEl = dom.getActiveRadioEl(ctx)\n\n if (value == null || !radioEl) {\n ctx.indicatorRect = {}\n return\n }\n\n ctx.indicatorCleanup = trackElementRect(radioEl, {\n getRect(el) {\n return dom.getOffsetRect(el)\n },\n onChange(rect) {\n ctx.indicatorRect = dom.resolveRect(rect)\n nextTick(() => {\n ctx.canIndicatorTransition = false\n })\n },\n })\n },\n dispatchChangeEvent(ctx) {\n const inputEls = dom.getInputEls(ctx)\n inputEls.forEach((inputEl) => {\n const checked = inputEl.value === ctx.value\n if (checked === inputEl.checked) return\n dispatchInputCheckedEvent(inputEl, { checked })\n })\n },\n },\n },\n )\n}\n\nconst invoke = {\n change: (ctx: MachineContext) => {\n if (ctx.value == null) return\n ctx.onValueChange?.({ value: ctx.value })\n },\n}\n\nconst set = {\n value: (ctx: MachineContext, value: string) => {\n if (isEqual(ctx.value, value)) return\n ctx.value = value\n invoke.change(ctx)\n },\n}\n","import { createProps } from \"@zag-js/types\"\nimport { createSplitProps } from \"@zag-js/utils\"\nimport type { ItemProps, UserDefinedContext } from \"./radio-group.types\"\n\nexport const props = createProps<UserDefinedContext>()([\n \"dir\",\n \"disabled\",\n \"form\",\n \"getRootNode\",\n \"id\",\n \"ids\",\n \"name\",\n \"onValueChange\",\n \"orientation\",\n \"readOnly\",\n \"value\",\n])\nexport const splitProps = createSplitProps<Partial<UserDefinedContext>>(props)\n\nexport const itemProps = createProps<ItemProps>()([\"value\", \"disabled\", \"invalid\"])\nexport const splitItemProps = createSplitProps<ItemProps>(itemProps)\n"],"mappings":"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","names":["import_dom_query","props","import_dom_query","ctx","import_utils"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/radio-group.anatomy.ts","../src/radio-group.connect.ts","../src/radio-group.dom.ts","../src/radio-group.machine.ts","../src/radio-group.props.ts"],"sourcesContent":["export { anatomy } from \"./radio-group.anatomy\"\nexport { connect } from \"./radio-group.connect\"\nexport { machine } from \"./radio-group.machine\"\nexport * from \"./radio-group.props\"\nexport type {\n MachineApi as Api,\n UserDefinedContext as Context,\n ElementIds,\n ItemProps,\n ItemState,\n ValueChangeDetails,\n} from \"./radio-group.types\"\n","import { createAnatomy } from \"@zag-js/anatomy\"\n\nexport const anatomy = createAnatomy(\"radio-group\").parts(\n \"root\",\n \"label\",\n \"item\",\n \"itemText\",\n \"itemControl\",\n \"indicator\",\n)\n\nexport const parts = anatomy.build()\n","import { dataAttr, visuallyHiddenStyle } from \"@zag-js/dom-query\"\nimport type { NormalizeProps, PropTypes } from \"@zag-js/types\"\nimport { parts } from \"./radio-group.anatomy\"\nimport { dom } from \"./radio-group.dom\"\nimport type { ItemProps, ItemState, MachineApi, Send, State } from \"./radio-group.types\"\n\nexport function connect<T extends PropTypes>(state: State, send: Send, normalize: NormalizeProps<T>): MachineApi<T> {\n const groupDisabled = state.context.isDisabled\n const readOnly = state.context.readOnly\n\n function getItemState(props: ItemProps): ItemState {\n return {\n invalid: !!props.invalid,\n disabled: !!props.disabled || groupDisabled,\n checked: state.context.value === props.value,\n focused: state.context.focusedValue === props.value,\n hovered: state.context.hoveredValue === props.value,\n active: state.context.activeValue === props.value,\n }\n }\n\n function getItemDataAttrs<T extends ItemProps>(props: T) {\n const radioState = getItemState(props)\n return {\n \"data-focus\": dataAttr(radioState.focused),\n \"data-disabled\": dataAttr(radioState.disabled),\n \"dats-readonly\": dataAttr(readOnly),\n \"data-state\": radioState.checked ? \"checked\" : \"unchecked\",\n \"data-hover\": dataAttr(radioState.hovered),\n \"data-invalid\": dataAttr(radioState.invalid),\n \"data-orientation\": state.context.orientation,\n }\n }\n\n const focus = () => {\n const firstEnabledAndCheckedInput = dom.getFirstEnabledAndCheckedInputEl(state.context)\n\n if (firstEnabledAndCheckedInput) {\n firstEnabledAndCheckedInput.focus()\n return\n }\n\n const firstEnabledInput = dom.getFirstEnabledInputEl(state.context)\n firstEnabledInput?.focus()\n }\n\n return {\n focus,\n value: state.context.value,\n setValue(value) {\n send({ type: \"SET_VALUE\", value, isTrusted: false })\n },\n clearValue() {\n send({ type: \"SET_VALUE\", value: null, isTrusted: false })\n },\n getItemState,\n\n rootProps: normalize.element({\n ...parts.root.attrs,\n role: \"radiogroup\",\n id: dom.getRootId(state.context),\n \"aria-labelledby\": dom.getLabelId(state.context),\n \"data-orientation\": state.context.orientation,\n \"data-disabled\": dataAttr(groupDisabled),\n \"aria-orientation\": state.context.orientation,\n dir: state.context.dir,\n style: {\n position: \"relative\",\n },\n }),\n\n labelProps: normalize.element({\n ...parts.label.attrs,\n dir: state.context.dir,\n \"data-orientation\": state.context.orientation,\n \"data-disabled\": dataAttr(groupDisabled),\n id: dom.getLabelId(state.context),\n onClick: focus,\n }),\n\n getItemProps(props: ItemProps) {\n const itemState = getItemState(props)\n\n return normalize.label({\n ...parts.item.attrs,\n dir: state.context.dir,\n id: dom.getItemId(state.context, props.value),\n htmlFor: dom.getItemHiddenInputId(state.context, props.value),\n ...getItemDataAttrs(props),\n onPointerMove() {\n if (itemState.disabled) return\n if (itemState.hovered) return\n send({ type: \"SET_HOVERED\", value: props.value, hovered: true })\n },\n onPointerLeave() {\n if (itemState.disabled) return\n send({ type: \"SET_HOVERED\", value: null })\n },\n onPointerDown(event) {\n if (itemState.disabled) return\n // On pointerdown, the input blurs and returns focus to the `body`,\n // we need to prevent this.\n if (itemState.focused && event.pointerType === \"mouse\") {\n event.preventDefault()\n }\n send({ type: \"SET_ACTIVE\", value: props.value, active: true })\n },\n onPointerUp() {\n if (itemState.disabled) return\n send({ type: \"SET_ACTIVE\", value: null })\n },\n })\n },\n\n getItemTextProps(props: ItemProps) {\n return normalize.element({\n ...parts.itemText.attrs,\n dir: state.context.dir,\n id: dom.getItemLabelId(state.context, props.value),\n ...getItemDataAttrs(props),\n })\n },\n\n getItemControlProps(props: ItemProps) {\n const controlState = getItemState(props)\n\n return normalize.element({\n ...parts.itemControl.attrs,\n dir: state.context.dir,\n id: dom.getItemControlId(state.context, props.value),\n \"data-active\": dataAttr(controlState.active),\n \"aria-hidden\": true,\n ...getItemDataAttrs(props),\n })\n },\n\n getItemHiddenInputProps(props: ItemProps) {\n const inputState = getItemState(props)\n\n return normalize.input({\n \"data-ownedby\": dom.getRootId(state.context),\n id: dom.getItemHiddenInputId(state.context, props.value),\n type: \"radio\",\n name: state.context.name || state.context.id,\n form: state.context.form,\n value: props.value,\n onChange(event) {\n if (readOnly) {\n event.preventDefault()\n return\n }\n\n if (event.target.checked) {\n send({ type: \"SET_VALUE\", value: props.value, isTrusted: true })\n }\n },\n onBlur() {\n send({ type: \"SET_FOCUSED\", value: null })\n },\n onFocus() {\n send({ type: \"SET_FOCUSED\", value: props.value, focused: true })\n },\n onKeyDown(event) {\n if (event.defaultPrevented) return\n if (event.key === \" \") {\n send({ type: \"SET_ACTIVE\", value: props.value, active: true })\n }\n },\n onKeyUp(event) {\n if (event.defaultPrevented) return\n if (event.key === \" \") {\n send({ type: \"SET_ACTIVE\", value: null })\n }\n },\n disabled: inputState.disabled,\n defaultChecked: inputState.checked,\n style: visuallyHiddenStyle,\n })\n },\n\n indicatorProps: normalize.element({\n id: dom.getIndicatorId(state.context),\n ...parts.indicator.attrs,\n dir: state.context.dir,\n hidden: state.context.value == null,\n \"data-disabled\": dataAttr(groupDisabled),\n \"data-orientation\": state.context.orientation,\n style: {\n \"--transition-property\": \"left, top, width, height\",\n \"--left\": state.context.indicatorRect?.left,\n \"--top\": state.context.indicatorRect?.top,\n \"--width\": state.context.indicatorRect?.width,\n \"--height\": state.context.indicatorRect?.height,\n position: \"absolute\",\n willChange: \"var(--transition-property)\",\n transitionProperty: \"var(--transition-property)\",\n transitionDuration: state.context.canIndicatorTransition ? \"var(--transition-duration, 150ms)\" : \"0ms\",\n transitionTimingFunction: \"var(--transition-timing-function)\",\n [state.context.orientation === \"horizontal\" ? \"left\" : \"top\"]:\n state.context.orientation === \"horizontal\" ? \"var(--left)\" : \"var(--top)\",\n },\n }),\n }\n}\n","import { createScope, queryAll } from \"@zag-js/dom-query\"\nimport type { MachineContext as Ctx } from \"./radio-group.types\"\n\nexport const dom = createScope({\n getRootId: (ctx: Ctx) => ctx.ids?.root ?? `radio-group:${ctx.id}`,\n getLabelId: (ctx: Ctx) => ctx.ids?.label ?? `radio-group:${ctx.id}:label`,\n getItemId: (ctx: Ctx, value: string) => ctx.ids?.item?.(value) ?? `radio-group:${ctx.id}:radio:${value}`,\n getItemHiddenInputId: (ctx: Ctx, value: string) =>\n ctx.ids?.itemHiddenInput?.(value) ?? `radio-group:${ctx.id}:radio:input:${value}`,\n getItemControlId: (ctx: Ctx, value: string) =>\n ctx.ids?.itemControl?.(value) ?? `radio-group:${ctx.id}:radio:control:${value}`,\n getItemLabelId: (ctx: Ctx, value: string) =>\n ctx.ids?.itemLabel?.(value) ?? `radio-group:${ctx.id}:radio:label:${value}`,\n getIndicatorId: (ctx: Ctx) => ctx.ids?.indicator ?? `radio-group:${ctx.id}:indicator`,\n\n getRootEl: (ctx: Ctx) => dom.getById(ctx, dom.getRootId(ctx)),\n getItemHiddenInputEl: (ctx: Ctx, value: string) =>\n dom.getById<HTMLInputElement>(ctx, dom.getItemHiddenInputId(ctx, value)),\n getIndicatorEl: (ctx: Ctx) => dom.getById(ctx, dom.getIndicatorId(ctx)),\n\n getFirstEnabledInputEl: (ctx: Ctx) => dom.getRootEl(ctx)?.querySelector<HTMLInputElement>(\"input:not(:disabled)\"),\n getFirstEnabledAndCheckedInputEl: (ctx: Ctx) =>\n dom.getRootEl(ctx)?.querySelector<HTMLInputElement>(\"input:not(:disabled):checked\"),\n\n getInputEls: (ctx: Ctx) => {\n const ownerId = CSS.escape(dom.getRootId(ctx))\n const selector = `input[type=radio][data-ownedby='${ownerId}']:not([disabled])`\n return queryAll<HTMLInputElement>(dom.getRootEl(ctx), selector)\n },\n\n getActiveRadioEl: (ctx: Ctx) => {\n if (!ctx.value) return\n return dom.getById(ctx, dom.getItemId(ctx, ctx.value))\n },\n\n getOffsetRect: (el: HTMLElement | undefined) => ({\n left: el?.offsetLeft ?? 0,\n top: el?.offsetTop ?? 0,\n width: el?.offsetWidth ?? 0,\n height: el?.offsetHeight ?? 0,\n }),\n\n getRectById: (ctx: Ctx, id: string) => {\n const radioEl = dom.getById(ctx, dom.getItemId(ctx, id))\n if (!radioEl) return\n return dom.resolveRect(dom.getOffsetRect(radioEl))\n },\n\n resolveRect: (rect: Record<\"width\" | \"height\" | \"left\" | \"top\", number>) => ({\n width: `${rect.width}px`,\n height: `${rect.height}px`,\n left: `${rect.left}px`,\n top: `${rect.top}px`,\n }),\n})\n","import { createMachine, guards } from \"@zag-js/core\"\nimport { nextTick } from \"@zag-js/dom-query\"\nimport { trackElementRect } from \"@zag-js/element-rect\"\nimport { dispatchInputCheckedEvent, trackFormControl } from \"@zag-js/form-utils\"\nimport { compact, isEqual, isString } from \"@zag-js/utils\"\nimport { dom } from \"./radio-group.dom\"\nimport type { MachineContext, MachineState, UserDefinedContext } from \"./radio-group.types\"\n\nconst { not } = guards\n\nexport function machine(userContext: UserDefinedContext) {\n const ctx = compact(userContext)\n return createMachine<MachineContext, MachineState>(\n {\n id: \"radio\",\n initial: \"idle\",\n context: {\n value: null,\n activeValue: null,\n focusedValue: null,\n hoveredValue: null,\n disabled: false,\n orientation: \"vertical\",\n ...ctx,\n indicatorRect: {},\n canIndicatorTransition: false,\n fieldsetDisabled: false,\n },\n\n computed: {\n isDisabled: (ctx) => !!ctx.disabled || ctx.fieldsetDisabled,\n },\n\n entry: [\"syncIndicatorRect\"],\n\n exit: [\"cleanupObserver\"],\n\n activities: [\"trackFormControlState\"],\n\n watch: {\n value: [\"setIndicatorTransition\", \"syncIndicatorRect\", \"syncInputElements\"],\n },\n\n on: {\n SET_VALUE: [\n {\n guard: not(\"isTrusted\"),\n actions: [\"setValue\", \"dispatchChangeEvent\"],\n },\n {\n actions: [\"setValue\"],\n },\n ],\n SET_HOVERED: {\n actions: \"setHovered\",\n },\n SET_ACTIVE: {\n actions: \"setActive\",\n },\n SET_FOCUSED: {\n actions: \"setFocused\",\n },\n },\n\n states: {\n idle: {},\n },\n },\n\n {\n guards: {\n isTrusted: (_ctx, evt) => !!evt.isTrusted,\n },\n activities: {\n trackFormControlState(ctx, _evt, { send, initialContext }) {\n return trackFormControl(dom.getRootEl(ctx), {\n onFieldsetDisabledChange(disabled) {\n ctx.fieldsetDisabled = disabled\n },\n onFormReset() {\n send({ type: \"SET_VALUE\", value: initialContext.value })\n },\n })\n },\n },\n\n actions: {\n setValue(ctx, evt) {\n set.value(ctx, evt.value)\n },\n setHovered(ctx, evt) {\n ctx.hoveredValue = evt.value\n },\n setActive(ctx, evt) {\n ctx.activeValue = evt.value\n },\n setFocused(ctx, evt) {\n ctx.focusedValue = evt.value\n },\n syncInputElements(ctx) {\n const inputs = dom.getInputEls(ctx)\n inputs.forEach((input) => {\n input.checked = input.value === ctx.value\n })\n },\n setIndicatorTransition(ctx) {\n ctx.canIndicatorTransition = isString(ctx.value)\n },\n cleanupObserver(ctx) {\n ctx.indicatorCleanup?.()\n },\n syncIndicatorRect(ctx) {\n ctx.indicatorCleanup?.()\n\n if (!dom.getIndicatorEl(ctx)) return\n\n const value = ctx.value\n\n const radioEl = dom.getActiveRadioEl(ctx)\n\n if (value == null || !radioEl) {\n ctx.indicatorRect = {}\n return\n }\n\n ctx.indicatorCleanup = trackElementRect(radioEl, {\n getRect(el) {\n return dom.getOffsetRect(el)\n },\n onChange(rect) {\n ctx.indicatorRect = dom.resolveRect(rect)\n nextTick(() => {\n ctx.canIndicatorTransition = false\n })\n },\n })\n },\n dispatchChangeEvent(ctx) {\n const inputEls = dom.getInputEls(ctx)\n inputEls.forEach((inputEl) => {\n const checked = inputEl.value === ctx.value\n if (checked === inputEl.checked) return\n dispatchInputCheckedEvent(inputEl, { checked })\n })\n },\n },\n },\n )\n}\n\nconst invoke = {\n change: (ctx: MachineContext) => {\n if (ctx.value == null) return\n ctx.onValueChange?.({ value: ctx.value })\n },\n}\n\nconst set = {\n value: (ctx: MachineContext, value: string) => {\n if (isEqual(ctx.value, value)) return\n ctx.value = value\n invoke.change(ctx)\n },\n}\n","import { createProps } from \"@zag-js/types\"\nimport { createSplitProps } from \"@zag-js/utils\"\nimport type { ItemProps, UserDefinedContext } from \"./radio-group.types\"\n\nexport const props = createProps<UserDefinedContext>()([\n \"dir\",\n \"disabled\",\n \"form\",\n \"getRootNode\",\n \"id\",\n \"ids\",\n \"name\",\n \"onValueChange\",\n \"orientation\",\n \"readOnly\",\n \"value\",\n])\nexport const splitProps = createSplitProps<Partial<UserDefinedContext>>(props)\n\nexport const itemProps = createProps<ItemProps>()([\"value\", \"disabled\", \"invalid\"])\nexport const splitItemProps = createSplitProps<ItemProps>(itemProps)\n"],"mappings":"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","names":["import_dom_query","props","import_dom_query","ctx","import_utils"]}
package/dist/index.mjs CHANGED
@@ -1,424 +1,2 @@
1
- // src/radio-group.anatomy.ts
2
- import { createAnatomy } from "@zag-js/anatomy";
3
- var anatomy = createAnatomy("radio-group").parts(
4
- "root",
5
- "label",
6
- "item",
7
- "itemText",
8
- "itemControl",
9
- "indicator"
10
- );
11
- var parts = anatomy.build();
12
-
13
- // src/radio-group.connect.ts
14
- import { dataAttr, visuallyHiddenStyle } from "@zag-js/dom-query";
15
-
16
- // src/radio-group.dom.ts
17
- import { createScope, queryAll } from "@zag-js/dom-query";
18
- var dom = createScope({
19
- getRootId: (ctx) => ctx.ids?.root ?? `radio-group:${ctx.id}`,
20
- getLabelId: (ctx) => ctx.ids?.label ?? `radio-group:${ctx.id}:label`,
21
- getItemId: (ctx, value) => ctx.ids?.item?.(value) ?? `radio-group:${ctx.id}:radio:${value}`,
22
- getItemHiddenInputId: (ctx, value) => ctx.ids?.itemHiddenInput?.(value) ?? `radio-group:${ctx.id}:radio:input:${value}`,
23
- getItemControlId: (ctx, value) => ctx.ids?.itemControl?.(value) ?? `radio-group:${ctx.id}:radio:control:${value}`,
24
- getItemLabelId: (ctx, value) => ctx.ids?.itemLabel?.(value) ?? `radio-group:${ctx.id}:radio:label:${value}`,
25
- getIndicatorId: (ctx) => ctx.ids?.indicator ?? `radio-group:${ctx.id}:indicator`,
26
- getRootEl: (ctx) => dom.getById(ctx, dom.getRootId(ctx)),
27
- getItemHiddenInputEl: (ctx, value) => dom.getById(ctx, dom.getItemHiddenInputId(ctx, value)),
28
- getIndicatorEl: (ctx) => dom.getById(ctx, dom.getIndicatorId(ctx)),
29
- getFirstEnabledInputEl: (ctx) => dom.getRootEl(ctx)?.querySelector("input:not(:disabled)"),
30
- getFirstEnabledAndCheckedInputEl: (ctx) => dom.getRootEl(ctx)?.querySelector("input:not(:disabled):checked"),
31
- getInputEls: (ctx) => {
32
- const ownerId = CSS.escape(dom.getRootId(ctx));
33
- const selector = `input[type=radio][data-ownedby='${ownerId}']:not([disabled])`;
34
- return queryAll(dom.getRootEl(ctx), selector);
35
- },
36
- getActiveRadioEl: (ctx) => {
37
- if (!ctx.value)
38
- return;
39
- return dom.getById(ctx, dom.getItemId(ctx, ctx.value));
40
- },
41
- getOffsetRect: (el) => ({
42
- left: el?.offsetLeft ?? 0,
43
- top: el?.offsetTop ?? 0,
44
- width: el?.offsetWidth ?? 0,
45
- height: el?.offsetHeight ?? 0
46
- }),
47
- getRectById: (ctx, id) => {
48
- const radioEl = dom.getById(ctx, dom.getItemId(ctx, id));
49
- if (!radioEl)
50
- return;
51
- return dom.resolveRect(dom.getOffsetRect(radioEl));
52
- },
53
- resolveRect: (rect) => ({
54
- width: `${rect.width}px`,
55
- height: `${rect.height}px`,
56
- left: `${rect.left}px`,
57
- top: `${rect.top}px`
58
- })
59
- });
60
-
61
- // src/radio-group.connect.ts
62
- function connect(state, send, normalize) {
63
- const groupDisabled = state.context.isDisabled;
64
- const readOnly = state.context.readOnly;
65
- function getItemState(props2) {
66
- return {
67
- invalid: !!props2.invalid,
68
- disabled: !!props2.disabled || groupDisabled,
69
- checked: state.context.value === props2.value,
70
- focused: state.context.focusedValue === props2.value,
71
- hovered: state.context.hoveredValue === props2.value,
72
- active: state.context.activeValue === props2.value
73
- };
74
- }
75
- function getItemDataAttrs(props2) {
76
- const radioState = getItemState(props2);
77
- return {
78
- "data-focus": dataAttr(radioState.focused),
79
- "data-disabled": dataAttr(radioState.disabled),
80
- "dats-readonly": dataAttr(readOnly),
81
- "data-state": radioState.checked ? "checked" : "unchecked",
82
- "data-hover": dataAttr(radioState.hovered),
83
- "data-invalid": dataAttr(radioState.invalid),
84
- "data-orientation": state.context.orientation
85
- };
86
- }
87
- const focus = () => {
88
- const firstEnabledAndCheckedInput = dom.getFirstEnabledAndCheckedInputEl(state.context);
89
- if (firstEnabledAndCheckedInput) {
90
- firstEnabledAndCheckedInput.focus();
91
- return;
92
- }
93
- const firstEnabledInput = dom.getFirstEnabledInputEl(state.context);
94
- firstEnabledInput?.focus();
95
- };
96
- return {
97
- focus,
98
- value: state.context.value,
99
- setValue(value) {
100
- send({ type: "SET_VALUE", value, isTrusted: false });
101
- },
102
- clearValue() {
103
- send({ type: "SET_VALUE", value: null, isTrusted: false });
104
- },
105
- getItemState,
106
- rootProps: normalize.element({
107
- ...parts.root.attrs,
108
- role: "radiogroup",
109
- id: dom.getRootId(state.context),
110
- "aria-labelledby": dom.getLabelId(state.context),
111
- "data-orientation": state.context.orientation,
112
- "data-disabled": dataAttr(groupDisabled),
113
- "aria-orientation": state.context.orientation,
114
- dir: state.context.dir,
115
- style: {
116
- position: "relative"
117
- }
118
- }),
119
- labelProps: normalize.element({
120
- ...parts.label.attrs,
121
- dir: state.context.dir,
122
- "data-orientation": state.context.orientation,
123
- "data-disabled": dataAttr(groupDisabled),
124
- id: dom.getLabelId(state.context),
125
- onClick: focus
126
- }),
127
- getItemProps(props2) {
128
- const rootState = getItemState(props2);
129
- return normalize.label({
130
- ...parts.item.attrs,
131
- dir: state.context.dir,
132
- id: dom.getItemId(state.context, props2.value),
133
- htmlFor: dom.getItemHiddenInputId(state.context, props2.value),
134
- ...getItemDataAttrs(props2),
135
- onPointerMove() {
136
- if (rootState.disabled)
137
- return;
138
- send({ type: "SET_HOVERED", value: props2.value, hovered: true });
139
- },
140
- onPointerLeave() {
141
- if (rootState.disabled)
142
- return;
143
- send({ type: "SET_HOVERED", value: null });
144
- },
145
- onPointerDown(event) {
146
- if (rootState.disabled)
147
- return;
148
- if (rootState.focused && event.pointerType === "mouse") {
149
- event.preventDefault();
150
- }
151
- send({ type: "SET_ACTIVE", value: props2.value, active: true });
152
- },
153
- onPointerUp() {
154
- if (rootState.disabled)
155
- return;
156
- send({ type: "SET_ACTIVE", value: null });
157
- }
158
- });
159
- },
160
- getItemTextProps(props2) {
161
- return normalize.element({
162
- ...parts.itemText.attrs,
163
- dir: state.context.dir,
164
- id: dom.getItemLabelId(state.context, props2.value),
165
- ...getItemDataAttrs(props2)
166
- });
167
- },
168
- getItemControlProps(props2) {
169
- const controlState = getItemState(props2);
170
- return normalize.element({
171
- ...parts.itemControl.attrs,
172
- dir: state.context.dir,
173
- id: dom.getItemControlId(state.context, props2.value),
174
- "data-active": dataAttr(controlState.active),
175
- "aria-hidden": true,
176
- ...getItemDataAttrs(props2)
177
- });
178
- },
179
- getItemHiddenInputProps(props2) {
180
- const inputState = getItemState(props2);
181
- return normalize.input({
182
- "data-ownedby": dom.getRootId(state.context),
183
- id: dom.getItemHiddenInputId(state.context, props2.value),
184
- type: "radio",
185
- name: state.context.name || state.context.id,
186
- form: state.context.form,
187
- value: props2.value,
188
- onChange(event) {
189
- if (readOnly) {
190
- event.preventDefault();
191
- return;
192
- }
193
- if (event.target.checked) {
194
- send({ type: "SET_VALUE", value: props2.value, isTrusted: true });
195
- }
196
- },
197
- onBlur() {
198
- send({ type: "SET_FOCUSED", value: null });
199
- },
200
- onFocus() {
201
- send({ type: "SET_FOCUSED", value: props2.value, focused: true });
202
- },
203
- onKeyDown(event) {
204
- if (event.defaultPrevented)
205
- return;
206
- if (event.key === " ") {
207
- send({ type: "SET_ACTIVE", value: props2.value, active: true });
208
- }
209
- },
210
- onKeyUp(event) {
211
- if (event.defaultPrevented)
212
- return;
213
- if (event.key === " ") {
214
- send({ type: "SET_ACTIVE", value: null });
215
- }
216
- },
217
- disabled: inputState.disabled,
218
- defaultChecked: inputState.checked,
219
- style: visuallyHiddenStyle
220
- });
221
- },
222
- indicatorProps: normalize.element({
223
- id: dom.getIndicatorId(state.context),
224
- ...parts.indicator.attrs,
225
- dir: state.context.dir,
226
- hidden: state.context.value == null,
227
- "data-disabled": dataAttr(groupDisabled),
228
- "data-orientation": state.context.orientation,
229
- style: {
230
- "--transition-property": "left, top, width, height",
231
- "--left": state.context.indicatorRect?.left,
232
- "--top": state.context.indicatorRect?.top,
233
- "--width": state.context.indicatorRect?.width,
234
- "--height": state.context.indicatorRect?.height,
235
- position: "absolute",
236
- willChange: "var(--transition-property)",
237
- transitionProperty: "var(--transition-property)",
238
- transitionDuration: state.context.canIndicatorTransition ? "var(--transition-duration, 150ms)" : "0ms",
239
- transitionTimingFunction: "var(--transition-timing-function)",
240
- [state.context.orientation === "horizontal" ? "left" : "top"]: state.context.orientation === "horizontal" ? "var(--left)" : "var(--top)"
241
- }
242
- })
243
- };
244
- }
245
-
246
- // src/radio-group.machine.ts
247
- import { createMachine, guards } from "@zag-js/core";
248
- import { nextTick } from "@zag-js/dom-query";
249
- import { trackElementRect } from "@zag-js/element-rect";
250
- import { dispatchInputCheckedEvent, trackFormControl } from "@zag-js/form-utils";
251
- import { compact, isEqual, isString } from "@zag-js/utils";
252
- var { not } = guards;
253
- function machine(userContext) {
254
- const ctx = compact(userContext);
255
- return createMachine(
256
- {
257
- id: "radio",
258
- initial: "idle",
259
- context: {
260
- value: null,
261
- activeValue: null,
262
- focusedValue: null,
263
- hoveredValue: null,
264
- disabled: false,
265
- orientation: "vertical",
266
- ...ctx,
267
- indicatorRect: {},
268
- canIndicatorTransition: false,
269
- fieldsetDisabled: false
270
- },
271
- computed: {
272
- isDisabled: (ctx2) => !!ctx2.disabled || ctx2.fieldsetDisabled
273
- },
274
- entry: ["syncIndicatorRect"],
275
- exit: ["cleanupObserver"],
276
- activities: ["trackFormControlState"],
277
- watch: {
278
- value: ["setIndicatorTransition", "syncIndicatorRect", "syncInputElements"]
279
- },
280
- on: {
281
- SET_VALUE: [
282
- {
283
- guard: not("isTrusted"),
284
- actions: ["setValue", "dispatchChangeEvent"]
285
- },
286
- {
287
- actions: ["setValue"]
288
- }
289
- ],
290
- SET_HOVERED: {
291
- actions: "setHovered"
292
- },
293
- SET_ACTIVE: {
294
- actions: "setActive"
295
- },
296
- SET_FOCUSED: {
297
- actions: "setFocused"
298
- }
299
- },
300
- states: {
301
- idle: {}
302
- }
303
- },
304
- {
305
- guards: {
306
- isTrusted: (_ctx, evt) => !!evt.isTrusted
307
- },
308
- activities: {
309
- trackFormControlState(ctx2, _evt, { send, initialContext }) {
310
- return trackFormControl(dom.getRootEl(ctx2), {
311
- onFieldsetDisabledChange(disabled) {
312
- ctx2.fieldsetDisabled = disabled;
313
- },
314
- onFormReset() {
315
- send({ type: "SET_VALUE", value: initialContext.value });
316
- }
317
- });
318
- }
319
- },
320
- actions: {
321
- setValue(ctx2, evt) {
322
- set.value(ctx2, evt.value);
323
- },
324
- setHovered(ctx2, evt) {
325
- ctx2.hoveredValue = evt.value;
326
- },
327
- setActive(ctx2, evt) {
328
- ctx2.activeValue = evt.value;
329
- },
330
- setFocused(ctx2, evt) {
331
- ctx2.focusedValue = evt.value;
332
- },
333
- syncInputElements(ctx2) {
334
- const inputs = dom.getInputEls(ctx2);
335
- inputs.forEach((input) => {
336
- input.checked = input.value === ctx2.value;
337
- });
338
- },
339
- setIndicatorTransition(ctx2) {
340
- ctx2.canIndicatorTransition = isString(ctx2.value);
341
- },
342
- cleanupObserver(ctx2) {
343
- ctx2.indicatorCleanup?.();
344
- },
345
- syncIndicatorRect(ctx2) {
346
- ctx2.indicatorCleanup?.();
347
- if (!dom.getIndicatorEl(ctx2))
348
- return;
349
- const value = ctx2.value;
350
- const radioEl = dom.getActiveRadioEl(ctx2);
351
- if (value == null || !radioEl) {
352
- ctx2.indicatorRect = {};
353
- return;
354
- }
355
- ctx2.indicatorCleanup = trackElementRect(radioEl, {
356
- getRect(el) {
357
- return dom.getOffsetRect(el);
358
- },
359
- onChange(rect) {
360
- ctx2.indicatorRect = dom.resolveRect(rect);
361
- nextTick(() => {
362
- ctx2.canIndicatorTransition = false;
363
- });
364
- }
365
- });
366
- },
367
- dispatchChangeEvent(ctx2) {
368
- const inputEls = dom.getInputEls(ctx2);
369
- inputEls.forEach((inputEl) => {
370
- const checked = inputEl.value === ctx2.value;
371
- if (checked === inputEl.checked)
372
- return;
373
- dispatchInputCheckedEvent(inputEl, { checked });
374
- });
375
- }
376
- }
377
- }
378
- );
379
- }
380
- var invoke = {
381
- change: (ctx) => {
382
- if (ctx.value == null)
383
- return;
384
- ctx.onValueChange?.({ value: ctx.value });
385
- }
386
- };
387
- var set = {
388
- value: (ctx, value) => {
389
- if (isEqual(ctx.value, value))
390
- return;
391
- ctx.value = value;
392
- invoke.change(ctx);
393
- }
394
- };
395
-
396
- // src/radio-group.props.ts
397
- import { createProps } from "@zag-js/types";
398
- import { createSplitProps } from "@zag-js/utils";
399
- var props = createProps()([
400
- "dir",
401
- "disabled",
402
- "form",
403
- "getRootNode",
404
- "id",
405
- "ids",
406
- "name",
407
- "onValueChange",
408
- "orientation",
409
- "readOnly",
410
- "value"
411
- ]);
412
- var splitProps = createSplitProps(props);
413
- var itemProps = createProps()(["value", "disabled", "invalid"]);
414
- var splitItemProps = createSplitProps(itemProps);
415
- export {
416
- anatomy,
417
- connect,
418
- itemProps,
419
- machine,
420
- props,
421
- splitItemProps,
422
- splitProps
423
- };
1
+ import{createAnatomy}from"@zag-js/anatomy";var anatomy=createAnatomy("radio-group").parts("root","label","item","itemText","itemControl","indicator");var parts=anatomy.build();import{dataAttr,visuallyHiddenStyle}from"@zag-js/dom-query";import{createScope,queryAll}from"@zag-js/dom-query";var dom=createScope({getRootId:ctx=>ctx.ids?.root??`radio-group:${ctx.id}`,getLabelId:ctx=>ctx.ids?.label??`radio-group:${ctx.id}:label`,getItemId:(ctx,value)=>ctx.ids?.item?.(value)??`radio-group:${ctx.id}:radio:${value}`,getItemHiddenInputId:(ctx,value)=>ctx.ids?.itemHiddenInput?.(value)??`radio-group:${ctx.id}:radio:input:${value}`,getItemControlId:(ctx,value)=>ctx.ids?.itemControl?.(value)??`radio-group:${ctx.id}:radio:control:${value}`,getItemLabelId:(ctx,value)=>ctx.ids?.itemLabel?.(value)??`radio-group:${ctx.id}:radio:label:${value}`,getIndicatorId:ctx=>ctx.ids?.indicator??`radio-group:${ctx.id}:indicator`,getRootEl:ctx=>dom.getById(ctx,dom.getRootId(ctx)),getItemHiddenInputEl:(ctx,value)=>dom.getById(ctx,dom.getItemHiddenInputId(ctx,value)),getIndicatorEl:ctx=>dom.getById(ctx,dom.getIndicatorId(ctx)),getFirstEnabledInputEl:ctx=>dom.getRootEl(ctx)?.querySelector("input:not(:disabled)"),getFirstEnabledAndCheckedInputEl:ctx=>dom.getRootEl(ctx)?.querySelector("input:not(:disabled):checked"),getInputEls:ctx=>{const ownerId=CSS.escape(dom.getRootId(ctx));const selector=`input[type=radio][data-ownedby='${ownerId}']:not([disabled])`;return queryAll(dom.getRootEl(ctx),selector)},getActiveRadioEl:ctx=>{if(!ctx.value)return;return dom.getById(ctx,dom.getItemId(ctx,ctx.value))},getOffsetRect:el=>({left:el?.offsetLeft??0,top:el?.offsetTop??0,width:el?.offsetWidth??0,height:el?.offsetHeight??0}),getRectById:(ctx,id)=>{const radioEl=dom.getById(ctx,dom.getItemId(ctx,id));if(!radioEl)return;return dom.resolveRect(dom.getOffsetRect(radioEl))},resolveRect:rect=>({width:`${rect.width}px`,height:`${rect.height}px`,left:`${rect.left}px`,top:`${rect.top}px`})});function connect(state,send,normalize){const groupDisabled=state.context.isDisabled;const readOnly=state.context.readOnly;function getItemState(props2){return{invalid:!!props2.invalid,disabled:!!props2.disabled||groupDisabled,checked:state.context.value===props2.value,focused:state.context.focusedValue===props2.value,hovered:state.context.hoveredValue===props2.value,active:state.context.activeValue===props2.value}}function getItemDataAttrs(props2){const radioState=getItemState(props2);return{"data-focus":dataAttr(radioState.focused),"data-disabled":dataAttr(radioState.disabled),"dats-readonly":dataAttr(readOnly),"data-state":radioState.checked?"checked":"unchecked","data-hover":dataAttr(radioState.hovered),"data-invalid":dataAttr(radioState.invalid),"data-orientation":state.context.orientation}}const focus=()=>{const firstEnabledAndCheckedInput=dom.getFirstEnabledAndCheckedInputEl(state.context);if(firstEnabledAndCheckedInput){firstEnabledAndCheckedInput.focus();return}const firstEnabledInput=dom.getFirstEnabledInputEl(state.context);firstEnabledInput?.focus()};return{focus,value:state.context.value,setValue(value){send({type:"SET_VALUE",value,isTrusted:false})},clearValue(){send({type:"SET_VALUE",value:null,isTrusted:false})},getItemState,rootProps:normalize.element({...parts.root.attrs,role:"radiogroup",id:dom.getRootId(state.context),"aria-labelledby":dom.getLabelId(state.context),"data-orientation":state.context.orientation,"data-disabled":dataAttr(groupDisabled),"aria-orientation":state.context.orientation,dir:state.context.dir,style:{position:"relative"}}),labelProps:normalize.element({...parts.label.attrs,dir:state.context.dir,"data-orientation":state.context.orientation,"data-disabled":dataAttr(groupDisabled),id:dom.getLabelId(state.context),onClick:focus}),getItemProps(props2){const itemState=getItemState(props2);return normalize.label({...parts.item.attrs,dir:state.context.dir,id:dom.getItemId(state.context,props2.value),htmlFor:dom.getItemHiddenInputId(state.context,props2.value),...getItemDataAttrs(props2),onPointerMove(){if(itemState.disabled)return;if(itemState.hovered)return;send({type:"SET_HOVERED",value:props2.value,hovered:true})},onPointerLeave(){if(itemState.disabled)return;send({type:"SET_HOVERED",value:null})},onPointerDown(event){if(itemState.disabled)return;if(itemState.focused&&event.pointerType==="mouse"){event.preventDefault()}send({type:"SET_ACTIVE",value:props2.value,active:true})},onPointerUp(){if(itemState.disabled)return;send({type:"SET_ACTIVE",value:null})}})},getItemTextProps(props2){return normalize.element({...parts.itemText.attrs,dir:state.context.dir,id:dom.getItemLabelId(state.context,props2.value),...getItemDataAttrs(props2)})},getItemControlProps(props2){const controlState=getItemState(props2);return normalize.element({...parts.itemControl.attrs,dir:state.context.dir,id:dom.getItemControlId(state.context,props2.value),"data-active":dataAttr(controlState.active),"aria-hidden":true,...getItemDataAttrs(props2)})},getItemHiddenInputProps(props2){const inputState=getItemState(props2);return normalize.input({"data-ownedby":dom.getRootId(state.context),id:dom.getItemHiddenInputId(state.context,props2.value),type:"radio",name:state.context.name||state.context.id,form:state.context.form,value:props2.value,onChange(event){if(readOnly){event.preventDefault();return}if(event.target.checked){send({type:"SET_VALUE",value:props2.value,isTrusted:true})}},onBlur(){send({type:"SET_FOCUSED",value:null})},onFocus(){send({type:"SET_FOCUSED",value:props2.value,focused:true})},onKeyDown(event){if(event.defaultPrevented)return;if(event.key===" "){send({type:"SET_ACTIVE",value:props2.value,active:true})}},onKeyUp(event){if(event.defaultPrevented)return;if(event.key===" "){send({type:"SET_ACTIVE",value:null})}},disabled:inputState.disabled,defaultChecked:inputState.checked,style:visuallyHiddenStyle})},indicatorProps:normalize.element({id:dom.getIndicatorId(state.context),...parts.indicator.attrs,dir:state.context.dir,hidden:state.context.value==null,"data-disabled":dataAttr(groupDisabled),"data-orientation":state.context.orientation,style:{"--transition-property":"left, top, width, height","--left":state.context.indicatorRect?.left,"--top":state.context.indicatorRect?.top,"--width":state.context.indicatorRect?.width,"--height":state.context.indicatorRect?.height,position:"absolute",willChange:"var(--transition-property)",transitionProperty:"var(--transition-property)",transitionDuration:state.context.canIndicatorTransition?"var(--transition-duration, 150ms)":"0ms",transitionTimingFunction:"var(--transition-timing-function)",[state.context.orientation==="horizontal"?"left":"top"]:state.context.orientation==="horizontal"?"var(--left)":"var(--top)"}})}}import{createMachine,guards}from"@zag-js/core";import{nextTick}from"@zag-js/dom-query";import{trackElementRect}from"@zag-js/element-rect";import{dispatchInputCheckedEvent,trackFormControl}from"@zag-js/form-utils";import{compact,isEqual,isString}from"@zag-js/utils";var{not}=guards;function machine(userContext){const ctx=compact(userContext);return createMachine({id:"radio",initial:"idle",context:{value:null,activeValue:null,focusedValue:null,hoveredValue:null,disabled:false,orientation:"vertical",...ctx,indicatorRect:{},canIndicatorTransition:false,fieldsetDisabled:false},computed:{isDisabled:ctx2=>!!ctx2.disabled||ctx2.fieldsetDisabled},entry:["syncIndicatorRect"],exit:["cleanupObserver"],activities:["trackFormControlState"],watch:{value:["setIndicatorTransition","syncIndicatorRect","syncInputElements"]},on:{SET_VALUE:[{guard:not("isTrusted"),actions:["setValue","dispatchChangeEvent"]},{actions:["setValue"]}],SET_HOVERED:{actions:"setHovered"},SET_ACTIVE:{actions:"setActive"},SET_FOCUSED:{actions:"setFocused"}},states:{idle:{}}},{guards:{isTrusted:(_ctx,evt)=>!!evt.isTrusted},activities:{trackFormControlState(ctx2,_evt,{send,initialContext}){return trackFormControl(dom.getRootEl(ctx2),{onFieldsetDisabledChange(disabled){ctx2.fieldsetDisabled=disabled},onFormReset(){send({type:"SET_VALUE",value:initialContext.value})}})}},actions:{setValue(ctx2,evt){set.value(ctx2,evt.value)},setHovered(ctx2,evt){ctx2.hoveredValue=evt.value},setActive(ctx2,evt){ctx2.activeValue=evt.value},setFocused(ctx2,evt){ctx2.focusedValue=evt.value},syncInputElements(ctx2){const inputs=dom.getInputEls(ctx2);inputs.forEach(input=>{input.checked=input.value===ctx2.value})},setIndicatorTransition(ctx2){ctx2.canIndicatorTransition=isString(ctx2.value)},cleanupObserver(ctx2){ctx2.indicatorCleanup?.()},syncIndicatorRect(ctx2){ctx2.indicatorCleanup?.();if(!dom.getIndicatorEl(ctx2))return;const value=ctx2.value;const radioEl=dom.getActiveRadioEl(ctx2);if(value==null||!radioEl){ctx2.indicatorRect={};return}ctx2.indicatorCleanup=trackElementRect(radioEl,{getRect(el){return dom.getOffsetRect(el)},onChange(rect){ctx2.indicatorRect=dom.resolveRect(rect);nextTick(()=>{ctx2.canIndicatorTransition=false})}})},dispatchChangeEvent(ctx2){const inputEls=dom.getInputEls(ctx2);inputEls.forEach(inputEl=>{const checked=inputEl.value===ctx2.value;if(checked===inputEl.checked)return;dispatchInputCheckedEvent(inputEl,{checked})})}}})}var invoke={change:ctx=>{if(ctx.value==null)return;ctx.onValueChange?.({value:ctx.value})}};var set={value:(ctx,value)=>{if(isEqual(ctx.value,value))return;ctx.value=value;invoke.change(ctx)}};import{createProps}from"@zag-js/types";import{createSplitProps}from"@zag-js/utils";var props=createProps()(["dir","disabled","form","getRootNode","id","ids","name","onValueChange","orientation","readOnly","value"]);var splitProps=createSplitProps(props);var itemProps=createProps()(["value","disabled","invalid"]);var splitItemProps=createSplitProps(itemProps);export{anatomy,connect,itemProps,machine,props,splitItemProps,splitProps};
424
2
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/radio-group.anatomy.ts","../src/radio-group.connect.ts","../src/radio-group.dom.ts","../src/radio-group.machine.ts","../src/radio-group.props.ts"],"sourcesContent":["import { createAnatomy } from \"@zag-js/anatomy\"\n\nexport const anatomy = createAnatomy(\"radio-group\").parts(\n \"root\",\n \"label\",\n \"item\",\n \"itemText\",\n \"itemControl\",\n \"indicator\",\n)\n\nexport const parts = anatomy.build()\n","import { dataAttr, visuallyHiddenStyle } from \"@zag-js/dom-query\"\nimport type { NormalizeProps, PropTypes } from \"@zag-js/types\"\nimport { parts } from \"./radio-group.anatomy\"\nimport { dom } from \"./radio-group.dom\"\nimport type { ItemProps, ItemState, MachineApi, Send, State } from \"./radio-group.types\"\n\nexport function connect<T extends PropTypes>(state: State, send: Send, normalize: NormalizeProps<T>): MachineApi<T> {\n const groupDisabled = state.context.isDisabled\n const readOnly = state.context.readOnly\n\n function getItemState(props: ItemProps): ItemState {\n return {\n invalid: !!props.invalid,\n disabled: !!props.disabled || groupDisabled,\n checked: state.context.value === props.value,\n focused: state.context.focusedValue === props.value,\n hovered: state.context.hoveredValue === props.value,\n active: state.context.activeValue === props.value,\n }\n }\n\n function getItemDataAttrs<T extends ItemProps>(props: T) {\n const radioState = getItemState(props)\n return {\n \"data-focus\": dataAttr(radioState.focused),\n \"data-disabled\": dataAttr(radioState.disabled),\n \"dats-readonly\": dataAttr(readOnly),\n \"data-state\": radioState.checked ? \"checked\" : \"unchecked\",\n \"data-hover\": dataAttr(radioState.hovered),\n \"data-invalid\": dataAttr(radioState.invalid),\n \"data-orientation\": state.context.orientation,\n }\n }\n\n const focus = () => {\n const firstEnabledAndCheckedInput = dom.getFirstEnabledAndCheckedInputEl(state.context)\n\n if (firstEnabledAndCheckedInput) {\n firstEnabledAndCheckedInput.focus()\n return\n }\n\n const firstEnabledInput = dom.getFirstEnabledInputEl(state.context)\n firstEnabledInput?.focus()\n }\n\n return {\n focus,\n value: state.context.value,\n setValue(value) {\n send({ type: \"SET_VALUE\", value, isTrusted: false })\n },\n clearValue() {\n send({ type: \"SET_VALUE\", value: null, isTrusted: false })\n },\n getItemState,\n\n rootProps: normalize.element({\n ...parts.root.attrs,\n role: \"radiogroup\",\n id: dom.getRootId(state.context),\n \"aria-labelledby\": dom.getLabelId(state.context),\n \"data-orientation\": state.context.orientation,\n \"data-disabled\": dataAttr(groupDisabled),\n \"aria-orientation\": state.context.orientation,\n dir: state.context.dir,\n style: {\n position: \"relative\",\n },\n }),\n\n labelProps: normalize.element({\n ...parts.label.attrs,\n dir: state.context.dir,\n \"data-orientation\": state.context.orientation,\n \"data-disabled\": dataAttr(groupDisabled),\n id: dom.getLabelId(state.context),\n onClick: focus,\n }),\n\n getItemProps(props: ItemProps) {\n const rootState = getItemState(props)\n\n return normalize.label({\n ...parts.item.attrs,\n dir: state.context.dir,\n id: dom.getItemId(state.context, props.value),\n htmlFor: dom.getItemHiddenInputId(state.context, props.value),\n ...getItemDataAttrs(props),\n onPointerMove() {\n if (rootState.disabled) return\n send({ type: \"SET_HOVERED\", value: props.value, hovered: true })\n },\n onPointerLeave() {\n if (rootState.disabled) return\n send({ type: \"SET_HOVERED\", value: null })\n },\n onPointerDown(event) {\n if (rootState.disabled) return\n // On pointerdown, the input blurs and returns focus to the `body`,\n // we need to prevent this.\n if (rootState.focused && event.pointerType === \"mouse\") {\n event.preventDefault()\n }\n send({ type: \"SET_ACTIVE\", value: props.value, active: true })\n },\n onPointerUp() {\n if (rootState.disabled) return\n send({ type: \"SET_ACTIVE\", value: null })\n },\n })\n },\n\n getItemTextProps(props: ItemProps) {\n return normalize.element({\n ...parts.itemText.attrs,\n dir: state.context.dir,\n id: dom.getItemLabelId(state.context, props.value),\n ...getItemDataAttrs(props),\n })\n },\n\n getItemControlProps(props: ItemProps) {\n const controlState = getItemState(props)\n\n return normalize.element({\n ...parts.itemControl.attrs,\n dir: state.context.dir,\n id: dom.getItemControlId(state.context, props.value),\n \"data-active\": dataAttr(controlState.active),\n \"aria-hidden\": true,\n ...getItemDataAttrs(props),\n })\n },\n\n getItemHiddenInputProps(props: ItemProps) {\n const inputState = getItemState(props)\n\n return normalize.input({\n \"data-ownedby\": dom.getRootId(state.context),\n id: dom.getItemHiddenInputId(state.context, props.value),\n type: \"radio\",\n name: state.context.name || state.context.id,\n form: state.context.form,\n value: props.value,\n onChange(event) {\n if (readOnly) {\n event.preventDefault()\n return\n }\n\n if (event.target.checked) {\n send({ type: \"SET_VALUE\", value: props.value, isTrusted: true })\n }\n },\n onBlur() {\n send({ type: \"SET_FOCUSED\", value: null })\n },\n onFocus() {\n send({ type: \"SET_FOCUSED\", value: props.value, focused: true })\n },\n onKeyDown(event) {\n if (event.defaultPrevented) return\n if (event.key === \" \") {\n send({ type: \"SET_ACTIVE\", value: props.value, active: true })\n }\n },\n onKeyUp(event) {\n if (event.defaultPrevented) return\n if (event.key === \" \") {\n send({ type: \"SET_ACTIVE\", value: null })\n }\n },\n disabled: inputState.disabled,\n defaultChecked: inputState.checked,\n style: visuallyHiddenStyle,\n })\n },\n\n indicatorProps: normalize.element({\n id: dom.getIndicatorId(state.context),\n ...parts.indicator.attrs,\n dir: state.context.dir,\n hidden: state.context.value == null,\n \"data-disabled\": dataAttr(groupDisabled),\n \"data-orientation\": state.context.orientation,\n style: {\n \"--transition-property\": \"left, top, width, height\",\n \"--left\": state.context.indicatorRect?.left,\n \"--top\": state.context.indicatorRect?.top,\n \"--width\": state.context.indicatorRect?.width,\n \"--height\": state.context.indicatorRect?.height,\n position: \"absolute\",\n willChange: \"var(--transition-property)\",\n transitionProperty: \"var(--transition-property)\",\n transitionDuration: state.context.canIndicatorTransition ? \"var(--transition-duration, 150ms)\" : \"0ms\",\n transitionTimingFunction: \"var(--transition-timing-function)\",\n [state.context.orientation === \"horizontal\" ? \"left\" : \"top\"]:\n state.context.orientation === \"horizontal\" ? \"var(--left)\" : \"var(--top)\",\n },\n }),\n }\n}\n","import { createScope, queryAll } from \"@zag-js/dom-query\"\nimport type { MachineContext as Ctx } from \"./radio-group.types\"\n\nexport const dom = createScope({\n getRootId: (ctx: Ctx) => ctx.ids?.root ?? `radio-group:${ctx.id}`,\n getLabelId: (ctx: Ctx) => ctx.ids?.label ?? `radio-group:${ctx.id}:label`,\n getItemId: (ctx: Ctx, value: string) => ctx.ids?.item?.(value) ?? `radio-group:${ctx.id}:radio:${value}`,\n getItemHiddenInputId: (ctx: Ctx, value: string) =>\n ctx.ids?.itemHiddenInput?.(value) ?? `radio-group:${ctx.id}:radio:input:${value}`,\n getItemControlId: (ctx: Ctx, value: string) =>\n ctx.ids?.itemControl?.(value) ?? `radio-group:${ctx.id}:radio:control:${value}`,\n getItemLabelId: (ctx: Ctx, value: string) =>\n ctx.ids?.itemLabel?.(value) ?? `radio-group:${ctx.id}:radio:label:${value}`,\n getIndicatorId: (ctx: Ctx) => ctx.ids?.indicator ?? `radio-group:${ctx.id}:indicator`,\n\n getRootEl: (ctx: Ctx) => dom.getById(ctx, dom.getRootId(ctx)),\n getItemHiddenInputEl: (ctx: Ctx, value: string) =>\n dom.getById<HTMLInputElement>(ctx, dom.getItemHiddenInputId(ctx, value)),\n getIndicatorEl: (ctx: Ctx) => dom.getById(ctx, dom.getIndicatorId(ctx)),\n\n getFirstEnabledInputEl: (ctx: Ctx) => dom.getRootEl(ctx)?.querySelector<HTMLInputElement>(\"input:not(:disabled)\"),\n getFirstEnabledAndCheckedInputEl: (ctx: Ctx) =>\n dom.getRootEl(ctx)?.querySelector<HTMLInputElement>(\"input:not(:disabled):checked\"),\n\n getInputEls: (ctx: Ctx) => {\n const ownerId = CSS.escape(dom.getRootId(ctx))\n const selector = `input[type=radio][data-ownedby='${ownerId}']:not([disabled])`\n return queryAll<HTMLInputElement>(dom.getRootEl(ctx), selector)\n },\n\n getActiveRadioEl: (ctx: Ctx) => {\n if (!ctx.value) return\n return dom.getById(ctx, dom.getItemId(ctx, ctx.value))\n },\n\n getOffsetRect: (el: HTMLElement | undefined) => ({\n left: el?.offsetLeft ?? 0,\n top: el?.offsetTop ?? 0,\n width: el?.offsetWidth ?? 0,\n height: el?.offsetHeight ?? 0,\n }),\n\n getRectById: (ctx: Ctx, id: string) => {\n const radioEl = dom.getById(ctx, dom.getItemId(ctx, id))\n if (!radioEl) return\n return dom.resolveRect(dom.getOffsetRect(radioEl))\n },\n\n resolveRect: (rect: Record<\"width\" | \"height\" | \"left\" | \"top\", number>) => ({\n width: `${rect.width}px`,\n height: `${rect.height}px`,\n left: `${rect.left}px`,\n top: `${rect.top}px`,\n }),\n})\n","import { createMachine, guards } from \"@zag-js/core\"\nimport { nextTick } from \"@zag-js/dom-query\"\nimport { trackElementRect } from \"@zag-js/element-rect\"\nimport { dispatchInputCheckedEvent, trackFormControl } from \"@zag-js/form-utils\"\nimport { compact, isEqual, isString } from \"@zag-js/utils\"\nimport { dom } from \"./radio-group.dom\"\nimport type { MachineContext, MachineState, UserDefinedContext } from \"./radio-group.types\"\n\nconst { not } = guards\n\nexport function machine(userContext: UserDefinedContext) {\n const ctx = compact(userContext)\n return createMachine<MachineContext, MachineState>(\n {\n id: \"radio\",\n initial: \"idle\",\n context: {\n value: null,\n activeValue: null,\n focusedValue: null,\n hoveredValue: null,\n disabled: false,\n orientation: \"vertical\",\n ...ctx,\n indicatorRect: {},\n canIndicatorTransition: false,\n fieldsetDisabled: false,\n },\n\n computed: {\n isDisabled: (ctx) => !!ctx.disabled || ctx.fieldsetDisabled,\n },\n\n entry: [\"syncIndicatorRect\"],\n\n exit: [\"cleanupObserver\"],\n\n activities: [\"trackFormControlState\"],\n\n watch: {\n value: [\"setIndicatorTransition\", \"syncIndicatorRect\", \"syncInputElements\"],\n },\n\n on: {\n SET_VALUE: [\n {\n guard: not(\"isTrusted\"),\n actions: [\"setValue\", \"dispatchChangeEvent\"],\n },\n {\n actions: [\"setValue\"],\n },\n ],\n SET_HOVERED: {\n actions: \"setHovered\",\n },\n SET_ACTIVE: {\n actions: \"setActive\",\n },\n SET_FOCUSED: {\n actions: \"setFocused\",\n },\n },\n\n states: {\n idle: {},\n },\n },\n\n {\n guards: {\n isTrusted: (_ctx, evt) => !!evt.isTrusted,\n },\n activities: {\n trackFormControlState(ctx, _evt, { send, initialContext }) {\n return trackFormControl(dom.getRootEl(ctx), {\n onFieldsetDisabledChange(disabled) {\n ctx.fieldsetDisabled = disabled\n },\n onFormReset() {\n send({ type: \"SET_VALUE\", value: initialContext.value })\n },\n })\n },\n },\n\n actions: {\n setValue(ctx, evt) {\n set.value(ctx, evt.value)\n },\n setHovered(ctx, evt) {\n ctx.hoveredValue = evt.value\n },\n setActive(ctx, evt) {\n ctx.activeValue = evt.value\n },\n setFocused(ctx, evt) {\n ctx.focusedValue = evt.value\n },\n syncInputElements(ctx) {\n const inputs = dom.getInputEls(ctx)\n inputs.forEach((input) => {\n input.checked = input.value === ctx.value\n })\n },\n setIndicatorTransition(ctx) {\n ctx.canIndicatorTransition = isString(ctx.value)\n },\n cleanupObserver(ctx) {\n ctx.indicatorCleanup?.()\n },\n syncIndicatorRect(ctx) {\n ctx.indicatorCleanup?.()\n\n if (!dom.getIndicatorEl(ctx)) return\n\n const value = ctx.value\n\n const radioEl = dom.getActiveRadioEl(ctx)\n\n if (value == null || !radioEl) {\n ctx.indicatorRect = {}\n return\n }\n\n ctx.indicatorCleanup = trackElementRect(radioEl, {\n getRect(el) {\n return dom.getOffsetRect(el)\n },\n onChange(rect) {\n ctx.indicatorRect = dom.resolveRect(rect)\n nextTick(() => {\n ctx.canIndicatorTransition = false\n })\n },\n })\n },\n dispatchChangeEvent(ctx) {\n const inputEls = dom.getInputEls(ctx)\n inputEls.forEach((inputEl) => {\n const checked = inputEl.value === ctx.value\n if (checked === inputEl.checked) return\n dispatchInputCheckedEvent(inputEl, { checked })\n })\n },\n },\n },\n )\n}\n\nconst invoke = {\n change: (ctx: MachineContext) => {\n if (ctx.value == null) return\n ctx.onValueChange?.({ value: ctx.value })\n },\n}\n\nconst set = {\n value: (ctx: MachineContext, value: string) => {\n if (isEqual(ctx.value, value)) return\n ctx.value = value\n invoke.change(ctx)\n },\n}\n","import { createProps } from \"@zag-js/types\"\nimport { createSplitProps } from \"@zag-js/utils\"\nimport type { ItemProps, UserDefinedContext } from \"./radio-group.types\"\n\nexport const props = createProps<UserDefinedContext>()([\n \"dir\",\n \"disabled\",\n \"form\",\n \"getRootNode\",\n \"id\",\n \"ids\",\n \"name\",\n \"onValueChange\",\n \"orientation\",\n \"readOnly\",\n \"value\",\n])\nexport const splitProps = createSplitProps<Partial<UserDefinedContext>>(props)\n\nexport const itemProps = createProps<ItemProps>()([\"value\", \"disabled\", \"invalid\"])\nexport const splitItemProps = createSplitProps<ItemProps>(itemProps)\n"],"mappings":"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","names":["props","ctx"]}
1
+ {"version":3,"sources":["../src/radio-group.anatomy.ts","../src/radio-group.connect.ts","../src/radio-group.dom.ts","../src/radio-group.machine.ts","../src/radio-group.props.ts"],"sourcesContent":["import { createAnatomy } from \"@zag-js/anatomy\"\n\nexport const anatomy = createAnatomy(\"radio-group\").parts(\n \"root\",\n \"label\",\n \"item\",\n \"itemText\",\n \"itemControl\",\n \"indicator\",\n)\n\nexport const parts = anatomy.build()\n","import { dataAttr, visuallyHiddenStyle } from \"@zag-js/dom-query\"\nimport type { NormalizeProps, PropTypes } from \"@zag-js/types\"\nimport { parts } from \"./radio-group.anatomy\"\nimport { dom } from \"./radio-group.dom\"\nimport type { ItemProps, ItemState, MachineApi, Send, State } from \"./radio-group.types\"\n\nexport function connect<T extends PropTypes>(state: State, send: Send, normalize: NormalizeProps<T>): MachineApi<T> {\n const groupDisabled = state.context.isDisabled\n const readOnly = state.context.readOnly\n\n function getItemState(props: ItemProps): ItemState {\n return {\n invalid: !!props.invalid,\n disabled: !!props.disabled || groupDisabled,\n checked: state.context.value === props.value,\n focused: state.context.focusedValue === props.value,\n hovered: state.context.hoveredValue === props.value,\n active: state.context.activeValue === props.value,\n }\n }\n\n function getItemDataAttrs<T extends ItemProps>(props: T) {\n const radioState = getItemState(props)\n return {\n \"data-focus\": dataAttr(radioState.focused),\n \"data-disabled\": dataAttr(radioState.disabled),\n \"dats-readonly\": dataAttr(readOnly),\n \"data-state\": radioState.checked ? \"checked\" : \"unchecked\",\n \"data-hover\": dataAttr(radioState.hovered),\n \"data-invalid\": dataAttr(radioState.invalid),\n \"data-orientation\": state.context.orientation,\n }\n }\n\n const focus = () => {\n const firstEnabledAndCheckedInput = dom.getFirstEnabledAndCheckedInputEl(state.context)\n\n if (firstEnabledAndCheckedInput) {\n firstEnabledAndCheckedInput.focus()\n return\n }\n\n const firstEnabledInput = dom.getFirstEnabledInputEl(state.context)\n firstEnabledInput?.focus()\n }\n\n return {\n focus,\n value: state.context.value,\n setValue(value) {\n send({ type: \"SET_VALUE\", value, isTrusted: false })\n },\n clearValue() {\n send({ type: \"SET_VALUE\", value: null, isTrusted: false })\n },\n getItemState,\n\n rootProps: normalize.element({\n ...parts.root.attrs,\n role: \"radiogroup\",\n id: dom.getRootId(state.context),\n \"aria-labelledby\": dom.getLabelId(state.context),\n \"data-orientation\": state.context.orientation,\n \"data-disabled\": dataAttr(groupDisabled),\n \"aria-orientation\": state.context.orientation,\n dir: state.context.dir,\n style: {\n position: \"relative\",\n },\n }),\n\n labelProps: normalize.element({\n ...parts.label.attrs,\n dir: state.context.dir,\n \"data-orientation\": state.context.orientation,\n \"data-disabled\": dataAttr(groupDisabled),\n id: dom.getLabelId(state.context),\n onClick: focus,\n }),\n\n getItemProps(props: ItemProps) {\n const itemState = getItemState(props)\n\n return normalize.label({\n ...parts.item.attrs,\n dir: state.context.dir,\n id: dom.getItemId(state.context, props.value),\n htmlFor: dom.getItemHiddenInputId(state.context, props.value),\n ...getItemDataAttrs(props),\n onPointerMove() {\n if (itemState.disabled) return\n if (itemState.hovered) return\n send({ type: \"SET_HOVERED\", value: props.value, hovered: true })\n },\n onPointerLeave() {\n if (itemState.disabled) return\n send({ type: \"SET_HOVERED\", value: null })\n },\n onPointerDown(event) {\n if (itemState.disabled) return\n // On pointerdown, the input blurs and returns focus to the `body`,\n // we need to prevent this.\n if (itemState.focused && event.pointerType === \"mouse\") {\n event.preventDefault()\n }\n send({ type: \"SET_ACTIVE\", value: props.value, active: true })\n },\n onPointerUp() {\n if (itemState.disabled) return\n send({ type: \"SET_ACTIVE\", value: null })\n },\n })\n },\n\n getItemTextProps(props: ItemProps) {\n return normalize.element({\n ...parts.itemText.attrs,\n dir: state.context.dir,\n id: dom.getItemLabelId(state.context, props.value),\n ...getItemDataAttrs(props),\n })\n },\n\n getItemControlProps(props: ItemProps) {\n const controlState = getItemState(props)\n\n return normalize.element({\n ...parts.itemControl.attrs,\n dir: state.context.dir,\n id: dom.getItemControlId(state.context, props.value),\n \"data-active\": dataAttr(controlState.active),\n \"aria-hidden\": true,\n ...getItemDataAttrs(props),\n })\n },\n\n getItemHiddenInputProps(props: ItemProps) {\n const inputState = getItemState(props)\n\n return normalize.input({\n \"data-ownedby\": dom.getRootId(state.context),\n id: dom.getItemHiddenInputId(state.context, props.value),\n type: \"radio\",\n name: state.context.name || state.context.id,\n form: state.context.form,\n value: props.value,\n onChange(event) {\n if (readOnly) {\n event.preventDefault()\n return\n }\n\n if (event.target.checked) {\n send({ type: \"SET_VALUE\", value: props.value, isTrusted: true })\n }\n },\n onBlur() {\n send({ type: \"SET_FOCUSED\", value: null })\n },\n onFocus() {\n send({ type: \"SET_FOCUSED\", value: props.value, focused: true })\n },\n onKeyDown(event) {\n if (event.defaultPrevented) return\n if (event.key === \" \") {\n send({ type: \"SET_ACTIVE\", value: props.value, active: true })\n }\n },\n onKeyUp(event) {\n if (event.defaultPrevented) return\n if (event.key === \" \") {\n send({ type: \"SET_ACTIVE\", value: null })\n }\n },\n disabled: inputState.disabled,\n defaultChecked: inputState.checked,\n style: visuallyHiddenStyle,\n })\n },\n\n indicatorProps: normalize.element({\n id: dom.getIndicatorId(state.context),\n ...parts.indicator.attrs,\n dir: state.context.dir,\n hidden: state.context.value == null,\n \"data-disabled\": dataAttr(groupDisabled),\n \"data-orientation\": state.context.orientation,\n style: {\n \"--transition-property\": \"left, top, width, height\",\n \"--left\": state.context.indicatorRect?.left,\n \"--top\": state.context.indicatorRect?.top,\n \"--width\": state.context.indicatorRect?.width,\n \"--height\": state.context.indicatorRect?.height,\n position: \"absolute\",\n willChange: \"var(--transition-property)\",\n transitionProperty: \"var(--transition-property)\",\n transitionDuration: state.context.canIndicatorTransition ? \"var(--transition-duration, 150ms)\" : \"0ms\",\n transitionTimingFunction: \"var(--transition-timing-function)\",\n [state.context.orientation === \"horizontal\" ? \"left\" : \"top\"]:\n state.context.orientation === \"horizontal\" ? \"var(--left)\" : \"var(--top)\",\n },\n }),\n }\n}\n","import { createScope, queryAll } from \"@zag-js/dom-query\"\nimport type { MachineContext as Ctx } from \"./radio-group.types\"\n\nexport const dom = createScope({\n getRootId: (ctx: Ctx) => ctx.ids?.root ?? `radio-group:${ctx.id}`,\n getLabelId: (ctx: Ctx) => ctx.ids?.label ?? `radio-group:${ctx.id}:label`,\n getItemId: (ctx: Ctx, value: string) => ctx.ids?.item?.(value) ?? `radio-group:${ctx.id}:radio:${value}`,\n getItemHiddenInputId: (ctx: Ctx, value: string) =>\n ctx.ids?.itemHiddenInput?.(value) ?? `radio-group:${ctx.id}:radio:input:${value}`,\n getItemControlId: (ctx: Ctx, value: string) =>\n ctx.ids?.itemControl?.(value) ?? `radio-group:${ctx.id}:radio:control:${value}`,\n getItemLabelId: (ctx: Ctx, value: string) =>\n ctx.ids?.itemLabel?.(value) ?? `radio-group:${ctx.id}:radio:label:${value}`,\n getIndicatorId: (ctx: Ctx) => ctx.ids?.indicator ?? `radio-group:${ctx.id}:indicator`,\n\n getRootEl: (ctx: Ctx) => dom.getById(ctx, dom.getRootId(ctx)),\n getItemHiddenInputEl: (ctx: Ctx, value: string) =>\n dom.getById<HTMLInputElement>(ctx, dom.getItemHiddenInputId(ctx, value)),\n getIndicatorEl: (ctx: Ctx) => dom.getById(ctx, dom.getIndicatorId(ctx)),\n\n getFirstEnabledInputEl: (ctx: Ctx) => dom.getRootEl(ctx)?.querySelector<HTMLInputElement>(\"input:not(:disabled)\"),\n getFirstEnabledAndCheckedInputEl: (ctx: Ctx) =>\n dom.getRootEl(ctx)?.querySelector<HTMLInputElement>(\"input:not(:disabled):checked\"),\n\n getInputEls: (ctx: Ctx) => {\n const ownerId = CSS.escape(dom.getRootId(ctx))\n const selector = `input[type=radio][data-ownedby='${ownerId}']:not([disabled])`\n return queryAll<HTMLInputElement>(dom.getRootEl(ctx), selector)\n },\n\n getActiveRadioEl: (ctx: Ctx) => {\n if (!ctx.value) return\n return dom.getById(ctx, dom.getItemId(ctx, ctx.value))\n },\n\n getOffsetRect: (el: HTMLElement | undefined) => ({\n left: el?.offsetLeft ?? 0,\n top: el?.offsetTop ?? 0,\n width: el?.offsetWidth ?? 0,\n height: el?.offsetHeight ?? 0,\n }),\n\n getRectById: (ctx: Ctx, id: string) => {\n const radioEl = dom.getById(ctx, dom.getItemId(ctx, id))\n if (!radioEl) return\n return dom.resolveRect(dom.getOffsetRect(radioEl))\n },\n\n resolveRect: (rect: Record<\"width\" | \"height\" | \"left\" | \"top\", number>) => ({\n width: `${rect.width}px`,\n height: `${rect.height}px`,\n left: `${rect.left}px`,\n top: `${rect.top}px`,\n }),\n})\n","import { createMachine, guards } from \"@zag-js/core\"\nimport { nextTick } from \"@zag-js/dom-query\"\nimport { trackElementRect } from \"@zag-js/element-rect\"\nimport { dispatchInputCheckedEvent, trackFormControl } from \"@zag-js/form-utils\"\nimport { compact, isEqual, isString } from \"@zag-js/utils\"\nimport { dom } from \"./radio-group.dom\"\nimport type { MachineContext, MachineState, UserDefinedContext } from \"./radio-group.types\"\n\nconst { not } = guards\n\nexport function machine(userContext: UserDefinedContext) {\n const ctx = compact(userContext)\n return createMachine<MachineContext, MachineState>(\n {\n id: \"radio\",\n initial: \"idle\",\n context: {\n value: null,\n activeValue: null,\n focusedValue: null,\n hoveredValue: null,\n disabled: false,\n orientation: \"vertical\",\n ...ctx,\n indicatorRect: {},\n canIndicatorTransition: false,\n fieldsetDisabled: false,\n },\n\n computed: {\n isDisabled: (ctx) => !!ctx.disabled || ctx.fieldsetDisabled,\n },\n\n entry: [\"syncIndicatorRect\"],\n\n exit: [\"cleanupObserver\"],\n\n activities: [\"trackFormControlState\"],\n\n watch: {\n value: [\"setIndicatorTransition\", \"syncIndicatorRect\", \"syncInputElements\"],\n },\n\n on: {\n SET_VALUE: [\n {\n guard: not(\"isTrusted\"),\n actions: [\"setValue\", \"dispatchChangeEvent\"],\n },\n {\n actions: [\"setValue\"],\n },\n ],\n SET_HOVERED: {\n actions: \"setHovered\",\n },\n SET_ACTIVE: {\n actions: \"setActive\",\n },\n SET_FOCUSED: {\n actions: \"setFocused\",\n },\n },\n\n states: {\n idle: {},\n },\n },\n\n {\n guards: {\n isTrusted: (_ctx, evt) => !!evt.isTrusted,\n },\n activities: {\n trackFormControlState(ctx, _evt, { send, initialContext }) {\n return trackFormControl(dom.getRootEl(ctx), {\n onFieldsetDisabledChange(disabled) {\n ctx.fieldsetDisabled = disabled\n },\n onFormReset() {\n send({ type: \"SET_VALUE\", value: initialContext.value })\n },\n })\n },\n },\n\n actions: {\n setValue(ctx, evt) {\n set.value(ctx, evt.value)\n },\n setHovered(ctx, evt) {\n ctx.hoveredValue = evt.value\n },\n setActive(ctx, evt) {\n ctx.activeValue = evt.value\n },\n setFocused(ctx, evt) {\n ctx.focusedValue = evt.value\n },\n syncInputElements(ctx) {\n const inputs = dom.getInputEls(ctx)\n inputs.forEach((input) => {\n input.checked = input.value === ctx.value\n })\n },\n setIndicatorTransition(ctx) {\n ctx.canIndicatorTransition = isString(ctx.value)\n },\n cleanupObserver(ctx) {\n ctx.indicatorCleanup?.()\n },\n syncIndicatorRect(ctx) {\n ctx.indicatorCleanup?.()\n\n if (!dom.getIndicatorEl(ctx)) return\n\n const value = ctx.value\n\n const radioEl = dom.getActiveRadioEl(ctx)\n\n if (value == null || !radioEl) {\n ctx.indicatorRect = {}\n return\n }\n\n ctx.indicatorCleanup = trackElementRect(radioEl, {\n getRect(el) {\n return dom.getOffsetRect(el)\n },\n onChange(rect) {\n ctx.indicatorRect = dom.resolveRect(rect)\n nextTick(() => {\n ctx.canIndicatorTransition = false\n })\n },\n })\n },\n dispatchChangeEvent(ctx) {\n const inputEls = dom.getInputEls(ctx)\n inputEls.forEach((inputEl) => {\n const checked = inputEl.value === ctx.value\n if (checked === inputEl.checked) return\n dispatchInputCheckedEvent(inputEl, { checked })\n })\n },\n },\n },\n )\n}\n\nconst invoke = {\n change: (ctx: MachineContext) => {\n if (ctx.value == null) return\n ctx.onValueChange?.({ value: ctx.value })\n },\n}\n\nconst set = {\n value: (ctx: MachineContext, value: string) => {\n if (isEqual(ctx.value, value)) return\n ctx.value = value\n invoke.change(ctx)\n },\n}\n","import { createProps } from \"@zag-js/types\"\nimport { createSplitProps } from \"@zag-js/utils\"\nimport type { ItemProps, UserDefinedContext } from \"./radio-group.types\"\n\nexport const props = createProps<UserDefinedContext>()([\n \"dir\",\n \"disabled\",\n \"form\",\n \"getRootNode\",\n \"id\",\n \"ids\",\n \"name\",\n \"onValueChange\",\n \"orientation\",\n \"readOnly\",\n \"value\",\n])\nexport const splitProps = createSplitProps<Partial<UserDefinedContext>>(props)\n\nexport const itemProps = createProps<ItemProps>()([\"value\", \"disabled\", \"invalid\"])\nexport const splitItemProps = createSplitProps<ItemProps>(itemProps)\n"],"mappings":"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","names":["props","ctx"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zag-js/radio-group",
3
- "version": "0.49.0",
3
+ "version": "0.51.0",
4
4
  "description": "Core logic for the radio group widget implemented as a state machine",
5
5
  "keywords": [
6
6
  "js",
@@ -28,13 +28,13 @@
28
28
  "url": "https://github.com/chakra-ui/zag/issues"
29
29
  },
30
30
  "dependencies": {
31
- "@zag-js/anatomy": "0.49.0",
32
- "@zag-js/dom-query": "0.49.0",
33
- "@zag-js/element-rect": "0.49.0",
34
- "@zag-js/form-utils": "0.49.0",
35
- "@zag-js/utils": "0.49.0",
36
- "@zag-js/core": "0.49.0",
37
- "@zag-js/types": "0.49.0"
31
+ "@zag-js/anatomy": "0.51.0",
32
+ "@zag-js/dom-query": "0.51.0",
33
+ "@zag-js/element-rect": "0.51.0",
34
+ "@zag-js/form-utils": "0.51.0",
35
+ "@zag-js/utils": "0.51.0",
36
+ "@zag-js/core": "0.51.0",
37
+ "@zag-js/types": "0.51.0"
38
38
  },
39
39
  "devDependencies": {
40
40
  "clean-package": "2.2.0"
@@ -79,7 +79,7 @@ export function connect<T extends PropTypes>(state: State, send: Send, normalize
79
79
  }),
80
80
 
81
81
  getItemProps(props: ItemProps) {
82
- const rootState = getItemState(props)
82
+ const itemState = getItemState(props)
83
83
 
84
84
  return normalize.label({
85
85
  ...parts.item.attrs,
@@ -88,24 +88,25 @@ export function connect<T extends PropTypes>(state: State, send: Send, normalize
88
88
  htmlFor: dom.getItemHiddenInputId(state.context, props.value),
89
89
  ...getItemDataAttrs(props),
90
90
  onPointerMove() {
91
- if (rootState.disabled) return
91
+ if (itemState.disabled) return
92
+ if (itemState.hovered) return
92
93
  send({ type: "SET_HOVERED", value: props.value, hovered: true })
93
94
  },
94
95
  onPointerLeave() {
95
- if (rootState.disabled) return
96
+ if (itemState.disabled) return
96
97
  send({ type: "SET_HOVERED", value: null })
97
98
  },
98
99
  onPointerDown(event) {
99
- if (rootState.disabled) return
100
+ if (itemState.disabled) return
100
101
  // On pointerdown, the input blurs and returns focus to the `body`,
101
102
  // we need to prevent this.
102
- if (rootState.focused && event.pointerType === "mouse") {
103
+ if (itemState.focused && event.pointerType === "mouse") {
103
104
  event.preventDefault()
104
105
  }
105
106
  send({ type: "SET_ACTIVE", value: props.value, active: true })
106
107
  },
107
108
  onPointerUp() {
108
- if (rootState.disabled) return
109
+ if (itemState.disabled) return
109
110
  send({ type: "SET_ACTIVE", value: null })
110
111
  },
111
112
  })