@basic-ui/material 1.0.0-alpha.22 → 1.0.0-alpha.24

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 (76) hide show
  1. package/build/cjs/index.js +109 -16
  2. package/build/cjs/index.js.map +1 -1
  3. package/build/esm/Alert/Alert.d.ts +1 -1
  4. package/build/esm/AppBar/AppBarButton.d.ts +1 -1
  5. package/build/esm/Badge/Badge.d.ts +2 -2
  6. package/build/esm/Badge/Badge.js +27 -2
  7. package/build/esm/Badge/Badge.js.map +1 -1
  8. package/build/esm/BottomSheet/BottomSheet.d.ts +1 -1
  9. package/build/esm/BottomSheet/BottomSheetSurface.d.ts +1 -1
  10. package/build/esm/Button/BaseButton.d.ts +1 -1
  11. package/build/esm/Button/Button.d.ts +1 -1
  12. package/build/esm/Button/ButtonGroup.d.ts +1 -1
  13. package/build/esm/Button/FilledButton.d.ts +1 -1
  14. package/build/esm/Button/OutlinedButton.d.ts +1 -1
  15. package/build/esm/Button/TransparentButton.d.ts +1 -1
  16. package/build/esm/CheckBox/CheckBox.d.ts +1 -1
  17. package/build/esm/Chip/ButtonChip.d.ts +1 -1
  18. package/build/esm/Chip/ChipBase.d.ts +1 -1
  19. package/build/esm/Chip/ChoiceChip.d.ts +1 -1
  20. package/build/esm/Combobox/Combobox.d.ts +7 -7
  21. package/build/esm/Dialog/Dialog.d.ts +1 -1
  22. package/build/esm/Dialog/DialogBackdrop.d.ts +1 -1
  23. package/build/esm/Dialog/DialogSurface.d.ts +1 -1
  24. package/build/esm/Dialog/Scrim.d.ts +1 -1
  25. package/build/esm/Divider/Divider.d.ts +1 -1
  26. package/build/esm/Link/Link.d.ts +1 -1
  27. package/build/esm/ListItem/ListItem.d.ts +1 -1
  28. package/build/esm/Menu/Menu.d.ts +5 -5
  29. package/build/esm/NavRail/NavRailItem.d.ts +1 -1
  30. package/build/esm/NavRail/NavRailItem.js +0 -1
  31. package/build/esm/NavRail/NavRailItem.js.map +1 -1
  32. package/build/esm/NavRail/icons/test-icons.d.ts +4 -0
  33. package/build/esm/NavRail/icons/test-icons.js +42 -0
  34. package/build/esm/NavRail/icons/test-icons.js.map +1 -0
  35. package/build/esm/Paper/Paper.d.ts +1 -1
  36. package/build/esm/RadioButton/RadioGroup.d.ts +1 -1
  37. package/build/esm/Select/Select.d.ts +1 -1
  38. package/build/esm/Select/SelectIcon.d.ts +1 -1
  39. package/build/esm/SelectItem/SelectItem.d.ts +1 -1
  40. package/build/esm/SelectionControl/SelectionControlText.d.ts +1 -1
  41. package/build/esm/Skeleton/Skeleton.d.ts +1 -1
  42. package/build/esm/Slider/Slider.d.ts +6 -6
  43. package/build/esm/Snackbar/Snackbar.d.ts +1 -1
  44. package/build/esm/Switch/Switch.d.ts +1 -1
  45. package/build/esm/Tab/Tab.d.ts +1 -1
  46. package/build/esm/Tab/Tab.js +17 -6
  47. package/build/esm/Tab/Tab.js.map +1 -1
  48. package/build/esm/Tab/TabList.d.ts +2 -1
  49. package/build/esm/Tab/TabList.js +5 -2
  50. package/build/esm/Tab/TabList.js.map +1 -1
  51. package/build/esm/Tab/TabPanel.d.ts +1 -1
  52. package/build/esm/Tab/context.d.ts +1 -0
  53. package/build/esm/Tab/context.js +2 -1
  54. package/build/esm/Tab/context.js.map +1 -1
  55. package/build/esm/TabIndicator/TabIndicator.d.ts +4 -2
  56. package/build/esm/TabIndicator/TabIndicator.js +75 -9
  57. package/build/esm/TabIndicator/TabIndicator.js.map +1 -1
  58. package/build/esm/Table/TableRow.d.ts +1 -1
  59. package/build/esm/TextField/FilledContainer.d.ts +1 -1
  60. package/build/esm/TextField/HelperText.d.ts +1 -1
  61. package/build/esm/TextField/Input.d.ts +1 -1
  62. package/build/esm/TextField/OutlinedContainer.d.ts +1 -1
  63. package/build/esm/TextField/TextField.d.ts +1 -1
  64. package/build/esm/Tooltip/Tooltip.d.ts +1 -1
  65. package/build/tsconfig-build.tsbuildinfo +1 -1
  66. package/package.json +3 -3
  67. package/src/Badge/Badge.story.tsx +68 -0
  68. package/src/Badge/Badge.tsx +32 -3
  69. package/src/NavRail/NavRail.story.tsx +1 -45
  70. package/src/NavRail/NavRailItem.tsx +0 -1
  71. package/src/NavRail/icons/test-icons.tsx +46 -0
  72. package/src/Tab/Tab.story.tsx +170 -14
  73. package/src/Tab/Tab.tsx +26 -7
  74. package/src/Tab/TabList.tsx +5 -1
  75. package/src/Tab/context.ts +2 -0
  76. package/src/TabIndicator/TabIndicator.tsx +83 -7
@@ -1530,10 +1530,34 @@ const Alert = /*#__PURE__*/react$1.forwardRef(function Alert(props, forwardedRef
1530
1530
  });
1531
1531
 
1532
1532
  const Badge = /*#__PURE__*/react$1.forwardRef(function Badge(props, forwardedRef) {
1533
- const { ...otherProps
1533
+ const {
1534
+ size = 'large',
1535
+ __css,
1536
+ ...otherProps
1534
1537
  } = props;
1535
1538
  return /*#__PURE__*/jsxRuntime.jsx(Box, {
1536
1539
  ref: forwardedRef,
1540
+ __css: {
1541
+ variant: 'text.label-small',
1542
+ bg: 'error',
1543
+ color: 'on.error',
1544
+ borderRadius: 'full',
1545
+ ...(size === 'small' ? {
1546
+ maxWidth: "0.375rem",
1547
+ maxHeight: "0.375rem",
1548
+ minWidth: "0.375rem",
1549
+ minHeight: "0.375rem"
1550
+ } : {
1551
+ px: 1,
1552
+ maxHeight: "1rem",
1553
+ minWidth: "1rem",
1554
+ minHeight: "1rem"
1555
+ }),
1556
+ display: 'inline-flex',
1557
+ alignItems: 'center',
1558
+ justifyContent: 'center',
1559
+ ...__css
1560
+ },
1537
1561
  ...otherProps
1538
1562
  });
1539
1563
  });
@@ -3853,7 +3877,6 @@ const NavRailItem = /*#__PURE__*/react$1.forwardRef(function NavRailItem(props,
3853
3877
  backgroundColor: 'transparent',
3854
3878
  margin: 0,
3855
3879
  padding: 0,
3856
- px: "0.75rem",
3857
3880
  minHeight: "3.75rem",
3858
3881
  height: "3.75rem",
3859
3882
  cursor: 'pointer',
@@ -5280,54 +5303,110 @@ const {
5280
5303
  } = TabIndicatorContext;
5281
5304
  const useTabIndicatorContext = () => react$1.useContext(TabIndicatorContext);
5282
5305
 
5306
+ const WIDTH_PROPERTY_NAME = '--indicator-width';
5307
+ const SCALE_PROPERTY_NAME = '--indicator-scale';
5283
5308
  const useEnhancedEffect = typeof window !== 'undefined' ? react$1.useLayoutEffect : react$1.useEffect;
5284
5309
  const TabIndicator = /*#__PURE__*/react$1.forwardRef(function TabIndicator(props, forwardedRef) {
5285
5310
  const {
5286
5311
  as = 'span',
5287
5312
  selected,
5288
5313
  color = 'primary',
5314
+ variant,
5315
+ labelRef,
5289
5316
  ...otherProps
5290
5317
  } = props;
5291
5318
  const ref = react$1.useRef(null);
5292
5319
  const {
5293
5320
  currentIndicator
5294
5321
  } = useTabIndicatorContext();
5322
+ const resizeObserverRef = react$1.useRef();
5295
5323
  useEnhancedEffect(() => {
5296
5324
  if (selected && ref.current) {
5297
5325
  if (currentIndicator.current !== null) {
5298
5326
  // We are switching indicator, let's slide!
5299
5327
  const previousClientRect = currentIndicator.current.getBoundingClientRect();
5300
5328
  const currentClientRect = ref.current.getBoundingClientRect();
5301
- const widthDelta = previousClientRect.width / currentClientRect.width;
5302
5329
  const xPosition = previousClientRect.left - currentClientRect.left;
5303
5330
  const prevTransition = ref.current.style.transition;
5304
5331
  const prevTransform = ref.current.style.transform;
5305
5332
  ref.current.style.transition = 'none';
5306
- ref.current.style.transform = `translateX(${xPosition}px) scaleX(${widthDelta})`; // Force repaint before updating classes and transform to ensure the transform properly takes effect
5333
+
5334
+ if (variant === 'primary') {
5335
+ const prevWidth = currentIndicator.current.style.getPropertyValue(WIDTH_PROPERTY_NAME);
5336
+ const currentWidth = ref.current.style.getPropertyValue(WIDTH_PROPERTY_NAME);
5337
+ const widthDelta = String(parseFloat(prevWidth) / parseFloat(currentWidth));
5338
+ ref.current.style.setProperty(SCALE_PROPERTY_NAME, widthDelta);
5339
+ ref.current.style.transform = `translateX(${xPosition}px)`;
5340
+ } else {
5341
+ const widthDelta = previousClientRect.width / currentClientRect.width;
5342
+ ref.current.style.transform = `translateX(${xPosition}px) scaleX(${widthDelta})`;
5343
+ } // Force repaint before updating classes and transform to ensure the transform properly takes effect
5344
+
5307
5345
 
5308
5346
  ref.current.getBoundingClientRect(); // Restore and let transition do it's magic
5309
5347
 
5310
5348
  ref.current.style.transition = prevTransition;
5311
5349
  ref.current.style.transform = prevTransform;
5350
+
5351
+ if (variant === 'primary') {
5352
+ ref.current.style.setProperty(SCALE_PROPERTY_NAME, '1');
5353
+ }
5312
5354
  }
5313
5355
 
5314
5356
  currentIndicator.current = ref.current;
5315
5357
  }
5316
- }, [selected]);
5358
+ }, [selected, variant]);
5359
+ react$1.useEffect(() => {
5360
+ if (variant === 'secondary') {
5361
+ return;
5362
+ }
5363
+
5364
+ if (labelRef.current && ref.current) {
5365
+ const width = labelRef.current.getBoundingClientRect().width;
5366
+ ref.current.style.setProperty(WIDTH_PROPERTY_NAME, `${width}px`);
5367
+
5368
+ if (typeof ResizeObserver === 'function') {
5369
+ resizeObserverRef.current ??= new ResizeObserver(([entry]) => {
5370
+ if (ref.current) {
5371
+ ref.current.style.setProperty(WIDTH_PROPERTY_NAME, `${entry.contentRect.width}px`);
5372
+ }
5373
+ });
5374
+ resizeObserverRef.current?.observe(labelRef.current);
5375
+ return () => resizeObserverRef.current?.disconnect();
5376
+ }
5377
+ }
5378
+ }, [labelRef, variant]);
5317
5379
  return /*#__PURE__*/jsxRuntime.jsx(Box, {
5318
5380
  as: as,
5319
5381
  ref: core.assignMultipleRefs(ref, forwardedRef),
5320
- width: "100%",
5321
- height: "0.125rem",
5322
5382
  __css: {
5323
5383
  bg: color,
5324
5384
  position: 'absolute',
5325
5385
  bottom: 0,
5326
5386
  transform: `scale(1)`,
5327
5387
  opacity: selected ? 1 : 0,
5328
- transformOrigin: 'left',
5329
5388
  transition: `transform .25s ${EASING_STANDARD}`,
5330
- zIndex: 1
5389
+ zIndex: 1,
5390
+ ...(variant === 'secondary' ? {
5391
+ width: '100%',
5392
+ height: "0.125rem"
5393
+ } : {
5394
+ width: '100%',
5395
+ '&::before': {
5396
+ content: '""',
5397
+ width: `var(${WIDTH_PROPERTY_NAME}, 0px)`,
5398
+ height: "0.1875rem",
5399
+ borderTopLeftRadius: "0.1875rem",
5400
+ borderTopRightRadius: "0.1875rem",
5401
+ bg: color,
5402
+ position: 'absolute',
5403
+ transformOrigin: 'center',
5404
+ bottom: 0,
5405
+ left: '50%',
5406
+ transition: `inherit`,
5407
+ transform: `translateX(-50%) scaleX(var(${SCALE_PROPERTY_NAME}, 1))}`
5408
+ }
5409
+ })
5331
5410
  },
5332
5411
  ...otherProps
5333
5412
  });
@@ -5335,7 +5414,8 @@ const TabIndicator = /*#__PURE__*/react$1.forwardRef(function TabIndicator(props
5335
5414
 
5336
5415
  const TabListContext = /*#__PURE__*/react$1.createContext({
5337
5416
  indicatorColor: 'primary',
5338
- textColor: 'on.surface'
5417
+ textColor: 'on.surface',
5418
+ variant: 'secondary'
5339
5419
  });
5340
5420
  const {
5341
5421
  Provider: TabListProvider
@@ -5364,6 +5444,7 @@ const TabList = /*#__PURE__*/react$1.forwardRef(function TabList(props, forwarde
5364
5444
  indicatorColor = 'primary',
5365
5445
  textColor = 'on.surface',
5366
5446
  selectedTextColor,
5447
+ variant = 'secondary',
5367
5448
  ...otherProps
5368
5449
  } = props;
5369
5450
  const currentIndicator = react$1.useRef(null);
@@ -5371,7 +5452,8 @@ const TabList = /*#__PURE__*/react$1.forwardRef(function TabList(props, forwarde
5371
5452
  value: {
5372
5453
  indicatorColor,
5373
5454
  textColor,
5374
- selectedTextColor
5455
+ selectedTextColor,
5456
+ variant
5375
5457
  },
5376
5458
  children: /*#__PURE__*/jsxRuntime.jsx(TabIndicatorProvider, {
5377
5459
  value: {
@@ -5398,13 +5480,16 @@ const TabInner = /*#__PURE__*/react$1.forwardRef(function Tab(props, forwardedRe
5398
5480
  const {
5399
5481
  textColor,
5400
5482
  indicatorColor,
5401
- selectedTextColor
5483
+ selectedTextColor,
5484
+ variant
5402
5485
  } = useTabListContext();
5486
+ const labelRef = react$1.useRef(null);
5403
5487
  return /*#__PURE__*/jsxRuntime.jsxs(Box, {
5404
5488
  position: "relative",
5405
5489
  display: "flex",
5406
5490
  flex: 1,
5407
5491
  flexDirection: "column",
5492
+ height: "100%",
5408
5493
  children: [/*#__PURE__*/jsxRuntime.jsx(RippleBox, {
5409
5494
  as: innerAs,
5410
5495
  ref: forwardedRef,
@@ -5412,9 +5497,9 @@ const TabInner = /*#__PURE__*/react$1.forwardRef(function Tab(props, forwardedRe
5412
5497
  disabled: disabled,
5413
5498
  __css: {
5414
5499
  px: 3,
5415
- position: 'relative',
5416
5500
  color: selected ? selectedTextColor || indicatorColor : alpha(textColor, disabled ? 0.37 : 0.7),
5417
- height: "3rem",
5501
+ minHeight: "3rem",
5502
+ height: '100%',
5418
5503
  backgroundColor: 'transparent',
5419
5504
  border: 'none',
5420
5505
  ':focus': {
@@ -5426,15 +5511,23 @@ const TabInner = /*#__PURE__*/react$1.forwardRef(function Tab(props, forwardedRe
5426
5511
  ...otherProps,
5427
5512
  children: /*#__PURE__*/jsxRuntime.jsx(Text, {
5428
5513
  as: "span",
5429
- variant: "label-large",
5514
+ display: "inline-flex",
5515
+ justifyContent: "center",
5516
+ alignItems: "center",
5517
+ variant: "title-small",
5430
5518
  color: "inherit",
5431
5519
  height: "100%",
5432
5520
  textAlign: "center",
5521
+ position: "relative",
5522
+ flexDirection: "column",
5523
+ ref: labelRef,
5433
5524
  children: children
5434
5525
  })
5435
5526
  }), /*#__PURE__*/jsxRuntime.jsx(TabIndicator, {
5436
5527
  selected: selected,
5437
- color: indicatorColor
5528
+ color: indicatorColor,
5529
+ variant: variant,
5530
+ labelRef: labelRef
5438
5531
  })]
5439
5532
  });
5440
5533
  });