@aivenio/aquarium 1.76.3 → 1.77.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.
@@ -5,6 +5,7 @@ import crossIcon from '../../../../src/icons/cross';
5
5
  import errorIcon from '../../../../src/icons/error';
6
6
  import searchIcon from '../../../../src/icons/search';
7
7
  import tickIcon from '../../../../src/icons/tick';
8
+ import uploadIcon from '../../../../src/icons/upload';
8
9
  export const InputAdornment = ({ placement = 'right', className, dense, children, }) => {
9
10
  return (React.createElement("span", { className: classNames(className, 'absolute inset-y-0 grow-0 text-inactive flex items-center mx-3', {
10
11
  'right-0': placement === 'right',
@@ -17,5 +18,6 @@ export const InputAdornment = ({ placement = 'right', className, dense, children
17
18
  export const ValidIcon = ({ onClick }) => (React.createElement(Icon, { icon: tickIcon, color: "success-default", "data-testid": "icon-valid", onClick: onClick }));
18
19
  export const ErrorIcon = ({ onClick }) => (React.createElement(Icon, { icon: errorIcon, color: "danger-intense", "data-testid": "icon-invalid", onClick: onClick }));
19
20
  export const SearchIcon = ({ onClick }) => (React.createElement(Icon, { icon: searchIcon, color: "inactive", "data-testid": "icon-search", onClick: onClick }));
21
+ export const UploadIcon = ({ onClick }) => (React.createElement(Icon, { icon: uploadIcon, color: "primary-intense", "data-testid": "icon-upload", onClick: onClick }));
20
22
  export const ResetIcon = ({ onClick }) => (React.createElement(Icon, { className: "hover:cursor-pointer", icon: crossIcon, color: "inactive", "data-testid": "icon-reset", onClick: onClick }));
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW5wdXRBZG9ybm1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvdXRpbHMvZm9ybS9JbnB1dEFkb3JubWVudC9JbnB1dEFkb3JubWVudC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBRTFCLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFrQixNQUFNLGVBQWUsQ0FBQztBQUM5RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFaEQsT0FBTyxTQUFTLE1BQU0saUJBQWlCLENBQUM7QUFDeEMsT0FBTyxTQUFTLE1BQU0saUJBQWlCLENBQUM7QUFDeEMsT0FBTyxVQUFVLE1BQU0sa0JBQWtCLENBQUM7QUFDMUMsT0FBTyxRQUFRLE1BQU0sZ0JBQWdCLENBQUM7QUFRdEMsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFzRCxDQUFDLEVBQ2hGLFNBQVMsR0FBRyxPQUFPLEVBQ25CLFNBQVMsRUFDVCxLQUFLLEVBQ0wsUUFBUSxHQUNULEVBQUUsRUFBRTtJQUNILE9BQU8sQ0FDTCw4QkFDRSxTQUFTLEVBQUUsVUFBVSxDQUFDLFNBQVMsRUFBRSxnRUFBZ0UsRUFBRTtZQUNqRyxTQUFTLEVBQUUsU0FBUyxLQUFLLE9BQU87WUFDaEMsUUFBUSxFQUFFLFNBQVMsS0FBSyxNQUFNO1lBQzlCLGtCQUFrQixFQUFFLEtBQUs7WUFDekIsMkJBQTJCLEVBQUUsQ0FBQyxLQUFLO1NBQ3BDLENBQUM7UUFFRixvQkFBQyxPQUFPLElBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxJQUFJLEVBQUMsTUFBTSxJQUN6QixRQUFRLENBQ0QsQ0FDTCxDQUNSLENBQUM7QUFDSixDQUFDLENBQUM7QUFJRixNQUFNLENBQUMsTUFBTSxTQUFTLEdBQW9CLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FDekQsb0JBQUMsSUFBSSxJQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFDLGlCQUFpQixpQkFBYSxZQUFZLEVBQUMsT0FBTyxFQUFFLE9BQU8sR0FBSSxDQUM1RixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFvQixDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQ3pELG9CQUFDLElBQUksSUFBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBQyxnQkFBZ0IsaUJBQWEsY0FBYyxFQUFDLE9BQU8sRUFBRSxPQUFPLEdBQUksQ0FDOUYsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBb0IsQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUMxRCxvQkFBQyxJQUFJLElBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUMsVUFBVSxpQkFBYSxhQUFhLEVBQUMsT0FBTyxFQUFFLE9BQU8sR0FBSSxDQUN4RixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFvQixDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQ3pELG9CQUFDLElBQUksSUFBQyxTQUFTLEVBQUMsc0JBQXNCLEVBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUMsVUFBVSxpQkFBYSxZQUFZLEVBQUMsT0FBTyxFQUFFLE9BQU8sR0FBSSxDQUN2SCxDQUFDIn0=
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW5wdXRBZG9ybm1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvdXRpbHMvZm9ybS9JbnB1dEFkb3JubWVudC9JbnB1dEFkb3JubWVudC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBRTFCLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFrQixNQUFNLGVBQWUsQ0FBQztBQUM5RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFaEQsT0FBTyxTQUFTLE1BQU0saUJBQWlCLENBQUM7QUFDeEMsT0FBTyxTQUFTLE1BQU0saUJBQWlCLENBQUM7QUFDeEMsT0FBTyxVQUFVLE1BQU0sa0JBQWtCLENBQUM7QUFDMUMsT0FBTyxRQUFRLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEMsT0FBTyxVQUFVLE1BQU0sa0JBQWtCLENBQUM7QUFRMUMsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFzRCxDQUFDLEVBQ2hGLFNBQVMsR0FBRyxPQUFPLEVBQ25CLFNBQVMsRUFDVCxLQUFLLEVBQ0wsUUFBUSxHQUNULEVBQUUsRUFBRTtJQUNILE9BQU8sQ0FDTCw4QkFDRSxTQUFTLEVBQUUsVUFBVSxDQUFDLFNBQVMsRUFBRSxnRUFBZ0UsRUFBRTtZQUNqRyxTQUFTLEVBQUUsU0FBUyxLQUFLLE9BQU87WUFDaEMsUUFBUSxFQUFFLFNBQVMsS0FBSyxNQUFNO1lBQzlCLGtCQUFrQixFQUFFLEtBQUs7WUFDekIsMkJBQTJCLEVBQUUsQ0FBQyxLQUFLO1NBQ3BDLENBQUM7UUFFRixvQkFBQyxPQUFPLElBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxJQUFJLEVBQUMsTUFBTSxJQUN6QixRQUFRLENBQ0QsQ0FDTCxDQUNSLENBQUM7QUFDSixDQUFDLENBQUM7QUFJRixNQUFNLENBQUMsTUFBTSxTQUFTLEdBQW9CLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FDekQsb0JBQUMsSUFBSSxJQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFDLGlCQUFpQixpQkFBYSxZQUFZLEVBQUMsT0FBTyxFQUFFLE9BQU8sR0FBSSxDQUM1RixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFvQixDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQ3pELG9CQUFDLElBQUksSUFBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBQyxnQkFBZ0IsaUJBQWEsY0FBYyxFQUFDLE9BQU8sRUFBRSxPQUFPLEdBQUksQ0FDOUYsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBb0IsQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUMxRCxvQkFBQyxJQUFJLElBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUMsVUFBVSxpQkFBYSxhQUFhLEVBQUMsT0FBTyxFQUFFLE9BQU8sR0FBSSxDQUN4RixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFvQixDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQzFELG9CQUFDLElBQUksSUFBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBQyxpQkFBaUIsaUJBQWEsYUFBYSxFQUFDLE9BQU8sRUFBRSxPQUFPLEdBQUksQ0FDL0YsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBb0IsQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUN6RCxvQkFBQyxJQUFJLElBQUMsU0FBUyxFQUFDLHNCQUFzQixFQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFDLFVBQVUsaUJBQWEsWUFBWSxFQUFDLE9BQU8sRUFBRSxPQUFPLEdBQUksQ0FDdkgsQ0FBQyJ9
package/dist/styles.css CHANGED
@@ -3518,6 +3518,30 @@ input[type='number'].no-arrows {
3518
3518
  .aquarium-theme-dark .Aquarium-Card {
3519
3519
  --aquarium-background-color-primary-hover: color-mix(in srgb, var(--aquarium-colors-primary-100) 70%, transparent);
3520
3520
  }
3521
+ .aquarium-theme-dark .Aquarium-Tooltip {
3522
+ --aquarium-background-color-body-intense: var(--aquarium-background-color-intense);
3523
+ }
3524
+ .file\:typography-small-strong::file-selector-button{
3525
+ font: normal 500 14px/1.42 Inter;
3526
+ }
3527
+ .file\:mr-4::file-selector-button{
3528
+ margin-right: 12px;
3529
+ }
3530
+ .file\:border-0::file-selector-button{
3531
+ border-width: 0px;
3532
+ border-width: var(--aquarium-border-width-0);
3533
+ }
3534
+ .file\:bg-transparent::file-selector-button{
3535
+ background-color: transparent;
3536
+ background-color: var(--aquarium-colors-transparent);
3537
+ }
3538
+ .file\:p-0::file-selector-button{
3539
+ padding: 0px;
3540
+ }
3541
+ .file\:text-primary-intense::file-selector-button{
3542
+ color: rgba(53,69,190,1);
3543
+ color: var(--aquarium-text-color-primary-intense);
3544
+ }
3521
3545
  .placeholder\:text-inactive::-moz-placeholder{
3522
3546
  color: rgba(150,150,160,1);
3523
3547
  color: var(--aquarium-text-color-inactive);
package/dist/system.cjs CHANGED
@@ -4227,6 +4227,7 @@ __export(system_exports, {
4227
4227
  EmptyState: () => EmptyState,
4228
4228
  EmptyStateLayout: () => EmptyStateLayout,
4229
4229
  ExternalLinkButton: () => ExternalLinkButton,
4230
+ FileInput: () => FileInput,
4230
4231
  Flexbox: () => Flexbox,
4231
4232
  FlexboxItem: () => FlexboxItem,
4232
4233
  FormControl: () => FormControl,
@@ -4377,6 +4378,7 @@ __export(molecules_exports, {
4377
4378
  EmptyState: () => EmptyState,
4378
4379
  EmptyStateLayout: () => EmptyStateLayout,
4379
4380
  ExternalLinkButton: () => ExternalLinkButton,
4381
+ FileInput: () => FileInput,
4380
4382
  Flexbox: () => Flexbox,
4381
4383
  FlexboxItem: () => FlexboxItem,
4382
4384
  GhostButton: () => GhostButton,
@@ -6975,7 +6977,10 @@ var TooltipWrapper = import_react11.default.forwardRef(
6975
6977
  const arrowStyle = getArrowStyle(ref.current, placement, (_a2 = arrowProps.style) != null ? _a2 : {});
6976
6978
  return /* @__PURE__ */ import_react11.default.createElement(import_overlays2.OverlayContainer, null, /* @__PURE__ */ import_react11.default.createElement("div", __spreadValues({
6977
6979
  ref,
6978
- className: classNames(tw("p-3 rounded-sm typography-caption max-w-[320px] bg-body-intense text-white"))
6980
+ className: classNames(
6981
+ "Aquarium-Tooltip",
6982
+ tw("p-3 rounded-sm typography-caption max-w-[320px] bg-body-intense text-opposite-default")
6983
+ )
6979
6984
  }, (0, import_utils.mergeProps)(props, tooltipProps)), props.children, /* @__PURE__ */ import_react11.default.createElement(Arrow, __spreadProps(__spreadValues({}, arrowProps), {
6980
6985
  style: arrowStyle
6981
6986
  }))));
@@ -10443,6 +10448,7 @@ var import_cross5 = __toESM(require_cross());
10443
10448
  var import_error3 = __toESM(require_error());
10444
10449
  var import_search3 = __toESM(require_search());
10445
10450
  var import_tick4 = __toESM(require_tick());
10451
+ var import_upload2 = __toESM(require_upload());
10446
10452
  var InputAdornment = ({
10447
10453
  placement = "right",
10448
10454
  className,
@@ -10467,6 +10473,12 @@ var SearchIcon = ({ onClick }) => /* @__PURE__ */ import_react62.default.createE
10467
10473
  "data-testid": "icon-search",
10468
10474
  onClick
10469
10475
  });
10476
+ var UploadIcon = ({ onClick }) => /* @__PURE__ */ import_react62.default.createElement(Icon, {
10477
+ icon: import_upload2.default,
10478
+ color: "primary-intense",
10479
+ "data-testid": "icon-upload",
10480
+ onClick
10481
+ });
10470
10482
  var ResetIcon = ({ onClick }) => /* @__PURE__ */ import_react62.default.createElement(Icon, {
10471
10483
  className: "hover:cursor-pointer",
10472
10484
  icon: import_cross5.default,
@@ -10497,11 +10509,14 @@ var createInput = (displayName, opts = {}) => {
10497
10509
  "type"
10498
10510
  ]);
10499
10511
  var _a2;
10500
- const inputType = opts.isSearch ? "search" : type;
10512
+ const inputType = opts.isSearch ? "search" : opts.isFile ? "file" : type;
10501
10513
  const inputRef = import_react63.default.useRef(null);
10502
10514
  (0, import_react63.useImperativeHandle)(ref, () => inputRef.current);
10503
- const handleReset = () => {
10515
+ const handleReset = (e) => {
10504
10516
  var _a3;
10517
+ if (opts.isFile) {
10518
+ e.preventDefault();
10519
+ }
10505
10520
  const el = inputRef.current;
10506
10521
  if (el) {
10507
10522
  const lastValue = el.value;
@@ -10514,7 +10529,8 @@ var createInput = (displayName, opts = {}) => {
10514
10529
  return /* @__PURE__ */ import_react63.default.createElement("span", {
10515
10530
  className: classNames("Aquarium-InputBase", tw("relative block"))
10516
10531
  }, opts.adornment && /* @__PURE__ */ import_react63.default.createElement(InputAdornment, {
10517
- placement: "left"
10532
+ placement: "left",
10533
+ className: opts.isFile ? "icon-stroke-2" : void 0
10518
10534
  }, opts.adornment), /* @__PURE__ */ import_react63.default.createElement("input", __spreadProps(__spreadValues({
10519
10535
  ref: inputRef,
10520
10536
  type: inputType
@@ -10527,7 +10543,8 @@ var createInput = (displayName, opts = {}) => {
10527
10543
  {
10528
10544
  "[&::-webkit-search-cancel-button]:appearance-none": opts.isSearch,
10529
10545
  "pl-7": opts.adornment,
10530
- "pr-7": opts.canReset || endAdornment
10546
+ "pr-7": opts.canReset || endAdornment,
10547
+ "file:text-primary-intense file:typography-small-strong file:border-0 file:bg-transparent file:p-0 file:mr-4": opts.isFile
10531
10548
  },
10532
10549
  getCommonInputStyles({ readOnly, valid }),
10533
10550
  props.className
@@ -10545,57 +10562,68 @@ var createInput = (displayName, opts = {}) => {
10545
10562
  return InputComponent;
10546
10563
  };
10547
10564
  var InputBase = createInput("InputBase");
10565
+ var FileInputBase = createInput("FileInputBase", {
10566
+ adornment: /* @__PURE__ */ import_react63.default.createElement(UploadIcon, null),
10567
+ canReset: true,
10568
+ isFile: true
10569
+ });
10548
10570
  var SearchInput = createInput("SearchInput", {
10549
10571
  adornment: /* @__PURE__ */ import_react63.default.createElement(SearchIcon, null),
10550
10572
  canReset: true,
10551
10573
  isSearch: true
10552
10574
  });
10553
- var Input2 = import_react63.default.forwardRef((inputProps, ref) => {
10554
- var _b, _c;
10555
- const _a = inputProps, { readOnly = false, value: valueProp, onChange: onChangeProp } = _a, props = __objRest(_a, ["readOnly", "value", "onChange"]);
10556
- const isControlled = typeof valueProp !== "undefined";
10557
- const [valueState, setValueState] = (0, import_react63.useState)((_b = props.defaultValue) != null ? _b : "");
10558
- const value = isControlled ? valueProp : valueState;
10559
- const handleChange = (0, import_react63.useCallback)(
10560
- (e) => {
10561
- const next = e.target.value;
10562
- if (!isControlled) {
10563
- setValueState(next);
10564
- }
10565
- onChangeProp == null ? void 0 : onChangeProp(e);
10566
- },
10567
- [isControlled, onChangeProp]
10568
- );
10569
- const defaultId = (0, import_utils9.useId)();
10570
- const id = (_c = props.id) != null ? _c : defaultId;
10571
- const errorMessageId = (0, import_utils9.useId)();
10572
- const errorProps = props.valid === false ? { "aria-invalid": true, "aria-describedby": errorMessageId } : {};
10573
- const _d = getLabelControlProps(inputProps), { "data-testid": dataTestId } = _d, labelControlProps = __objRest(_d, ["data-testid"]);
10574
- const baseProps = (0, import_omit5.default)(
10575
- inputProps,
10576
- Object.keys(labelControlProps).concat(isControlled ? ["defaultValue"] : ["value"])
10577
- );
10578
- return /* @__PURE__ */ import_react63.default.createElement(LabelControl, __spreadProps(__spreadValues({
10579
- id: `${id}-label`,
10580
- htmlFor: id,
10581
- messageId: errorMessageId,
10582
- length: value !== void 0 ? (0, import_toString.default)(value).length : void 0
10583
- }, labelControlProps), {
10584
- className: "Aquarium-Input"
10585
- }), /* @__PURE__ */ import_react63.default.createElement(InputBase, __spreadProps(__spreadValues(__spreadValues({
10586
- ref
10587
- }, baseProps), errorProps), {
10588
- id,
10589
- "data-testid": dataTestId,
10590
- onChange: handleChange,
10591
- disabled: props.disabled,
10592
- maxLength: props.maxLength,
10593
- required: props.required,
10594
- valid: props.valid,
10595
- readOnly
10596
- })));
10597
- });
10598
- Input2.displayName = "Input";
10575
+ var createInputComponent = (displayName, options = {}) => {
10576
+ const InputComponentBase = options.input || InputBase;
10577
+ const InputComponent = import_react63.default.forwardRef((inputProps, ref) => {
10578
+ var _b, _c;
10579
+ const _a = inputProps, { readOnly = false, value: valueProp, onChange: onChangeProp } = _a, props = __objRest(_a, ["readOnly", "value", "onChange"]);
10580
+ const isControlled = typeof valueProp !== "undefined";
10581
+ const [valueState, setValueState] = (0, import_react63.useState)((_b = props.defaultValue) != null ? _b : "");
10582
+ const value = isControlled ? valueProp : valueState;
10583
+ const handleChange = (0, import_react63.useCallback)(
10584
+ (e) => {
10585
+ const next = e.target.value;
10586
+ if (!isControlled) {
10587
+ setValueState(next);
10588
+ }
10589
+ onChangeProp == null ? void 0 : onChangeProp(e);
10590
+ },
10591
+ [isControlled, onChangeProp]
10592
+ );
10593
+ const defaultId = (0, import_utils9.useId)();
10594
+ const id = (_c = props.id) != null ? _c : defaultId;
10595
+ const errorMessageId = (0, import_utils9.useId)();
10596
+ const errorProps = props.valid === false ? { "aria-invalid": true, "aria-describedby": errorMessageId } : {};
10597
+ const _d = getLabelControlProps(inputProps), { "data-testid": dataTestId } = _d, labelControlProps = __objRest(_d, ["data-testid"]);
10598
+ const baseProps = (0, import_omit5.default)(
10599
+ inputProps,
10600
+ Object.keys(labelControlProps).concat(isControlled ? ["defaultValue"] : ["value"])
10601
+ );
10602
+ return /* @__PURE__ */ import_react63.default.createElement(LabelControl, __spreadProps(__spreadValues({
10603
+ id: `${id}-label`,
10604
+ htmlFor: id,
10605
+ messageId: errorMessageId,
10606
+ length: value !== void 0 ? (0, import_toString.default)(value).length : void 0
10607
+ }, labelControlProps), {
10608
+ className: "Aquarium-Input"
10609
+ }), /* @__PURE__ */ import_react63.default.createElement(InputComponentBase, __spreadProps(__spreadValues(__spreadValues({
10610
+ ref
10611
+ }, baseProps), errorProps), {
10612
+ id,
10613
+ "data-testid": dataTestId,
10614
+ onChange: handleChange,
10615
+ disabled: props.disabled,
10616
+ maxLength: props.maxLength,
10617
+ required: props.required,
10618
+ valid: props.valid,
10619
+ readOnly
10620
+ })));
10621
+ });
10622
+ InputComponent.displayName = displayName;
10623
+ return InputComponent;
10624
+ };
10625
+ var FileInput = createInputComponent("FileInput", { input: FileInputBase });
10626
+ var Input2 = createInputComponent("Input", { input: InputBase });
10599
10627
  Input2.Skeleton = () => /* @__PURE__ */ import_react63.default.createElement(LabelControl.Skeleton, null, /* @__PURE__ */ import_react63.default.createElement(InputBase.Skeleton, null));
10600
10628
  Input2.Skeleton.displayName = "Input.Skeleton";
10601
10629
 
@@ -11796,13 +11824,13 @@ var MenuWrapper = (_a) => {
11796
11824
  "header",
11797
11825
  "footer"
11798
11826
  ]);
11799
- const ref = import_react74.default.useRef(null);
11827
+ const baseListRef = import_react74.default.useRef(null);
11800
11828
  const disabledKeys = getDisabledItemKeys(props.children);
11801
11829
  const state = (0, import_tree.useTreeState)(__spreadValues({
11802
11830
  disabledKeys,
11803
11831
  selectedKeys
11804
11832
  }, props));
11805
- const { menuProps } = (0, import_menu2.useMenu)(props, state, ref);
11833
+ const { menuProps } = (0, import_menu2.useMenu)(props, state, baseListRef);
11806
11834
  const { contains } = (0, import_i18n.useFilter)({ sensitivity: "base" });
11807
11835
  const [search, setSearch] = import_react74.default.useState("");
11808
11836
  const searchInputRef = import_react74.default.useRef(null);
@@ -11810,12 +11838,51 @@ var MenuWrapper = (_a) => {
11810
11838
  () => searchable ? filterCollection(state.collection, search, contains) : state.collection,
11811
11839
  [searchable, state.collection, search, contains]
11812
11840
  );
11813
- import_react74.default.useEffect(() => {
11841
+ const focusOnSearchInput = (0, import_react74.useCallback)(() => {
11842
+ var _a2;
11843
+ (_a2 = searchInputRef.current) == null ? void 0 : _a2.focus();
11844
+ }, []);
11845
+ const focusOnBaseList = (0, import_react74.useCallback)(() => {
11814
11846
  var _a2;
11847
+ (_a2 = baseListRef.current) == null ? void 0 : _a2.focus();
11848
+ }, []);
11849
+ import_react74.default.useEffect(() => {
11815
11850
  if (searchable) {
11816
- (_a2 = searchInputRef.current) == null ? void 0 : _a2.focus();
11851
+ requestAnimationFrame(focusOnSearchInput);
11817
11852
  }
11818
- }, [searchable]);
11853
+ }, [searchable, focusOnSearchInput]);
11854
+ const onSearchInputKeyDown = (0, import_react74.useCallback)(
11855
+ (event) => {
11856
+ if (event.code === "ArrowDown") {
11857
+ focusOnBaseList();
11858
+ }
11859
+ },
11860
+ [focusOnBaseList]
11861
+ );
11862
+ const onMenuItemsKeyDown = (0, import_react74.useCallback)(
11863
+ (event) => {
11864
+ if (!searchable) {
11865
+ return;
11866
+ }
11867
+ if (event.shiftKey && event.code.startsWith("Shift") || event.altKey && event.code.startsWith("Alt") || event.ctrlKey || event.metaKey || [
11868
+ "ArrowUp",
11869
+ "ArrowDown",
11870
+ "ArrowLeft",
11871
+ "ArrowRight",
11872
+ "PageUp",
11873
+ "PageDown",
11874
+ "Home",
11875
+ "End",
11876
+ "Tab",
11877
+ "Enter",
11878
+ "Space"
11879
+ ].includes(event.code)) {
11880
+ return;
11881
+ }
11882
+ focusOnSearchInput();
11883
+ },
11884
+ [searchable, focusOnSearchInput]
11885
+ );
11819
11886
  return /* @__PURE__ */ import_react74.default.createElement(DropdownMenu, {
11820
11887
  minWidth,
11821
11888
  maxWidth,
@@ -11825,10 +11892,13 @@ var MenuWrapper = (_a) => {
11825
11892
  "aria-label": "search",
11826
11893
  value: search,
11827
11894
  onChange: (e) => setSearch(e.target.value),
11895
+ onKeyDown: onSearchInputKeyDown,
11828
11896
  className: tw("mb-5"),
11829
11897
  ref: searchInputRef
11830
- }), filteredCollection.size === 0 && emptyState && /* @__PURE__ */ import_react74.default.createElement(DropdownMenu.EmptyStateContainer, null, emptyState), /* @__PURE__ */ import_react74.default.createElement(DropdownMenu.List, __spreadValues({
11831
- ref
11898
+ }), filteredCollection.size === 0 && emptyState && /* @__PURE__ */ import_react74.default.createElement(DropdownMenu.EmptyStateContainer, null, emptyState), /* @__PURE__ */ import_react74.default.createElement("div", {
11899
+ onKeyDown: onMenuItemsKeyDown
11900
+ }, /* @__PURE__ */ import_react74.default.createElement(DropdownMenu.List, __spreadValues({
11901
+ ref: baseListRef
11832
11902
  }, menuProps), Array.from(filteredCollection).map((item) => {
11833
11903
  if (isSectionNode(item)) {
11834
11904
  return /* @__PURE__ */ import_react74.default.createElement(SectionWrapper, {
@@ -11843,7 +11913,7 @@ var MenuWrapper = (_a) => {
11843
11913
  state
11844
11914
  });
11845
11915
  }
11846
- }))), footer);
11916
+ })))), footer);
11847
11917
  };
11848
11918
  var ItemWrapper = ({ item, state }) => {
11849
11919
  const ref = import_react74.default.useRef(null);
@@ -16074,6 +16144,7 @@ var system_default = __spreadValues({}, molecules_exports);
16074
16144
  EmptyState,
16075
16145
  EmptyStateLayout,
16076
16146
  ExternalLinkButton,
16147
+ FileInput,
16077
16148
  Flexbox,
16078
16149
  FlexboxItem,
16079
16150
  FormControl,