@sanity/ui 0.37.5 → 0.37.6

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 +64 -37
  17. package/lib/sanity-ui.js.map +1 -1
  18. package/lib/sanity-ui.modern.js +76 -38
  19. package/lib/sanity-ui.modern.js.map +1 -1
  20. package/lib/sanity-ui.module.js +65 -38
  21. package/lib/sanity-ui.module.js.map +1 -1
  22. package/package.json +10 -10
  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 +10 -4
  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,12 +2861,17 @@ function useMediaIndex() {
2861
2861
  */
2862
2862
 
2863
2863
  function usePrefersDark() {
2864
- var _useState = useState(false),
2864
+ var mq = useMemo(function () {
2865
+ if (typeof window === 'undefined') return undefined;
2866
+ return window.matchMedia('(prefers-color-scheme: dark)');
2867
+ }, []);
2868
+
2869
+ var _useState = useState((mq == null ? void 0 : mq.matches) || false),
2865
2870
  dark = _useState[0],
2866
2871
  setDark = _useState[1];
2867
2872
 
2868
2873
  useEffect(function () {
2869
- var mq = window.matchMedia('(prefers-color-scheme: dark)');
2874
+ if (!mq) return undefined;
2870
2875
  setDark(mq.matches);
2871
2876
 
2872
2877
  var handleChange = function handleChange() {
@@ -2877,7 +2882,7 @@ function usePrefersDark() {
2877
2882
  return function () {
2878
2883
  return mq.removeEventListener('change', handleChange);
2879
2884
  };
2880
- }, []);
2885
+ }, [mq]);
2881
2886
  return dark;
2882
2887
  }
2883
2888
 
@@ -3602,7 +3607,7 @@ function responsiveInputPaddingIconRightStyle(props) {
3602
3607
  }
3603
3608
 
3604
3609
  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"])));
3610
+ var ROOT_STYLE = css(_templateObject$D || (_templateObject$D = _taggedTemplateLiteralLoose(["\n &:not([hidden]) {\n display: flex;\n }\n\n align-items: center;\n"])));
3606
3611
  function textInputRootStyle() {
3607
3612
  return ROOT_STYLE;
3608
3613
  }
@@ -5239,7 +5244,8 @@ var ErrorBoundary = /*#__PURE__*/function (_React$Component) {
5239
5244
  var error = this.state.error;
5240
5245
 
5241
5246
  if (error) {
5242
- return /*#__PURE__*/React.createElement(Code, null, error.message);
5247
+ var message = typeof (error == null ? void 0 : error.message) === 'string' ? error.message : 'Error';
5248
+ return /*#__PURE__*/React.createElement(Code, null, message);
5243
5249
  }
5244
5250
 
5245
5251
  return this.props.children;
@@ -6596,11 +6602,17 @@ var TextInput = /*#__PURE__*/forwardRef(function TextInput(props, forwardedRef)
6596
6602
 
6597
6603
  var clearButtonBoxPadding = useMemo(function () {
6598
6604
  return padding.map(function (v) {
6605
+ if (v === 0) return 0;
6606
+ if (v === 1) return 1;
6607
+ if (v === 2) return 1;
6599
6608
  return v - 2;
6600
6609
  });
6601
6610
  }, [padding]);
6602
6611
  var clearButtonPadding = useMemo(function () {
6603
6612
  return padding.map(function (v) {
6613
+ if (v === 0) return 0;
6614
+ if (v === 1) return 0;
6615
+ if (v === 2) return 1;
6604
6616
  return v - 1;
6605
6617
  });
6606
6618
  }, [padding]);
@@ -6619,9 +6631,7 @@ var TextInput = /*#__PURE__*/forwardRef(function TextInput(props, forwardedRef)
6619
6631
  icon: CloseIcon,
6620
6632
  mode: "bleed",
6621
6633
  padding: clearButtonPadding,
6622
- radius: radius.map(function (r) {
6623
- return r - 1;
6624
- })
6634
+ radius: radius
6625
6635
  }, clearButtonProps, {
6626
6636
  onClick: handleClearClick,
6627
6637
  onMouseDown: handleClearMouseDown
@@ -6836,7 +6846,7 @@ var _templateObject$b, _templateObject2$8, _templateObject3$3, _templateObject4$
6836
6846
  * @internal
6837
6847
  */
6838
6848
 
6839
- var Root$9 = styled.div(_templateObject$b || (_templateObject$b = _taggedTemplateLiteralLoose(["\n /* position: relative; */\n"])));
6849
+ var Root$9 = styled.div(_templateObject$b || (_templateObject$b = _taggedTemplateLiteralLoose(["\n /* position: relative; */\n line-height: 0;\n"])));
6840
6850
  /**
6841
6851
  * @internal
6842
6852
  */
@@ -6979,7 +6989,7 @@ var AUTOCOMPLETE_POPOVER_PLACEMENT = 'bottom-start';
6979
6989
 
6980
6990
  var AUTOCOMPLETE_POPOVER_FALLBACK_PLACEMENTS = ['top-start'];
6981
6991
 
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"];
6992
+ 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
6993
 
6984
6994
  var defaultRenderValue = function defaultRenderValue(value, option) {
6985
6995
  return option ? option.value : value;
@@ -7022,6 +7032,7 @@ var InnerAutocomplete = /*#__PURE__*/forwardRef(function InnerAutocomplete(props
7022
7032
  renderPopover = props.renderPopover,
7023
7033
  _props$renderValue = props.renderValue,
7024
7034
  renderValue = _props$renderValue === void 0 ? defaultRenderValue : _props$renderValue,
7035
+ suffix = props.suffix,
7025
7036
  valueProp = props.value,
7026
7037
  restProps = _objectWithoutPropertiesLoose(props, _excluded$f);
7027
7038
 
@@ -7319,11 +7330,17 @@ var InnerAutocomplete = /*#__PURE__*/forwardRef(function InnerAutocomplete(props
7319
7330
  }, [disabled, handleClearButtonFocus, loading, value]);
7320
7331
  var openButtonBoxPadding = useMemo(function () {
7321
7332
  return padding.map(function (v) {
7333
+ if (v === 0) return 0;
7334
+ if (v === 1) return 1;
7335
+ if (v === 2) return 1;
7322
7336
  return v - 2;
7323
7337
  });
7324
7338
  }, [padding]);
7325
7339
  var openButtonPadding = useMemo(function () {
7326
7340
  return padding.map(function (v) {
7341
+ if (v === 0) return 0;
7342
+ if (v === 1) return 0;
7343
+ if (v === 2) return 1;
7327
7344
  return v - 1;
7328
7345
  });
7329
7346
  }, [padding]);
@@ -7396,7 +7413,7 @@ var InnerAutocomplete = /*#__PURE__*/forwardRef(function InnerAutocomplete(props
7396
7413
  ref: setRef,
7397
7414
  role: "combobox",
7398
7415
  spellCheck: false,
7399
- suffix: openButtonNode,
7416
+ suffix: suffix || openButtonNode,
7400
7417
  value: inputValue
7401
7418
  }));
7402
7419
  var handleListBoxKeyDown = useCallback(function (event) {
@@ -7971,8 +7988,8 @@ function useMenuController(props) {
7971
7988
  activeIndex = _useState2[0],
7972
7989
  _setActiveIndex = _useState2[1];
7973
7990
 
7974
- var activeElement = elementsRef.current[activeIndex] || null;
7975
7991
  var activeIndexRef = useRef(activeIndex);
7992
+ var activeElement = elementsRef.current[activeIndex] || null;
7976
7993
  var mounted = Boolean(rootElement);
7977
7994
  var setActiveIndex = useCallback(function (nextActiveIndex) {
7978
7995
  _setActiveIndex(nextActiveIndex);
@@ -8051,7 +8068,7 @@ function useMenuController(props) {
8051
8068
 
8052
8069
  var focusableLen = _focusableElements2.length;
8053
8070
  if (focusableLen === 0) return;
8054
- var focusedElement = elementsRef.current[activeIndex];
8071
+ var focusedElement = elementsRef.current[activeIndexRef.current];
8055
8072
 
8056
8073
  var focusedIndex = _focusableElements2.indexOf(focusedElement);
8057
8074
 
@@ -8072,7 +8089,7 @@ function useMenuController(props) {
8072
8089
 
8073
8090
  var _focusableLen = _focusableElements3.length;
8074
8091
  if (_focusableLen === 0) return;
8075
- var _focusedElement = elementsRef.current[activeIndex];
8092
+ var _focusedElement = elementsRef.current[activeIndexRef.current];
8076
8093
 
8077
8094
  var _focusedIndex = _focusableElements3.indexOf(_focusedElement);
8078
8095
 
@@ -8088,7 +8105,7 @@ function useMenuController(props) {
8088
8105
  if (onKeyDown) {
8089
8106
  onKeyDown(event);
8090
8107
  }
8091
- }, [activeIndex, onKeyDown, originElement, setActiveIndex]);
8108
+ }, [onKeyDown, originElement, setActiveIndex]);
8092
8109
  var handleItemMouseEnter = useCallback(function (event) {
8093
8110
  var element = event.currentTarget;
8094
8111
  var currentIndex = elementsRef.current.indexOf(element);
@@ -9374,20 +9391,22 @@ var _excluded$2 = ["children", "space"];
9374
9391
  * @beta
9375
9392
  */
9376
9393
 
9377
- function Tree(props) {
9394
+ var Tree = /*#__PURE__*/memo( /*#__PURE__*/forwardRef(function Tree(props, ref) {
9378
9395
  var children = props.children,
9379
9396
  _props$space = props.space,
9380
9397
  space = _props$space === void 0 ? 1 : _props$space,
9381
9398
  restProps = _objectWithoutPropertiesLoose(props, _excluded$2);
9382
9399
 
9400
+ var forwardedRef = useForwardedRef(ref);
9401
+
9383
9402
  var _useState = useState(null),
9384
9403
  focusedElement = _useState[0],
9385
9404
  setFocusedElement = _useState[1];
9386
9405
 
9406
+ var focusedElementRef = useRef(focusedElement);
9387
9407
  var path = useMemo(function () {
9388
9408
  return [];
9389
9409
  }, []);
9390
- var rootRef = useRef(null);
9391
9410
 
9392
9411
  var _useState2 = useState([]),
9393
9412
  itemElements = _useState2[0],
@@ -9397,6 +9416,13 @@ function Tree(props) {
9397
9416
  state = _useState3[0],
9398
9417
  setState = _useState3[1];
9399
9418
 
9419
+ var stateRef = useRef(state);
9420
+ useEffect(function () {
9421
+ focusedElementRef.current = focusedElement;
9422
+ }, [focusedElement]);
9423
+ useEffect(function () {
9424
+ stateRef.current = state;
9425
+ }, [state]);
9400
9426
  var registerItem = useCallback(function (element, path, expanded, selected) {
9401
9427
  setState(function (s) {
9402
9428
  var _extends2;
@@ -9445,12 +9471,12 @@ function Tree(props) {
9445
9471
  };
9446
9472
  }, [focusedElement, itemElements, path, registerItem, setExpanded, space, state]);
9447
9473
  var handleKeyDown = useCallback(function (event) {
9448
- if (!focusedElement) return;
9474
+ if (!focusedElementRef.current) return;
9449
9475
 
9450
9476
  if (event.key === 'ArrowDown') {
9451
9477
  event.preventDefault();
9452
9478
 
9453
- var nextEl = _findNextItemElement(state, itemElements, focusedElement);
9479
+ var nextEl = _findNextItemElement(stateRef.current, itemElements, focusedElementRef.current);
9454
9480
 
9455
9481
  if (nextEl) {
9456
9482
  _focusItemElement(nextEl);
@@ -9464,7 +9490,7 @@ function Tree(props) {
9464
9490
  if (event.key === 'ArrowUp') {
9465
9491
  event.preventDefault();
9466
9492
 
9467
- var prevEl = _findPrevItemElement(state, itemElements, focusedElement);
9493
+ var prevEl = _findPrevItemElement(stateRef.current, itemElements, focusedElementRef.current);
9468
9494
 
9469
9495
  if (prevEl) {
9470
9496
  _focusItemElement(prevEl);
@@ -9477,9 +9503,9 @@ function Tree(props) {
9477
9503
 
9478
9504
  if (event.key === 'ArrowLeft') {
9479
9505
  event.preventDefault();
9480
- var itemKey = focusedElement.getAttribute('data-tree-key');
9506
+ var itemKey = focusedElementRef.current.getAttribute('data-tree-key');
9481
9507
  if (!itemKey) return;
9482
- var itemState = state[itemKey];
9508
+ var itemState = stateRef.current[itemKey];
9483
9509
  if (!itemState) return;
9484
9510
 
9485
9511
  if (itemState.expanded) {
@@ -9496,7 +9522,7 @@ function Tree(props) {
9496
9522
  var itemPath = itemKey.split('/');
9497
9523
  itemPath.pop();
9498
9524
  var parentKey = itemPath.join('/');
9499
- var parentState = parentKey && state[parentKey];
9525
+ var parentState = parentKey && stateRef.current[parentKey];
9500
9526
 
9501
9527
  if (parentState) {
9502
9528
  parentState.element.focus();
@@ -9508,13 +9534,13 @@ function Tree(props) {
9508
9534
  }
9509
9535
 
9510
9536
  if (event.key === 'ArrowRight') {
9511
- var _state$focusedKey;
9537
+ var _stateRef$current$foc;
9512
9538
 
9513
9539
  event.preventDefault();
9514
- var focusedKey = focusedElement.getAttribute('data-tree-key');
9540
+ var focusedKey = focusedElementRef.current.getAttribute('data-tree-key');
9515
9541
  if (!focusedKey) return;
9516
9542
 
9517
- if (!((_state$focusedKey = state[focusedKey]) != null && _state$focusedKey.expanded)) {
9543
+ if (!((_stateRef$current$foc = stateRef.current[focusedKey]) != null && _stateRef$current$foc.expanded)) {
9518
9544
  setState(function (s) {
9519
9545
  var _extends5;
9520
9546
 
@@ -9528,14 +9554,14 @@ function Tree(props) {
9528
9554
 
9529
9555
  return;
9530
9556
  }
9531
- }, [focusedElement, itemElements, state]);
9557
+ }, [itemElements]);
9532
9558
  useEffect(function () {
9533
- if (!rootRef.current) return;
9559
+ if (!forwardedRef.current) return;
9534
9560
 
9535
- var _itemElements = Array.from(rootRef.current.querySelectorAll('[data-ui="TreeItem"]'));
9561
+ var _itemElements = Array.from(forwardedRef.current.querySelectorAll('[data-ui="TreeItem"]'));
9536
9562
 
9537
9563
  setItemElements(_itemElements);
9538
- }, [children]);
9564
+ }, [children, forwardedRef]);
9539
9565
  return /*#__PURE__*/React.createElement(TreeContext.Provider, {
9540
9566
  value: contextValue
9541
9567
  }, /*#__PURE__*/React.createElement(Stack, _extends({
@@ -9543,11 +9569,12 @@ function Tree(props) {
9543
9569
  "data-ui": "Tree"
9544
9570
  }, restProps, {
9545
9571
  onKeyDown: handleKeyDown,
9546
- ref: rootRef,
9572
+ ref: forwardedRef,
9547
9573
  role: "tree",
9548
9574
  space: space
9549
9575
  }), children));
9550
- }
9576
+ }));
9577
+ Tree.displayName = 'Tree';
9551
9578
 
9552
9579
  var _templateObject$1, _templateObject2, _templateObject3;
9553
9580
  function treeItemRootStyle() {
@@ -9586,7 +9613,7 @@ function useTree() {
9586
9613
  }
9587
9614
 
9588
9615
  var _excluded$1 = ["children", "expanded"];
9589
- function TreeGroup(props) {
9616
+ var TreeGroup = /*#__PURE__*/memo(function TreeGroup(props) {
9590
9617
  var children = props.children,
9591
9618
  _props$expanded = props.expanded,
9592
9619
  expanded = _props$expanded === void 0 ? false : _props$expanded,
@@ -9602,12 +9629,12 @@ function TreeGroup(props) {
9602
9629
  role: "group",
9603
9630
  space: tree.space
9604
9631
  }), children);
9605
- }
9632
+ });
9606
9633
 
9607
9634
  var _excluded = ["children", "expanded", "fontSize", "href", "icon", "id", "muted", "onClick", "padding", "selected", "space", "text", "weight"];
9608
9635
 
9609
9636
  var _templateObject;
9610
- var Root = styled.li(treeItemRootStyle, treeItemRootColorStyle);
9637
+ var Root = /*#__PURE__*/memo(styled.li(treeItemRootStyle, treeItemRootColorStyle));
9611
9638
  var TreeItemBox = styled(Box).attrs({
9612
9639
  forwardedAs: 'a'
9613
9640
  })(treeItemBoxStyle);
@@ -9617,7 +9644,7 @@ var ToggleArrowText = styled(Text)(_templateObject || (_templateObject = _tagged
9617
9644
  * @beta
9618
9645
  */
9619
9646
 
9620
- function TreeItem(props) {
9647
+ var TreeItem = /*#__PURE__*/memo(function TreeItem(props) {
9621
9648
  var children = props.children,
9622
9649
  _props$expanded = props.expanded,
9623
9650
  expandedProp = _props$expanded === void 0 ? false : _props$expanded,
@@ -9754,7 +9781,7 @@ function TreeItem(props) {
9754
9781
  }, children && /*#__PURE__*/React.createElement(TreeGroup, {
9755
9782
  expanded: expanded
9756
9783
  }, children)));
9757
- }
9784
+ });
9758
9785
 
9759
9786
  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
9787
  //# sourceMappingURL=sanity-ui.module.js.map