@box/blueprint-web 12.81.4 → 12.82.0

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.
@@ -1,2 +1,4 @@
1
+ import { type OptionValue } from '../combobox';
1
2
  import { type ComboboxGroupComboboxProps } from './types';
2
- export declare const ComboboxGroupCombobox: import("react").ForwardRefExoticComponent<ComboboxGroupComboboxProps<true, true, import("../combobox").OptionValue> & import("react").RefAttributes<HTMLInputElement>>;
3
+ export declare const ComboboxGroupCombobox: import("react").ForwardRefExoticComponent<ComboboxGroupComboboxProps<true, true, OptionValue> & import("react").RefAttributes<HTMLInputElement>>;
4
+ export declare const ComboboxGroupComboboxSingleSelect: import("react").ForwardRefExoticComponent<ComboboxGroupComboboxProps<false, true, OptionValue> & import("react").RefAttributes<HTMLInputElement>>;
@@ -8,58 +8,64 @@ import { Combobox } from '../combobox/combobox.js';
8
8
  import { useComboboxGroupContext } from './combobox-group-context.js';
9
9
  import styles from './combobox-group.module.js';
10
10
 
11
- const ComboboxGroupCombobox = /*#__PURE__*/forwardRef((props, forwardedRef) => {
12
- const {
13
- position = 'leading',
14
- error = false,
15
- portalElement,
16
- disabled,
17
- ...rest
18
- } = props;
19
- const {
20
- errors,
21
- setError,
22
- inlineErrorId,
23
- isDisabled,
24
- isSelectFocused,
25
- setComboboxFocus,
26
- comboboxId,
27
- setSubcomponentId
28
- } = useComboboxGroupContext();
29
- const borderStyles = position === 'trailing' ? styles.trailing : styles.leading;
30
- const handleFocus = useCallback(() => setComboboxFocus(true), [setComboboxFocus]);
31
- const handleBlur = useCallback(() => setComboboxFocus(false), [setComboboxFocus]);
32
- const selectHasError = !!errors.select;
33
- const comboboxHasError = !!errors.combobox;
34
- const isLeading = position === 'leading';
35
- useEffect(() => {
36
- if (isLeading) {
37
- setSubcomponentId(comboboxId);
38
- }
39
- }, [isLeading, comboboxId, setSubcomponentId]);
40
- useEffect(() => {
41
- setError('combobox', error);
42
- }, [error, setError]);
43
- return jsx(Combobox, {
44
- as: "input",
45
- ...rest,
46
- ref: forwardedRef,
47
- "aria-describedby": comboboxHasError ? inlineErrorId : undefined,
48
- "aria-invalid": comboboxHasError,
49
- className: clsx(borderStyles, styles.comboboxContainer, {
50
- [styles.errorSelect]: selectHasError
51
- }, {
52
- [styles.errorCombobox]: comboboxHasError
53
- }, {
54
- [styles.selectHasFocus]: isSelectFocused
55
- }),
56
- disabled: isDisabled,
57
- error: null,
58
- idForLabel: comboboxId,
59
- onBlur: handleBlur,
60
- onFocus: handleFocus,
61
- portalElement: portalElement
11
+ const createComboboxGroupComponent = () => {
12
+ return /*#__PURE__*/forwardRef((props, forwardedRef) => {
13
+ const {
14
+ position = 'leading',
15
+ error = false,
16
+ portalElement,
17
+ disabled,
18
+ onValueChange,
19
+ ...rest
20
+ } = props;
21
+ const {
22
+ errors,
23
+ setError,
24
+ inlineErrorId,
25
+ isDisabled,
26
+ isSelectFocused,
27
+ setComboboxFocus,
28
+ comboboxId,
29
+ setSubcomponentId
30
+ } = useComboboxGroupContext();
31
+ const borderStyles = position === 'trailing' ? styles.trailing : styles.leading;
32
+ const handleFocus = useCallback(() => setComboboxFocus(true), [setComboboxFocus]);
33
+ const handleBlur = useCallback(() => setComboboxFocus(false), [setComboboxFocus]);
34
+ const selectHasError = !!errors.select;
35
+ const comboboxHasError = !!errors.combobox;
36
+ const isLeading = position === 'leading';
37
+ useEffect(() => {
38
+ if (isLeading) {
39
+ setSubcomponentId(comboboxId);
40
+ }
41
+ }, [isLeading, comboboxId, setSubcomponentId]);
42
+ useEffect(() => {
43
+ setError('combobox', error);
44
+ }, [error, setError]);
45
+ return jsx(Combobox, {
46
+ as: "input",
47
+ ...rest,
48
+ ref: forwardedRef,
49
+ "aria-describedby": comboboxHasError ? inlineErrorId : undefined,
50
+ "aria-invalid": comboboxHasError,
51
+ className: clsx(borderStyles, styles.comboboxContainer, {
52
+ [styles.errorSelect]: selectHasError
53
+ }, {
54
+ [styles.errorCombobox]: comboboxHasError
55
+ }, {
56
+ [styles.selectHasFocus]: isSelectFocused
57
+ }),
58
+ disabled: disabled ?? isDisabled,
59
+ error: null,
60
+ idForLabel: comboboxId,
61
+ onBlur: handleBlur,
62
+ onFocus: handleFocus,
63
+ onValueChange: onValueChange,
64
+ portalElement: portalElement
65
+ });
62
66
  });
63
- });
67
+ };
68
+ const ComboboxGroupCombobox = createComboboxGroupComponent();
69
+ const ComboboxGroupComboboxSingleSelect = createComboboxGroupComponent();
64
70
 
65
- export { ComboboxGroupCombobox };
71
+ export { ComboboxGroupCombobox, ComboboxGroupComboboxSingleSelect };
@@ -2,5 +2,6 @@ import { type ComboboxGroupProps } from './types';
2
2
  export declare const ComboboxGroup: {
3
3
  ({ children, disabled, ...props }: ComboboxGroupProps): import("react/jsx-runtime").JSX.Element;
4
4
  Combobox: import("react").ForwardRefExoticComponent<import("./types").ComboboxGroupComboboxProps<true, true, import("../combobox").OptionValue> & import("react").RefAttributes<HTMLInputElement>>;
5
+ ComboboxSingleSelect: import("react").ForwardRefExoticComponent<import("./types").ComboboxGroupComboboxProps<false, true, import("../combobox").OptionValue> & import("react").RefAttributes<HTMLInputElement>>;
5
6
  Select: import("react").ForwardRefExoticComponent<import("./types").ComboboxGroupSelectProps & import("react").RefAttributes<HTMLButtonElement>>;
6
7
  };
@@ -4,7 +4,7 @@ import { forwardRef } from 'react';
4
4
  import { useBlueprintModernization } from '../blueprint-modernization-context/useBlueprintModernization.js';
5
5
  import { InlineError } from '../primitives/inline-error/inline-error.js';
6
6
  import { useLabelable } from '../util-components/labelable/useLabelable.js';
7
- import { ComboboxGroupCombobox } from './combobox-group-combobox.js';
7
+ import { ComboboxGroupCombobox, ComboboxGroupComboboxSingleSelect } from './combobox-group-combobox.js';
8
8
  import { ComboboxGroupProvider, useComboboxGroupContext } from './combobox-group-context.js';
9
9
  import { ComboboxGroupSelect } from './combobox-group-select.js';
10
10
  import styles from './combobox-group.module.js';
@@ -61,6 +61,7 @@ const ComboboxGroup = ({
61
61
  });
62
62
  };
63
63
  ComboboxGroup.Combobox = ComboboxGroupCombobox;
64
+ ComboboxGroup.ComboboxSingleSelect = ComboboxGroupComboboxSingleSelect;
64
65
  ComboboxGroup.Select = ComboboxGroupSelect;
65
66
 
66
67
  export { ComboboxGroup };
@@ -1,4 +1,4 @@
1
- import { type ComboboxBaseProps, type OptionValue } from '../combobox/types';
1
+ import { type ComboboxBaseProps, type ComboboxValue, type OptionValue } from '../combobox/types';
2
2
  import { type SelectProps } from '../select/types';
3
3
  export interface ComboboxGroupProps {
4
4
  children: React.ReactNode;
@@ -13,9 +13,13 @@ export interface ComboboxGroupSelectProps extends Omit<SelectProps, 'disabled'>
13
13
  label: never;
14
14
  position?: 'leading' | 'trailing';
15
15
  }
16
- export interface ComboboxGroupComboboxProps<Multiple extends boolean = true, FreeInput extends boolean = true, T extends OptionValue = OptionValue> extends ComboboxBaseProps<Multiple, FreeInput, T> {
17
- disabled?: never;
16
+ export interface ComboboxGroupComboboxProps<Multiple extends boolean = true, FreeInput extends boolean = true, T extends OptionValue = OptionValue> extends Omit<ComboboxBaseProps<Multiple, FreeInput, T>, 'defaultValue' | 'value' | 'onValueChange'> {
17
+ disabled?: boolean;
18
18
  error?: boolean;
19
19
  label: never;
20
20
  position?: 'leading' | 'trailing';
21
+ defaultValue?: ComboboxValue<Multiple, FreeInput, T>;
22
+ value?: ComboboxValue<Multiple, FreeInput, T>;
23
+ onValueChange?: (value: ComboboxValue<Multiple, FreeInput, T>) => void;
21
24
  }
25
+ export type ComboboxGroupComboboxSingleSelectProps = ComboboxGroupComboboxProps<false, true, OptionValue>;
@@ -9362,55 +9362,52 @@ div[data-radix-popper-content-wrapper]:has([role=menu]):has([data-state=open]):h
9362
9362
  min-width:var(--split-button-dropdown-min-width);
9363
9363
  }
9364
9364
 
9365
- .bp_switch_module_option--747a4[data-modern=false]{
9366
- --switch-width:var(--size-10);
9365
+ .bp_switch_module_option--f8df5[data-modern=false]{
9367
9366
  --switch-height:var(--size-5);
9368
9367
  --switch-margin-left:var(--space-10);
9369
9368
  --switch-margin-right:var(--space-3);
9370
- --description-margin:calc(var(--switch-margin-right) + var(--switch-width));
9371
- --thumb-width:var(--size-5);
9372
- --thumb-height:var(--size-5);
9373
- --thumb-bg:var(--surface-switch-surface);
9374
- --thumb-border-off:var(--border-1) solid var(--border-switch-border);
9375
- --thumb-border-off-hover:var(--border-1) solid var(--border-switch-border);
9376
- --thumb-border-on:var(--border-1) solid var(--border-switch-border);
9377
- --thumb-border-on-hover:var(--border-1) solid var(--border-switch-border);
9378
- --thumb-radius:var(--size-10);
9379
- --thumb-shadow:var(--dropshadow-3);
9380
9369
  --switch-bg-off:var(--surface-switch-surface-off);
9381
9370
  --switch-bg-off-hover:var(--surface-switch-surface-off);
9382
9371
  --switch-bg-on:var(--surface-switch-surface-on);
9383
9372
  --switch-bg-on-hover:var(--surface-switch-surface-on);
9384
9373
  --switch-radius:var(--size-10);
9374
+ --switch-padding-inline:0;
9375
+ --switch-width:var(--size-10);
9385
9376
  --switch-outline:var(--outline-focus-on-light);
9386
9377
  --switch-disabled-opacity:.5;
9378
+ --description-margin:calc(var(--switch-margin-right) + var(--switch-width));
9379
+ --thumb-width:var(--size-5);
9380
+ --thumb-height:var(--size-5);
9381
+ --thumb-bg:var(--surface-switch-surface);
9382
+ --thumb-border:var(--border-1) solid var(--border-switch-border);
9383
+ --thumb-radius:var(--size-10);
9384
+ --thumb-shadow:var(--dropshadow-3);
9387
9385
  }
9388
9386
 
9389
- .bp_switch_module_option--747a4[data-modern=true]{
9390
- --switch-width:var(--bp-size-110);
9387
+ .bp_switch_module_option--f8df5[data-modern=true]{
9391
9388
  --switch-height:var(--bp-size-060);
9392
9389
  --switch-margin-left:var(--bp-space-100);
9393
9390
  --switch-margin-right:var(--bp-space-030);
9394
- --description-margin:calc(var(--switch-margin-right) + var(--switch-width));
9395
- --thumb-width:var(--bp-size-060);
9396
- --thumb-height:var(--bp-size-060);
9397
- --thumb-bg:var(--bp-surface-switch-surface);
9398
- --thumb-border-off:var(--bp-border-02) solid var(--bp-surface-switch-surface-off);
9399
- --thumb-border-off-hover:var(--bp-border-02) solid var(--bp-surface-switch-surface-off-hover);
9400
- --thumb-border-on:var(--bp-border-02) solid var(--bp-surface-switch-surface-on);
9401
- --thumb-border-on-hover:var(--bp-border-02) solid var(--bp-surface-switch-surface-on-hover);
9402
- --thumb-radius:var(--bp-size-100);
9403
- --thumb-shadow:var(--dropshadow-3);
9404
9391
  --switch-bg-off:var(--bp-surface-switch-surface-off);
9405
9392
  --switch-bg-off-hover:var(--bp-surface-switch-surface-off-hover);
9406
9393
  --switch-bg-on:var(--bp-surface-switch-surface-on);
9407
9394
  --switch-bg-on-hover:var(--bp-surface-switch-surface-on-hover);
9408
9395
  --switch-radius:var(--bp-size-100);
9396
+ --switch-padding-inline:var(--bp-space-005);
9397
+ --switch-base-width:var(--bp-size-110);
9398
+ --switch-width:calc(var(--switch-base-width) - var(--switch-padding-inline)*2);
9409
9399
  --switch-outline:var(--bp-outline-focus-on-light);
9410
9400
  --switch-disabled-opacity:.6;
9401
+ --description-margin:calc(var(--switch-margin-right) + var(--switch-base-width));
9402
+ --thumb-width:var(--bp-size-050);
9403
+ --thumb-height:var(--bp-size-050);
9404
+ --thumb-bg:var(--bp-surface-switch-surface);
9405
+ --thumb-border:none;
9406
+ --thumb-radius:var(--bp-size-100);
9407
+ --thumb-shadow:var(--dropshadow-3);
9411
9408
  }
9412
9409
 
9413
- .bp_switch_module_option--747a4{
9410
+ .bp_switch_module_option--f8df5{
9414
9411
  display:flex;
9415
9412
  flex-direction:column;
9416
9413
  font-family:var(--body-default-font-family);
@@ -9422,31 +9419,31 @@ div[data-radix-popper-content-wrapper]:has([role=menu]):has([data-state=open]):h
9422
9419
  text-decoration:var(--body-default-text-decoration);
9423
9420
  text-transform:var(--body-default-text-case);
9424
9421
  }
9425
- .bp_switch_module_option--747a4 .bp_switch_module_label--747a4{
9422
+ .bp_switch_module_option--f8df5 .bp_switch_module_label--f8df5{
9426
9423
  cursor:pointer;
9427
9424
  display:inline-flex;
9428
9425
  flex-direction:row;
9429
9426
  width:-moz-fit-content;
9430
9427
  width:fit-content;
9431
9428
  }
9432
- .bp_switch_module_option--747a4 .bp_switch_module_label--747a4.bp_switch_module_rightAlign--747a4{
9429
+ .bp_switch_module_option--f8df5 .bp_switch_module_label--f8df5.bp_switch_module_rightAlign--f8df5{
9433
9430
  flex-direction:row-reverse;
9434
9431
  justify-content:space-between;
9435
9432
  width:unset;
9436
9433
  }
9437
- .bp_switch_module_option--747a4 .bp_switch_module_label--747a4:has(.bp_switch_module_switch--747a4:disabled){
9434
+ .bp_switch_module_option--f8df5 .bp_switch_module_label--f8df5:has(.bp_switch_module_switch--f8df5:disabled){
9438
9435
  cursor:default;
9439
9436
  }
9440
- .bp_switch_module_option--747a4 .bp_switch_module_description--747a4{
9437
+ .bp_switch_module_option--f8df5 .bp_switch_module_description--f8df5{
9441
9438
  margin-left:var(--description-margin);
9442
9439
  }
9443
- .bp_switch_module_option--747a4 .bp_switch_module_description--747a4.bp_switch_module_rightAlign--747a4{
9440
+ .bp_switch_module_option--f8df5 .bp_switch_module_description--f8df5.bp_switch_module_rightAlign--f8df5{
9444
9441
  margin-left:unset;
9445
9442
  margin-right:var(--description-margin);
9446
9443
  }
9447
- .bp_switch_module_option--747a4 .bp_switch_module_thumb--747a4{
9444
+ .bp_switch_module_option--f8df5 .bp_switch_module_thumb--f8df5{
9448
9445
  background-color:var(--thumb-bg);
9449
- border:var(--thumb-border-off);
9446
+ border:var(--thumb-border);
9450
9447
  border-radius:var(--thumb-radius);
9451
9448
  box-shadow:var(--thumb-shadow);
9452
9449
  box-sizing:border-box;
@@ -9456,7 +9453,7 @@ div[data-radix-popper-content-wrapper]:has([role=menu]):has([data-state=open]):h
9456
9453
  width:var(--thumb-width);
9457
9454
  will-change:transform;
9458
9455
  }
9459
- .bp_switch_module_option--747a4 .bp_switch_module_switch--747a4{
9456
+ .bp_switch_module_option--f8df5 .bp_switch_module_switch--f8df5{
9460
9457
  all:unset;
9461
9458
  align-items:center;
9462
9459
  background-color:var(--switch-bg-off);
@@ -9465,51 +9462,39 @@ div[data-radix-popper-content-wrapper]:has([role=menu]):has([data-state=open]):h
9465
9462
  flex-shrink:0;
9466
9463
  height:var(--switch-height);
9467
9464
  margin-right:var(--switch-margin-right);
9465
+ padding-inline:var(--switch-padding-inline);
9468
9466
  position:relative;
9469
9467
  transition:background-color .4s;
9470
9468
  width:var(--switch-width);
9471
9469
  will-change:transition;
9472
9470
  }
9473
- .bp_switch_module_option--747a4 .bp_switch_module_switch--747a4:disabled{
9471
+ .bp_switch_module_option--f8df5 .bp_switch_module_switch--f8df5:disabled{
9474
9472
  opacity:var(--switch-disabled-opacity);
9475
9473
  }
9476
- .bp_switch_module_option--747a4 .bp_switch_module_switch--747a4.bp_switch_module_rightAlign--747a4{
9474
+ .bp_switch_module_option--f8df5 .bp_switch_module_switch--f8df5.bp_switch_module_rightAlign--f8df5{
9477
9475
  margin-left:var(--switch-margin-left);
9478
9476
  margin-right:unset;
9479
9477
  }
9480
- .bp_switch_module_option--747a4 .bp_switch_module_switch--747a4:focus-visible{
9478
+ .bp_switch_module_option--f8df5 .bp_switch_module_switch--f8df5:focus-visible{
9481
9479
  background-color:var(--switch-bg-off-hover);
9482
9480
  box-shadow:0 0 0 var(--border-1, 1px) var(--background-background), 0 0 0 var(--border-3) var(--switch-outline);
9483
9481
  }
9484
- .bp_switch_module_option--747a4 .bp_switch_module_switch--747a4:focus-visible .bp_switch_module_thumb--747a4{
9485
- border:var(--thumb-border-off-hover);
9486
- }
9487
- .bp_switch_module_option--747a4 .bp_switch_module_switch--747a4:hover:not(:disabled){
9482
+ .bp_switch_module_option--f8df5 .bp_switch_module_switch--f8df5:hover:not(:disabled){
9488
9483
  background-color:var(--switch-bg-off-hover);
9489
9484
  }
9490
- .bp_switch_module_option--747a4 .bp_switch_module_switch--747a4:hover:not(:disabled) .bp_switch_module_thumb--747a4{
9491
- border:var(--thumb-border-off-hover);
9492
- }
9493
- .bp_switch_module_option--747a4 .bp_switch_module_switch--747a4[aria-checked=true]{
9485
+ .bp_switch_module_option--f8df5 .bp_switch_module_switch--f8df5[aria-checked=true]{
9494
9486
  background-color:var(--switch-bg-on);
9495
9487
  }
9496
- .bp_switch_module_option--747a4 .bp_switch_module_switch--747a4[aria-checked=true] .bp_switch_module_thumb--747a4{
9497
- border:var(--thumb-border-on);
9488
+ .bp_switch_module_option--f8df5 .bp_switch_module_switch--f8df5[aria-checked=true] .bp_switch_module_thumb--f8df5{
9498
9489
  transform:translateX(calc(var(--switch-width) - var(--thumb-width)));
9499
9490
  }
9500
- .bp_switch_module_option--747a4 .bp_switch_module_switch--747a4[aria-checked=true]:focus-visible{
9491
+ .bp_switch_module_option--f8df5 .bp_switch_module_switch--f8df5[aria-checked=true]:focus-visible{
9501
9492
  background-color:var(--switch-bg-on-hover);
9502
9493
  box-shadow:0 0 0 var(--border-1, 1px) var(--background-background), 0 0 0 var(--border-3) var(--switch-outline);
9503
9494
  }
9504
- .bp_switch_module_option--747a4 .bp_switch_module_switch--747a4[aria-checked=true]:focus-visible .bp_switch_module_thumb--747a4{
9505
- border:var(--thumb-border-on-hover);
9506
- }
9507
- .bp_switch_module_option--747a4 .bp_switch_module_switch--747a4[aria-checked=true]:hover:not(:disabled){
9495
+ .bp_switch_module_option--f8df5 .bp_switch_module_switch--f8df5[aria-checked=true]:hover:not(:disabled){
9508
9496
  background-color:var(--switch-bg-on-hover);
9509
9497
  }
9510
- .bp_switch_module_option--747a4 .bp_switch_module_switch--747a4[aria-checked=true]:hover:not(:disabled) .bp_switch_module_thumb--747a4{
9511
- border:var(--thumb-border-on-hover);
9512
- }
9513
9498
 
9514
9499
  .bp_text_button_module_textButton--985ec[data-modern=false]{
9515
9500
  --text-button-text-color:var(--text-cta-link);
@@ -1,4 +1,4 @@
1
1
  import '../index.css';
2
- var styles = {"option":"bp_switch_module_option--747a4","label":"bp_switch_module_label--747a4","rightAlign":"bp_switch_module_rightAlign--747a4","switch":"bp_switch_module_switch--747a4","description":"bp_switch_module_description--747a4","thumb":"bp_switch_module_thumb--747a4"};
2
+ var styles = {"option":"bp_switch_module_option--f8df5","label":"bp_switch_module_label--f8df5","rightAlign":"bp_switch_module_rightAlign--f8df5","switch":"bp_switch_module_switch--f8df5","description":"bp_switch_module_description--f8df5","thumb":"bp_switch_module_thumb--f8df5"};
3
3
 
4
4
  export { styles as default };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@box/blueprint-web",
3
- "version": "12.81.4",
3
+ "version": "12.82.0",
4
4
  "type": "module",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "publishConfig": {