@box/blueprint-web 9.11.0 → 9.12.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.
@@ -189,6 +189,9 @@ const RootInner = ({
189
189
  const handleKeyDown = useCallback(event => {
190
190
  // Close menu
191
191
  if (event.key === 'Enter' || event.key === 'Tab') {
192
+ if (event.nativeEvent.isComposing) {
193
+ return;
194
+ }
192
195
  setOpen(false);
193
196
  return;
194
197
  }
@@ -7,7 +7,7 @@ export interface ComboboxGroupProps {
7
7
  label: string;
8
8
  hideLabel?: boolean;
9
9
  }
10
- export interface ComboboxGroupSelectProps extends SelectProps {
10
+ export interface ComboboxGroupSelectProps extends Omit<SelectProps, 'disabled'> {
11
11
  disabled?: never;
12
12
  error?: boolean;
13
13
  label: never;
package/lib-esm/index.css CHANGED
@@ -1809,7 +1809,7 @@
1809
1809
  --blueprint-select-border-error-left-width:none;
1810
1810
  }
1811
1811
 
1812
- .bp_select_module_container--45f65{
1812
+ .bp_select_module_container--b9515{
1813
1813
  display:flex;
1814
1814
  flex-direction:column;
1815
1815
  font-family:Lato, -apple-system, BlinkMacSystemFont, "San Francisco", "Segoe UI", Roboto, "Helvetica Neue", sans-serif;
@@ -1821,15 +1821,15 @@
1821
1821
  text-decoration:none;
1822
1822
  text-transform:none;
1823
1823
  }
1824
- .bp_select_module_container--45f65.bp_select_module_disabled--45f65{
1824
+ .bp_select_module_container--b9515.bp_select_module_disabled--b9515{
1825
1825
  opacity:60%;
1826
1826
  }
1827
- .bp_select_module_container--45f65 .bp_select_module_label--45f65{
1827
+ .bp_select_module_container--b9515 .bp_select_module_label--b9515{
1828
1828
  flex:0 0 fit-content;
1829
1829
  font-weight:700;
1830
1830
  overflow-wrap:break-word;
1831
1831
  }
1832
- .bp_select_module_container--45f65 .bp_select_module_label--45f65,.bp_select_module_container--45f65 .bp_select_module_triggerBtn--45f65{
1832
+ .bp_select_module_container--b9515 .bp_select_module_label--b9515,.bp_select_module_container--b9515 .bp_select_module_triggerBtn--b9515{
1833
1833
  color:var(--text-text-on-light);
1834
1834
  font-family:Lato, -apple-system, BlinkMacSystemFont, "San Francisco", "Segoe UI", Roboto, "Helvetica Neue", sans-serif;
1835
1835
  font-size:.875rem;
@@ -1838,7 +1838,7 @@
1838
1838
  text-decoration:none;
1839
1839
  text-transform:none;
1840
1840
  }
1841
- .bp_select_module_container--45f65 .bp_select_module_triggerBtn--45f65{
1841
+ .bp_select_module_container--b9515 .bp_select_module_triggerBtn--b9515{
1842
1842
  align-items:center;
1843
1843
  background-color:var(--surface-dropdown-surface);
1844
1844
  border-bottom:var(--blueprint-select-border-bottom-width, var(--border-1)) solid var(--border-dropdown-border);
@@ -1859,47 +1859,58 @@
1859
1859
  text-align:start;
1860
1860
  width:100%;
1861
1861
  }
1862
- .bp_select_module_container--45f65 .bp_select_module_triggerBtn--45f65 span:first-child{
1862
+ .bp_select_module_container--b9515 .bp_select_module_triggerBtn--b9515 span:first-child{
1863
1863
  overflow:hidden;
1864
1864
  text-overflow:ellipsis;
1865
1865
  white-space:nowrap;
1866
1866
  }
1867
- .bp_select_module_container--45f65 .bp_select_module_triggerBtn--45f65:disabled{
1867
+ .bp_select_module_container--b9515 .bp_select_module_triggerBtn--b9515:disabled{
1868
1868
  cursor:default;
1869
1869
  }
1870
- .bp_select_module_container--45f65 .bp_select_module_triggerBtn--45f65:not(:disabled).bp_select_module_error--45f65,.bp_select_module_container--45f65 .bp_select_module_triggerBtn--45f65:not(:disabled)[aria-invalid=true]{
1870
+ .bp_select_module_container--b9515 .bp_select_module_triggerBtn--b9515.bp_select_module_readonly--b9515:not(:disabled){
1871
+ background-color:var(--gray-02);
1872
+ box-shadow:none;
1873
+ color:var(--text-text-on-light-secondary);
1874
+ cursor:default;
1875
+ }
1876
+ .bp_select_module_container--b9515 .bp_select_module_triggerBtn--b9515:not(.bp_select_module_readonly--b9515):not(:disabled).bp_select_module_error--b9515,.bp_select_module_container--b9515 .bp_select_module_triggerBtn--b9515:not(.bp_select_module_readonly--b9515):not(:disabled)[aria-invalid=true]{
1871
1877
  background-color:var(--surface-dropdown-surface-error);
1872
1878
  border-bottom:var(--blueprint-select-border-error-bottom-width, var(--border-2)) solid var(--border-dropdown-border-error);
1873
1879
  border-left:var(--blueprint-select-border-error-left-width, var(--border-2)) solid var(--border-dropdown-border-error);
1874
1880
  border-right:var(--blueprint-select-border-error-right-width, var(--border-2)) solid var(--border-dropdown-border-error);
1875
1881
  border-top:var(--blueprint-select-border-error-top-width, var(--border-2)) solid var(--border-dropdown-border-error);
1876
1882
  }
1877
- .bp_select_module_container--45f65 .bp_select_module_triggerBtn--45f65:focus,.bp_select_module_container--45f65 .bp_select_module_triggerBtn--45f65:not(:disabled).bp_select_module_error--45f65:focus,.bp_select_module_container--45f65 .bp_select_module_triggerBtn--45f65:not(:disabled)[aria-invalid=true]:focus{
1883
+ .bp_select_module_container--b9515 .bp_select_module_triggerBtn--b9515:not(.bp_select_module_readonly--b9515):focus,.bp_select_module_container--b9515 .bp_select_module_triggerBtn--b9515:not(.bp_select_module_readonly--b9515):not(:disabled).bp_select_module_error--b9515:focus,.bp_select_module_container--b9515 .bp_select_module_triggerBtn--b9515:not(.bp_select_module_readonly--b9515):not(:disabled)[aria-invalid=true]:focus{
1878
1884
  background-color:var(--surface-dropdown-surface-focus);
1879
1885
  border:var(--border-2), solid, var(--outline-focus-on-light);
1880
1886
  }
1881
- .bp_select_module_container--45f65 .bp_select_module_triggerBtn--45f65:not(:disabled):not(:focus):not(.bp_select_module_error--45f65):not([aria-invalid]):hover{
1887
+ .bp_select_module_container--b9515 .bp_select_module_triggerBtn--b9515:not(.bp_select_module_readonly--b9515):not(:disabled):not(:focus):not(.bp_select_module_error--b9515):not([aria-invalid]):hover{
1882
1888
  background-color:var(--surface-dropdown-surface-hover);
1883
1889
  border-color:var(--border-dropdown-border-hover);
1884
1890
  }
1885
- .bp_select_module_container--45f65 .bp_select_module_triggerBtn--45f65 .bp_select_module_iconWrapper--45f65{
1891
+ .bp_select_module_container--b9515 .bp_select_module_triggerBtn--b9515 .bp_select_module_iconWrapper--b9515{
1886
1892
  flex-shrink:0;
1887
1893
  -webkit-user-select:none;
1888
1894
  user-select:none;
1889
1895
  }
1890
- .bp_select_module_container--45f65 .bp_select_module_triggerBtn--45f65 .bp_select_module_icon--45f65{
1896
+ .bp_select_module_container--b9515 .bp_select_module_triggerBtn--b9515 .bp_select_module_iconCaret--b9515{
1891
1897
  display:block;
1892
1898
  height:var(--size-2);
1893
1899
  width:var(--size-2);
1894
1900
  }
1895
- .bp_select_module_container--45f65 .bp_select_module_triggerBtn--45f65 .bp_select_module_icon--45f65 path{
1901
+ .bp_select_module_container--b9515 .bp_select_module_triggerBtn--b9515 .bp_select_module_iconCaret--b9515 path{
1896
1902
  fill:var(--icon-icon-on-light);
1897
1903
  }
1898
- .bp_select_module_container--45f65 .bp_select_module_triggerBtn--45f65[data-state=open] .bp_select_module_icon--45f65{
1904
+ .bp_select_module_container--b9515 .bp_select_module_triggerBtn--b9515 .bp_select_module_iconPencilCrossed--b9515{
1905
+ display:block;
1906
+ height:var(--size-4);
1907
+ width:var(--size-4);
1908
+ }
1909
+ .bp_select_module_container--b9515 .bp_select_module_triggerBtn--b9515[data-state=open] .bp_select_module_icon--b9515{
1899
1910
  transform:rotate(180deg);
1900
1911
  }
1901
1912
 
1902
- .bp_select_module_content--45f65{
1913
+ .bp_select_module_content--b9515{
1903
1914
  background-color:var(--surface-menu-surface);
1904
1915
  border:var(--border-1) solid var(--border-card-border);
1905
1916
  border-radius:var(--radius-3);
@@ -1917,11 +1928,11 @@
1917
1928
  text-transform:none;
1918
1929
  z-index:380;
1919
1930
  }
1920
- .bp_select_module_content--45f65 .bp_select_module_viewport--45f65{
1931
+ .bp_select_module_content--b9515 .bp_select_module_viewport--b9515{
1921
1932
  padding-block:var(--space-3);
1922
1933
  padding-inline:var(--space-3);
1923
1934
  }
1924
- .bp_select_module_content--45f65 .bp_select_module_viewport--45f65 .bp_select_module_option--45f65{
1935
+ .bp_select_module_content--b9515 .bp_select_module_viewport--b9515 .bp_select_module_option--b9515{
1925
1936
  border:var(--border-2) solid #0000;
1926
1937
  border-radius:var(--radius-3);
1927
1938
  cursor:pointer;
@@ -1936,25 +1947,25 @@
1936
1947
  -webkit-user-select:none;
1937
1948
  user-select:none;
1938
1949
  }
1939
- .bp_select_module_content--45f65 .bp_select_module_viewport--45f65 .bp_select_module_option--45f65[data-disabled]{
1950
+ .bp_select_module_content--b9515 .bp_select_module_viewport--b9515 .bp_select_module_option--b9515[data-disabled]{
1940
1951
  opacity:60%;
1941
1952
  pointer-events:none;
1942
1953
  }
1943
- .bp_select_module_content--45f65 .bp_select_module_viewport--45f65 .bp_select_module_option--45f65[data-highlighted]{
1954
+ .bp_select_module_content--b9515 .bp_select_module_viewport--b9515 .bp_select_module_option--b9515[data-highlighted]{
1944
1955
  background-color:var(--surface-menu-surface-focus);
1945
1956
  border:var(--border-2) solid var(--outline-focus-on-light);
1946
1957
  }
1947
- .bp_select_module_content--45f65 .bp_select_module_viewport--45f65 .bp_select_module_option--45f65:hover{
1958
+ .bp_select_module_content--b9515 .bp_select_module_viewport--b9515 .bp_select_module_option--b9515:hover{
1948
1959
  background-color:var(--surface-menu-surface-hover);
1949
1960
  }
1950
- .bp_select_module_content--45f65 .bp_select_module_viewport--45f65 .bp_select_module_option--45f65 span:first-child{
1961
+ .bp_select_module_content--b9515 .bp_select_module_viewport--b9515 .bp_select_module_option--b9515 span:first-child{
1951
1962
  overflow:hidden;
1952
1963
  overflow-wrap:break-word;
1953
1964
  }
1954
- .bp_select_module_content--45f65 .bp_select_module_viewport--45f65 .bp_select_module_option--45f65 .bp_select_module_secondaryText--45f65{
1965
+ .bp_select_module_content--b9515 .bp_select_module_viewport--b9515 .bp_select_module_option--b9515 .bp_select_module_secondaryText--b9515{
1955
1966
  color:var(--text-text-on-light-secondary);
1956
1967
  }
1957
- .bp_select_module_content--45f65 .bp_select_module_viewport--45f65 .bp_select_module_option--45f65 .bp_select_module_indicator--45f65{
1968
+ .bp_select_module_content--b9515 .bp_select_module_viewport--b9515 .bp_select_module_option--b9515 .bp_select_module_indicator--b9515{
1958
1969
  align-items:center;
1959
1970
  display:flex;
1960
1971
  height:var(--size-9);
@@ -1963,10 +1974,10 @@
1963
1974
  position:absolute;
1964
1975
  top:0;
1965
1976
  }
1966
- .bp_select_module_content--45f65 .bp_select_module_viewport--45f65 .bp_select_module_option--45f65 .bp_select_module_indicator--45f65 path{
1977
+ .bp_select_module_content--b9515 .bp_select_module_viewport--b9515 .bp_select_module_option--b9515 .bp_select_module_indicator--b9515 path{
1967
1978
  fill:var(--icon-icon-on-light);
1968
1979
  }
1969
- .bp_select_module_content--45f65 .bp_select_module_viewport--45f65 .bp_select_module_separator--45f65{
1980
+ .bp_select_module_content--b9515 .bp_select_module_viewport--b9515 .bp_select_module_separator--b9515{
1970
1981
  background-color:var(--border-divider-border);
1971
1982
  flex-shrink:0;
1972
1983
  height:var(--border-1);
@@ -1,5 +1,4 @@
1
- import * as SelectPrimitive from '@radix-ui/react-select';
2
- import { type SelectContentProps, type SelectOptionProps } from './types';
1
+ import { type SelectContentProps, type SelectOptionProps, type SelectProps } from './types';
3
2
  /**
4
3
  * The root component that contains all the parts of a select.
5
4
  *
@@ -19,7 +18,7 @@ import { type SelectContentProps, type SelectOptionProps } from './types';
19
18
  * <Select.Option text="Option 4" value="option-4" />
20
19
  * </Select>
21
20
  */
22
- export declare const Select: import("react").ForwardRefExoticComponent<Omit<SelectPrimitive.SelectTriggerProps, keyof import("./types").ExtraProps> & import("./types").ExtraProps & import("react").RefAttributes<HTMLButtonElement>> & {
21
+ export declare const Select: import("react").ForwardRefExoticComponent<SelectProps & import("react").RefAttributes<HTMLButtonElement>> & {
23
22
  /**
24
23
  * The component that pops out when the select is open.
25
24
  */
@@ -1,10 +1,11 @@
1
- import { jsxs, jsx } from 'react/jsx-runtime';
2
- import { Caret, Checkmark } from '@box/blueprint-web-assets/icons/Fill';
1
+ import { jsx, jsxs } from 'react/jsx-runtime';
2
+ import { PencilCrossed, Caret, Checkmark } from '@box/blueprint-web-assets/icons/Fill';
3
3
  import * as ScrollArea from '@radix-ui/react-scroll-area';
4
4
  import * as SelectPrimitive from '@radix-ui/react-select';
5
5
  import clsx from 'clsx';
6
6
  import { forwardRef, useCallback } from 'react';
7
7
  import { InlineError } from '../primitives/inline-error/inline-error.js';
8
+ import { Text } from '../text/text.js';
8
9
  import { useLabelable } from '../util-components/labelable/useLabelable.js';
9
10
  import { useUniqueId } from '../utils/useUniqueId.js';
10
11
  import styles from './select.module.js';
@@ -27,6 +28,8 @@ const Root = /*#__PURE__*/forwardRef((props, forwardedRef) => {
27
28
  onOpenChange,
28
29
  name,
29
30
  disabled,
31
+ readonly,
32
+ subText,
30
33
  required,
31
34
  id,
32
35
  // RadixSelectTrigger props
@@ -38,7 +41,9 @@ const Root = /*#__PURE__*/forwardRef((props, forwardedRef) => {
38
41
  const isSelectDefaultOpen = defaultOpen && !disabled;
39
42
  const isSelectOpen = open && !disabled;
40
43
  const handleOnChange = isOpen => {
41
- onOpenChange?.(isOpen);
44
+ if (!readonly) {
45
+ onOpenChange?.(isOpen);
46
+ }
42
47
  };
43
48
  const selectProps = {
44
49
  name,
@@ -46,8 +51,8 @@ const Root = /*#__PURE__*/forwardRef((props, forwardedRef) => {
46
51
  required,
47
52
  value,
48
53
  defaultValue,
49
- defaultOpen: isSelectDefaultOpen,
50
- open: isSelectOpen,
54
+ defaultOpen: !readonly && isSelectDefaultOpen,
55
+ open: !readonly && isSelectOpen,
51
56
  onValueChange,
52
57
  onOpenChange: handleOnChange
53
58
  };
@@ -56,6 +61,11 @@ const Root = /*#__PURE__*/forwardRef((props, forwardedRef) => {
56
61
  const ariaDescribedBy = clsx(triggerProps['aria-describedby'], {
57
62
  [inlineErrorId]: hasError
58
63
  });
64
+ const icon = readonly ? jsx(PencilCrossed, {
65
+ className: styles.iconPencilCrossed
66
+ }) : jsx(Caret, {
67
+ className: styles.iconCaret
68
+ });
59
69
  return jsxs("div", {
60
70
  className: clsx(styles.container, {
61
71
  [styles.disabled]: disabled
@@ -72,23 +82,27 @@ const Root = /*#__PURE__*/forwardRef((props, forwardedRef) => {
72
82
  ...(hasError && {
73
83
  'aria-invalid': 'true'
74
84
  }),
85
+ "aria-readonly": readonly ? 'true' : undefined,
75
86
  className: clsx(styles.triggerBtn, {
76
- [styles.error]: hasError
87
+ [styles.error]: hasError,
88
+ [styles.readonly]: readonly
77
89
  }),
78
90
  id: selectId,
79
91
  children: [jsx(SelectPrimitive.Value, {
80
92
  placeholder: placeholder
81
93
  }), jsx(SelectPrimitive.Icon, {
82
94
  className: styles.iconWrapper,
83
- children: jsx(Caret, {
84
- className: styles.icon
85
- })
95
+ children: icon
86
96
  })]
87
97
  }), children]
88
98
  }), jsx(InlineError, {
89
99
  className: styles.inlineError,
90
100
  id: inlineErrorId,
91
101
  children: error
102
+ }), readonly && subText && jsx(Text, {
103
+ as: "p",
104
+ color: "textOnLightSecondary",
105
+ children: subText
92
106
  })]
93
107
  });
94
108
  });
@@ -1,4 +1,4 @@
1
1
  import '../index.css';
2
- var styles = {"container":"bp_select_module_container--45f65","disabled":"bp_select_module_disabled--45f65","label":"bp_select_module_label--45f65","triggerBtn":"bp_select_module_triggerBtn--45f65","error":"bp_select_module_error--45f65","iconWrapper":"bp_select_module_iconWrapper--45f65","icon":"bp_select_module_icon--45f65","content":"bp_select_module_content--45f65","viewport":"bp_select_module_viewport--45f65","option":"bp_select_module_option--45f65","secondaryText":"bp_select_module_secondaryText--45f65","indicator":"bp_select_module_indicator--45f65","separator":"bp_select_module_separator--45f65"};
2
+ var styles = {"container":"bp_select_module_container--b9515","disabled":"bp_select_module_disabled--b9515","label":"bp_select_module_label--b9515","triggerBtn":"bp_select_module_triggerBtn--b9515","readonly":"bp_select_module_readonly--b9515","error":"bp_select_module_error--b9515","iconWrapper":"bp_select_module_iconWrapper--b9515","iconCaret":"bp_select_module_iconCaret--b9515","iconPencilCrossed":"bp_select_module_iconPencilCrossed--b9515","icon":"bp_select_module_icon--b9515","content":"bp_select_module_content--b9515","viewport":"bp_select_module_viewport--b9515","option":"bp_select_module_option--b9515","secondaryText":"bp_select_module_secondaryText--b9515","indicator":"bp_select_module_indicator--b9515","separator":"bp_select_module_separator--b9515"};
3
3
 
4
4
  export { styles as default };
@@ -43,6 +43,14 @@ export interface ExtraProps extends Labelable {
43
43
  * When `true`, prevents the user from interacting with select.
44
44
  */
45
45
  disabled?: RadixSelectProps['disabled'];
46
+ /**
47
+ * When `true`, prevents the user from interacting with select but can be read by the user.
48
+ */
49
+ readonly?: boolean;
50
+ /**
51
+ * Readonly subText to inform the user about the Select field.
52
+ */
53
+ subText?: string;
46
54
  /**
47
55
  * When `true`, indicates that the user must select a value before the owning form can be submitted.
48
56
  */
@@ -62,7 +70,25 @@ export interface ExtraProps extends Labelable {
62
70
  */
63
71
  error?: React.ReactNode;
64
72
  }
65
- export type SelectProps = Modify<RadixSelectTriggerProps, ExtraProps>;
73
+ type SelectState = {
74
+ disabled?: boolean;
75
+ } | {
76
+ readonly?: boolean;
77
+ } | {
78
+ disabled: false;
79
+ readonly: true;
80
+ } | {
81
+ disabled: true;
82
+ readonly: false;
83
+ } | {
84
+ disabled: false;
85
+ readonly: false;
86
+ } | {
87
+ disabled?: false;
88
+ readonly: true;
89
+ subText?: string;
90
+ };
91
+ export type SelectProps = Modify<RadixSelectTriggerProps, ExtraProps & SelectState>;
66
92
  export interface SelectContentProps extends React.ComponentPropsWithRef<'div'> {
67
93
  /**
68
94
  * Pass the select options and separators using `<Select.Option />` and `<Select.Separator />`.
@@ -104,3 +130,4 @@ export interface SelectOptionProps extends React.ComponentPropsWithRef<'div'> {
104
130
  */
105
131
  secondaryText?: string;
106
132
  }
133
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@box/blueprint-web",
3
- "version": "9.11.0",
3
+ "version": "9.12.1",
4
4
  "type": "module",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "publishConfig": {
@@ -63,7 +63,7 @@
63
63
  "react-stately": "^3.31.1",
64
64
  "tsx": "^4.16.5"
65
65
  },
66
- "gitHead": "12ff2908da5de325ae2b5e8124befa5f9cb04a84",
66
+ "gitHead": "cde15b83e37a0f08119cd81fab817af5e8556166",
67
67
  "module": "lib-esm/index.js",
68
68
  "main": "lib-esm/index.js",
69
69
  "exports": {