廓形仪rn版本-技术调研
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

66 lines
1.6 KiB

  1. import React from 'react';
  2. import { gridStyle, gridItemStyle } from './styles';
  3. import type { VariantProps } from '@gluestack-ui/nativewind-utils';
  4. type IGridProps = React.ComponentPropsWithoutRef<'div'> &
  5. VariantProps<typeof gridStyle> & {
  6. gap?: number;
  7. rowGap?: number;
  8. columnGap?: number;
  9. flexDirection?: 'row' | 'column' | 'row-reverse' | 'column-reverse';
  10. padding?: number;
  11. paddingLeft?: number;
  12. paddingRight?: number;
  13. paddingStart?: number;
  14. paddingEnd?: number;
  15. _extra: {
  16. className: string;
  17. };
  18. };
  19. const Grid = React.forwardRef<HTMLDivElement, IGridProps>(function Grid(
  20. { className, _extra, ...props },
  21. ref
  22. ) {
  23. const gridClass = _extra?.className;
  24. const finalGridClass = gridClass ?? '';
  25. return (
  26. <div
  27. ref={ref}
  28. className={gridStyle({
  29. class: className + ' ' + finalGridClass,
  30. })}
  31. {...props}
  32. />
  33. );
  34. });
  35. type IGridItemProps = React.ComponentPropsWithoutRef<'div'> &
  36. VariantProps<typeof gridItemStyle> & {
  37. index?: number;
  38. _extra: {
  39. className: string;
  40. };
  41. };
  42. const GridItem = React.forwardRef<HTMLDivElement, IGridItemProps>(
  43. function GridItem({ className, _extra, ...props }, ref) {
  44. const gridItemClass = _extra?.className;
  45. const finalGridItemClass = gridItemClass ?? '';
  46. return (
  47. <div
  48. ref={ref}
  49. className={gridItemStyle({
  50. class: className + ' ' + finalGridItemClass,
  51. })}
  52. {...props}
  53. />
  54. );
  55. }
  56. );
  57. Grid.displayName = 'Grid';
  58. GridItem.displayName = 'GridItem';
  59. export { Grid, GridItem };