@sanity/ui 0.37.5 → 0.37.6-next.18

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 (41) hide show
  1. package/lib/dts/components/autocomplete/autocomplete.d.ts.map +1 -1
  2. package/lib/dts/components/autocomplete/autocomplete.styles.d.ts.map +1 -1
  3. package/lib/dts/components/menu/useMenuController.d.ts.map +1 -1
  4. package/lib/dts/components/tab/tab.d.ts +1 -1
  5. package/lib/dts/components/tab/tab.d.ts.map +1 -1
  6. package/lib/dts/components/tree/tree.d.ts +1 -1
  7. package/lib/dts/components/tree/tree.d.ts.map +1 -1
  8. package/lib/dts/components/tree/treeGroup.d.ts +1 -1
  9. package/lib/dts/components/tree/treeGroup.d.ts.map +1 -1
  10. package/lib/dts/components/tree/treeItem.d.ts +1 -1
  11. package/lib/dts/components/tree/treeItem.d.ts.map +1 -1
  12. package/lib/dts/hooks/usePrefersDark.d.ts.map +1 -1
  13. package/lib/dts/primitives/textInput/textInput.d.ts.map +1 -1
  14. package/lib/dts/styles/input/textInputStyle.d.ts.map +1 -1
  15. package/lib/dts/utils/errorBoundary.d.ts.map +1 -1
  16. package/lib/sanity-ui.js +60 -35
  17. package/lib/sanity-ui.js.map +1 -1
  18. package/lib/sanity-ui.modern.js +73 -36
  19. package/lib/sanity-ui.modern.js.map +1 -1
  20. package/lib/sanity-ui.module.js +61 -36
  21. package/lib/sanity-ui.module.js.map +1 -1
  22. package/package.json +9 -9
  23. package/src/components/autocomplete/__workshop__/custom.tsx +10 -4
  24. package/src/components/autocomplete/__workshop__/example.tsx +38 -15
  25. package/src/components/autocomplete/__workshop__/fullscreen.tsx +31 -30
  26. package/src/components/autocomplete/autocomplete.styles.tsx +1 -0
  27. package/src/components/autocomplete/autocomplete.tsx +24 -3
  28. package/src/components/menu/useMenuController.ts +4 -8
  29. package/src/components/tab/tab.tsx +1 -1
  30. package/src/components/tree/__workshop__/basic.perf.ts +32 -0
  31. package/src/components/tree/__workshop__/basic.tsx +92 -56
  32. package/src/components/tree/__workshop__/index.ts +6 -1
  33. package/src/components/tree/tree.tsx +168 -144
  34. package/src/components/tree/treeGroup.tsx +3 -3
  35. package/src/components/tree/treeItem.tsx +4 -4
  36. package/src/hooks/usePrefersDark.ts +5 -1
  37. package/src/primitives/textInput/__workshop__/plain.tsx +49 -18
  38. package/src/primitives/textInput/textInput.tsx +23 -3
  39. package/src/styles/input/textInputStyle.ts +2 -0
  40. package/src/theme/{themeContext.ts → ThemeContext.ts} +0 -0
  41. package/src/utils/errorBoundary.tsx +3 -1
@@ -1,5 +1,5 @@
1
1
  import { useId } from '@reach/auto-id';
2
- import React, { useState, useRef, useEffect, createContext, useContext, useMemo, useLayoutEffect, forwardRef, useCallback, cloneElement, isValidElement, createElement, useReducer, Children, Fragment } from 'react';
2
+ import React, { useState, useRef, useEffect, createContext, useContext, useMemo, useLayoutEffect, forwardRef, useCallback, cloneElement, isValidElement, createElement, useReducer, Children, Fragment, memo } from 'react';
3
3
  import ReactIs, { isElement, isFragment, isValidElementType } from 'react-is';
4
4
  import styled, { ThemeProvider as ThemeProvider$1, useTheme as useTheme$1, css, keyframes } from 'styled-components';
5
5
  import { white as white$1, black as black$1, hues } from '@sanity/color';
@@ -2861,7 +2861,10 @@ function useMediaIndex() {
2861
2861
  */
2862
2862
 
2863
2863
  function usePrefersDark() {
2864
- var _useState = useState(false),
2864
+ var _useState = useState(function () {
2865
+ if (typeof window === 'undefined') return false;
2866
+ return window.matchMedia('(prefers-color-scheme: dark)').matches;
2867
+ }),
2865
2868
  dark = _useState[0],
2866
2869
  setDark = _useState[1];
2867
2870
 
@@ -3602,7 +3605,7 @@ function responsiveInputPaddingIconRightStyle(props) {
3602
3605
  }
3603
3606
 
3604
3607
  var _templateObject$D, _templateObject2$n, _templateObject3$e;
3605
- var ROOT_STYLE = css(_templateObject$D || (_templateObject$D = _taggedTemplateLiteralLoose(["\n &:not([hidden]) {\n display: flex;\n }\n"])));
3608
+ var ROOT_STYLE = css(_templateObject$D || (_templateObject$D = _taggedTemplateLiteralLoose(["\n &:not([hidden]) {\n display: flex;\n }\n\n align-items: center;\n"])));
3606
3609
  function textInputRootStyle() {
3607
3610
  return ROOT_STYLE;
3608
3611
  }
@@ -5239,7 +5242,8 @@ var ErrorBoundary = /*#__PURE__*/function (_React$Component) {
5239
5242
  var error = this.state.error;
5240
5243
 
5241
5244
  if (error) {
5242
- return /*#__PURE__*/React.createElement(Code, null, error.message);
5245
+ var message = typeof (error == null ? void 0 : error.message) === 'string' ? error.message : 'Error';
5246
+ return /*#__PURE__*/React.createElement(Code, null, message);
5243
5247
  }
5244
5248
 
5245
5249
  return this.props.children;
@@ -6596,11 +6600,17 @@ var TextInput = /*#__PURE__*/forwardRef(function TextInput(props, forwardedRef)
6596
6600
 
6597
6601
  var clearButtonBoxPadding = useMemo(function () {
6598
6602
  return padding.map(function (v) {
6603
+ if (v === 0) return 0;
6604
+ if (v === 1) return 1;
6605
+ if (v === 2) return 1;
6599
6606
  return v - 2;
6600
6607
  });
6601
6608
  }, [padding]);
6602
6609
  var clearButtonPadding = useMemo(function () {
6603
6610
  return padding.map(function (v) {
6611
+ if (v === 0) return 0;
6612
+ if (v === 1) return 0;
6613
+ if (v === 2) return 1;
6604
6614
  return v - 1;
6605
6615
  });
6606
6616
  }, [padding]);
@@ -6619,9 +6629,7 @@ var TextInput = /*#__PURE__*/forwardRef(function TextInput(props, forwardedRef)
6619
6629
  icon: CloseIcon,
6620
6630
  mode: "bleed",
6621
6631
  padding: clearButtonPadding,
6622
- radius: radius.map(function (r) {
6623
- return r - 1;
6624
- })
6632
+ radius: radius
6625
6633
  }, clearButtonProps, {
6626
6634
  onClick: handleClearClick,
6627
6635
  onMouseDown: handleClearMouseDown
@@ -6836,7 +6844,7 @@ var _templateObject$b, _templateObject2$8, _templateObject3$3, _templateObject4$
6836
6844
  * @internal
6837
6845
  */
6838
6846
 
6839
- var Root$9 = styled.div(_templateObject$b || (_templateObject$b = _taggedTemplateLiteralLoose(["\n /* position: relative; */\n"])));
6847
+ var Root$9 = styled.div(_templateObject$b || (_templateObject$b = _taggedTemplateLiteralLoose(["\n /* position: relative; */\n line-height: 0;\n"])));
6840
6848
  /**
6841
6849
  * @internal
6842
6850
  */
@@ -6979,7 +6987,7 @@ var AUTOCOMPLETE_POPOVER_PLACEMENT = 'bottom-start';
6979
6987
 
6980
6988
  var AUTOCOMPLETE_POPOVER_FALLBACK_PLACEMENTS = ['top-start'];
6981
6989
 
6982
- var _excluded$f = ["border", "customValidity", "disabled", "filterOption", "fontSize", "icon", "id", "listBox", "loading", "onBlur", "onChange", "onFocus", "onQueryChange", "onSelect", "openButton", "options", "padding", "popover", "prefix", "radius", "readOnly", "relatedElements", "renderOption", "renderPopover", "renderValue", "value"];
6990
+ var _excluded$f = ["border", "customValidity", "disabled", "filterOption", "fontSize", "icon", "id", "listBox", "loading", "onBlur", "onChange", "onFocus", "onQueryChange", "onSelect", "openButton", "options", "padding", "popover", "prefix", "radius", "readOnly", "relatedElements", "renderOption", "renderPopover", "renderValue", "suffix", "value"];
6983
6991
 
6984
6992
  var defaultRenderValue = function defaultRenderValue(value, option) {
6985
6993
  return option ? option.value : value;
@@ -7022,6 +7030,7 @@ var InnerAutocomplete = /*#__PURE__*/forwardRef(function InnerAutocomplete(props
7022
7030
  renderPopover = props.renderPopover,
7023
7031
  _props$renderValue = props.renderValue,
7024
7032
  renderValue = _props$renderValue === void 0 ? defaultRenderValue : _props$renderValue,
7033
+ suffix = props.suffix,
7025
7034
  valueProp = props.value,
7026
7035
  restProps = _objectWithoutPropertiesLoose(props, _excluded$f);
7027
7036
 
@@ -7319,11 +7328,17 @@ var InnerAutocomplete = /*#__PURE__*/forwardRef(function InnerAutocomplete(props
7319
7328
  }, [disabled, handleClearButtonFocus, loading, value]);
7320
7329
  var openButtonBoxPadding = useMemo(function () {
7321
7330
  return padding.map(function (v) {
7331
+ if (v === 0) return 0;
7332
+ if (v === 1) return 1;
7333
+ if (v === 2) return 1;
7322
7334
  return v - 2;
7323
7335
  });
7324
7336
  }, [padding]);
7325
7337
  var openButtonPadding = useMemo(function () {
7326
7338
  return padding.map(function (v) {
7339
+ if (v === 0) return 0;
7340
+ if (v === 1) return 0;
7341
+ if (v === 2) return 1;
7327
7342
  return v - 1;
7328
7343
  });
7329
7344
  }, [padding]);
@@ -7396,7 +7411,7 @@ var InnerAutocomplete = /*#__PURE__*/forwardRef(function InnerAutocomplete(props
7396
7411
  ref: setRef,
7397
7412
  role: "combobox",
7398
7413
  spellCheck: false,
7399
- suffix: openButtonNode,
7414
+ suffix: suffix || openButtonNode,
7400
7415
  value: inputValue
7401
7416
  }));
7402
7417
  var handleListBoxKeyDown = useCallback(function (event) {
@@ -7971,8 +7986,8 @@ function useMenuController(props) {
7971
7986
  activeIndex = _useState2[0],
7972
7987
  _setActiveIndex = _useState2[1];
7973
7988
 
7974
- var activeElement = elementsRef.current[activeIndex] || null;
7975
7989
  var activeIndexRef = useRef(activeIndex);
7990
+ var activeElement = elementsRef.current[activeIndex] || null;
7976
7991
  var mounted = Boolean(rootElement);
7977
7992
  var setActiveIndex = useCallback(function (nextActiveIndex) {
7978
7993
  _setActiveIndex(nextActiveIndex);
@@ -8051,7 +8066,7 @@ function useMenuController(props) {
8051
8066
 
8052
8067
  var focusableLen = _focusableElements2.length;
8053
8068
  if (focusableLen === 0) return;
8054
- var focusedElement = elementsRef.current[activeIndex];
8069
+ var focusedElement = elementsRef.current[activeIndexRef.current];
8055
8070
 
8056
8071
  var focusedIndex = _focusableElements2.indexOf(focusedElement);
8057
8072
 
@@ -8072,7 +8087,7 @@ function useMenuController(props) {
8072
8087
 
8073
8088
  var _focusableLen = _focusableElements3.length;
8074
8089
  if (_focusableLen === 0) return;
8075
- var _focusedElement = elementsRef.current[activeIndex];
8090
+ var _focusedElement = elementsRef.current[activeIndexRef.current];
8076
8091
 
8077
8092
  var _focusedIndex = _focusableElements3.indexOf(_focusedElement);
8078
8093
 
@@ -8088,7 +8103,7 @@ function useMenuController(props) {
8088
8103
  if (onKeyDown) {
8089
8104
  onKeyDown(event);
8090
8105
  }
8091
- }, [activeIndex, onKeyDown, originElement, setActiveIndex]);
8106
+ }, [onKeyDown, originElement, setActiveIndex]);
8092
8107
  var handleItemMouseEnter = useCallback(function (event) {
8093
8108
  var element = event.currentTarget;
8094
8109
  var currentIndex = elementsRef.current.indexOf(element);
@@ -9374,20 +9389,22 @@ var _excluded$2 = ["children", "space"];
9374
9389
  * @beta
9375
9390
  */
9376
9391
 
9377
- function Tree(props) {
9392
+ var Tree = /*#__PURE__*/memo( /*#__PURE__*/forwardRef(function Tree(props, ref) {
9378
9393
  var children = props.children,
9379
9394
  _props$space = props.space,
9380
9395
  space = _props$space === void 0 ? 1 : _props$space,
9381
9396
  restProps = _objectWithoutPropertiesLoose(props, _excluded$2);
9382
9397
 
9398
+ var forwardedRef = useForwardedRef(ref);
9399
+
9383
9400
  var _useState = useState(null),
9384
9401
  focusedElement = _useState[0],
9385
9402
  setFocusedElement = _useState[1];
9386
9403
 
9404
+ var focusedElementRef = useRef(focusedElement);
9387
9405
  var path = useMemo(function () {
9388
9406
  return [];
9389
9407
  }, []);
9390
- var rootRef = useRef(null);
9391
9408
 
9392
9409
  var _useState2 = useState([]),
9393
9410
  itemElements = _useState2[0],
@@ -9397,6 +9414,13 @@ function Tree(props) {
9397
9414
  state = _useState3[0],
9398
9415
  setState = _useState3[1];
9399
9416
 
9417
+ var stateRef = useRef(state);
9418
+ useEffect(function () {
9419
+ focusedElementRef.current = focusedElement;
9420
+ }, [focusedElement]);
9421
+ useEffect(function () {
9422
+ stateRef.current = state;
9423
+ }, [state]);
9400
9424
  var registerItem = useCallback(function (element, path, expanded, selected) {
9401
9425
  setState(function (s) {
9402
9426
  var _extends2;
@@ -9445,12 +9469,12 @@ function Tree(props) {
9445
9469
  };
9446
9470
  }, [focusedElement, itemElements, path, registerItem, setExpanded, space, state]);
9447
9471
  var handleKeyDown = useCallback(function (event) {
9448
- if (!focusedElement) return;
9472
+ if (!focusedElementRef.current) return;
9449
9473
 
9450
9474
  if (event.key === 'ArrowDown') {
9451
9475
  event.preventDefault();
9452
9476
 
9453
- var nextEl = _findNextItemElement(state, itemElements, focusedElement);
9477
+ var nextEl = _findNextItemElement(stateRef.current, itemElements, focusedElementRef.current);
9454
9478
 
9455
9479
  if (nextEl) {
9456
9480
  _focusItemElement(nextEl);
@@ -9464,7 +9488,7 @@ function Tree(props) {
9464
9488
  if (event.key === 'ArrowUp') {
9465
9489
  event.preventDefault();
9466
9490
 
9467
- var prevEl = _findPrevItemElement(state, itemElements, focusedElement);
9491
+ var prevEl = _findPrevItemElement(stateRef.current, itemElements, focusedElementRef.current);
9468
9492
 
9469
9493
  if (prevEl) {
9470
9494
  _focusItemElement(prevEl);
@@ -9477,9 +9501,9 @@ function Tree(props) {
9477
9501
 
9478
9502
  if (event.key === 'ArrowLeft') {
9479
9503
  event.preventDefault();
9480
- var itemKey = focusedElement.getAttribute('data-tree-key');
9504
+ var itemKey = focusedElementRef.current.getAttribute('data-tree-key');
9481
9505
  if (!itemKey) return;
9482
- var itemState = state[itemKey];
9506
+ var itemState = stateRef.current[itemKey];
9483
9507
  if (!itemState) return;
9484
9508
 
9485
9509
  if (itemState.expanded) {
@@ -9496,7 +9520,7 @@ function Tree(props) {
9496
9520
  var itemPath = itemKey.split('/');
9497
9521
  itemPath.pop();
9498
9522
  var parentKey = itemPath.join('/');
9499
- var parentState = parentKey && state[parentKey];
9523
+ var parentState = parentKey && stateRef.current[parentKey];
9500
9524
 
9501
9525
  if (parentState) {
9502
9526
  parentState.element.focus();
@@ -9508,13 +9532,13 @@ function Tree(props) {
9508
9532
  }
9509
9533
 
9510
9534
  if (event.key === 'ArrowRight') {
9511
- var _state$focusedKey;
9535
+ var _stateRef$current$foc;
9512
9536
 
9513
9537
  event.preventDefault();
9514
- var focusedKey = focusedElement.getAttribute('data-tree-key');
9538
+ var focusedKey = focusedElementRef.current.getAttribute('data-tree-key');
9515
9539
  if (!focusedKey) return;
9516
9540
 
9517
- if (!((_state$focusedKey = state[focusedKey]) != null && _state$focusedKey.expanded)) {
9541
+ if (!((_stateRef$current$foc = stateRef.current[focusedKey]) != null && _stateRef$current$foc.expanded)) {
9518
9542
  setState(function (s) {
9519
9543
  var _extends5;
9520
9544
 
@@ -9528,14 +9552,14 @@ function Tree(props) {
9528
9552
 
9529
9553
  return;
9530
9554
  }
9531
- }, [focusedElement, itemElements, state]);
9555
+ }, [itemElements]);
9532
9556
  useEffect(function () {
9533
- if (!rootRef.current) return;
9557
+ if (!forwardedRef.current) return;
9534
9558
 
9535
- var _itemElements = Array.from(rootRef.current.querySelectorAll('[data-ui="TreeItem"]'));
9559
+ var _itemElements = Array.from(forwardedRef.current.querySelectorAll('[data-ui="TreeItem"]'));
9536
9560
 
9537
9561
  setItemElements(_itemElements);
9538
- }, [children]);
9562
+ }, [children, forwardedRef]);
9539
9563
  return /*#__PURE__*/React.createElement(TreeContext.Provider, {
9540
9564
  value: contextValue
9541
9565
  }, /*#__PURE__*/React.createElement(Stack, _extends({
@@ -9543,11 +9567,12 @@ function Tree(props) {
9543
9567
  "data-ui": "Tree"
9544
9568
  }, restProps, {
9545
9569
  onKeyDown: handleKeyDown,
9546
- ref: rootRef,
9570
+ ref: forwardedRef,
9547
9571
  role: "tree",
9548
9572
  space: space
9549
9573
  }), children));
9550
- }
9574
+ }));
9575
+ Tree.displayName = 'Tree';
9551
9576
 
9552
9577
  var _templateObject$1, _templateObject2, _templateObject3;
9553
9578
  function treeItemRootStyle() {
@@ -9586,7 +9611,7 @@ function useTree() {
9586
9611
  }
9587
9612
 
9588
9613
  var _excluded$1 = ["children", "expanded"];
9589
- function TreeGroup(props) {
9614
+ var TreeGroup = /*#__PURE__*/memo(function TreeGroup(props) {
9590
9615
  var children = props.children,
9591
9616
  _props$expanded = props.expanded,
9592
9617
  expanded = _props$expanded === void 0 ? false : _props$expanded,
@@ -9602,12 +9627,12 @@ function TreeGroup(props) {
9602
9627
  role: "group",
9603
9628
  space: tree.space
9604
9629
  }), children);
9605
- }
9630
+ });
9606
9631
 
9607
9632
  var _excluded = ["children", "expanded", "fontSize", "href", "icon", "id", "muted", "onClick", "padding", "selected", "space", "text", "weight"];
9608
9633
 
9609
9634
  var _templateObject;
9610
- var Root = styled.li(treeItemRootStyle, treeItemRootColorStyle);
9635
+ var Root = /*#__PURE__*/memo(styled.li(treeItemRootStyle, treeItemRootColorStyle));
9611
9636
  var TreeItemBox = styled(Box).attrs({
9612
9637
  forwardedAs: 'a'
9613
9638
  })(treeItemBoxStyle);
@@ -9617,7 +9642,7 @@ var ToggleArrowText = styled(Text)(_templateObject || (_templateObject = _tagged
9617
9642
  * @beta
9618
9643
  */
9619
9644
 
9620
- function TreeItem(props) {
9645
+ var TreeItem = /*#__PURE__*/memo(function TreeItem(props) {
9621
9646
  var children = props.children,
9622
9647
  _props$expanded = props.expanded,
9623
9648
  expandedProp = _props$expanded === void 0 ? false : _props$expanded,
@@ -9754,7 +9779,7 @@ function TreeItem(props) {
9754
9779
  }, children && /*#__PURE__*/React.createElement(TreeGroup, {
9755
9780
  expanded: expanded
9756
9781
  }, children)));
9757
- }
9782
+ });
9758
9783
 
9759
9784
  export { Autocomplete, Avatar, AvatarCounter, AvatarStack, Badge, BoundaryElementProvider, Box, Breadcrumbs, Button, Card, Checkbox, Code, CodeSkeleton, Container, Dialog, DialogContext, DialogProvider, ElementQuery, ErrorBoundary, Flex, Grid, Heading, HeadingSkeleton, Hotkeys, Inline, KBD, Label, LabelSkeleton, Layer, LayerProvider, Menu, MenuButton, MenuDivider, MenuGroup, MenuItem, Popover, Portal, PortalProvider, Radio, RO as ResizeObserver, Select, Skeleton, Spinner, SrOnly, Stack, Switch, Tab, TabList, TabPanel, Text, TextArea, TextInput, TextSkeleton, ThemeColorProvider, ThemeProvider, Toast, ToastProvider, Tooltip, Tree, TreeItem, VirtualList, _hasFocus, _isEnterToClickElement, _isScrollable, _raf, _raf2, attemptFocus, createColorTheme, fillCSSObject, focusFirstDescendant, focusLastDescendant, getResponsiveProp, getResponsiveSpace, hexToRgb, hslToRgb, isFocusable, isHTMLAnchorElement, isHTMLButtonElement, isHTMLElement, isHTMLInputElement, isHTMLSelectElement, isHTMLTextAreaElement, multiply$1 as multiply, parseColor, rem, responsive, responsiveCodeFontStyle, responsiveHeadingFont, responsiveLabelFont, responsiveTextAlignStyle, responsiveTextFont, rgbToHex, rgbToHsl, rgba, screen$1 as screen, studioTheme, useBoundaryElement, useClickOutside, useCustomValidity, useDialog, useElementRect, useForwardedRef, useGlobalKeyDown, useLayer, useMediaIndex, usePortal, usePrefersDark, useResponsiveProp, useRootTheme, useTheme, useToast, useTree };
9760
9785
  //# sourceMappingURL=sanity-ui.module.js.map