@loomhq/lens 12.12.4 → 12.13.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.
Files changed (38) hide show
  1. package/dist/cjs/icons/diagram-symbol-decision.js +45 -0
  2. package/dist/cjs/icons/diagram-symbol-decision.js.map +7 -0
  3. package/dist/cjs/icons/index.js +669 -656
  4. package/dist/cjs/icons/index.js.map +4 -4
  5. package/dist/cjs/index.js +162 -60
  6. package/dist/cjs/index.js.map +4 -4
  7. package/dist/esm/icons/chunk-VG3SGXWL.js +16 -0
  8. package/dist/esm/icons/chunk-VG3SGXWL.js.map +7 -0
  9. package/dist/esm/icons/diagram-symbol-decision.js +8 -0
  10. package/dist/esm/icons/diagram-symbol-decision.js.map +7 -0
  11. package/dist/esm/icons/index.js +63 -59
  12. package/dist/esm/index.js +191 -89
  13. package/dist/esm/index.js.map +4 -4
  14. package/dist/types/icons/diagram-symbol-decision.d.ts +3 -0
  15. package/dist/types/icons/diagram-symbol-decision.d.ts.map +1 -0
  16. package/dist/types/icons/index.d.ts +1 -0
  17. package/dist/types/icons/index.d.ts.map +1 -1
  18. package/dist/types/src/components/container/container.d.ts +1 -1
  19. package/dist/types/src/components/container/container.d.ts.map +1 -1
  20. package/dist/types/src/components/icon/available-icons/diagram-symbol-decision.d.ts +3 -0
  21. package/dist/types/src/components/icon/available-icons/diagram-symbol-decision.d.ts.map +1 -0
  22. package/dist/types/src/components/icon/available-icons/index.d.ts +1 -0
  23. package/dist/types/src/components/icon/available-icons/index.d.ts.map +1 -1
  24. package/dist/types/src/components/index.d.ts +1 -1
  25. package/dist/types/src/components/index.d.ts.map +1 -1
  26. package/dist/types/src/components/menu/menu.d.ts +2 -1
  27. package/dist/types/src/components/menu/menu.d.ts.map +1 -1
  28. package/dist/types/src/components/modal/modal.d.ts +3 -1
  29. package/dist/types/src/components/modal/modal.d.ts.map +1 -1
  30. package/dist/types/src/components/search-bar/search-bar.d.ts.map +1 -1
  31. package/dist/types/src/components/select/select.d.ts +22 -3
  32. package/dist/types/src/components/select/select.d.ts.map +1 -1
  33. package/dist/types/src/components/skeleton/skeleton.d.ts +1 -1
  34. package/dist/types/src/components/skeleton/skeleton.d.ts.map +1 -1
  35. package/dist/types/src/components/text/text.d.ts +7 -1
  36. package/dist/types/src/components/text/text.d.ts.map +1 -1
  37. package/dist/types/src/components/tooltip/tooltip.d.ts.map +1 -1
  38. package/package.json +5 -5
package/dist/cjs/index.js CHANGED
@@ -1107,6 +1107,11 @@ var layoutDeprecatedWarning = `Lens: Layout component is deprecated. Use Arrange
1107
1107
 
1108
1108
  // src/components/text/text.tsx
1109
1109
  var dimAmount = 0.6;
1110
+ var FontFamily = /* @__PURE__ */ ((FontFamily2) => {
1111
+ FontFamily2["sans-serif"] = "inherit";
1112
+ FontFamily2["mono"] = "Atlassian Mono";
1113
+ return FontFamily2;
1114
+ })(FontFamily || {});
1110
1115
  var variants = {
1111
1116
  body: {
1112
1117
  size: "body-md",
@@ -1137,6 +1142,7 @@ var TextWrapper = import_styled.default.span`
1137
1142
  ${(props) => props.fontSetting && `font-feature-settings: ${getFontSetting(props.fontSetting)}`};
1138
1143
  ${(props) => props.isDimmed && `opacity: ${dimAmount}`};
1139
1144
  ${(props) => props.alignment && `text-align: ${props.alignment}`};
1145
+ ${(props) => props.overflowWrap && `overflow-wrap: ${props.overflowWrap};`};
1140
1146
  ${(props) => props.hasEllipsis && !props.ellipsisLines && `
1141
1147
  overflow: hidden;
1142
1148
  text-overflow: ellipsis;
@@ -1149,6 +1155,7 @@ var TextWrapper = import_styled.default.span`
1149
1155
  -webkit-line-clamp: ${props.ellipsisLines};
1150
1156
  `};
1151
1157
  ${(props) => !props.hasEllipsis && props.noWrap && "white-space: nowrap; overflow: hidden;"};
1158
+ ${(props) => props.fontFamily && `font-family: ${FontFamily[props.fontFamily]};`};
1152
1159
  ${(props) => props.sizeMinMax && `
1153
1160
  min-height: 0vw;
1154
1161
  font-size: clamp(
@@ -1181,6 +1188,7 @@ var Text = (_a) => {
1181
1188
  color,
1182
1189
  isInline,
1183
1190
  isDimmed,
1191
+ fontFamily = "sans-serif",
1184
1192
  fontWeight = "regular",
1185
1193
  hasEllipsis,
1186
1194
  ellipsisLines,
@@ -1189,13 +1197,15 @@ var Text = (_a) => {
1189
1197
  htmlTag = "span",
1190
1198
  alignment,
1191
1199
  sizeMinMax,
1192
- fontSetting = "normal"
1200
+ fontSetting = "normal",
1201
+ overflowWrap
1193
1202
  } = _b, props = __objRest(_b, [
1194
1203
  "children",
1195
1204
  "size",
1196
1205
  "color",
1197
1206
  "isInline",
1198
1207
  "isDimmed",
1208
+ "fontFamily",
1199
1209
  "fontWeight",
1200
1210
  "hasEllipsis",
1201
1211
  "ellipsisLines",
@@ -1204,7 +1214,8 @@ var Text = (_a) => {
1204
1214
  "htmlTag",
1205
1215
  "alignment",
1206
1216
  "sizeMinMax",
1207
- "fontSetting"
1217
+ "fontSetting",
1218
+ "overflowWrap"
1208
1219
  ]);
1209
1220
  if (isDimmed) {
1210
1221
  console.warn(textIsDimmedDeprecated);
@@ -1220,6 +1231,7 @@ var Text = (_a) => {
1220
1231
  isInline,
1221
1232
  isDimmed,
1222
1233
  fontWeight: variant ? variants[variant].fontWeight : fontWeight,
1234
+ fontFamily,
1223
1235
  hasEllipsis,
1224
1236
  ellipsisLines,
1225
1237
  noWrap,
@@ -1227,7 +1239,8 @@ var Text = (_a) => {
1227
1239
  as: htmlTag,
1228
1240
  alignment,
1229
1241
  sizeMinMax,
1230
- fontSetting
1242
+ fontSetting,
1243
+ overflowWrap
1231
1244
  }, props),
1232
1245
  children
1233
1246
  );
@@ -3775,6 +3788,13 @@ function SvgCheck() {
3775
3788
  return /* @__PURE__ */ React22.createElement(import_check_mark.default, { label: "", testId: "ads-refreshed-icon" });
3776
3789
  }
3777
3790
 
3791
+ // src/components/icon/available-icons/close.tsx
3792
+ var import_close = __toESM(require("@atlaskit/icon/core/close"));
3793
+ var React23 = __toESM(require("react"));
3794
+ function SvgClose() {
3795
+ return /* @__PURE__ */ React23.createElement(import_close.default, { label: "", testId: "ads-refreshed-icon" });
3796
+ }
3797
+
3778
3798
  // src/components/menu/menu.tsx
3779
3799
  var menuPositions = {
3780
3800
  left: "bottom-start",
@@ -3782,7 +3802,9 @@ var menuPositions = {
3782
3802
  ["topLeft"]: "top-start",
3783
3803
  ["topRight"]: "top-end",
3784
3804
  leftSide: "left-start",
3785
- rightSide: "right-start"
3805
+ rightSide: "right-start",
3806
+ rightTop: "right-start",
3807
+ leftTop: "left-start"
3786
3808
  };
3787
3809
  var MenuContainer = import_styled17.default.div`
3788
3810
  background-color: ${getColorValue("overlay")};
@@ -3796,12 +3818,18 @@ var MenuContainer = import_styled17.default.div`
3796
3818
  border: 1px solid ${getColorValue("border")};
3797
3819
  ${getShadow("medium")};
3798
3820
  ${getRadius("250")};
3821
+ overflow: hidden;
3822
+ `;
3823
+ var SearchWrapper = import_styled17.default.div`
3824
+ flex-shrink: 0;
3799
3825
  `;
3800
3826
  var MenuWrapper = import_styled17.default.ul`
3801
3827
  padding: ${(props) => props.search ? `0 ${u(1.5)} ${u(1.5)} ${u(1.5)}` : u(1.5)};
3802
3828
  list-style: none;
3803
3829
  overflow: auto;
3804
3830
  margin: 0;
3831
+ flex: 1 1 auto;
3832
+ min-height: 0;
3805
3833
  `;
3806
3834
  var MenuItemWrapper = import_styled17.default.li`
3807
3835
  display: ${({ hidden }) => hidden ? "none" : "grid"};
@@ -3836,6 +3864,25 @@ var MenuItemWrapper = import_styled17.default.li`
3836
3864
  width: calc(100% + ${u(3)});
3837
3865
  }
3838
3866
  `};
3867
+
3868
+ /* Default state: show checkmark for selected items */
3869
+ .check-icon {
3870
+ display: block;
3871
+ }
3872
+
3873
+ .deselect-icon {
3874
+ display: none;
3875
+ }
3876
+
3877
+ /* When highlighted (mouse hover OR keyboard navigation) and allowsDeselect: swap to X */
3878
+ ${(props) => props.showDeselectIcon && props.isHighlighted ? `
3879
+ .check-icon {
3880
+ display: none;
3881
+ }
3882
+ .deselect-icon {
3883
+ display: block;
3884
+ }
3885
+ ` : ""}
3839
3886
  `;
3840
3887
  var Image2 = import_styled17.default.img`
3841
3888
  height: 100%;
@@ -3854,7 +3901,8 @@ var MenuItem = (_a) => {
3854
3901
  hasDivider,
3855
3902
  children,
3856
3903
  menuItemRole,
3857
- keyboardMove
3904
+ keyboardMove,
3905
+ showDeselectIcon = false
3858
3906
  } = _b, props = __objRest(_b, [
3859
3907
  "isDisabled",
3860
3908
  "isHighlighted",
@@ -3863,7 +3911,8 @@ var MenuItem = (_a) => {
3863
3911
  "hasDivider",
3864
3912
  "children",
3865
3913
  "menuItemRole",
3866
- "keyboardMove"
3914
+ "keyboardMove",
3915
+ "showDeselectIcon"
3867
3916
  ]);
3868
3917
  const checkColumn = isSelected ? "auto" : "";
3869
3918
  const iconColumn = icon ? "auto" : "";
@@ -3881,11 +3930,12 @@ var MenuItem = (_a) => {
3881
3930
  columns,
3882
3931
  hasDivider,
3883
3932
  tabIndex: isDisabled ? -1 : 0,
3884
- "data-highlighted": isHighlighted || void 0
3933
+ "data-highlighted": isHighlighted || void 0,
3934
+ showDeselectIcon
3885
3935
  }, updatedProps),
3886
3936
  icon && (typeof icon === "string" ? /* @__PURE__ */ import_react23.default.createElement(container_default, { radius: "50", width: 3, height: 3, overflow: "hidden" }, /* @__PURE__ */ import_react23.default.createElement(align_default, { alignment: "center" }, /* @__PURE__ */ import_react23.default.createElement(Image2, { src: icon, alt: "", isDisabled }))) : /* @__PURE__ */ import_react23.default.createElement(icon_default, { icon, color })),
3887
3937
  /* @__PURE__ */ import_react23.default.createElement(text_default, { color, hasEllipsis: true }, children),
3888
- isSelected && /* @__PURE__ */ import_react23.default.createElement(icon_default, { icon: /* @__PURE__ */ import_react23.default.createElement(SvgCheck, null), color })
3938
+ isSelected && /* @__PURE__ */ import_react23.default.createElement(import_react23.default.Fragment, null, /* @__PURE__ */ import_react23.default.createElement("span", { className: "check-icon", "aria-hidden": "true" }, /* @__PURE__ */ import_react23.default.createElement(icon_default, { icon: /* @__PURE__ */ import_react23.default.createElement(SvgCheck, null), color })), /* @__PURE__ */ import_react23.default.createElement("span", { className: "deselect-icon", "aria-hidden": "true" }, /* @__PURE__ */ import_react23.default.createElement(icon_default, { icon: /* @__PURE__ */ import_react23.default.createElement(SvgClose, null), color })))
3889
3939
  );
3890
3940
  };
3891
3941
  var Menu = (_a) => {
@@ -3922,7 +3972,7 @@ var Menu = (_a) => {
3922
3972
  zIndex,
3923
3973
  position
3924
3974
  }, updatedDownshiftMenuProps), props),
3925
- search && search,
3975
+ search && /* @__PURE__ */ import_react23.default.createElement(SearchWrapper, null, search),
3926
3976
  /* @__PURE__ */ import_react23.default.createElement(MenuWrapper, { search }, children)
3927
3977
  );
3928
3978
  };
@@ -3934,9 +3984,9 @@ var import_react24 = __toESM(require("react"));
3934
3984
 
3935
3985
  // src/components/icon/available-icons/search.tsx
3936
3986
  var import_search = __toESM(require("@atlaskit/icon/core/search"));
3937
- var React24 = __toESM(require("react"));
3987
+ var React25 = __toESM(require("react"));
3938
3988
  function SvgSearch() {
3939
- return /* @__PURE__ */ React24.createElement(import_search.default, { label: "", testId: "ads-refreshed-icon" });
3989
+ return /* @__PURE__ */ React25.createElement(import_search.default, { label: "", testId: "ads-refreshed-icon" });
3940
3990
  }
3941
3991
 
3942
3992
  // src/components/search-bar/search-bar.tsx
@@ -3953,22 +4003,31 @@ var SearchBar = ({
3953
4003
  onChange,
3954
4004
  getInputProps
3955
4005
  }) => {
4006
+ const inputProps = getInputProps ? getInputProps({
4007
+ placeholder,
4008
+ value,
4009
+ type: "text"
4010
+ }) : { placeholder, value, type: "text" };
4011
+ const handleChange = (e) => {
4012
+ if (inputProps.onChange) {
4013
+ inputProps.onChange(e);
4014
+ }
4015
+ onChange(e);
4016
+ };
3956
4017
  return /* @__PURE__ */ import_react24.default.createElement(SearchBarContainer, null, /* @__PURE__ */ import_react24.default.createElement(
3957
4018
  text_input_default,
3958
- __spreadValues({
4019
+ __spreadProps(__spreadValues({
3959
4020
  "aria-label": ariaLabel,
3960
4021
  icon: /* @__PURE__ */ import_react24.default.createElement(SvgSearch, null)
3961
- }, getInputProps({
3962
- placeholder,
3963
- value,
3964
- onChange,
3965
- type: "text"
3966
- }))
4022
+ }, inputProps), {
4023
+ onChange: handleChange
4024
+ })
3967
4025
  ));
3968
4026
  };
3969
4027
  var search_bar_default = SearchBar;
3970
4028
 
3971
4029
  // src/components/select/select.tsx
4030
+ var SIDE_MENU_PADDING_UNITS = 2;
3972
4031
  var SelectWrapper = import_styled19.default.div`
3973
4032
  position: relative;
3974
4033
  `;
@@ -4194,7 +4253,7 @@ var getSelectedOption = (value, options) => {
4194
4253
  return options.find((item) => item.value === value);
4195
4254
  }
4196
4255
  };
4197
- var renderOption = (item, index, selectedItem, selectedOptionValue, highlightedIndex, getItemProps, keyboardMove, setKeyboardMove) => {
4256
+ var renderOption = (item, index, selectedItem, selectedOptionValue, highlightedIndex, getItemProps, keyboardMove, setKeyboardMove, allowsDeselect = false) => {
4198
4257
  const isSelected = !selectedItem && item.value === selectedOptionValue || selectedItem && selectedItem.value === item.value;
4199
4258
  return /* @__PURE__ */ import_react25.default.createElement(
4200
4259
  MenuItem,
@@ -4219,7 +4278,8 @@ var renderOption = (item, index, selectedItem, selectedOptionValue, highlightedI
4219
4278
  hasDivider: item.hasDivider,
4220
4279
  isHighlighted: highlightedIndex === index,
4221
4280
  keyboardMove: keyboardMove && highlightedIndex === index,
4222
- isSelected
4281
+ isSelected,
4282
+ showDeselectIcon: allowsDeselect && isSelected
4223
4283
  }),
4224
4284
  item.title
4225
4285
  );
@@ -4233,7 +4293,8 @@ var SelectMenu = (_a) => {
4233
4293
  getItemProps,
4234
4294
  search,
4235
4295
  keyboardMove,
4236
- setKeyboardMove
4296
+ setKeyboardMove,
4297
+ allowsDeselect
4237
4298
  } = _b, menuProps = __objRest(_b, [
4238
4299
  "options",
4239
4300
  "selectedItem",
@@ -4242,7 +4303,8 @@ var SelectMenu = (_a) => {
4242
4303
  "getItemProps",
4243
4304
  "search",
4244
4305
  "keyboardMove",
4245
- "setKeyboardMove"
4306
+ "setKeyboardMove",
4307
+ "allowsDeselect"
4246
4308
  ]);
4247
4309
  if (!isGrouped(options)) {
4248
4310
  return /* @__PURE__ */ import_react25.default.createElement(menu_default, __spreadValues({ search }, menuProps), options.map(
@@ -4254,7 +4316,8 @@ var SelectMenu = (_a) => {
4254
4316
  highlightedIndex,
4255
4317
  getItemProps,
4256
4318
  keyboardMove,
4257
- setKeyboardMove
4319
+ setKeyboardMove,
4320
+ allowsDeselect
4258
4321
  )
4259
4322
  ));
4260
4323
  }
@@ -4270,7 +4333,8 @@ var SelectMenu = (_a) => {
4270
4333
  highlightedIndex,
4271
4334
  getItemProps,
4272
4335
  keyboardMove,
4273
- setKeyboardMove
4336
+ setKeyboardMove,
4337
+ allowsDeselect
4274
4338
  );
4275
4339
  })));
4276
4340
  }));
@@ -4295,7 +4359,8 @@ var Select = (_a) => {
4295
4359
  trigger,
4296
4360
  hasError,
4297
4361
  errorMessage = "Oops, that didn't work.",
4298
- search
4362
+ search,
4363
+ allowsDeselect = false
4299
4364
  } = _b, props = __objRest(_b, [
4300
4365
  "container",
4301
4366
  "onChange",
@@ -4315,26 +4380,47 @@ var Select = (_a) => {
4315
4380
  "trigger",
4316
4381
  "hasError",
4317
4382
  "errorMessage",
4318
- "search"
4383
+ "search",
4384
+ "allowsDeselect"
4319
4385
  ]);
4386
+ var _a2;
4320
4387
  const environment = getDownshiftEnvironment(container);
4321
4388
  const [downshiftIsOpen, setDownshiftIsOpen] = (0, import_react25.useState)(false);
4322
4389
  const [keyboardMove, setKeyboardMove] = (0, import_react25.useState)(false);
4323
4390
  const [searchValue, setSearchValue] = (0, import_react25.useState)("");
4324
4391
  const onSearchChange = (e) => {
4392
+ var _a3;
4325
4393
  const value = e.target.value;
4326
4394
  setSearchValue(value);
4395
+ (_a3 = search == null ? void 0 : search.onSearch) == null ? void 0 : _a3.call(search, value);
4327
4396
  };
4328
4397
  const [selectedItem, setSelectedItem] = (0, import_react25.useState)(
4329
- getSelectedOption(selectedOptionValue, options)
4398
+ (_a2 = getSelectedOption(selectedOptionValue, options)) != null ? _a2 : null
4330
4399
  );
4331
4400
  const onDownshiftChange = (item) => {
4332
- setSelectedItem(item);
4333
- onChange && onChange(item ? item : "");
4401
+ const isCurrentlySelected = selectedItem && item && item.value === selectedItem.value || !selectedItem && item && item.value === selectedOptionValue;
4402
+ if (allowsDeselect && isCurrentlySelected) {
4403
+ setSelectedItem(null);
4404
+ setDownshiftIsOpen(false);
4405
+ onChange && onChange(null);
4406
+ } else {
4407
+ setSelectedItem(item != null ? item : null);
4408
+ if (item) {
4409
+ onChange && onChange(item);
4410
+ } else if (allowsDeselect) {
4411
+ onChange && onChange(null);
4412
+ }
4413
+ }
4414
+ };
4415
+ const onStateChange = (changes) => {
4416
+ if (changes.isOpen !== void 0) {
4417
+ setDownshiftIsOpen(changes.isOpen);
4418
+ }
4334
4419
  };
4335
4420
  const downshiftProps = {
4336
4421
  itemToString: (item) => item ? item.value : "",
4337
4422
  onChange: onDownshiftChange,
4423
+ onStateChange,
4338
4424
  onOuterClick,
4339
4425
  environment,
4340
4426
  selectedItem,
@@ -4343,34 +4429,52 @@ var Select = (_a) => {
4343
4429
  if (environment) {
4344
4430
  downshiftProps.environment = environment;
4345
4431
  }
4432
+ const isSideMenu = menuPosition === "leftTop" || menuPosition === "rightTop";
4346
4433
  const { layerProps, triggerProps, renderLayer, triggerBounds } = (0, import_react_laag.useLayer)({
4347
4434
  isOpen: downshiftIsOpen,
4348
4435
  container,
4349
4436
  ResizeObserver: import_resize_observer_polyfill.default,
4350
4437
  placement: menuPositions[menuPosition],
4351
- auto: true,
4352
- snap: true,
4438
+ auto: !isSideMenu,
4439
+ snap: !isSideMenu,
4353
4440
  triggerOffset
4354
4441
  });
4442
+ const effectiveMenuMaxHeight = (0, import_react25.useMemo)(() => {
4443
+ if (isSideMenu && typeof window !== "undefined" && triggerBounds) {
4444
+ const viewportHeight = window.innerHeight;
4445
+ const availableHeight = viewportHeight - triggerBounds.top;
4446
+ const paddingReserve = SIDE_MENU_PADDING_UNITS * unit;
4447
+ const calculatedMaxHeight = Math.floor(
4448
+ Math.max(0, availableHeight - paddingReserve) / unit
4449
+ );
4450
+ return menuMaxHeight ? Math.min(menuMaxHeight, calculatedMaxHeight) : calculatedMaxHeight;
4451
+ }
4452
+ return menuMaxHeight;
4453
+ }, [isSideMenu, menuMaxHeight, triggerBounds]);
4355
4454
  (0, import_react25.useEffect)(() => {
4356
- const expectedSelectedItem = getSelectedOption(
4357
- selectedOptionValue,
4358
- options
4359
- );
4455
+ var _a3;
4456
+ const expectedSelectedItem = (_a3 = getSelectedOption(selectedOptionValue, options)) != null ? _a3 : null;
4360
4457
  if ((expectedSelectedItem == null ? void 0 : expectedSelectedItem.value) !== (selectedItem == null ? void 0 : selectedItem.value)) {
4361
4458
  setSelectedItem(expectedSelectedItem);
4362
4459
  }
4363
4460
  }, [selectedOptionValue, options, selectedItem]);
4364
4461
  (0, import_react25.useEffect)(() => {
4462
+ var _a3;
4365
4463
  onOpenChange && onOpenChange(downshiftIsOpen);
4366
- }, [downshiftIsOpen, onOpenChange]);
4464
+ if (!downshiftIsOpen) {
4465
+ setSearchValue("");
4466
+ (_a3 = search == null ? void 0 : search.onSearch) == null ? void 0 : _a3.call(search, "");
4467
+ }
4468
+ }, [downshiftIsOpen, onOpenChange, search == null ? void 0 : search.onSearch]);
4367
4469
  const stateReducer = (state, changes) => {
4368
- if (changes.isOpen !== void 0) {
4369
- if (changes.type === import_downshift.default.stateChangeTypes.keyDownEscape) {
4370
- setDownshiftIsOpen(false);
4371
- return { isOpen: false };
4470
+ if (allowsDeselect && changes.type === import_downshift.default.stateChangeTypes.clickItem && changes.selectedItem) {
4471
+ const isCurrentlySelected = state.selectedItem && changes.selectedItem.value === state.selectedItem.value || !state.selectedItem && changes.selectedItem.value === selectedOptionValue;
4472
+ if (isCurrentlySelected) {
4473
+ return __spreadProps(__spreadValues({}, changes), { selectedItem: null, isOpen: false });
4372
4474
  }
4373
- setDownshiftIsOpen(changes.isOpen);
4475
+ }
4476
+ if (changes.type === import_downshift.default.stateChangeTypes.keyDownEscape) {
4477
+ return { isOpen: false };
4374
4478
  }
4375
4479
  return changes;
4376
4480
  };
@@ -4392,6 +4496,9 @@ var Select = (_a) => {
4392
4496
  };
4393
4497
  options = (0, import_react25.useMemo)(() => {
4394
4498
  if (search) {
4499
+ if (search.onSearch) {
4500
+ return options;
4501
+ }
4395
4502
  if (isGrouped(options)) {
4396
4503
  let filteredGroups;
4397
4504
  if (search.searchType === "startsWith") {
@@ -4424,7 +4531,7 @@ var Select = (_a) => {
4424
4531
  );
4425
4532
  }
4426
4533
  return options;
4427
- }, [options, searchValue, search]);
4534
+ }, [options, searchValue, search == null ? void 0 : search.onSearch, search == null ? void 0 : search.searchType]);
4428
4535
  return /* @__PURE__ */ import_react25.default.createElement(SelectWrapper, __spreadValues({}, props), /* @__PURE__ */ import_react25.default.createElement(import_downshift.default, __spreadProps(__spreadValues({}, downshiftProps), { stateReducer }), ({
4429
4536
  getItemProps,
4430
4537
  getInputProps,
@@ -4488,7 +4595,7 @@ var Select = (_a) => {
4488
4595
  position: menuPosition,
4489
4596
  downshiftMenuProps: () => getMenuProps({ onKeyDown }),
4490
4597
  maxWidth: menuMaxWidth,
4491
- maxHeight: menuMaxHeight,
4598
+ maxHeight: effectiveMenuMaxHeight,
4492
4599
  minWidth: menuMinWidth,
4493
4600
  search: search && /* @__PURE__ */ import_react25.default.createElement(
4494
4601
  search_bar_default,
@@ -4501,7 +4608,8 @@ var Select = (_a) => {
4501
4608
  }
4502
4609
  ),
4503
4610
  keyboardMove,
4504
- setKeyboardMove
4611
+ setKeyboardMove,
4612
+ allowsDeselect
4505
4613
  }
4506
4614
  )
4507
4615
  )
@@ -4632,15 +4740,6 @@ var backdrop_default = Backdrop;
4632
4740
  var import_styled21 = __toESM(require("@emotion/styled"));
4633
4741
  var import_focus_trap_react = __toESM(require("focus-trap-react"));
4634
4742
  var import_react28 = __toESM(require("react"));
4635
-
4636
- // src/components/icon/available-icons/close.tsx
4637
- var import_close = __toESM(require("@atlaskit/icon/core/close"));
4638
- var React28 = __toESM(require("react"));
4639
- function SvgClose() {
4640
- return /* @__PURE__ */ React28.createElement(import_close.default, { label: "", testId: "ads-refreshed-icon" });
4641
- }
4642
-
4643
- // src/components/modal/modal.tsx
4644
4743
  var DEFAULT_MODAL_CARD_HEIGHT = "70vh";
4645
4744
  var ContentWrapper = import_styled21.default.div`
4646
4745
  display: grid;
@@ -4740,7 +4839,8 @@ var ModalCard = (_a) => {
4740
4839
  ariaLabelledBy,
4741
4840
  ref,
4742
4841
  removeClose,
4743
- initialFocus
4842
+ initialFocus,
4843
+ closeOnEscape = true
4744
4844
  } = _b, props = __objRest(_b, [
4745
4845
  "children",
4746
4846
  "onCloseClick",
@@ -4753,10 +4853,11 @@ var ModalCard = (_a) => {
4753
4853
  "ariaLabelledBy",
4754
4854
  "ref",
4755
4855
  "removeClose",
4756
- "initialFocus"
4856
+ "initialFocus",
4857
+ "closeOnEscape"
4757
4858
  ]);
4758
4859
  const keyListener = (e) => {
4759
- if (e.key === "Escape") {
4860
+ if (e.key === "Escape" && closeOnEscape) {
4760
4861
  e.preventDefault();
4761
4862
  if (!removeClose) {
4762
4863
  onCloseClick(e);
@@ -6668,7 +6769,7 @@ var Tooltip = (_a) => {
6668
6769
  content,
6669
6770
  shortcut,
6670
6771
  placement = "topCenter",
6671
- keepOpen,
6772
+ keepOpen = true,
6672
6773
  triggerOffset = 4,
6673
6774
  maxWidth = 26,
6674
6775
  isInline = true,
@@ -6745,12 +6846,13 @@ var Tooltip = (_a) => {
6745
6846
  const keyListener = (e) => {
6746
6847
  if (e.key === "Escape") {
6747
6848
  e.preventDefault();
6849
+ e.stopPropagation();
6748
6850
  handleBlur();
6749
6851
  }
6750
6852
  };
6751
- window.addEventListener("keydown", keyListener);
6853
+ window.addEventListener("keydown", keyListener, true);
6752
6854
  return () => {
6753
- window.removeEventListener("keydown", keyListener);
6855
+ window.removeEventListener("keydown", keyListener, true);
6754
6856
  };
6755
6857
  }, [isOpen, setIsOpen]);
6756
6858
  const { layerProps, triggerProps, renderLayer } = (0, import_react_laag4.useLayer)({
@@ -7298,7 +7400,7 @@ var Logo = (_a) => {
7298
7400
  maxWidth,
7299
7401
  symbolColor,
7300
7402
  wordmarkColor = "body",
7301
- brand = "loom",
7403
+ brand = "product",
7302
7404
  customId = ""
7303
7405
  } = _b, props = __objRest(_b, [
7304
7406
  "variant",