@doist/reactist 33.1.0 → 33.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/reactist.cjs.development.js +378 -144
  3. package/dist/reactist.cjs.development.js.map +1 -1
  4. package/dist/reactist.cjs.production.min.js +1 -1
  5. package/dist/reactist.cjs.production.min.js.map +1 -1
  6. package/es/checkbox-field/checkbox-field.js.map +1 -1
  7. package/es/components/color-picker/deprecated-button/deprecated-button.js +0 -5
  8. package/es/components/color-picker/deprecated-button/deprecated-button.js.map +1 -1
  9. package/es/components/color-picker/deprecated-dropdown/dropdown.js +5 -4
  10. package/es/components/color-picker/deprecated-dropdown/dropdown.js.map +1 -1
  11. package/es/icons/alert-icon.js.map +1 -1
  12. package/es/icons/banner-icon.js.map +1 -1
  13. package/es/icons/close-icon.js.map +1 -1
  14. package/es/icons/password-hidden-icon.js.map +1 -1
  15. package/es/icons/password-visible-icon.js.map +1 -1
  16. package/es/select-field/select-field.js.map +1 -1
  17. package/es/stack/stack.js +3 -1
  18. package/es/stack/stack.js.map +1 -1
  19. package/es/tabs/tabs.js +354 -125
  20. package/es/tabs/tabs.js.map +1 -1
  21. package/es/text-area/text-area.js.map +1 -1
  22. package/es/toast/use-toasts.js +1 -1
  23. package/es/toast/use-toasts.js.map +1 -1
  24. package/es/tooltip/tooltip.js +6 -2
  25. package/es/tooltip/tooltip.js.map +1 -1
  26. package/es/utils/common-helpers.js +11 -6
  27. package/es/utils/common-helpers.js.map +1 -1
  28. package/es/utils/polymorphism.js.map +1 -1
  29. package/lib/checkbox-field/checkbox-field.d.ts +1 -0
  30. package/lib/checkbox-field/checkbox-field.js.map +1 -1
  31. package/lib/components/color-picker/deprecated-button/deprecated-button.js +0 -5
  32. package/lib/components/color-picker/deprecated-button/deprecated-button.js.map +1 -1
  33. package/lib/components/color-picker/deprecated-dropdown/dropdown.d.ts +5 -3
  34. package/lib/components/color-picker/deprecated-dropdown/dropdown.js +5 -5
  35. package/lib/components/color-picker/deprecated-dropdown/dropdown.js.map +1 -1
  36. package/lib/components/icons/ThreeDotsIcon.svg.d.ts +3 -9
  37. package/lib/icons/alert-icon.d.ts +2 -2
  38. package/lib/icons/alert-icon.js.map +1 -1
  39. package/lib/icons/banner-icon.d.ts +2 -2
  40. package/lib/icons/banner-icon.js.map +1 -1
  41. package/lib/icons/close-icon.d.ts +2 -2
  42. package/lib/icons/close-icon.js.map +1 -1
  43. package/lib/icons/password-hidden-icon.d.ts +2 -2
  44. package/lib/icons/password-hidden-icon.js.map +1 -1
  45. package/lib/icons/password-visible-icon.d.ts +2 -2
  46. package/lib/icons/password-visible-icon.js.map +1 -1
  47. package/lib/modal/modal-stories-components.d.ts +10 -9
  48. package/lib/select-field/select-field.js.map +1 -1
  49. package/lib/stack/stack.js +3 -1
  50. package/lib/stack/stack.js.map +1 -1
  51. package/lib/tabs/tabs.js +353 -124
  52. package/lib/tabs/tabs.js.map +1 -1
  53. package/lib/text-area/text-area.js.map +1 -1
  54. package/lib/toast/use-toasts.js +1 -1
  55. package/lib/toast/use-toasts.js.map +1 -1
  56. package/lib/tooltip/tooltip.d.ts +2 -1
  57. package/lib/tooltip/tooltip.js +6 -2
  58. package/lib/tooltip/tooltip.js.map +1 -1
  59. package/lib/utils/common-helpers.js +11 -6
  60. package/lib/utils/common-helpers.js.map +1 -1
  61. package/lib/utils/polymorphism.d.ts +1 -2
  62. package/lib/utils/polymorphism.js.map +1 -1
  63. package/lib/utils/storybook-helper.d.ts +4 -3
  64. package/package.json +23 -11
  65. /package/styles/{stack.css → divider.css} +0 -0
package/lib/tabs/tabs.js CHANGED
@@ -39,27 +39,60 @@ const TabsContext = /*#__PURE__*/React__namespace.createContext(null);
39
39
  /**
40
40
  * Used to group components that compose a set of tabs. There can only be one active tab within the same `<Tabs>` group.
41
41
  */
42
- function Tabs({
43
- children,
44
- selectedId,
45
- defaultSelectedId,
46
- variant = 'neutral',
47
- onSelectedIdChange
48
- }) {
49
- const tabStore = react.useTabStore({
50
- defaultSelectedId,
42
+ function Tabs(t0) {
43
+ const $ = reactCompilerRuntime.c(11);
44
+ const {
45
+ children,
51
46
  selectedId,
52
- setSelectedId: onSelectedIdChange
53
- });
54
- const actualSelectedId = tabStore.useState('selectedId');
55
- const memoizedTabState = React__namespace.useMemo(() => ({
56
- tabStore,
57
- variant,
58
- selectedId: selectedId ?? actualSelectedId ?? null
59
- }), [variant, tabStore, selectedId, actualSelectedId]);
60
- return /*#__PURE__*/React__namespace.createElement(TabsContext.Provider, {
61
- value: memoizedTabState
62
- }, children);
47
+ defaultSelectedId,
48
+ variant: t1,
49
+ onSelectedIdChange
50
+ } = t0;
51
+ const variant = t1 === undefined ? "neutral" : t1;
52
+ let t2;
53
+ if ($[0] !== defaultSelectedId || $[1] !== onSelectedIdChange || $[2] !== selectedId) {
54
+ t2 = {
55
+ defaultSelectedId,
56
+ selectedId,
57
+ setSelectedId: onSelectedIdChange
58
+ };
59
+ $[0] = defaultSelectedId;
60
+ $[1] = onSelectedIdChange;
61
+ $[2] = selectedId;
62
+ $[3] = t2;
63
+ } else {
64
+ t2 = $[3];
65
+ }
66
+ const tabStore = react.useTabStore(t2);
67
+ const actualSelectedId = react.useStoreState(tabStore, "selectedId");
68
+ const t3 = selectedId ?? actualSelectedId ?? null;
69
+ let t4;
70
+ if ($[4] !== t3 || $[5] !== tabStore || $[6] !== variant) {
71
+ t4 = {
72
+ tabStore,
73
+ variant,
74
+ selectedId: t3
75
+ };
76
+ $[4] = t3;
77
+ $[5] = tabStore;
78
+ $[6] = variant;
79
+ $[7] = t4;
80
+ } else {
81
+ t4 = $[7];
82
+ }
83
+ const memoizedTabState = t4;
84
+ let t5;
85
+ if ($[8] !== children || $[9] !== memoizedTabState) {
86
+ t5 = /*#__PURE__*/React__namespace.createElement(TabsContext.Provider, {
87
+ value: memoizedTabState
88
+ }, children);
89
+ $[8] = children;
90
+ $[9] = memoizedTabState;
91
+ $[10] = t5;
92
+ } else {
93
+ t5 = $[10];
94
+ }
95
+ return t5;
63
96
  }
64
97
  /**
65
98
  * Represents the individual tab elements within the group. Each `<Tab>` must have a corresponding `<TabPanel>` component.
@@ -121,64 +154,133 @@ const Tab = /*#__PURE__*/React__namespace.forwardRef(function Tab(t0, ref) {
121
154
  /**
122
155
  * A component used to group `<Tab>` elements together.
123
156
  */
124
- function TabList({
125
- children,
126
- space,
127
- width = 'maxContent',
128
- align = 'start',
129
- exceptionallySetClassName,
130
- ...props
131
- }) {
157
+ function TabList(t0) {
158
+ const $ = reactCompilerRuntime.c(44);
159
+ let children;
160
+ let exceptionallySetClassName;
161
+ let props;
162
+ let space;
163
+ let t1;
164
+ let t2;
165
+ if ($[0] !== t0) {
166
+ ({
167
+ children,
168
+ space,
169
+ width: t1,
170
+ align: t2,
171
+ exceptionallySetClassName,
172
+ ...props
173
+ } = t0);
174
+ $[0] = t0;
175
+ $[1] = children;
176
+ $[2] = exceptionallySetClassName;
177
+ $[3] = props;
178
+ $[4] = space;
179
+ $[5] = t1;
180
+ $[6] = t2;
181
+ } else {
182
+ children = $[1];
183
+ exceptionallySetClassName = $[2];
184
+ props = $[3];
185
+ space = $[4];
186
+ t1 = $[5];
187
+ t2 = $[6];
188
+ }
189
+ const width = t1 === undefined ? "maxContent" : t1;
190
+ const align = t2 === undefined ? "start" : t2;
132
191
  const tabListRef = React__namespace.useRef(null);
133
192
  const tabListPrevWidthRef = React__namespace.useRef(0);
134
193
  const tabContextValue = React__namespace.useContext(TabsContext);
135
194
  const [selectedTabElement, setSelectedTabElement] = React__namespace.useState(null);
136
- const [selectedTabStyle, setSelectedTabStyle] = React__namespace.useState({});
137
- const selectedId = tabContextValue?.tabStore.useState('selectedId');
138
- const updateSelectedTabPosition = React__namespace.useCallback(function updateSelectedTabPositionCallback() {
139
- if (!selectedId || !tabListRef.current) {
140
- return;
141
- }
142
- const tabs = tabListRef.current.querySelectorAll('[role="tab"]');
143
- const selectedTab = Array.from(tabs).find(tab => tab.getAttribute('id') === selectedId);
144
- if (selectedTab) {
145
- setSelectedTabElement(selectedTab);
146
- setSelectedTabStyle({
147
- left: `${selectedTab.offsetLeft}px`,
148
- width: `${selectedTab.offsetWidth}px`
149
- });
150
- }
151
- }, [selectedId]);
152
- React__namespace.useEffect(function updateSelectedTabPositionOnTabChange() {
153
- updateSelectedTabPosition();
154
- },
155
- // `selectedId` is a dependency to ensure the effect runs when the selected tab changes
156
- [selectedId, updateSelectedTabPosition]);
157
- React__namespace.useEffect(function observeTabListWidthChange() {
158
- let animationFrameId = null;
159
- const tabListObserver = new ResizeObserver(([entry]) => {
160
- const width_0 = entry?.contentRect.width;
161
- if (width_0 && tabListPrevWidthRef.current !== width_0) {
162
- tabListPrevWidthRef.current = width_0;
163
- if (animationFrameId !== null) {
164
- cancelAnimationFrame(animationFrameId);
165
- }
166
- animationFrameId = requestAnimationFrame(() => {
167
- updateSelectedTabPosition();
168
- animationFrameId = null;
195
+ let t3;
196
+ if ($[7] === Symbol.for("react.memo_cache_sentinel")) {
197
+ t3 = {};
198
+ $[7] = t3;
199
+ } else {
200
+ t3 = $[7];
201
+ }
202
+ const [selectedTabStyle, setSelectedTabStyle] = React__namespace.useState(t3);
203
+ const selectedId = react.useStoreState(tabContextValue?.tabStore, "selectedId");
204
+ let t4;
205
+ if ($[8] !== selectedId) {
206
+ t4 = function updateSelectedTabPositionCallback() {
207
+ if (!selectedId || !tabListRef.current) {
208
+ return;
209
+ }
210
+ const tabs = tabListRef.current.querySelectorAll("[role=\"tab\"]");
211
+ const selectedTab = Array.from(tabs).find(tab => tab.getAttribute("id") === selectedId);
212
+ if (selectedTab) {
213
+ setSelectedTabElement(selectedTab);
214
+ setSelectedTabStyle({
215
+ left: `${selectedTab.offsetLeft}px`,
216
+ width: `${selectedTab.offsetWidth}px`
169
217
  });
170
218
  }
171
- });
172
- if (tabListRef.current) {
173
- tabListObserver.observe(tabListRef.current);
174
- }
175
- return function cleanupResizeObserver() {
176
- if (animationFrameId) {
177
- cancelAnimationFrame(animationFrameId);
219
+ };
220
+ $[8] = selectedId;
221
+ $[9] = t4;
222
+ } else {
223
+ t4 = $[9];
224
+ }
225
+ const updateSelectedTabPosition = t4;
226
+ let t5;
227
+ if ($[10] !== updateSelectedTabPosition) {
228
+ t5 = function updateSelectedTabPositionOnTabChange() {
229
+ updateSelectedTabPosition();
230
+ };
231
+ $[10] = updateSelectedTabPosition;
232
+ $[11] = t5;
233
+ } else {
234
+ t5 = $[11];
235
+ }
236
+ let t6;
237
+ if ($[12] !== selectedId || $[13] !== updateSelectedTabPosition) {
238
+ t6 = [selectedId, updateSelectedTabPosition];
239
+ $[12] = selectedId;
240
+ $[13] = updateSelectedTabPosition;
241
+ $[14] = t6;
242
+ } else {
243
+ t6 = $[14];
244
+ }
245
+ React__namespace.useEffect(t5, t6);
246
+ let t7;
247
+ let t8;
248
+ if ($[15] !== updateSelectedTabPosition) {
249
+ t7 = function observeTabListWidthChange() {
250
+ let animationFrameId = null;
251
+ const tabListObserver = new ResizeObserver(t9 => {
252
+ const [entry] = t9;
253
+ const width_0 = entry?.contentRect.width;
254
+ if (width_0 && tabListPrevWidthRef.current !== width_0) {
255
+ tabListPrevWidthRef.current = width_0;
256
+ if (animationFrameId !== null) {
257
+ cancelAnimationFrame(animationFrameId);
258
+ }
259
+ animationFrameId = requestAnimationFrame(() => {
260
+ updateSelectedTabPosition();
261
+ animationFrameId = null;
262
+ });
263
+ }
264
+ });
265
+ if (tabListRef.current) {
266
+ tabListObserver.observe(tabListRef.current);
178
267
  }
179
- tabListObserver.disconnect();
268
+ return function cleanupResizeObserver() {
269
+ if (animationFrameId) {
270
+ cancelAnimationFrame(animationFrameId);
271
+ }
272
+ tabListObserver.disconnect();
273
+ };
180
274
  };
181
- }, [updateSelectedTabPosition]);
275
+ t8 = [updateSelectedTabPosition];
276
+ $[15] = updateSelectedTabPosition;
277
+ $[16] = t7;
278
+ $[17] = t8;
279
+ } else {
280
+ t7 = $[16];
281
+ t8 = $[17];
282
+ }
283
+ React__namespace.useEffect(t7, t8);
182
284
  if (!tabContextValue) {
183
285
  return null;
184
286
  }
@@ -186,83 +288,210 @@ function TabList({
186
288
  tabStore,
187
289
  variant
188
290
  } = tabContextValue;
189
- const justifyContentAlignMap = {
190
- start: 'flexStart',
191
- end: 'flexEnd',
192
- center: 'center'
193
- };
194
- return (
195
- /*#__PURE__*/
196
- // This extra <Box> not only provides alignment for the tabs, but also prevents <Inline>'s
197
- // negative margins from collapsing when used in a flex container which will render the
198
- // track with the wrong height
199
- React__namespace.createElement(box.Box, {
200
- display: "flex",
201
- justifyContent: width === 'full' ? 'center' : justifyContentAlignMap[align]
202
- }, /*#__PURE__*/React__namespace.createElement(react.TabList, _extends__default["default"]({
203
- store: tabStore,
204
- render: /*#__PURE__*/React__namespace.createElement(box.Box, {
205
- position: "relative",
206
- width: width,
207
- className: exceptionallySetClassName
208
- }),
209
- ref: tabListRef
210
- }, props), /*#__PURE__*/React__namespace.createElement(box.Box, {
211
- className: [tabs_module["default"].track, tabs_module["default"][`track-${variant}`]]
212
- }), selectedTabElement ? /*#__PURE__*/React__namespace.createElement(box.Box, {
291
+ let t9;
292
+ if ($[18] === Symbol.for("react.memo_cache_sentinel")) {
293
+ t9 = {
294
+ start: "flexStart",
295
+ end: "flexEnd",
296
+ center: "center"
297
+ };
298
+ $[18] = t9;
299
+ } else {
300
+ t9 = $[18];
301
+ }
302
+ const justifyContentAlignMap = t9;
303
+ const t10 = width === "full" ? "center" : justifyContentAlignMap[align];
304
+ let t11;
305
+ if ($[19] !== exceptionallySetClassName || $[20] !== width) {
306
+ t11 = /*#__PURE__*/React__namespace.createElement(box.Box, {
307
+ position: "relative",
308
+ width: width,
309
+ className: exceptionallySetClassName
310
+ });
311
+ $[19] = exceptionallySetClassName;
312
+ $[20] = width;
313
+ $[21] = t11;
314
+ } else {
315
+ t11 = $[21];
316
+ }
317
+ const t12 = tabs_module["default"][`track-${variant}`];
318
+ let t13;
319
+ if ($[22] !== t12) {
320
+ t13 = /*#__PURE__*/React__namespace.createElement(box.Box, {
321
+ className: [tabs_module["default"].track, t12]
322
+ });
323
+ $[22] = t12;
324
+ $[23] = t13;
325
+ } else {
326
+ t13 = $[23];
327
+ }
328
+ let t14;
329
+ if ($[24] !== selectedTabElement || $[25] !== selectedTabStyle || $[26] !== variant) {
330
+ t14 = selectedTabElement ? /*#__PURE__*/React__namespace.createElement(box.Box, {
213
331
  className: [tabs_module["default"].selected, tabs_module["default"][`selected-${variant}`]],
214
332
  style: selectedTabStyle
215
- }) : null, /*#__PURE__*/React__namespace.createElement(inline.Inline, {
333
+ }) : null;
334
+ $[24] = selectedTabElement;
335
+ $[25] = selectedTabStyle;
336
+ $[26] = variant;
337
+ $[27] = t14;
338
+ } else {
339
+ t14 = $[27];
340
+ }
341
+ const t15 = width === "full" ? tabs_module["default"].fullTabList : null;
342
+ let t16;
343
+ if ($[28] !== t15) {
344
+ t16 = classNames__default["default"](t15);
345
+ $[28] = t15;
346
+ $[29] = t16;
347
+ } else {
348
+ t16 = $[29];
349
+ }
350
+ let t17;
351
+ if ($[30] !== children || $[31] !== space || $[32] !== t16) {
352
+ t17 = /*#__PURE__*/React__namespace.createElement(inline.Inline, {
216
353
  space: space,
217
- exceptionallySetClassName: classNames__default["default"](width === 'full' ? tabs_module["default"].fullTabList : null)
218
- }, children)))
219
- );
354
+ exceptionallySetClassName: t16
355
+ }, children);
356
+ $[30] = children;
357
+ $[31] = space;
358
+ $[32] = t16;
359
+ $[33] = t17;
360
+ } else {
361
+ t17 = $[33];
362
+ }
363
+ let t18;
364
+ if ($[34] !== props || $[35] !== t11 || $[36] !== t13 || $[37] !== t14 || $[38] !== t17 || $[39] !== tabStore) {
365
+ t18 = /*#__PURE__*/React__namespace.createElement(react.TabList, _extends__default["default"]({
366
+ store: tabStore,
367
+ render: t11,
368
+ ref: tabListRef
369
+ }, props), t13, t14, t17);
370
+ $[34] = props;
371
+ $[35] = t11;
372
+ $[36] = t13;
373
+ $[37] = t14;
374
+ $[38] = t17;
375
+ $[39] = tabStore;
376
+ $[40] = t18;
377
+ } else {
378
+ t18 = $[40];
379
+ }
380
+ let t19;
381
+ if ($[41] !== t10 || $[42] !== t18) {
382
+ t19 = /*#__PURE__*/React__namespace.createElement(box.Box, {
383
+ display: "flex",
384
+ justifyContent: t10
385
+ }, t18);
386
+ $[41] = t10;
387
+ $[42] = t18;
388
+ $[43] = t19;
389
+ } else {
390
+ t19 = $[43];
391
+ }
392
+ return t19;
220
393
  }
221
394
  /**
222
395
  * Used to define the content to be rendered when a tab is active. Each `<TabPanel>` must have a
223
396
  * corresponding `<Tab>` component.
224
397
  */
225
- const TabPanel = /*#__PURE__*/React__namespace.forwardRef(function TabPanel({
226
- children,
227
- id,
228
- renderMode = 'always',
229
- ...props
230
- }, ref) {
398
+ const TabPanel = /*#__PURE__*/React__namespace.forwardRef(function TabPanel(t0, ref) {
399
+ const $ = reactCompilerRuntime.c(16);
400
+ let children;
401
+ let id;
402
+ let props;
403
+ let t1;
404
+ if ($[0] !== t0) {
405
+ ({
406
+ children,
407
+ id,
408
+ renderMode: t1,
409
+ ...props
410
+ } = t0);
411
+ $[0] = t0;
412
+ $[1] = children;
413
+ $[2] = id;
414
+ $[3] = props;
415
+ $[4] = t1;
416
+ } else {
417
+ children = $[1];
418
+ id = $[2];
419
+ props = $[3];
420
+ t1 = $[4];
421
+ }
422
+ const renderMode = t1 === undefined ? "always" : t1;
231
423
  const tabContextValue = React__namespace.useContext(TabsContext);
232
424
  const [tabRendered, setTabRendered] = React__namespace.useState(false);
233
- const selectedId = tabContextValue?.tabStore.useState('selectedId');
425
+ const selectedId = react.useStoreState(tabContextValue?.tabStore, "selectedId");
234
426
  const tabIsActive = selectedId === id;
235
- React__namespace.useEffect(function trackTabRenderedState() {
236
- if (!tabRendered && tabIsActive) {
237
- // eslint-disable-next-line react-hooks/set-state-in-effect
238
- setTabRendered(true);
239
- }
240
- }, [tabRendered, tabIsActive]);
427
+ let t2;
428
+ let t3;
429
+ if ($[5] !== tabIsActive || $[6] !== tabRendered) {
430
+ t2 = function trackTabRenderedState() {
431
+ if (!tabRendered && tabIsActive) {
432
+ setTabRendered(true);
433
+ }
434
+ };
435
+ t3 = [tabRendered, tabIsActive];
436
+ $[5] = tabIsActive;
437
+ $[6] = tabRendered;
438
+ $[7] = t2;
439
+ $[8] = t3;
440
+ } else {
441
+ t2 = $[7];
442
+ t3 = $[8];
443
+ }
444
+ React__namespace.useEffect(t2, t3);
241
445
  if (!tabContextValue) {
242
446
  return null;
243
447
  }
244
448
  const {
245
449
  tabStore
246
450
  } = tabContextValue;
247
- const shouldRender = renderMode === 'always' || renderMode === 'active' && tabIsActive || renderMode === 'lazy' && (tabIsActive || tabRendered);
248
- return shouldRender ? /*#__PURE__*/React__namespace.createElement(react.TabPanel, _extends__default["default"]({}, props, {
249
- tabId: id,
250
- store: tabStore,
251
- ref: ref
252
- }), children) : null;
451
+ const shouldRender = renderMode === "always" || renderMode === "active" && tabIsActive || renderMode === "lazy" && (tabIsActive || tabRendered);
452
+ let t4;
453
+ if ($[9] !== children || $[10] !== id || $[11] !== props || $[12] !== ref || $[13] !== shouldRender || $[14] !== tabStore) {
454
+ t4 = shouldRender ? /*#__PURE__*/React__namespace.createElement(react.TabPanel, _extends__default["default"]({}, props, {
455
+ tabId: id,
456
+ store: tabStore,
457
+ ref: ref
458
+ }), children) : null;
459
+ $[9] = children;
460
+ $[10] = id;
461
+ $[11] = props;
462
+ $[12] = ref;
463
+ $[13] = shouldRender;
464
+ $[14] = tabStore;
465
+ $[15] = t4;
466
+ } else {
467
+ t4 = $[15];
468
+ }
469
+ return t4;
253
470
  });
254
471
  /**
255
472
  * Allows content to be rendered based on the current tab being selected while outside of the
256
473
  * TabPanel component. Can be placed freely within the main `<Tabs>` component.
257
474
  */
258
- function TabAwareSlot({
259
- children
260
- }) {
475
+ function TabAwareSlot(t0) {
476
+ const $ = reactCompilerRuntime.c(4);
477
+ const {
478
+ children
479
+ } = t0;
261
480
  const tabContextValue = React__namespace.useContext(TabsContext);
262
- const selectedId = tabContextValue?.tabStore.useState('selectedId');
263
- return tabContextValue ? children({
264
- selectedId
265
- }) : null;
481
+ const selectedId = react.useStoreState(tabContextValue?.tabStore, "selectedId");
482
+ let t1;
483
+ if ($[0] !== children || $[1] !== selectedId || $[2] !== tabContextValue) {
484
+ t1 = tabContextValue ? children({
485
+ selectedId
486
+ }) : null;
487
+ $[0] = children;
488
+ $[1] = selectedId;
489
+ $[2] = tabContextValue;
490
+ $[3] = t1;
491
+ } else {
492
+ t1 = $[3];
493
+ }
494
+ return t1;
266
495
  }
267
496
 
268
497
  exports.Tab = Tab;
@@ -1 +1 @@
1
- {"version":3,"file":"tabs.js","sources":["../../src/tabs/tabs.tsx"],"sourcesContent":["import * as React from 'react'\n\nimport {\n Tab as BaseTab,\n TabList as BaseTabList,\n TabPanel as BaseTabPanel,\n useTabStore,\n} from '@ariakit/react'\nimport classNames from 'classnames'\n\nimport { Box } from '../box'\nimport { Inline } from '../inline'\n\nimport styles from './tabs.module.css'\n\nimport type {\n TabPanelProps as BaseTabPanelProps,\n TabProps as BaseTabProps,\n TabStore,\n} from '@ariakit/react'\nimport type { BoxJustifyContent } from '../box'\nimport type { ObfuscatedClassName, Space } from '../utils/common-types'\n\ntype TabsContextValue = Required<Pick<TabsProps, 'variant'>> & {\n tabStore: TabStore\n}\n\nconst TabsContext = React.createContext<TabsContextValue | null>(null)\n\ninterface TabsProps {\n /**\n * The `<Tabs>` component must be composed from a `<TabList>` and corresponding `<TabPanel>`\n * components\n */\n children: React.ReactNode\n\n /**\n * Determines the look and feel of the tabs\n */\n variant?: 'themed' | 'neutral'\n\n /**\n * The id of the selected tab. Assigning a value makes this a controlled component\n */\n selectedId?: string | null\n\n /**\n * The tab to initially select. This can be used if the component should not\n * be a controlled component but needs to have a tab selected\n */\n defaultSelectedId?: string | null\n\n /**\n * Called with the tab id when a tab is selected\n */\n onSelectedIdChange?: (selectedId: string | null | undefined) => void\n}\n\n/**\n * Used to group components that compose a set of tabs. There can only be one active tab within the same `<Tabs>` group.\n */\nfunction Tabs({\n children,\n selectedId,\n defaultSelectedId,\n variant = 'neutral',\n onSelectedIdChange,\n}: TabsProps): React.ReactElement {\n const tabStore = useTabStore({\n defaultSelectedId,\n selectedId,\n setSelectedId: onSelectedIdChange,\n })\n const actualSelectedId = tabStore.useState('selectedId')\n\n const memoizedTabState = React.useMemo(\n () => ({ tabStore, variant, selectedId: selectedId ?? actualSelectedId ?? null }),\n [variant, tabStore, selectedId, actualSelectedId],\n )\n return <TabsContext.Provider value={memoizedTabState}>{children}</TabsContext.Provider>\n}\n\ninterface TabProps\n extends ObfuscatedClassName,\n Omit<BaseTabProps, 'store' | 'className' | 'children' | 'id'> {\n /**\n * The content to render inside of the tab button\n */\n children: React.ReactNode\n\n /**\n * The tab's identifier. This must match its corresponding `<TabPanel>`'s id\n */\n id: string\n\n /**\n * Defines wether or not the tab is disabled.\n */\n disabled?: boolean\n}\n\n/**\n * Represents the individual tab elements within the group. Each `<Tab>` must have a corresponding `<TabPanel>` component.\n */\nconst Tab = React.forwardRef<HTMLButtonElement, TabProps>(function Tab(\n { children, id, disabled, exceptionallySetClassName, render, onClick },\n ref,\n): React.ReactElement | null {\n const tabContextValue = React.useContext(TabsContext)\n if (!tabContextValue) return null\n\n const { variant, tabStore } = tabContextValue\n const className = classNames(exceptionallySetClassName, styles.tab, styles[`tab-${variant}`])\n\n return (\n <BaseTab\n id={id}\n ref={ref}\n disabled={disabled}\n store={tabStore}\n render={render}\n className={className}\n onClick={onClick}\n >\n {children}\n </BaseTab>\n )\n})\n\ntype TabListProps = (\n | {\n /** Labels the tab list for assistive technologies. This must be provided if `aria-labelledby` is omitted. */\n 'aria-label': string\n }\n | {\n /**\n * One or more element IDs used to label the tab list for assistive technologies. Required if\n * `aria-label` is omitted.\n */\n 'aria-labelledby': string\n }\n | {\n /**\n * For cases where multiple instances of the tab list exists, the duplicates may be marked as aria-hidden\n */\n 'aria-hidden': boolean\n }\n) & {\n /**\n * A list of `<Tab>` elements\n */\n children: React.ReactNode\n\n /**\n * Controls the spacing between tabs\n */\n space?: Space\n\n /**\n * The width of the tab list.\n *\n * - `'maxContent'`: Each tab will be as wide as its content.\n * - `'full'`: Each tab will be as wide as the tab list.\n *\n * @default 'maxContent'\n */\n width?: 'maxContent' | 'full'\n\n /**\n * How to align the tabs within the tab list.\n *\n * @default 'start'\n */\n align?: 'start' | 'center' | 'end'\n} & ObfuscatedClassName\n\n/**\n * A component used to group `<Tab>` elements together.\n */\nfunction TabList({\n children,\n space,\n width = 'maxContent',\n align = 'start',\n exceptionallySetClassName,\n ...props\n}: TabListProps): React.ReactElement | null {\n const tabListRef = React.useRef<HTMLDivElement | null>(null)\n const tabListPrevWidthRef = React.useRef(0)\n\n const tabContextValue = React.useContext(TabsContext)\n\n const [selectedTabElement, setSelectedTabElement] = React.useState<HTMLElement | null>(null)\n const [selectedTabStyle, setSelectedTabStyle] = React.useState<React.CSSProperties>({})\n\n const selectedId = tabContextValue?.tabStore.useState('selectedId')\n\n const updateSelectedTabPosition = React.useCallback(\n function updateSelectedTabPositionCallback() {\n if (!selectedId || !tabListRef.current) {\n return\n }\n\n const tabs = tabListRef.current.querySelectorAll('[role=\"tab\"]')\n\n const selectedTab = Array.from(tabs).find(\n (tab) => tab.getAttribute('id') === selectedId,\n ) as HTMLElement | undefined\n\n if (selectedTab) {\n setSelectedTabElement(selectedTab)\n setSelectedTabStyle({\n left: `${selectedTab.offsetLeft}px`,\n width: `${selectedTab.offsetWidth}px`,\n })\n }\n },\n [selectedId],\n )\n\n React.useEffect(\n function updateSelectedTabPositionOnTabChange() {\n updateSelectedTabPosition()\n },\n // `selectedId` is a dependency to ensure the effect runs when the selected tab changes\n [selectedId, updateSelectedTabPosition],\n )\n\n React.useEffect(\n function observeTabListWidthChange() {\n let animationFrameId: number | null = null\n\n const tabListObserver = new ResizeObserver(([entry]) => {\n const width = entry?.contentRect.width\n\n if (width && tabListPrevWidthRef.current !== width) {\n tabListPrevWidthRef.current = width\n\n if (animationFrameId !== null) {\n cancelAnimationFrame(animationFrameId)\n }\n\n animationFrameId = requestAnimationFrame(() => {\n updateSelectedTabPosition()\n animationFrameId = null\n })\n }\n })\n\n if (tabListRef.current) {\n tabListObserver.observe(tabListRef.current)\n }\n\n return function cleanupResizeObserver() {\n if (animationFrameId) {\n cancelAnimationFrame(animationFrameId)\n }\n\n tabListObserver.disconnect()\n }\n },\n [updateSelectedTabPosition],\n )\n\n if (!tabContextValue) {\n return null\n }\n\n const { tabStore, variant } = tabContextValue\n\n const justifyContentAlignMap: Record<typeof align, BoxJustifyContent> = {\n start: 'flexStart',\n end: 'flexEnd',\n center: 'center',\n }\n\n return (\n // This extra <Box> not only provides alignment for the tabs, but also prevents <Inline>'s\n // negative margins from collapsing when used in a flex container which will render the\n // track with the wrong height\n <Box\n display=\"flex\"\n justifyContent={width === 'full' ? 'center' : justifyContentAlignMap[align]}\n >\n <BaseTabList\n store={tabStore}\n render={\n <Box position=\"relative\" width={width} className={exceptionallySetClassName} />\n }\n ref={tabListRef}\n {...props}\n >\n <Box className={[styles.track, styles[`track-${variant}`]]} />\n {selectedTabElement ? (\n <Box\n className={[styles.selected, styles[`selected-${variant}`]]}\n style={selectedTabStyle}\n />\n ) : null}\n <Inline\n space={space}\n exceptionallySetClassName={classNames(\n width === 'full' ? styles.fullTabList : null,\n )}\n >\n {children}\n </Inline>\n </BaseTabList>\n </Box>\n )\n}\n\ninterface TabPanelProps\n extends React.HTMLAttributes<HTMLDivElement>,\n Pick<BaseTabPanelProps, 'render'> {\n /** The content to be rendered inside the tab */\n children?: React.ReactNode\n\n /** The tabPanel's identifier. This must match its corresponding `<Tab>`'s id */\n id: string\n\n /**\n * By default, the tab panel's content is always rendered even when they are not active. This\n * behaviour can be changed to 'active', which renders only when the tab is active, and 'lazy',\n * meaning while inactive tab panels will not be rendered initially, they will remain mounted\n * once they are active until the entire Tabs tree is unmounted.\n */\n renderMode?: 'always' | 'active' | 'lazy'\n}\n\n/**\n * Used to define the content to be rendered when a tab is active. Each `<TabPanel>` must have a\n * corresponding `<Tab>` component.\n */\nconst TabPanel = React.forwardRef<HTMLDivElement, TabPanelProps>(function TabPanel(\n { children, id, renderMode = 'always', ...props },\n ref,\n): React.ReactElement | null {\n const tabContextValue = React.useContext(TabsContext)\n const [tabRendered, setTabRendered] = React.useState(false)\n const selectedId = tabContextValue?.tabStore.useState('selectedId')\n const tabIsActive = selectedId === id\n\n React.useEffect(\n function trackTabRenderedState() {\n if (!tabRendered && tabIsActive) {\n // eslint-disable-next-line react-hooks/set-state-in-effect\n setTabRendered(true)\n }\n },\n [tabRendered, tabIsActive],\n )\n\n if (!tabContextValue) {\n return null\n }\n\n const { tabStore } = tabContextValue\n const shouldRender =\n renderMode === 'always' ||\n (renderMode === 'active' && tabIsActive) ||\n (renderMode === 'lazy' && (tabIsActive || tabRendered))\n\n return shouldRender ? (\n <BaseTabPanel {...props} tabId={id} store={tabStore} ref={ref}>\n {children}\n </BaseTabPanel>\n ) : null\n})\n\ntype TabAwareSlotProps = {\n /**\n * Render prop used to provide the content to be rendered inside the slot. The render prop will\n * be called with the current `selectedId`\n */\n children: (provided: { selectedId?: string | null }) => React.ReactElement | null\n}\n\n/**\n * Allows content to be rendered based on the current tab being selected while outside of the\n * TabPanel component. Can be placed freely within the main `<Tabs>` component.\n */\nfunction TabAwareSlot({ children }: TabAwareSlotProps): React.ReactElement | null {\n const tabContextValue = React.useContext(TabsContext)\n const selectedId = tabContextValue?.tabStore.useState('selectedId')\n return tabContextValue ? children({ selectedId }) : null\n}\n\nexport { Tab, TabAwareSlot, TabList, TabPanel, Tabs }\n"],"names":["TabsContext","React","createContext","Tabs","children","selectedId","defaultSelectedId","variant","onSelectedIdChange","tabStore","useTabStore","setSelectedId","actualSelectedId","useState","memoizedTabState","useMemo","createElement","Provider","value","Tab","forwardRef","t0","ref","$","_c","id","disabled","exceptionallySetClassName","render","onClick","tabContextValue","useContext","t1","styles","t2","classNames","tab","className","t3","BaseTab","TabList","space","width","align","props","tabListRef","useRef","tabListPrevWidthRef","selectedTabElement","setSelectedTabElement","selectedTabStyle","setSelectedTabStyle","updateSelectedTabPosition","useCallback","updateSelectedTabPositionCallback","current","tabs","querySelectorAll","selectedTab","Array","from","find","getAttribute","left","offsetLeft","offsetWidth","useEffect","updateSelectedTabPositionOnTabChange","observeTabListWidthChange","animationFrameId","tabListObserver","ResizeObserver","entry","contentRect","cancelAnimationFrame","requestAnimationFrame","observe","cleanupResizeObserver","disconnect","justifyContentAlignMap","start","end","center","Box","display","justifyContent","BaseTabList","_extends","store","position","track","selected","style","Inline","fullTabList","TabPanel","renderMode","tabRendered","setTabRendered","tabIsActive","trackTabRenderedState","shouldRender","BaseTabPanel","tabId","TabAwareSlot"],"mappings":"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"}
1
+ {"version":3,"file":"tabs.js","sources":["../../src/tabs/tabs.tsx"],"sourcesContent":["import * as React from 'react'\n\nimport {\n Tab as BaseTab,\n TabList as BaseTabList,\n TabPanel as BaseTabPanel,\n useStoreState,\n useTabStore,\n} from '@ariakit/react'\nimport classNames from 'classnames'\n\nimport { Box } from '../box'\nimport { Inline } from '../inline'\n\nimport styles from './tabs.module.css'\n\nimport type {\n TabPanelProps as BaseTabPanelProps,\n TabProps as BaseTabProps,\n TabStore,\n} from '@ariakit/react'\nimport type { BoxJustifyContent } from '../box'\nimport type { ObfuscatedClassName, Space } from '../utils/common-types'\n\ntype TabsContextValue = Required<Pick<TabsProps, 'variant'>> & {\n tabStore: TabStore\n}\n\nconst TabsContext = React.createContext<TabsContextValue | null>(null)\n\ninterface TabsProps {\n /**\n * The `<Tabs>` component must be composed from a `<TabList>` and corresponding `<TabPanel>`\n * components\n */\n children: React.ReactNode\n\n /**\n * Determines the look and feel of the tabs\n */\n variant?: 'themed' | 'neutral'\n\n /**\n * The id of the selected tab. Assigning a value makes this a controlled component\n */\n selectedId?: string | null\n\n /**\n * The tab to initially select. This can be used if the component should not\n * be a controlled component but needs to have a tab selected\n */\n defaultSelectedId?: string | null\n\n /**\n * Called with the tab id when a tab is selected\n */\n onSelectedIdChange?: (selectedId: string | null | undefined) => void\n}\n\n/**\n * Used to group components that compose a set of tabs. There can only be one active tab within the same `<Tabs>` group.\n */\nfunction Tabs({\n children,\n selectedId,\n defaultSelectedId,\n variant = 'neutral',\n onSelectedIdChange,\n}: TabsProps): React.ReactElement {\n const tabStore = useTabStore({\n defaultSelectedId,\n selectedId,\n setSelectedId: onSelectedIdChange,\n })\n const actualSelectedId = useStoreState(tabStore, 'selectedId')\n\n const memoizedTabState = React.useMemo(\n () => ({ tabStore, variant, selectedId: selectedId ?? actualSelectedId ?? null }),\n [variant, tabStore, selectedId, actualSelectedId],\n )\n return <TabsContext.Provider value={memoizedTabState}>{children}</TabsContext.Provider>\n}\n\ninterface TabProps\n extends ObfuscatedClassName,\n Omit<BaseTabProps, 'store' | 'className' | 'children' | 'id'> {\n /**\n * The content to render inside of the tab button\n */\n children: React.ReactNode\n\n /**\n * The tab's identifier. This must match its corresponding `<TabPanel>`'s id\n */\n id: string\n\n /**\n * Defines wether or not the tab is disabled.\n */\n disabled?: boolean\n}\n\n/**\n * Represents the individual tab elements within the group. Each `<Tab>` must have a corresponding `<TabPanel>` component.\n */\nconst Tab = React.forwardRef<HTMLButtonElement, TabProps>(function Tab(\n { children, id, disabled, exceptionallySetClassName, render, onClick },\n ref,\n): React.ReactElement | null {\n const tabContextValue = React.useContext(TabsContext)\n if (!tabContextValue) return null\n\n const { variant, tabStore } = tabContextValue\n const className = classNames(exceptionallySetClassName, styles.tab, styles[`tab-${variant}`])\n\n return (\n <BaseTab\n id={id}\n ref={ref}\n disabled={disabled}\n store={tabStore}\n render={render}\n className={className}\n onClick={onClick}\n >\n {children}\n </BaseTab>\n )\n})\n\ntype TabListProps = (\n | {\n /** Labels the tab list for assistive technologies. This must be provided if `aria-labelledby` is omitted. */\n 'aria-label': string\n }\n | {\n /**\n * One or more element IDs used to label the tab list for assistive technologies. Required if\n * `aria-label` is omitted.\n */\n 'aria-labelledby': string\n }\n | {\n /**\n * For cases where multiple instances of the tab list exists, the duplicates may be marked as aria-hidden\n */\n 'aria-hidden': boolean\n }\n) & {\n /**\n * A list of `<Tab>` elements\n */\n children: React.ReactNode\n\n /**\n * Controls the spacing between tabs\n */\n space?: Space\n\n /**\n * The width of the tab list.\n *\n * - `'maxContent'`: Each tab will be as wide as its content.\n * - `'full'`: Each tab will be as wide as the tab list.\n *\n * @default 'maxContent'\n */\n width?: 'maxContent' | 'full'\n\n /**\n * How to align the tabs within the tab list.\n *\n * @default 'start'\n */\n align?: 'start' | 'center' | 'end'\n} & ObfuscatedClassName\n\n/**\n * A component used to group `<Tab>` elements together.\n */\nfunction TabList({\n children,\n space,\n width = 'maxContent',\n align = 'start',\n exceptionallySetClassName,\n ...props\n}: TabListProps): React.ReactElement | null {\n const tabListRef = React.useRef<HTMLDivElement | null>(null)\n const tabListPrevWidthRef = React.useRef(0)\n\n const tabContextValue = React.useContext(TabsContext)\n\n const [selectedTabElement, setSelectedTabElement] = React.useState<HTMLElement | null>(null)\n const [selectedTabStyle, setSelectedTabStyle] = React.useState<React.CSSProperties>({})\n\n const selectedId = useStoreState(tabContextValue?.tabStore, 'selectedId')\n\n const updateSelectedTabPosition = React.useCallback(\n function updateSelectedTabPositionCallback() {\n if (!selectedId || !tabListRef.current) {\n return\n }\n\n const tabs = tabListRef.current.querySelectorAll('[role=\"tab\"]')\n\n const selectedTab = Array.from(tabs).find(\n (tab) => tab.getAttribute('id') === selectedId,\n ) as HTMLElement | undefined\n\n if (selectedTab) {\n setSelectedTabElement(selectedTab)\n setSelectedTabStyle({\n left: `${selectedTab.offsetLeft}px`,\n width: `${selectedTab.offsetWidth}px`,\n })\n }\n },\n [selectedId],\n )\n\n React.useEffect(\n function updateSelectedTabPositionOnTabChange() {\n updateSelectedTabPosition()\n },\n // `selectedId` is a dependency to ensure the effect runs when the selected tab changes\n [selectedId, updateSelectedTabPosition],\n )\n\n React.useEffect(\n function observeTabListWidthChange() {\n let animationFrameId: number | null = null\n\n const tabListObserver = new ResizeObserver(([entry]) => {\n const width = entry?.contentRect.width\n\n if (width && tabListPrevWidthRef.current !== width) {\n tabListPrevWidthRef.current = width\n\n if (animationFrameId !== null) {\n cancelAnimationFrame(animationFrameId)\n }\n\n animationFrameId = requestAnimationFrame(() => {\n updateSelectedTabPosition()\n animationFrameId = null\n })\n }\n })\n\n if (tabListRef.current) {\n tabListObserver.observe(tabListRef.current)\n }\n\n return function cleanupResizeObserver() {\n if (animationFrameId) {\n cancelAnimationFrame(animationFrameId)\n }\n\n tabListObserver.disconnect()\n }\n },\n [updateSelectedTabPosition],\n )\n\n if (!tabContextValue) {\n return null\n }\n\n const { tabStore, variant } = tabContextValue\n\n const justifyContentAlignMap: Record<typeof align, BoxJustifyContent> = {\n start: 'flexStart',\n end: 'flexEnd',\n center: 'center',\n }\n\n return (\n // This extra <Box> not only provides alignment for the tabs, but also prevents <Inline>'s\n // negative margins from collapsing when used in a flex container which will render the\n // track with the wrong height\n <Box\n display=\"flex\"\n justifyContent={width === 'full' ? 'center' : justifyContentAlignMap[align]}\n >\n <BaseTabList\n store={tabStore}\n render={\n <Box position=\"relative\" width={width} className={exceptionallySetClassName} />\n }\n ref={tabListRef}\n {...props}\n >\n <Box className={[styles.track, styles[`track-${variant}`]]} />\n {selectedTabElement ? (\n <Box\n className={[styles.selected, styles[`selected-${variant}`]]}\n style={selectedTabStyle}\n />\n ) : null}\n <Inline\n space={space}\n exceptionallySetClassName={classNames(\n width === 'full' ? styles.fullTabList : null,\n )}\n >\n {children}\n </Inline>\n </BaseTabList>\n </Box>\n )\n}\n\ninterface TabPanelProps\n extends React.HTMLAttributes<HTMLDivElement>,\n Pick<BaseTabPanelProps, 'render'> {\n /** The content to be rendered inside the tab */\n children?: React.ReactNode\n\n /** The tabPanel's identifier. This must match its corresponding `<Tab>`'s id */\n id: string\n\n /**\n * By default, the tab panel's content is always rendered even when they are not active. This\n * behaviour can be changed to 'active', which renders only when the tab is active, and 'lazy',\n * meaning while inactive tab panels will not be rendered initially, they will remain mounted\n * once they are active until the entire Tabs tree is unmounted.\n */\n renderMode?: 'always' | 'active' | 'lazy'\n}\n\n/**\n * Used to define the content to be rendered when a tab is active. Each `<TabPanel>` must have a\n * corresponding `<Tab>` component.\n */\nconst TabPanel = React.forwardRef<HTMLDivElement, TabPanelProps>(function TabPanel(\n { children, id, renderMode = 'always', ...props },\n ref,\n): React.ReactElement | null {\n const tabContextValue = React.useContext(TabsContext)\n const [tabRendered, setTabRendered] = React.useState(false)\n const selectedId = useStoreState(tabContextValue?.tabStore, 'selectedId')\n const tabIsActive = selectedId === id\n\n React.useEffect(\n function trackTabRenderedState() {\n if (!tabRendered && tabIsActive) {\n // eslint-disable-next-line react-hooks/set-state-in-effect\n setTabRendered(true)\n }\n },\n [tabRendered, tabIsActive],\n )\n\n if (!tabContextValue) {\n return null\n }\n\n const { tabStore } = tabContextValue\n const shouldRender =\n renderMode === 'always' ||\n (renderMode === 'active' && tabIsActive) ||\n (renderMode === 'lazy' && (tabIsActive || tabRendered))\n\n return shouldRender ? (\n <BaseTabPanel {...props} tabId={id} store={tabStore} ref={ref}>\n {children}\n </BaseTabPanel>\n ) : null\n})\n\ntype TabAwareSlotProps = {\n /**\n * Render prop used to provide the content to be rendered inside the slot. The render prop will\n * be called with the current `selectedId`\n */\n children: (provided: { selectedId?: string | null }) => React.ReactElement | null\n}\n\n/**\n * Allows content to be rendered based on the current tab being selected while outside of the\n * TabPanel component. Can be placed freely within the main `<Tabs>` component.\n */\nfunction TabAwareSlot({ children }: TabAwareSlotProps): React.ReactElement | null {\n const tabContextValue = React.useContext(TabsContext)\n const selectedId = useStoreState(tabContextValue?.tabStore, 'selectedId')\n return tabContextValue ? children({ selectedId }) : null\n}\n\nexport { Tab, TabAwareSlot, TabList, TabPanel, Tabs }\n"],"names":["TabsContext","React","createContext","Tabs","t0","$","_c","children","selectedId","defaultSelectedId","variant","t1","onSelectedIdChange","undefined","t2","setSelectedId","tabStore","useTabStore","actualSelectedId","useStoreState","t3","t4","memoizedTabState","t5","createElement","Provider","Tab","forwardRef","ref","id","disabled","exceptionallySetClassName","render","onClick","tabContextValue","useContext","styles","classNames","tab","className","BaseTab","TabList","props","space","width","align","tabListRef","useRef","tabListPrevWidthRef","selectedTabElement","setSelectedTabElement","useState","Symbol","for","selectedTabStyle","setSelectedTabStyle","updateSelectedTabPositionCallback","current","tabs","querySelectorAll","selectedTab","Array","from","find","getAttribute","left","offsetLeft","offsetWidth","updateSelectedTabPosition","updateSelectedTabPositionOnTabChange","t6","useEffect","t7","t8","observeTabListWidthChange","animationFrameId","tabListObserver","ResizeObserver","t9","entry","width_0","contentRect","cancelAnimationFrame","requestAnimationFrame","observe","cleanupResizeObserver","disconnect","start","end","center","justifyContentAlignMap","t10","t11","Box","position","t12","t13","track","t14","selected","t15","fullTabList","t16","t17","Inline","t18","BaseTabList","_extends","t19","display","justifyContent","TabPanel","renderMode","tabRendered","setTabRendered","tabIsActive","trackTabRenderedState","shouldRender","BaseTabPanel","TabAwareSlot"],"mappings":"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"}