@basic-ui/material 0.1.5 → 0.1.8

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 (79) hide show
  1. package/build/cjs/index.js +12 -9
  2. package/build/cjs/index.js.map +1 -1
  3. package/build/esm/Alert/Alert.d.ts +1 -1
  4. package/build/esm/AppBar/AppBar.d.ts +1 -1
  5. package/build/esm/AppBar/AppBarButton.d.ts +1 -1
  6. package/build/esm/Badge/Badge.d.ts +1 -1
  7. package/build/esm/BottomSheet/BottomSheet.d.ts +1 -1
  8. package/build/esm/BottomSheet/BottomSheetSurface.d.ts +1 -1
  9. package/build/esm/Button/BaseButton.d.ts +1 -1
  10. package/build/esm/Button/Button.d.ts +1 -1
  11. package/build/esm/Button/FilledButton.d.ts +1 -1
  12. package/build/esm/Button/OutlinedButton.d.ts +1 -1
  13. package/build/esm/Button/TransparentButton.d.ts +1 -1
  14. package/build/esm/CheckBox/CheckBox.d.ts +1 -1
  15. package/build/esm/CheckBox/CheckBoxIcon.d.ts +1 -1
  16. package/build/esm/Chip/ButtonChip.d.ts +1 -1
  17. package/build/esm/Chip/ChipBase.d.ts +1 -1
  18. package/build/esm/Chip/ChoiceChip.d.ts +1 -1
  19. package/build/esm/Combobox/Combobox.d.ts +7 -7
  20. package/build/esm/Dialog/Dialog.d.ts +1 -1
  21. package/build/esm/Dialog/DialogBackdrop.d.ts +1 -1
  22. package/build/esm/Dialog/DialogContainer.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/LineRipple/LineRipple.d.ts +1 -1
  27. package/build/esm/Link/Link.d.ts +1 -1
  28. package/build/esm/List/List.d.ts +2 -1
  29. package/build/esm/List/List.js +3 -2
  30. package/build/esm/List/List.js.map +1 -1
  31. package/build/esm/ListItem/ListItem.d.ts +2 -1
  32. package/build/esm/ListItem/ListItem.js +3 -2
  33. package/build/esm/ListItem/ListItem.js.map +1 -1
  34. package/build/esm/Menu/Menu.d.ts +4 -4
  35. package/build/esm/Paper/Paper.d.ts +1 -1
  36. package/build/esm/ProgressSpinner/ProgressSpinner.d.ts +1 -1
  37. package/build/esm/RadioButton/RadioGroup.d.ts +1 -1
  38. package/build/esm/Select/Select.d.ts +1 -1
  39. package/build/esm/Select/Select.js +1 -1
  40. package/build/esm/Select/Select.js.map +1 -1
  41. package/build/esm/Select/SelectIcon.d.ts +1 -1
  42. package/build/esm/Select/defaultRender.d.ts +1 -1
  43. package/build/esm/Select/defaultRender.js +1 -1
  44. package/build/esm/Select/defaultRender.js.map +1 -1
  45. package/build/esm/SelectItem/SelectItem.d.ts +1 -1
  46. package/build/esm/SelectItem/SelectItem.js +4 -3
  47. package/build/esm/SelectItem/SelectItem.js.map +1 -1
  48. package/build/esm/SelectionControl/SelectionControlLabel.d.ts +1 -1
  49. package/build/esm/SelectionControl/SelectionControlText.d.ts +1 -1
  50. package/build/esm/Skeleton/DelayAppearance.d.ts +1 -1
  51. package/build/esm/Skeleton/Skeleton.d.ts +1 -1
  52. package/build/esm/Snackbar/Snackbar.d.ts +1 -1
  53. package/build/esm/Switch/Switch.d.ts +1 -1
  54. package/build/esm/Tab/Tab.d.ts +1 -1
  55. package/build/esm/Tab/TabList.d.ts +1 -1
  56. package/build/esm/Tab/TabPanel.d.ts +1 -1
  57. package/build/esm/TabIndicator/TabIndicator.d.ts +1 -1
  58. package/build/esm/Table/Table.d.ts +1 -1
  59. package/build/esm/Table/TableBody.d.ts +1 -1
  60. package/build/esm/Table/TableCell.d.ts +1 -1
  61. package/build/esm/Table/TableHead.d.ts +1 -1
  62. package/build/esm/Table/TableRow.d.ts +1 -1
  63. package/build/esm/Text/Text.d.ts +1 -1
  64. package/build/esm/TextField/FilledContainer.d.ts +1 -1
  65. package/build/esm/TextField/HelperText.d.ts +1 -1
  66. package/build/esm/TextField/Input.d.ts +1 -1
  67. package/build/esm/TextField/OutlinedContainer.d.ts +1 -1
  68. package/build/esm/TextField/TextField.d.ts +1 -1
  69. package/build/esm/Tooltip/Tooltip.d.ts +1 -1
  70. package/build/esm/theme/useTheme.d.ts +425 -1
  71. package/build/tsconfig.tsbuildinfo +825 -717
  72. package/package.json +5 -7
  73. package/src/List/List.tsx +3 -1
  74. package/src/ListItem/ListItem.tsx +3 -1
  75. package/src/Menu/Menu.story.tsx +27 -3
  76. package/src/Select/Select.story.tsx +45 -2
  77. package/src/Select/Select.tsx +3 -4
  78. package/src/Select/defaultRender.ts +2 -2
  79. package/src/SelectItem/SelectItem.tsx +6 -4
package/package.json CHANGED
@@ -1,10 +1,9 @@
1
1
  {
2
2
  "name": "@basic-ui/material",
3
- "version": "0.1.5",
3
+ "version": "0.1.8",
4
4
  "description": "Accessible React Components used as building blocks for UI patterns",
5
5
  "author": "Lucas Terra <lucasterra7@gmail.com>",
6
6
  "license": "MIT",
7
- "private": false,
8
7
  "main": "./build/cjs/index.js",
9
8
  "module": "./build/esm/index.js",
10
9
  "jsnext:main": "./build/esm/index.js",
@@ -15,7 +14,7 @@
15
14
  ],
16
15
  "sideEffects": false,
17
16
  "scripts": {
18
- "start": "start-storybook -p 9001 -c ./scripts/storybook",
17
+ "start": "yarn run -T start-storybook -p 9001 -c ./scripts/storybook",
19
18
  "build": "concurrently \"yarn:build:*\"",
20
19
  "build:dts": "tsc -p ./tsconfig.json --isolatedModules false --declaration --emitDeclarationOnly",
21
20
  "build:cjs": "rollup -c ../../rollup.config.js",
@@ -26,7 +25,7 @@
26
25
  "test": "echo \"Error: no test specified\" && exit 1"
27
26
  },
28
27
  "dependencies": {
29
- "@basic-ui/core": "^0.0.32",
28
+ "@basic-ui/core": "^0.0.33",
30
29
  "@styled-system/should-forward-prop": "5.1.5",
31
30
  "@types/styled-system": "^5.1.10",
32
31
  "@types/styled-system__css": "^5.0.14",
@@ -36,8 +35,7 @@
36
35
  "devDependencies": {
37
36
  "@emotion/react": "11.1.5",
38
37
  "@emotion/styled": "11.1.5",
39
- "polished": "^4.1.1",
40
- "react-spring": "9.0.0-rc.3"
38
+ "polished": "^4.1.1"
41
39
  },
42
40
  "peerDependencies": {
43
41
  "@babel/runtime": "^7.0.0",
@@ -50,5 +48,5 @@
50
48
  "react-dom": ">=16.14.0 || >=17.0.0",
51
49
  "react-spring": "^9.0.0"
52
50
  },
53
- "gitHead": "5d730ab4bfea19ceb7fb52d09139c81cb4c3863f"
51
+ "gitHead": "486ad33485c30932cff8417516369094bed8db70"
54
52
  }
package/src/List/List.tsx CHANGED
@@ -4,6 +4,7 @@ import { Paper, PaperProps } from '../Paper';
4
4
 
5
5
  export interface ListProps extends PaperProps {
6
6
  as?: React.ElementType<any>;
7
+ innerAs?: React.ElementType<any>;
7
8
  children?: React.ReactNode;
8
9
  }
9
10
 
@@ -13,6 +14,7 @@ export const List = forwardRef<HTMLDivElement, ListProps>(function List(
13
14
  ) {
14
15
  const {
15
16
  as = 'div',
17
+ innerAs,
16
18
  elevation = 0,
17
19
  py = 2,
18
20
  px = 0,
@@ -24,7 +26,7 @@ export const List = forwardRef<HTMLDivElement, ListProps>(function List(
24
26
 
25
27
  return (
26
28
  <Paper
27
- as={as}
29
+ as={innerAs || as}
28
30
  ref={forwardedRef}
29
31
  py={py}
30
32
  px={px}
@@ -10,6 +10,7 @@ import { alpha } from '../color';
10
10
 
11
11
  export interface ListItemProps extends BoxProps {
12
12
  as?: React.ElementType<any>;
13
+ innerAs?: React.ElementType<any>;
13
14
  children?: React.ReactNode;
14
15
  disabled?: boolean;
15
16
  selected?: boolean;
@@ -21,6 +22,7 @@ export const ListItem = forwardRef<HTMLDivElement, ListItemProps>(
21
22
  function ListItem(props, forwardedRef) {
22
23
  const {
23
24
  as = 'div',
25
+ innerAs,
24
26
  children,
25
27
  selected: selectedProp = false,
26
28
  'aria-selected': ariaSelectedProp = false,
@@ -38,7 +40,7 @@ export const ListItem = forwardRef<HTMLDivElement, ListItemProps>(
38
40
  <ListItemProvider value={{ color, disabled }}>
39
41
  <RippleBox
40
42
  ref={forwardedRef}
41
- as={as}
43
+ as={innerAs || as}
42
44
  theme={theme}
43
45
  display="flex"
44
46
  data-disabled={disabled ? '' : undefined}
@@ -4,7 +4,7 @@ import { storiesOf } from '@storybook/react';
4
4
  import { Box } from '../Box';
5
5
  // import './styles.css';
6
6
 
7
- const MenuControlled = ({ disabled }) => {
7
+ const MenuUncontrolled = ({ disabled }) => {
8
8
  return (
9
9
  <Box px={5}>
10
10
  <Menu>
@@ -23,7 +23,31 @@ const MenuControlled = ({ disabled }) => {
23
23
  );
24
24
  };
25
25
 
26
+ const MenuUncontrolledWithLinks = ({ disabled }) => {
27
+ return (
28
+ <Box px={5}>
29
+ <Menu>
30
+ <MenuButton disabled={disabled}> Click me</MenuButton>
31
+ <MenuPopover>
32
+ <MenuList>
33
+ <MenuItem as="a" href="/">
34
+ Dog
35
+ </MenuItem>
36
+ <MenuItem>Lion</MenuItem>
37
+ <MenuItem disabled={true}>Cat</MenuItem>
38
+ <Divider />
39
+ <MenuItem>Bear</MenuItem>
40
+ </MenuList>
41
+ </MenuPopover>
42
+ </Menu>
43
+ </Box>
44
+ );
45
+ };
46
+
26
47
  const stories = storiesOf('Components/Menu', module);
27
48
 
28
- stories.add('controlled', () => <MenuControlled disabled={undefined} />);
29
- stories.add('disabled', () => <MenuControlled disabled={true} />);
49
+ stories.add('uncontrolled', () => <MenuUncontrolled disabled={undefined} />);
50
+ stories.add('uncontrolled, with links', () => (
51
+ <MenuUncontrolledWithLinks disabled={undefined} />
52
+ ));
53
+ stories.add('disabled', () => <MenuUncontrolled disabled={true} />);
@@ -12,7 +12,7 @@ const Example = ({ variant, native = false }) => {
12
12
 
13
13
  /* eslint-disable react/no-children-prop */
14
14
  const children = [
15
- <SelectItem key={0} disabled aria-label="None" value="" />,
15
+ <SelectItem key={0} aria-label="None" value=""></SelectItem>,
16
16
  <SelectItem key={1} value={10}>
17
17
  Ten
18
18
  </SelectItem>,
@@ -67,13 +67,55 @@ const Example = ({ variant, native = false }) => {
67
67
  <Box width={230} display="inline-block">
68
68
  <Select
69
69
  value={color}
70
- onChange={(e, value: 'primary' | 'secondary') => setColor(value)}
70
+ onChange={(e, value) => setColor(value as 'primary' | 'secondary')}
71
71
  label="Color"
72
72
  >
73
73
  <SelectItem value="primary">Primary</SelectItem>
74
74
  <SelectItem value="secondary">Secondary</SelectItem>
75
75
  </Select>
76
76
  </Box>
77
+ <select defaultValue="">
78
+ <option key={0} aria-label="None" value="" disabled />
79
+ <option key={1} value={10}>
80
+ Ten
81
+ </option>
82
+ <option key={2} value={20}>
83
+ Twenty
84
+ </option>
85
+ <option key={3} value={30}>
86
+ Thirty
87
+ </option>
88
+ <option key={4} value={40}>
89
+ Fourty
90
+ </option>
91
+ <option key={5} value={50}>
92
+ Fifty
93
+ </option>
94
+ <option key={6} value={60}>
95
+ Sixty
96
+ </option>
97
+ <option key={7} value={70}>
98
+ Seventy
99
+ </option>
100
+ <option key={8} value={80}>
101
+ Eighty
102
+ </option>
103
+ <option key={9} value={90}>
104
+ Ninety
105
+ </option>
106
+ <option key={10} value={100}>
107
+ One Hundred
108
+ </option>
109
+ <option key={11} value={110}>
110
+ One Hundred Ten
111
+ </option>
112
+ <option key={12} value={120}>
113
+ One Hundred Twenty
114
+ </option>
115
+ <option key={13} value={130}>
116
+ One Hundred Thirty
117
+ </option>
118
+ </select>
77
119
  <Box m={3} bg="surface">
78
120
  <Box mb={3} width={230}>
79
121
  <Select
@@ -84,6 +126,7 @@ const Example = ({ variant, native = false }) => {
84
126
  label="Standard"
85
127
  helperText="Helper text"
86
128
  children={children}
129
+ placeholder="Empty"
87
130
  />
88
131
  </Box>
89
132
  <Box mb={3} width={230}>
@@ -50,7 +50,7 @@ export interface SelectProps
50
50
  theme?: Theme;
51
51
  error?: boolean | string;
52
52
  onChange?: (e: React.ChangeEvent<HTMLSelectElement>, value: string) => void;
53
- renderValue?: (value?: string) => string;
53
+ renderValue?: (value?: string) => string | undefined;
54
54
  leadingIcon?: React.ReactNode;
55
55
  }
56
56
 
@@ -118,11 +118,10 @@ export const Select = forwardRef<
118
118
  const inputId = `${id}-text-field`;
119
119
  const helperTextId = helperText ? `${id}-helper-text` : undefined;
120
120
 
121
- const labelIsFloating =
122
- hasFocus || open || (typeof value === 'string' && value.length > 0);
123
-
124
121
  const renderValue = renderValueProp || makeDefaultRender(children);
125
122
 
123
+ const labelIsFloating = hasFocus || open || renderValue(value) !== undefined;
124
+
126
125
  const Comp: ForwardRefExoticComponent<
127
126
  BaseSelectProps & RefAttributes<HTMLSelectElement | HTMLButtonElement>
128
127
  > = native ? SelectComp : (SelectButton as any);
@@ -2,7 +2,7 @@ import { Children, isValidElement } from 'react';
2
2
 
3
3
  export const makeDefaultRender = (children?: React.ReactNode) => (
4
4
  val?: string
5
- ): string => {
5
+ ): string | undefined => {
6
6
  if (children && val !== undefined) {
7
7
  const allChildren = Children.toArray(children);
8
8
  for (let i = 0; i < allChildren.length; i++) {
@@ -14,5 +14,5 @@ export const makeDefaultRender = (children?: React.ReactNode) => (
14
14
  }
15
15
  }
16
16
  }
17
- return val || '';
17
+ return val || undefined;
18
18
  };
@@ -5,6 +5,7 @@ import { wrapEvent } from '@basic-ui/core';
5
5
 
6
6
  export type SelectItemProps = MenuItemProps;
7
7
 
8
+ const ZERO_WIDTH_SPACE = '\u200b';
8
9
  export const SelectItem = forwardRef<HTMLLIElement, MenuItemProps>(
9
10
  function SelectItem(props, forwardedRef) {
10
11
  const {
@@ -17,7 +18,9 @@ export const SelectItem = forwardRef<HTMLLIElement, MenuItemProps>(
17
18
  } = props;
18
19
  const { native, onSelect, value: selectedValue } = useSelectContext();
19
20
  const value =
20
- valueProp !== undefined ? String(valueProp) : (children as string);
21
+ valueProp !== undefined && valueProp !== null
22
+ ? String(valueProp)
23
+ : (children as string);
21
24
 
22
25
  if (native) {
23
26
  return (
@@ -32,12 +35,11 @@ export const SelectItem = forwardRef<HTMLLIElement, MenuItemProps>(
32
35
  );
33
36
  }
34
37
 
35
- if (!children && disabled) {
38
+ if (children === undefined && disabled) {
36
39
  return null;
37
40
  }
38
41
 
39
42
  const selected = value === String(selectedValue);
40
-
41
43
  return (
42
44
  <Comp
43
45
  as={MenuItem}
@@ -49,7 +51,7 @@ export const SelectItem = forwardRef<HTMLLIElement, MenuItemProps>(
49
51
  selected={selected}
50
52
  {...otherProps}
51
53
  >
52
- {children}
54
+ {children || ZERO_WIDTH_SPACE}
53
55
  </Comp>
54
56
  );
55
57
  }