@zag-js/tabs 0.69.0 → 0.71.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
@@ -67,6 +67,10 @@ interface PublicContext extends DirectionProperty, CommonProperties {
67
67
  * Whether the tab is composite
68
68
  */
69
69
  composite: boolean;
70
+ /**
71
+ * Whether the active tab can be deselected when clicking on it.
72
+ */
73
+ deselectable?: boolean;
70
74
  }
71
75
  type UserDefinedContext = RequiredBy<PublicContext, "id">;
72
76
  type ComputedContext = Readonly<{}>;
@@ -163,8 +167,8 @@ declare function connect<T extends PropTypes>(state: State, send: Send, normaliz
163
167
 
164
168
  declare function machine(userContext: UserDefinedContext): _zag_js_core.Machine<MachineContext, MachineState, _zag_js_core.StateMachine.AnyEventObject>;
165
169
 
166
- declare const props: ("value" | "dir" | "id" | "getRootNode" | "orientation" | "ids" | "translations" | "loopFocus" | "activationMode" | "onValueChange" | "onFocusChange" | "composite")[];
167
- declare const splitProps: <Props extends Partial<UserDefinedContext>>(props: Props) => [Partial<UserDefinedContext>, Omit<Props, "value" | "dir" | "id" | "getRootNode" | "orientation" | "ids" | "translations" | "loopFocus" | "activationMode" | "onValueChange" | "onFocusChange" | "composite">];
170
+ declare const props: ("value" | "dir" | "id" | "getRootNode" | "orientation" | "ids" | "translations" | "loopFocus" | "activationMode" | "onValueChange" | "onFocusChange" | "composite" | "deselectable")[];
171
+ declare const splitProps: <Props extends Partial<UserDefinedContext>>(props: Props) => [Partial<UserDefinedContext>, Omit<Props, "value" | "dir" | "id" | "getRootNode" | "orientation" | "ids" | "translations" | "loopFocus" | "activationMode" | "onValueChange" | "onFocusChange" | "composite" | "deselectable">];
168
172
  declare const triggerProps: (keyof TriggerProps)[];
169
173
  declare const splitTriggerProps: <Props extends TriggerProps>(props: Props) => [TriggerProps, Omit<Props, keyof TriggerProps>];
170
174
  declare const contentProps: "value"[];
package/dist/index.d.ts CHANGED
@@ -67,6 +67,10 @@ interface PublicContext extends DirectionProperty, CommonProperties {
67
67
  * Whether the tab is composite
68
68
  */
69
69
  composite: boolean;
70
+ /**
71
+ * Whether the active tab can be deselected when clicking on it.
72
+ */
73
+ deselectable?: boolean;
70
74
  }
71
75
  type UserDefinedContext = RequiredBy<PublicContext, "id">;
72
76
  type ComputedContext = Readonly<{}>;
@@ -163,8 +167,8 @@ declare function connect<T extends PropTypes>(state: State, send: Send, normaliz
163
167
 
164
168
  declare function machine(userContext: UserDefinedContext): _zag_js_core.Machine<MachineContext, MachineState, _zag_js_core.StateMachine.AnyEventObject>;
165
169
 
166
- declare const props: ("value" | "dir" | "id" | "getRootNode" | "orientation" | "ids" | "translations" | "loopFocus" | "activationMode" | "onValueChange" | "onFocusChange" | "composite")[];
167
- declare const splitProps: <Props extends Partial<UserDefinedContext>>(props: Props) => [Partial<UserDefinedContext>, Omit<Props, "value" | "dir" | "id" | "getRootNode" | "orientation" | "ids" | "translations" | "loopFocus" | "activationMode" | "onValueChange" | "onFocusChange" | "composite">];
170
+ declare const props: ("value" | "dir" | "id" | "getRootNode" | "orientation" | "ids" | "translations" | "loopFocus" | "activationMode" | "onValueChange" | "onFocusChange" | "composite" | "deselectable")[];
171
+ declare const splitProps: <Props extends Partial<UserDefinedContext>>(props: Props) => [Partial<UserDefinedContext>, Omit<Props, "value" | "dir" | "id" | "getRootNode" | "orientation" | "ids" | "translations" | "loopFocus" | "activationMode" | "onValueChange" | "onFocusChange" | "composite" | "deselectable">];
168
172
  declare const triggerProps: (keyof TriggerProps)[];
169
173
  declare const splitTriggerProps: <Props extends TriggerProps>(props: Props) => [TriggerProps, Omit<Props, keyof TriggerProps>];
170
174
  declare const contentProps: "value"[];
package/dist/index.js CHANGED
@@ -1,50 +1,17 @@
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);
1
+ 'use strict';
19
2
 
20
- // src/index.ts
21
- var src_exports = {};
22
- __export(src_exports, {
23
- anatomy: () => anatomy,
24
- connect: () => connect,
25
- contentProps: () => contentProps,
26
- machine: () => machine,
27
- props: () => props,
28
- splitContentProps: () => splitContentProps,
29
- splitProps: () => splitProps,
30
- splitTriggerProps: () => splitTriggerProps,
31
- triggerProps: () => triggerProps
32
- });
33
- module.exports = __toCommonJS(src_exports);
3
+ var anatomy$1 = require('@zag-js/anatomy');
4
+ var domEvent = require('@zag-js/dom-event');
5
+ var domQuery = require('@zag-js/dom-query');
6
+ var utils = require('@zag-js/utils');
7
+ var core = require('@zag-js/core');
8
+ var elementRect = require('@zag-js/element-rect');
9
+ var types = require('@zag-js/types');
34
10
 
35
11
  // src/tabs.anatomy.ts
36
- var import_anatomy = require("@zag-js/anatomy");
37
- var anatomy = (0, import_anatomy.createAnatomy)("tabs").parts("root", "list", "trigger", "content", "indicator");
12
+ var anatomy = anatomy$1.createAnatomy("tabs").parts("root", "list", "trigger", "content", "indicator");
38
13
  var parts = anatomy.build();
39
-
40
- // src/tabs.connect.ts
41
- var import_dom_event = require("@zag-js/dom-event");
42
- var import_dom_query2 = require("@zag-js/dom-query");
43
-
44
- // src/tabs.dom.ts
45
- var import_dom_query = require("@zag-js/dom-query");
46
- var import_utils = require("@zag-js/utils");
47
- var dom = (0, import_dom_query.createScope)({
14
+ var dom = domQuery.createScope({
48
15
  getRootId: (ctx) => ctx.ids?.root ?? `tabs:${ctx.id}`,
49
16
  getListId: (ctx) => ctx.ids?.list ?? `tabs:${ctx.id}:list`,
50
17
  getContentId: (ctx, id) => ctx.ids?.content ?? `tabs:${ctx.id}:content-${id}`,
@@ -57,12 +24,12 @@ var dom = (0, import_dom_query.createScope)({
57
24
  getElements: (ctx) => {
58
25
  const ownerId = CSS.escape(dom.getListId(ctx));
59
26
  const selector = `[role=tab][data-ownedby='${ownerId}']:not([disabled])`;
60
- return (0, import_dom_query.queryAll)(dom.getListEl(ctx), selector);
27
+ return domQuery.queryAll(dom.getListEl(ctx), selector);
61
28
  },
62
- getFirstTriggerEl: (ctx) => (0, import_utils.first)(dom.getElements(ctx)),
63
- getLastTriggerEl: (ctx) => (0, import_utils.last)(dom.getElements(ctx)),
64
- getNextTriggerEl: (ctx, id) => (0, import_dom_query.nextById)(dom.getElements(ctx), dom.getTriggerId(ctx, id), ctx.loopFocus),
65
- getPrevTriggerEl: (ctx, id) => (0, import_dom_query.prevById)(dom.getElements(ctx), dom.getTriggerId(ctx, id), ctx.loopFocus),
29
+ getFirstTriggerEl: (ctx) => utils.first(dom.getElements(ctx)),
30
+ getLastTriggerEl: (ctx) => utils.last(dom.getElements(ctx)),
31
+ getNextTriggerEl: (ctx, id) => domQuery.nextById(dom.getElements(ctx), dom.getTriggerId(ctx, id), ctx.loopFocus),
32
+ getPrevTriggerEl: (ctx, id) => domQuery.prevById(dom.getElements(ctx), dom.getTriggerId(ctx, id), ctx.loopFocus),
66
33
  getSelectedContentEl: (ctx) => {
67
34
  if (!ctx.value) return;
68
35
  return dom.getContentEl(ctx, ctx.value);
@@ -80,7 +47,7 @@ var dom = (0, import_dom_query.createScope)({
80
47
  };
81
48
  },
82
49
  getRectById: (ctx, id) => {
83
- const tab = (0, import_dom_query.itemById)(dom.getElements(ctx), dom.getTriggerId(ctx, id));
50
+ const tab = domQuery.itemById(dom.getElements(ctx), dom.getTriggerId(ctx, id));
84
51
  return dom.resolveRect(dom.getOffsetRect(tab));
85
52
  },
86
53
  resolveRect: (rect) => ({
@@ -138,7 +105,7 @@ function connect(state, send, normalize) {
138
105
  ...parts.root.attrs,
139
106
  id: dom.getRootId(state.context),
140
107
  "data-orientation": state.context.orientation,
141
- "data-focus": (0, import_dom_query2.dataAttr)(focused),
108
+ "data-focus": domQuery.dataAttr(focused),
142
109
  dir: state.context.dir
143
110
  });
144
111
  },
@@ -148,14 +115,14 @@ function connect(state, send, normalize) {
148
115
  id: dom.getListId(state.context),
149
116
  role: "tablist",
150
117
  dir: state.context.dir,
151
- "data-focus": (0, import_dom_query2.dataAttr)(focused),
118
+ "data-focus": domQuery.dataAttr(focused),
152
119
  "aria-orientation": state.context.orientation,
153
120
  "data-orientation": state.context.orientation,
154
121
  "aria-label": translations?.listLabel,
155
122
  onKeyDown(event) {
156
123
  if (event.defaultPrevented) return;
157
- if (!(0, import_dom_query2.isSelfTarget)(event)) return;
158
- if ((0, import_dom_query2.isComposingEvent)(event)) return;
124
+ if (!domQuery.isSelfTarget(event)) return;
125
+ if (domQuery.isComposingEvent(event)) return;
159
126
  const keyMap = {
160
127
  ArrowDown() {
161
128
  if (isHorizontal) return;
@@ -183,7 +150,7 @@ function connect(state, send, normalize) {
183
150
  send({ type: "ENTER" });
184
151
  }
185
152
  };
186
- let key = (0, import_dom_event.getEventKey)(event, state.context);
153
+ let key = domEvent.getEventKey(event, state.context);
187
154
  const exec = keyMap[key];
188
155
  if (exec) {
189
156
  event.preventDefault();
@@ -203,15 +170,15 @@ function connect(state, send, normalize) {
203
170
  disabled,
204
171
  dir: state.context.dir,
205
172
  "data-orientation": state.context.orientation,
206
- "data-disabled": (0, import_dom_query2.dataAttr)(disabled),
173
+ "data-disabled": domQuery.dataAttr(disabled),
207
174
  "aria-disabled": disabled,
208
175
  "data-value": value,
209
176
  "aria-selected": triggerState.selected,
210
- "data-selected": (0, import_dom_query2.dataAttr)(triggerState.selected),
211
- "data-focus": (0, import_dom_query2.dataAttr)(triggerState.focused),
177
+ "data-selected": domQuery.dataAttr(triggerState.selected),
178
+ "data-focus": domQuery.dataAttr(triggerState.focused),
212
179
  "aria-controls": triggerState.selected ? dom.getContentId(state.context, value) : void 0,
213
180
  "data-ownedby": dom.getListId(state.context),
214
- "data-ssr": (0, import_dom_query2.dataAttr)(state.context.ssr),
181
+ "data-ssr": domQuery.dataAttr(state.context.ssr),
215
182
  id: dom.getTriggerId(state.context, value),
216
183
  tabIndex: triggerState.selected && composite ? 0 : -1,
217
184
  onFocus() {
@@ -226,7 +193,7 @@ function connect(state, send, normalize) {
226
193
  onClick(event) {
227
194
  if (event.defaultPrevented) return;
228
195
  if (disabled) return;
229
- if ((0, import_dom_query2.isSafari)()) {
196
+ if (domQuery.isSafari()) {
230
197
  event.currentTarget.focus();
231
198
  }
232
199
  send({ type: "TAB_CLICK", value });
@@ -244,7 +211,7 @@ function connect(state, send, normalize) {
244
211
  "aria-labelledby": dom.getTriggerId(state.context, value),
245
212
  role: "tabpanel",
246
213
  "data-ownedby": dom.getListId(state.context),
247
- "data-selected": (0, import_dom_query2.dataAttr)(selected),
214
+ "data-selected": domQuery.dataAttr(selected),
248
215
  "data-orientation": state.context.orientation,
249
216
  hidden: !selected
250
217
  });
@@ -272,17 +239,10 @@ function connect(state, send, normalize) {
272
239
  }
273
240
  };
274
241
  }
275
-
276
- // src/tabs.machine.ts
277
- var import_core = require("@zag-js/core");
278
- var import_dom_event2 = require("@zag-js/dom-event");
279
- var import_dom_query3 = require("@zag-js/dom-query");
280
- var import_element_rect = require("@zag-js/element-rect");
281
- var import_utils2 = require("@zag-js/utils");
282
- var { not } = import_core.guards;
242
+ var { not } = core.guards;
283
243
  function machine(userContext) {
284
- const ctx = (0, import_utils2.compact)(userContext);
285
- return (0, import_core.createMachine)(
244
+ const ctx = utils.compact(userContext);
245
+ return core.createMachine(
286
246
  {
287
247
  initial: "idle",
288
248
  context: {
@@ -404,8 +364,10 @@ function machine(userContext) {
404
364
  }
405
365
  },
406
366
  selectFocusedTab(ctx2) {
407
- (0, import_dom_query3.raf)(() => {
408
- set.value(ctx2, ctx2.focusedValue);
367
+ domQuery.raf(() => {
368
+ const nullable = ctx2.deselectable && ctx2.value === ctx2.focusedValue;
369
+ const value = nullable ? null : ctx2.focusedValue;
370
+ set.value(ctx2, value);
409
371
  });
410
372
  },
411
373
  setFocusedValue(ctx2, evt) {
@@ -416,25 +378,27 @@ function machine(userContext) {
416
378
  set.focusedValue(ctx2, null);
417
379
  },
418
380
  setValue(ctx2, evt) {
419
- set.value(ctx2, evt.value);
381
+ const nullable = ctx2.deselectable && ctx2.value === ctx2.focusedValue;
382
+ const value = nullable ? null : evt.value;
383
+ set.value(ctx2, value);
420
384
  },
421
385
  clearValue(ctx2) {
422
386
  set.value(ctx2, null);
423
387
  },
424
388
  focusFirstTab(ctx2) {
425
- (0, import_dom_query3.raf)(() => {
389
+ domQuery.raf(() => {
426
390
  dom.getFirstTriggerEl(ctx2)?.focus();
427
391
  });
428
392
  },
429
393
  focusLastTab(ctx2) {
430
- (0, import_dom_query3.raf)(() => {
394
+ domQuery.raf(() => {
431
395
  dom.getLastTriggerEl(ctx2)?.focus();
432
396
  });
433
397
  },
434
398
  focusNextTab(ctx2) {
435
399
  if (!ctx2.focusedValue) return;
436
400
  const triggerEl = dom.getNextTriggerEl(ctx2, ctx2.focusedValue);
437
- (0, import_dom_query3.raf)(() => {
401
+ domQuery.raf(() => {
438
402
  if (ctx2.composite) {
439
403
  triggerEl?.focus();
440
404
  } else if (triggerEl?.dataset.value != null) {
@@ -445,7 +409,7 @@ function machine(userContext) {
445
409
  focusPrevTab(ctx2) {
446
410
  if (!ctx2.focusedValue) return;
447
411
  const triggerEl = dom.getPrevTriggerEl(ctx2, ctx2.focusedValue);
448
- (0, import_dom_query3.raf)(() => {
412
+ domQuery.raf(() => {
449
413
  if (ctx2.composite) {
450
414
  triggerEl?.focus();
451
415
  } else if (triggerEl?.dataset.value != null) {
@@ -457,10 +421,10 @@ function machine(userContext) {
457
421
  ctx2.indicatorState.rendered = !!dom.getIndicatorEl(ctx2);
458
422
  },
459
423
  syncTabIndex(ctx2) {
460
- (0, import_dom_query3.raf)(() => {
424
+ domQuery.raf(() => {
461
425
  const contentEl = dom.getSelectedContentEl(ctx2);
462
426
  if (!contentEl) return;
463
- const focusables = (0, import_dom_query3.getFocusables)(contentEl);
427
+ const focusables = domQuery.getFocusables(contentEl);
464
428
  if (focusables.length > 0) {
465
429
  contentEl.removeAttribute("tabindex");
466
430
  } else {
@@ -480,7 +444,7 @@ function machine(userContext) {
480
444
  const triggerEl = dom.getTriggerEl(ctx2, value);
481
445
  if (!triggerEl) return;
482
446
  ctx2.indicatorState.rect = dom.getRectById(ctx2, value);
483
- (0, import_dom_query3.nextTick)(() => {
447
+ domQuery.nextTick(() => {
484
448
  ctx2.indicatorState.transition = false;
485
449
  });
486
450
  },
@@ -493,20 +457,20 @@ function machine(userContext) {
493
457
  if (!ctx2.indicatorState.rendered || !value) return;
494
458
  const triggerEl = dom.getSelectedTriggerEl(ctx2);
495
459
  if (!triggerEl) return;
496
- ctx2.indicatorCleanup = (0, import_element_rect.trackElementRect)(triggerEl, {
460
+ ctx2.indicatorCleanup = elementRect.trackElementRect(triggerEl, {
497
461
  getRect(el) {
498
462
  return dom.getOffsetRect(el);
499
463
  },
500
464
  onChange(rect) {
501
465
  ctx2.indicatorState.rect = dom.resolveRect(rect);
502
- (0, import_dom_query3.nextTick)(() => {
466
+ domQuery.nextTick(() => {
503
467
  ctx2.indicatorState.transition = false;
504
468
  });
505
469
  }
506
470
  });
507
471
  },
508
472
  clickIfLink(ctx2) {
509
- (0, import_dom_event2.clickIfLink)(dom.getSelectedTriggerEl(ctx2));
473
+ domEvent.clickIfLink(dom.getSelectedTriggerEl(ctx2));
510
474
  }
511
475
  }
512
476
  }
@@ -524,21 +488,17 @@ var invoke = {
524
488
  };
525
489
  var set = {
526
490
  value: (ctx, value) => {
527
- if ((0, import_utils2.isEqual)(value, ctx.value)) return;
491
+ if (utils.isEqual(value, ctx.value)) return;
528
492
  ctx.value = value;
529
493
  invoke.change(ctx);
530
494
  },
531
495
  focusedValue: (ctx, value) => {
532
- if ((0, import_utils2.isEqual)(value, ctx.focusedValue)) return;
496
+ if (utils.isEqual(value, ctx.focusedValue)) return;
533
497
  ctx.focusedValue = value;
534
498
  invoke.focusChange(ctx);
535
499
  }
536
500
  };
537
-
538
- // src/tabs.props.ts
539
- var import_types = require("@zag-js/types");
540
- var import_utils3 = require("@zag-js/utils");
541
- var props = (0, import_types.createProps)()([
501
+ var props = types.createProps()([
542
502
  "activationMode",
543
503
  "composite",
544
504
  "dir",
@@ -550,23 +510,21 @@ var props = (0, import_types.createProps)()([
550
510
  "onValueChange",
551
511
  "orientation",
552
512
  "translations",
513
+ "deselectable",
553
514
  "value"
554
515
  ]);
555
- var splitProps = (0, import_utils3.createSplitProps)(props);
556
- var triggerProps = (0, import_types.createProps)()(["disabled", "value"]);
557
- var splitTriggerProps = (0, import_utils3.createSplitProps)(triggerProps);
558
- var contentProps = (0, import_types.createProps)()(["value"]);
559
- var splitContentProps = (0, import_utils3.createSplitProps)(contentProps);
560
- // Annotate the CommonJS export names for ESM import in node:
561
- 0 && (module.exports = {
562
- anatomy,
563
- connect,
564
- contentProps,
565
- machine,
566
- props,
567
- splitContentProps,
568
- splitProps,
569
- splitTriggerProps,
570
- triggerProps
571
- });
572
- //# sourceMappingURL=index.js.map
516
+ var splitProps = utils.createSplitProps(props);
517
+ var triggerProps = types.createProps()(["disabled", "value"]);
518
+ var splitTriggerProps = utils.createSplitProps(triggerProps);
519
+ var contentProps = types.createProps()(["value"]);
520
+ var splitContentProps = utils.createSplitProps(contentProps);
521
+
522
+ exports.anatomy = anatomy;
523
+ exports.connect = connect;
524
+ exports.contentProps = contentProps;
525
+ exports.machine = machine;
526
+ exports.props = props;
527
+ exports.splitContentProps = splitContentProps;
528
+ exports.splitProps = splitProps;
529
+ exports.splitTriggerProps = splitTriggerProps;
530
+ exports.triggerProps = triggerProps;
package/dist/index.mjs CHANGED
@@ -1,15 +1,14 @@
1
+ import { createAnatomy } from '@zag-js/anatomy';
2
+ import { getEventKey, clickIfLink } from '@zag-js/dom-event';
3
+ import { createScope, queryAll, nextById, prevById, itemById, dataAttr, isSelfTarget, isComposingEvent, isSafari, raf, getFocusables, nextTick } from '@zag-js/dom-query';
4
+ import { first, last, createSplitProps, compact, isEqual } from '@zag-js/utils';
5
+ import { createMachine, guards } from '@zag-js/core';
6
+ import { trackElementRect } from '@zag-js/element-rect';
7
+ import { createProps } from '@zag-js/types';
8
+
1
9
  // src/tabs.anatomy.ts
2
- import { createAnatomy } from "@zag-js/anatomy";
3
10
  var anatomy = createAnatomy("tabs").parts("root", "list", "trigger", "content", "indicator");
4
11
  var parts = anatomy.build();
5
-
6
- // src/tabs.connect.ts
7
- import { getEventKey } from "@zag-js/dom-event";
8
- import { dataAttr, isComposingEvent, isSafari, isSelfTarget } from "@zag-js/dom-query";
9
-
10
- // src/tabs.dom.ts
11
- import { createScope, itemById, nextById, prevById, queryAll } from "@zag-js/dom-query";
12
- import { first, last } from "@zag-js/utils";
13
12
  var dom = createScope({
14
13
  getRootId: (ctx) => ctx.ids?.root ?? `tabs:${ctx.id}`,
15
14
  getListId: (ctx) => ctx.ids?.list ?? `tabs:${ctx.id}:list`,
@@ -238,13 +237,6 @@ function connect(state, send, normalize) {
238
237
  }
239
238
  };
240
239
  }
241
-
242
- // src/tabs.machine.ts
243
- import { createMachine, guards } from "@zag-js/core";
244
- import { clickIfLink } from "@zag-js/dom-event";
245
- import { nextTick, raf, getFocusables } from "@zag-js/dom-query";
246
- import { trackElementRect } from "@zag-js/element-rect";
247
- import { compact, isEqual } from "@zag-js/utils";
248
240
  var { not } = guards;
249
241
  function machine(userContext) {
250
242
  const ctx = compact(userContext);
@@ -371,7 +363,9 @@ function machine(userContext) {
371
363
  },
372
364
  selectFocusedTab(ctx2) {
373
365
  raf(() => {
374
- set.value(ctx2, ctx2.focusedValue);
366
+ const nullable = ctx2.deselectable && ctx2.value === ctx2.focusedValue;
367
+ const value = nullable ? null : ctx2.focusedValue;
368
+ set.value(ctx2, value);
375
369
  });
376
370
  },
377
371
  setFocusedValue(ctx2, evt) {
@@ -382,7 +376,9 @@ function machine(userContext) {
382
376
  set.focusedValue(ctx2, null);
383
377
  },
384
378
  setValue(ctx2, evt) {
385
- set.value(ctx2, evt.value);
379
+ const nullable = ctx2.deselectable && ctx2.value === ctx2.focusedValue;
380
+ const value = nullable ? null : evt.value;
381
+ set.value(ctx2, value);
386
382
  },
387
383
  clearValue(ctx2) {
388
384
  set.value(ctx2, null);
@@ -500,10 +496,6 @@ var set = {
500
496
  invoke.focusChange(ctx);
501
497
  }
502
498
  };
503
-
504
- // src/tabs.props.ts
505
- import { createProps } from "@zag-js/types";
506
- import { createSplitProps } from "@zag-js/utils";
507
499
  var props = createProps()([
508
500
  "activationMode",
509
501
  "composite",
@@ -516,6 +508,7 @@ var props = createProps()([
516
508
  "onValueChange",
517
509
  "orientation",
518
510
  "translations",
511
+ "deselectable",
519
512
  "value"
520
513
  ]);
521
514
  var splitProps = createSplitProps(props);
@@ -523,15 +516,5 @@ var triggerProps = createProps()(["disabled", "value"]);
523
516
  var splitTriggerProps = createSplitProps(triggerProps);
524
517
  var contentProps = createProps()(["value"]);
525
518
  var splitContentProps = createSplitProps(contentProps);
526
- export {
527
- anatomy,
528
- connect,
529
- contentProps,
530
- machine,
531
- props,
532
- splitContentProps,
533
- splitProps,
534
- splitTriggerProps,
535
- triggerProps
536
- };
537
- //# sourceMappingURL=index.mjs.map
519
+
520
+ export { anatomy, connect, contentProps, machine, props, splitContentProps, splitProps, splitTriggerProps, triggerProps };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zag-js/tabs",
3
- "version": "0.69.0",
3
+ "version": "0.71.0",
4
4
  "description": "Core logic for the tabs widget implemented as a state machine",
5
5
  "keywords": [
6
6
  "js",
@@ -17,8 +17,7 @@
17
17
  "repository": "https://github.com/chakra-ui/zag/tree/main/packages/tabs",
18
18
  "sideEffects": false,
19
19
  "files": [
20
- "dist",
21
- "src"
20
+ "dist"
22
21
  ],
23
22
  "publishConfig": {
24
23
  "access": "public"
@@ -27,13 +26,13 @@
27
26
  "url": "https://github.com/chakra-ui/zag/issues"
28
27
  },
29
28
  "dependencies": {
30
- "@zag-js/anatomy": "0.69.0",
31
- "@zag-js/dom-query": "0.69.0",
32
- "@zag-js/dom-event": "0.69.0",
33
- "@zag-js/element-rect": "0.69.0",
34
- "@zag-js/utils": "0.69.0",
35
- "@zag-js/core": "0.69.0",
36
- "@zag-js/types": "0.69.0"
29
+ "@zag-js/anatomy": "0.71.0",
30
+ "@zag-js/dom-query": "0.71.0",
31
+ "@zag-js/dom-event": "0.71.0",
32
+ "@zag-js/element-rect": "0.71.0",
33
+ "@zag-js/utils": "0.71.0",
34
+ "@zag-js/core": "0.71.0",
35
+ "@zag-js/types": "0.71.0"
37
36
  },
38
37
  "devDependencies": {
39
38
  "clean-package": "2.2.0"
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/index.ts","../src/tabs.anatomy.ts","../src/tabs.connect.ts","../src/tabs.dom.ts","../src/tabs.machine.ts","../src/tabs.props.ts"],"sourcesContent":["export { anatomy } from \"./tabs.anatomy\"\nexport { connect } from \"./tabs.connect\"\nexport { machine } from \"./tabs.machine\"\nexport * from \"./tabs.props\"\nexport type {\n MachineApi as Api,\n ContentProps,\n UserDefinedContext as Context,\n ElementIds,\n FocusChangeDetails,\n IntlTranslations,\n Service,\n TriggerProps,\n ValueChangeDetails,\n} from \"./tabs.types\"\n","import { createAnatomy } from \"@zag-js/anatomy\"\n\nexport const anatomy = createAnatomy(\"tabs\").parts(\"root\", \"list\", \"trigger\", \"content\", \"indicator\")\nexport const parts = anatomy.build()\n","import { getEventKey, type EventKeyMap } from \"@zag-js/dom-event\"\nimport { dataAttr, isComposingEvent, isSafari, isSelfTarget } from \"@zag-js/dom-query\"\nimport type { NormalizeProps, PropTypes } from \"@zag-js/types\"\nimport { parts } from \"./tabs.anatomy\"\nimport { dom } from \"./tabs.dom\"\nimport type { MachineApi, Send, State, TriggerProps, TriggerState } from \"./tabs.types\"\n\nexport function connect<T extends PropTypes>(state: State, send: Send, normalize: NormalizeProps<T>): MachineApi<T> {\n const translations = state.context.translations\n const focused = state.matches(\"focused\")\n\n const isVertical = state.context.orientation === \"vertical\"\n const isHorizontal = state.context.orientation === \"horizontal\"\n const composite = state.context.composite\n const indicator = state.context.indicatorState\n\n function getTriggerState(props: TriggerProps): TriggerState {\n return {\n selected: state.context.value === props.value,\n focused: state.context.focusedValue === props.value,\n disabled: !!props.disabled,\n }\n }\n\n return {\n value: state.context.value,\n focusedValue: state.context.focusedValue,\n setValue(value) {\n send({ type: \"SET_VALUE\", value })\n },\n clearValue() {\n send({ type: \"CLEAR_VALUE\" })\n },\n setIndicatorRect(value) {\n const id = dom.getTriggerId(state.context, value)\n send({ type: \"SET_INDICATOR_RECT\", id })\n },\n syncTabIndex() {\n send(\"SYNC_TAB_INDEX\")\n },\n selectNext(fromValue) {\n send({ type: \"TAB_FOCUS\", value: fromValue, src: \"selectNext\" })\n send({ type: \"ARROW_NEXT\", src: \"selectNext\" })\n },\n selectPrev(fromValue) {\n send({ type: \"TAB_FOCUS\", value: fromValue, src: \"selectPrev\" })\n send({ type: \"ARROW_PREV\", src: \"selectPrev\" })\n },\n focus() {\n dom.getSelectedTriggerEl(state.context)?.focus()\n },\n\n getRootProps() {\n return normalize.element({\n ...parts.root.attrs,\n id: dom.getRootId(state.context),\n \"data-orientation\": state.context.orientation,\n \"data-focus\": dataAttr(focused),\n dir: state.context.dir,\n })\n },\n\n getListProps() {\n return normalize.element({\n ...parts.list.attrs,\n id: dom.getListId(state.context),\n role: \"tablist\",\n dir: state.context.dir,\n \"data-focus\": dataAttr(focused),\n \"aria-orientation\": state.context.orientation,\n \"data-orientation\": state.context.orientation,\n \"aria-label\": translations?.listLabel,\n onKeyDown(event) {\n if (event.defaultPrevented) return\n\n if (!isSelfTarget(event)) return\n if (isComposingEvent(event)) return\n\n const keyMap: EventKeyMap = {\n ArrowDown() {\n if (isHorizontal) return\n send({ type: \"ARROW_NEXT\", key: \"ArrowDown\" })\n },\n ArrowUp() {\n if (isHorizontal) return\n send({ type: \"ARROW_PREV\", key: \"ArrowUp\" })\n },\n ArrowLeft() {\n if (isVertical) return\n send({ type: \"ARROW_PREV\", key: \"ArrowLeft\" })\n },\n ArrowRight() {\n if (isVertical) return\n send({ type: \"ARROW_NEXT\", key: \"ArrowRight\" })\n },\n Home() {\n send(\"HOME\")\n },\n End() {\n send(\"END\")\n },\n Enter() {\n send({ type: \"ENTER\" })\n },\n }\n\n let key = getEventKey(event, state.context)\n const exec = keyMap[key]\n\n if (exec) {\n event.preventDefault()\n exec(event)\n }\n },\n })\n },\n\n getTriggerState,\n\n getTriggerProps(props) {\n const { value, disabled } = props\n const triggerState = getTriggerState(props)\n\n return normalize.button({\n ...parts.trigger.attrs,\n role: \"tab\",\n type: \"button\",\n disabled,\n dir: state.context.dir,\n \"data-orientation\": state.context.orientation,\n \"data-disabled\": dataAttr(disabled),\n \"aria-disabled\": disabled,\n \"data-value\": value,\n \"aria-selected\": triggerState.selected,\n \"data-selected\": dataAttr(triggerState.selected),\n \"data-focus\": dataAttr(triggerState.focused),\n \"aria-controls\": triggerState.selected ? dom.getContentId(state.context, value) : undefined,\n \"data-ownedby\": dom.getListId(state.context),\n \"data-ssr\": dataAttr(state.context.ssr),\n id: dom.getTriggerId(state.context, value),\n tabIndex: triggerState.selected && composite ? 0 : -1,\n onFocus() {\n send({ type: \"TAB_FOCUS\", value })\n },\n onBlur(event) {\n const target = event.relatedTarget as HTMLElement | null\n if (target?.getAttribute(\"role\") !== \"tab\") {\n send({ type: \"TAB_BLUR\" })\n }\n },\n onClick(event) {\n if (event.defaultPrevented) return\n if (disabled) return\n if (isSafari()) {\n event.currentTarget.focus()\n }\n send({ type: \"TAB_CLICK\", value })\n },\n })\n },\n\n getContentProps(props) {\n const { value } = props\n const selected = state.context.value === value\n return normalize.element({\n ...parts.content.attrs,\n dir: state.context.dir,\n id: dom.getContentId(state.context, value),\n tabIndex: composite ? 0 : -1,\n \"aria-labelledby\": dom.getTriggerId(state.context, value),\n role: \"tabpanel\",\n \"data-ownedby\": dom.getListId(state.context),\n \"data-selected\": dataAttr(selected),\n \"data-orientation\": state.context.orientation,\n hidden: !selected,\n })\n },\n\n getIndicatorProps() {\n return normalize.element({\n id: dom.getIndicatorId(state.context),\n ...parts.indicator.attrs,\n dir: state.context.dir,\n \"data-orientation\": state.context.orientation,\n style: {\n \"--transition-property\": \"left, right, top, bottom, width, height\",\n \"--left\": indicator.rect?.left,\n \"--top\": indicator.rect?.top,\n \"--width\": indicator.rect?.width,\n \"--height\": indicator.rect?.height,\n position: \"absolute\",\n willChange: \"var(--transition-property)\",\n transitionProperty: \"var(--transition-property)\",\n transitionDuration: indicator.transition ? \"var(--transition-duration, 150ms)\" : \"0ms\",\n transitionTimingFunction: \"var(--transition-timing-function)\",\n [isHorizontal ? \"left\" : \"top\"]: isHorizontal ? \"var(--left)\" : \"var(--top)\",\n },\n })\n },\n }\n}\n","import { createScope, itemById, nextById, prevById, queryAll } from \"@zag-js/dom-query\"\nimport { first, last } from \"@zag-js/utils\"\nimport type { MachineContext as Ctx } from \"./tabs.types\"\n\nexport const dom = createScope({\n getRootId: (ctx: Ctx) => ctx.ids?.root ?? `tabs:${ctx.id}`,\n getListId: (ctx: Ctx) => ctx.ids?.list ?? `tabs:${ctx.id}:list`,\n getContentId: (ctx: Ctx, id: string) => ctx.ids?.content ?? `tabs:${ctx.id}:content-${id}`,\n getTriggerId: (ctx: Ctx, id: string) => ctx.ids?.trigger ?? `tabs:${ctx.id}:trigger-${id}`,\n getIndicatorId: (ctx: Ctx) => ctx.ids?.indicator ?? `tabs:${ctx.id}:indicator`,\n\n getListEl: (ctx: Ctx) => dom.getById(ctx, dom.getListId(ctx)),\n getContentEl: (ctx: Ctx, id: string) => dom.getById(ctx, dom.getContentId(ctx, id)),\n getTriggerEl: (ctx: Ctx, id: string) => dom.getById(ctx, dom.getTriggerId(ctx, id)),\n getIndicatorEl: (ctx: Ctx) => dom.getById(ctx, dom.getIndicatorId(ctx)),\n\n getElements: (ctx: Ctx) => {\n const ownerId = CSS.escape(dom.getListId(ctx))\n const selector = `[role=tab][data-ownedby='${ownerId}']:not([disabled])`\n return queryAll(dom.getListEl(ctx), selector)\n },\n\n getFirstTriggerEl: (ctx: Ctx) => first(dom.getElements(ctx)),\n getLastTriggerEl: (ctx: Ctx) => last(dom.getElements(ctx)),\n getNextTriggerEl: (ctx: Ctx, id: string) => nextById(dom.getElements(ctx), dom.getTriggerId(ctx, id), ctx.loopFocus),\n getPrevTriggerEl: (ctx: Ctx, id: string) => prevById(dom.getElements(ctx), dom.getTriggerId(ctx, id), ctx.loopFocus),\n getSelectedContentEl: (ctx: Ctx) => {\n if (!ctx.value) return\n return dom.getContentEl(ctx, ctx.value)\n },\n getSelectedTriggerEl: (ctx: Ctx) => {\n if (!ctx.value) return\n return dom.getTriggerEl(ctx, ctx.value)\n },\n\n getOffsetRect: (el: HTMLElement | undefined) => {\n return {\n left: el?.offsetLeft ?? 0,\n top: el?.offsetTop ?? 0,\n width: el?.offsetWidth ?? 0,\n height: el?.offsetHeight ?? 0,\n }\n },\n\n getRectById: (ctx: Ctx, id: string) => {\n const tab = itemById(dom.getElements(ctx), dom.getTriggerId(ctx, id))\n return dom.resolveRect(dom.getOffsetRect(tab))\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 { clickIfLink } from \"@zag-js/dom-event\"\nimport { nextTick, raf, getFocusables } from \"@zag-js/dom-query\"\nimport { trackElementRect } from \"@zag-js/element-rect\"\nimport { compact, isEqual } from \"@zag-js/utils\"\nimport { dom } from \"./tabs.dom\"\nimport type { MachineContext, MachineState, UserDefinedContext } from \"./tabs.types\"\n\nconst { not } = guards\n\nexport function machine(userContext: UserDefinedContext) {\n const ctx = compact(userContext)\n return createMachine<MachineContext, MachineState>(\n {\n initial: \"idle\",\n\n context: {\n dir: \"ltr\",\n orientation: \"horizontal\",\n activationMode: \"automatic\",\n value: null,\n loopFocus: true,\n composite: true,\n ...ctx,\n focusedValue: ctx.value ?? null,\n ssr: true,\n indicatorState: {\n rendered: false,\n transition: false,\n rect: { left: \"0px\", top: \"0px\", width: \"0px\", height: \"0px\" },\n },\n },\n\n watch: {\n value: [\"allowIndicatorTransition\", \"syncIndicatorRect\", \"syncTabIndex\", \"clickIfLink\"],\n dir: [\"syncIndicatorRect\"],\n orientation: [\"syncIndicatorRect\"],\n },\n\n on: {\n SET_VALUE: {\n actions: \"setValue\",\n },\n CLEAR_VALUE: {\n actions: \"clearValue\",\n },\n SET_INDICATOR_RECT: {\n actions: \"setIndicatorRect\",\n },\n SYNC_TAB_INDEX: {\n actions: \"syncTabIndex\",\n },\n },\n\n created: [\"syncFocusedValue\"],\n\n entry: [\"checkRenderedElements\", \"syncIndicatorRect\", \"syncTabIndex\", \"syncSsr\"],\n\n exit: [\"cleanupObserver\"],\n\n states: {\n idle: {\n on: {\n TAB_FOCUS: {\n target: \"focused\",\n actions: \"setFocusedValue\",\n },\n TAB_CLICK: {\n target: \"focused\",\n actions: [\"setFocusedValue\", \"setValue\"],\n },\n },\n },\n focused: {\n on: {\n TAB_CLICK: {\n target: \"focused\",\n actions: [\"setFocusedValue\", \"setValue\"],\n },\n ARROW_PREV: [\n {\n guard: \"selectOnFocus\",\n actions: [\"focusPrevTab\", \"selectFocusedTab\"],\n },\n {\n actions: \"focusPrevTab\",\n },\n ],\n ARROW_NEXT: [\n {\n guard: \"selectOnFocus\",\n actions: [\"focusNextTab\", \"selectFocusedTab\"],\n },\n {\n actions: \"focusNextTab\",\n },\n ],\n HOME: [\n {\n guard: \"selectOnFocus\",\n actions: [\"focusFirstTab\", \"selectFocusedTab\"],\n },\n {\n actions: \"focusFirstTab\",\n },\n ],\n END: [\n {\n guard: \"selectOnFocus\",\n actions: [\"focusLastTab\", \"selectFocusedTab\"],\n },\n {\n actions: \"focusLastTab\",\n },\n ],\n ENTER: {\n guard: not(\"selectOnFocus\"),\n actions: \"selectFocusedTab\",\n },\n TAB_FOCUS: {\n actions: [\"setFocusedValue\"],\n },\n TAB_BLUR: {\n target: \"idle\",\n actions: \"clearFocusedValue\",\n },\n },\n },\n },\n },\n {\n guards: {\n selectOnFocus: (ctx) => ctx.activationMode === \"automatic\",\n },\n\n actions: {\n syncFocusedValue(ctx) {\n if (ctx.value != null && ctx.focusedValue == null) {\n ctx.focusedValue = ctx.value\n }\n },\n selectFocusedTab(ctx) {\n raf(() => {\n set.value(ctx, ctx.focusedValue)\n })\n },\n setFocusedValue(ctx, evt) {\n if (evt.value == null) return\n set.focusedValue(ctx, evt.value)\n },\n clearFocusedValue(ctx) {\n set.focusedValue(ctx, null)\n },\n setValue(ctx, evt) {\n set.value(ctx, evt.value)\n },\n clearValue(ctx) {\n set.value(ctx, null)\n },\n focusFirstTab(ctx) {\n raf(() => {\n dom.getFirstTriggerEl(ctx)?.focus()\n })\n },\n focusLastTab(ctx) {\n raf(() => {\n dom.getLastTriggerEl(ctx)?.focus()\n })\n },\n focusNextTab(ctx) {\n if (!ctx.focusedValue) return\n const triggerEl = dom.getNextTriggerEl(ctx, ctx.focusedValue)\n raf(() => {\n if (ctx.composite) {\n triggerEl?.focus()\n } else if (triggerEl?.dataset.value != null) {\n set.focusedValue(ctx, triggerEl.dataset.value)\n }\n })\n },\n focusPrevTab(ctx) {\n if (!ctx.focusedValue) return\n const triggerEl = dom.getPrevTriggerEl(ctx, ctx.focusedValue)\n raf(() => {\n if (ctx.composite) {\n triggerEl?.focus()\n } else if (triggerEl?.dataset.value != null) {\n set.focusedValue(ctx, triggerEl.dataset.value)\n }\n })\n },\n checkRenderedElements(ctx) {\n ctx.indicatorState.rendered = !!dom.getIndicatorEl(ctx)\n },\n syncTabIndex(ctx) {\n raf(() => {\n const contentEl = dom.getSelectedContentEl(ctx)\n if (!contentEl) return\n const focusables = getFocusables(contentEl)\n if (focusables.length > 0) {\n contentEl.removeAttribute(\"tabindex\")\n } else {\n contentEl.setAttribute(\"tabindex\", \"0\")\n }\n })\n },\n cleanupObserver(ctx) {\n ctx.indicatorCleanup?.()\n },\n allowIndicatorTransition(ctx) {\n ctx.indicatorState.transition = true\n },\n setIndicatorRect(ctx, evt) {\n const value = evt.id ?? ctx.value\n if (!ctx.indicatorState.rendered || !value) return\n\n const triggerEl = dom.getTriggerEl(ctx, value)\n if (!triggerEl) return\n\n ctx.indicatorState.rect = dom.getRectById(ctx, value)\n nextTick(() => {\n ctx.indicatorState.transition = false\n })\n },\n syncSsr(ctx) {\n ctx.ssr = false\n },\n syncIndicatorRect(ctx) {\n ctx.indicatorCleanup?.()\n\n const value = ctx.value\n if (!ctx.indicatorState.rendered || !value) return\n\n const triggerEl = dom.getSelectedTriggerEl(ctx)\n if (!triggerEl) return\n\n ctx.indicatorCleanup = trackElementRect(triggerEl, {\n getRect(el) {\n return dom.getOffsetRect(el)\n },\n onChange(rect) {\n ctx.indicatorState.rect = dom.resolveRect(rect)\n nextTick(() => {\n ctx.indicatorState.transition = false\n })\n },\n })\n },\n clickIfLink(ctx) {\n clickIfLink(dom.getSelectedTriggerEl(ctx))\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 focusChange: (ctx: MachineContext) => {\n if (ctx.focusedValue == null) return\n ctx.onFocusChange?.({ focusedValue: ctx.focusedValue })\n },\n}\n\nconst set = {\n value: (ctx: MachineContext, value: string | null) => {\n if (isEqual(value, ctx.value)) return\n ctx.value = value\n invoke.change(ctx)\n },\n focusedValue: (ctx: MachineContext, value: string | null) => {\n if (isEqual(value, ctx.focusedValue)) return\n ctx.focusedValue = value\n invoke.focusChange(ctx)\n },\n}\n","import { createProps } from \"@zag-js/types\"\nimport { createSplitProps } from \"@zag-js/utils\"\nimport type { ContentProps, TriggerProps, UserDefinedContext } from \"./tabs.types\"\n\nexport const props = createProps<UserDefinedContext>()([\n \"activationMode\",\n \"composite\",\n \"dir\",\n \"getRootNode\",\n \"id\",\n \"ids\",\n \"loopFocus\",\n \"onFocusChange\",\n \"onValueChange\",\n \"orientation\",\n \"translations\",\n \"value\",\n])\n\nexport const splitProps = createSplitProps<Partial<UserDefinedContext>>(props)\n\nexport const triggerProps = createProps<TriggerProps>()([\"disabled\", \"value\"])\nexport const splitTriggerProps = createSplitProps<TriggerProps>(triggerProps)\n\nexport const contentProps = createProps<ContentProps>()([\"value\"])\nexport const splitContentProps = createSplitProps<ContentProps>(contentProps)\n"],"mappings":"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","names":["import_dom_query","props","import_dom_event","import_dom_query","import_utils","ctx","import_utils"]}