@aivenio/aquarium 1.76.3 → 1.77.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.
package/README.md CHANGED
@@ -7,7 +7,9 @@ Implementation of Aiven Aquarium design system, released as an npm package. Quic
7
7
  - Aquarium design system implementation is exposed as React components via npm
8
8
  - [Tailwind](https://tailwindcss.com/) is used for styling
9
9
 
10
- ## Installing into your app
10
+ ## Installation
11
+
12
+ To install Aquarium to your app:
11
13
 
12
14
  - `npm install --save @aivenio/aquarium`
13
15
  - Make sure to add the correct fonts in your app. [Inter](https://fonts.google.com/specimen/Inter) for Aiven theme.
@@ -50,11 +52,11 @@ Implementation of Aiven Aquarium design system, released as an npm package. Quic
50
52
  };
51
53
  ```
52
54
 
53
- ## Developing the Aquarium components
55
+ ## Development
54
56
 
55
57
  **Use npm 7!** With older npm versions, install peerDependencies manually. If you encounter "Cannot find module..." errors, try `rm -rf node_modules && npm i`. This seems to be a bug introduced in npm@7.
56
58
 
57
- ### Environment setup
59
+ ### Prerequisites
58
60
 
59
61
  This project requires certain environment variables to be set before commands such as `npm run build` will work. Most can be copy/pasted with the help of your teammates, but you will need to generate a NPM token yourself in order.
60
62
 
@@ -66,40 +68,46 @@ This project requires certain environment variables to be set before commands su
66
68
 
67
69
  Note that any time a new shell instance is created (for example, when you restart your computer), you need to run `source .env` again, or the variables won't be set. Consider using a solution such as `autoenv` to automatically apply the `.env` file.
68
70
 
69
- - `npm ci` to install dependencies
70
- - `npm run build` to build the project
71
- - `npm start` to start Storybook
72
-
73
- After Figma has been edited, run:
74
-
75
- - `npm run figma -- sync` to fetch new tokens to `./tokens.json`
76
- - `npm run build` to re-create automatically generated files
77
-
78
- ### Optional DX improvements
71
+ #### Optional DX improvements
79
72
 
80
73
  - For VSCode
81
74
  - Install Tailwind CSS IntelliSense extension. See <https://github.com/tailwindlabs/tailwindcss-intellisense#recommended-vs-code-settings>
82
75
  - Install ESLint extension and optionally enable auto-format on save. See _"Step 4 — Formatting on Save"_ from <https://www.digitalocean.com/community/tutorials/linting-and-formatting-with-eslint-in-vs-code>
83
76
 
84
- ### Running locally
77
+ ### Common commands
78
+
79
+ - `npm ci` to install dependencies
80
+ - `npm run build` to build the production build of the library
81
+ - `npm start` to start Storybook
82
+
83
+ ### Developing in the context of your app
85
84
 
86
85
  To develop Aquarium components in the context of an application, it is easier to run a locally modified version of Aquarium in your application (e.g. Console).
87
86
  There are two ways to do this: [npm link](https://docs.npmjs.com/cli/v7/commands/npm-link), or copying the module into your app. This allows you to make changes to components and instantly see the change in the context of the app.
88
87
 
89
88
  #### npm link
90
89
 
90
+ > ⚠️ TODO: This doesn't currently work out of the box. Revise the instructions
91
+
91
92
  1. In design-system directory, run `npm link`
92
- 2. In design-system directory, run `npm link <path to app>/node_modules/react` to avoid running into conflict of having two react instances. This will otherwise break the rules of hooks and crash the app. More info on the issue [here](https://reactjs.org/warnings/invalid-hook-call-warning.html#duplicate-react). If the command fails with errors about peer dependencies, re-run the command, adding `--force` at the end.
93
+ 2. In design-system directory, run `npm link <path to your app>/node_modules/react` to avoid running into conflict of having two react instances. This will otherwise break the rules of hooks and crash the app. More info on the issue [here](https://reactjs.org/warnings/invalid-hook-call-warning.html#duplicate-react). If the command fails with errors about peer dependencies, re-run the command, adding `--force` at the end.
93
94
  3. In the app directory, run `npm link @aivenio/aquarium`
94
- 4. Now `<app>/node_modules/@aivenio/aquarium` is a symlink to your local Aquarium directory.
95
+ 4. Now `<path to your app>/node_modules/@aivenio/aquarium` is a symlink to your local Aquarium directory.
95
96
  5. In design-system directory, run `npm run watch`
96
97
  6. Done! Now you should be able to develop DS locally, and changes are reflected to the application which depends on `@aivenio/aquarium`
97
98
  7. When you want to stop using the npm link, and go back to the regular imported version, in your app directory, run `npm unlink --no-save @aivenio/aquarium`, then `npm i` to reinstall the dependency.
98
99
 
99
100
  #### Copy module
100
101
 
101
- npm link can be tricky to get working. A simpler approach is to build the module and copy it into your application's `node-modules` directory:
102
- `npm run build:ds:module && cp -r dist <path to app>/node_modules/@aivenio/aquarium`
102
+ npm link can be tricky to get working. A simpler approach is to build a production build of the DS and copy it into your application's `node-modules` directory. Remember to restart the build process of your app once DS has been built and copied over. Here's a snippet to do all that:
103
+
104
+ ```sh
105
+ cd <path to ds> \
106
+ && npm run build \
107
+ && cd <path to your app> \
108
+ && rm -rf ./node_modules/@aivenio/aquarium/dist \
109
+ && cp -R <path to ds>/dist ./node_modules/@aivenio/aquarium # && <the dev/build command of your app>
110
+ ```
103
111
 
104
112
  ### Running tests
105
113
 
@@ -15,15 +15,16 @@ export declare type InputBaseProps = React.InputHTMLAttributes<HTMLInputElement>
15
15
  */
16
16
  endAdornment?: React.ReactElement;
17
17
  };
18
- declare type SearchInputProps = Omit<InputBaseProps, 'type'>;
19
- declare type InputBaseComponent<TProps extends InputBaseProps | SearchInputProps> = React.ForwardRefExoticComponent<React.RefAttributes<HTMLInputElement> & TProps> & {
18
+ declare type SpecializedInputProps = Omit<InputBaseProps, 'type'>;
19
+ declare type InputBaseComponent<TProps extends InputBaseProps | SpecializedInputProps> = React.ForwardRefExoticComponent<React.RefAttributes<HTMLInputElement> & TProps> & {
20
20
  Skeleton: React.FC;
21
21
  };
22
22
  declare const InputBase: InputBaseComponent<InputBaseProps>;
23
- declare const SearchInput: InputBaseComponent<SearchInputProps>;
23
+ declare const SearchInput: InputBaseComponent<SpecializedInputProps>;
24
24
  export declare type InputProps = InputBaseProps & Omit<LabelControlProps, 'length'>;
25
25
  declare type InputComponent = React.ForwardRefExoticComponent<InputProps & React.RefAttributes<HTMLInputElement>> & {
26
26
  Skeleton: React.FC;
27
27
  };
28
+ declare const FileInput: InputComponent;
28
29
  declare const Input: InputComponent;
29
- export { Input, InputBase, SearchInput };
30
+ export { FileInput, Input, InputBase, SearchInput };
@@ -15,18 +15,22 @@ import omit from 'lodash/omit';
15
15
  import toString from 'lodash/toString';
16
16
  import { Skeleton } from '../../../src/molecules/Skeleton/Skeleton';
17
17
  import { getCommonInputStyles } from '../../../src/utils/constants';
18
- import { InputAdornment, ResetIcon, SearchIcon } from '../../../src/utils/form/InputAdornment/InputAdornment';
18
+ import { InputAdornment, ResetIcon, SearchIcon, UploadIcon } from '../../../src/utils/form/InputAdornment/InputAdornment';
19
19
  import { getLabelControlProps, LabelControl } from '../../../src/utils/form/Label/Label';
20
20
  import { classNames, tw } from '../../../src/utils/tailwind';
21
21
  const createInput = (displayName, opts = {}) => {
22
22
  const InputComponent = forwardRef((_a, ref) => {
23
23
  var _b;
24
24
  var { maxLength, valid = true, required = false, endAdornment, disabled = false, readOnly = false, type } = _a, props = __rest(_a, ["maxLength", "valid", "required", "endAdornment", "disabled", "readOnly", "type"]);
25
- const inputType = opts.isSearch ? 'search' : type;
25
+ const inputType = opts.isSearch ? 'search' : opts.isFile ? 'file' : type;
26
26
  const inputRef = React.useRef(null);
27
27
  useImperativeHandle(ref, () => inputRef.current);
28
- const handleReset = () => {
28
+ const handleReset = (e) => {
29
29
  var _a;
30
+ if (opts.isFile) {
31
+ // In case of file input we want to stop the click from going through and triggering the input again
32
+ e.preventDefault();
33
+ }
30
34
  const el = inputRef.current;
31
35
  if (el) {
32
36
  /*
@@ -43,11 +47,12 @@ const createInput = (displayName, opts = {}) => {
43
47
  }
44
48
  };
45
49
  return (React.createElement("span", { className: classNames('Aquarium-InputBase', tw('relative block')) },
46
- opts.adornment && React.createElement(InputAdornment, { placement: "left" }, opts.adornment),
50
+ opts.adornment && (React.createElement(InputAdornment, { placement: "left", className: opts.isFile ? 'icon-stroke-2' : undefined }, opts.adornment)),
47
51
  React.createElement("input", Object.assign({ ref: inputRef, type: inputType }, props, { disabled: disabled, maxLength: maxLength, "aria-required": required, readOnly: readOnly, className: classNames({
48
52
  '[&::-webkit-search-cancel-button]:appearance-none': opts.isSearch,
49
53
  'pl-7': opts.adornment,
50
54
  'pr-7': opts.canReset || endAdornment,
55
+ 'file:text-primary-intense file:typography-small-strong file:border-0 file:bg-transparent file:p-0 file:mr-4': opts.isFile,
51
56
  }, getCommonInputStyles({ readOnly, valid }), props.className) })),
52
57
  opts.canReset && (props.value || ((_b = inputRef.current) === null || _b === void 0 ? void 0 : _b.value)) && (React.createElement(InputAdornment, null,
53
58
  React.createElement("button", { "aria-label": "reset search", onClick: handleReset },
@@ -59,37 +64,48 @@ const createInput = (displayName, opts = {}) => {
59
64
  return InputComponent;
60
65
  };
61
66
  const InputBase = createInput('InputBase');
67
+ const FileInputBase = createInput('FileInputBase', {
68
+ adornment: React.createElement(UploadIcon, null),
69
+ canReset: true,
70
+ isFile: true,
71
+ });
62
72
  const SearchInput = createInput('SearchInput', {
63
73
  adornment: React.createElement(SearchIcon, null),
64
74
  canReset: true,
65
75
  isSearch: true,
66
76
  });
67
- const Input = React.forwardRef((inputProps, ref) => {
68
- var _a, _b;
69
- const { readOnly = false, value: valueProp, onChange: onChangeProp } = inputProps, props = __rest(inputProps, ["readOnly", "value", "onChange"]);
70
- const isControlled = typeof valueProp !== 'undefined';
71
- const [valueState, setValueState] = useState((_a = props.defaultValue) !== null && _a !== void 0 ? _a : '');
72
- const value = isControlled ? valueProp : valueState;
73
- const handleChange = useCallback((e) => {
74
- const next = e.target.value;
75
- if (!isControlled) {
76
- setValueState(next);
77
- }
78
- onChangeProp === null || onChangeProp === void 0 ? void 0 : onChangeProp(e);
79
- }, [isControlled, onChangeProp]);
80
- // we need a unique ID to be used for an accessible connection between the input and its error message
81
- const defaultId = useId();
82
- const id = (_b = props.id) !== null && _b !== void 0 ? _b : defaultId;
83
- const errorMessageId = useId();
84
- const errorProps = props.valid === false ? { 'aria-invalid': true, 'aria-describedby': errorMessageId } : {};
85
- const _c = getLabelControlProps(inputProps), { 'data-testid': dataTestId } = _c, labelControlProps = __rest(_c, ['data-testid']);
86
- const baseProps = omit(inputProps, Object.keys(labelControlProps).concat(isControlled ? ['defaultValue'] : ['value']));
87
- return (React.createElement(LabelControl, Object.assign({ id: `${id}-label`, htmlFor: id, messageId: errorMessageId, length: value !== undefined ? toString(value).length : undefined }, labelControlProps, { className: "Aquarium-Input" }),
88
- React.createElement(InputBase, Object.assign({ ref: ref }, baseProps, errorProps, { id: id, "data-testid": dataTestId, onChange: handleChange, disabled: props.disabled, maxLength: props.maxLength, required: props.required, valid: props.valid, readOnly: readOnly }))));
89
- });
90
- Input.displayName = 'Input'; // this will affect the Doc code preview in storybook to not show it as <No Display Name/> or <[object Object]/>.
77
+ const createInputComponent = (displayName, options = {}) => {
78
+ const InputComponentBase = options.input || InputBase;
79
+ const InputComponent = React.forwardRef((inputProps, ref) => {
80
+ var _a, _b;
81
+ const { readOnly = false, value: valueProp, onChange: onChangeProp } = inputProps, props = __rest(inputProps, ["readOnly", "value", "onChange"]);
82
+ const isControlled = typeof valueProp !== 'undefined';
83
+ const [valueState, setValueState] = useState((_a = props.defaultValue) !== null && _a !== void 0 ? _a : '');
84
+ const value = isControlled ? valueProp : valueState;
85
+ const handleChange = useCallback((e) => {
86
+ const next = e.target.value;
87
+ if (!isControlled) {
88
+ setValueState(next);
89
+ }
90
+ onChangeProp === null || onChangeProp === void 0 ? void 0 : onChangeProp(e);
91
+ }, [isControlled, onChangeProp]);
92
+ // we need a unique ID to be used for an accessible connection between the input and its error message
93
+ const defaultId = useId();
94
+ const id = (_b = props.id) !== null && _b !== void 0 ? _b : defaultId;
95
+ const errorMessageId = useId();
96
+ const errorProps = props.valid === false ? { 'aria-invalid': true, 'aria-describedby': errorMessageId } : {};
97
+ const _c = getLabelControlProps(inputProps), { 'data-testid': dataTestId } = _c, labelControlProps = __rest(_c, ['data-testid']);
98
+ const baseProps = omit(inputProps, Object.keys(labelControlProps).concat(isControlled ? ['defaultValue'] : ['value']));
99
+ return (React.createElement(LabelControl, Object.assign({ id: `${id}-label`, htmlFor: id, messageId: errorMessageId, length: value !== undefined ? toString(value).length : undefined }, labelControlProps, { className: "Aquarium-Input" }),
100
+ React.createElement(InputComponentBase, Object.assign({ ref: ref }, baseProps, errorProps, { id: id, "data-testid": dataTestId, onChange: handleChange, disabled: props.disabled, maxLength: props.maxLength, required: props.required, valid: props.valid, readOnly: readOnly }))));
101
+ });
102
+ InputComponent.displayName = displayName;
103
+ return InputComponent;
104
+ };
105
+ const FileInput = createInputComponent('FileInput', { input: FileInputBase });
106
+ const Input = createInputComponent('Input', { input: InputBase });
91
107
  Input.Skeleton = () => (React.createElement(LabelControl.Skeleton, null,
92
108
  React.createElement(InputBase.Skeleton, null)));
93
109
  Input.Skeleton.displayName = 'Input.Skeleton'; // this will affect the Doc code preview in storybook to not show it as <No Display Name/> or <[object Object]/>.
94
- export { Input, InputBase, SearchInput };
95
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW5wdXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbW9sZWN1bGVzL0lucHV0L0lucHV0LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBLE9BQU8sS0FBSyxFQUFFLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxRQUFRLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDdEYsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzFDLE9BQU8sSUFBSSxNQUFNLGFBQWEsQ0FBQztBQUMvQixPQUFPLFFBQVEsTUFBTSxpQkFBaUIsQ0FBQztBQUV2QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFM0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDckcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFlBQVksRUFBMEIsTUFBTSw0QkFBNEIsQ0FBQztBQUN4RyxPQUFPLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBaUNwRCxNQUFNLFdBQVcsR0FBRyxDQUNsQixXQUFtQixFQUNuQixPQUFxQixFQUFFLEVBQ0ssRUFBRTtJQUM5QixNQUFNLGNBQWMsR0FBRyxVQUFVLENBQy9CLENBQ0UsRUFTaUMsRUFDakMsR0FBRyxFQUNILEVBQUU7O1lBWEYsRUFDRSxTQUFTLEVBQ1QsS0FBSyxHQUFHLElBQUksRUFDWixRQUFRLEdBQUcsS0FBSyxFQUNoQixZQUFZLEVBQ1osUUFBUSxHQUFHLEtBQUssRUFDaEIsUUFBUSxHQUFHLEtBQUssRUFDaEIsSUFBSSxPQUUyQixFQUQ1QixLQUFLLGNBUlYsa0ZBU0MsQ0FEUztRQUlWLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENB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
110
+ export { FileInput, Input, InputBase, SearchInput };
111
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW5wdXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbW9sZWN1bGVzL0lucHV0L0lucHV0LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBLE9BQU8sS0FBSyxFQUFFLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxRQUFRLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDdEYsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzFDLE9BQU8sSUFBSSxNQUFNLGFBQWEsQ0FBQztBQUMvQixPQUFPLFFBQVEsTUFBTSxpQkFBaUIsQ0FBQztBQUV2QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFM0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ2pILE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxZQUFZLEVBQTBCLE1BQU0sNEJBQTRCLENBQUM7QUFDeEcsT0FBTyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQW1DcEQsTUFBTSxXQUFXLEdBQUcsQ0FDbEIsV0FBbUIsRUFDbkIsT0FBcUIsRUFBRSxFQUNLLEVBQUU7SUFDOUIsTUFBTSxjQUFjLEdBQUcsVUFBVSxDQUMvQixDQUNFLEVBU2lDLEVBQ2pDLEdBQUcsRUFDSCxFQUFFOztZQVhGLEVBQ0UsU0FBUyxFQUNULEtBQUssR0FBRyxJQUFJLEVBQ1osUUFBUSxHQUFHLEtBQUssRUFDaEIsWUFBWSxFQUNaLFFBQVEsR0FBRyxLQUFLLEVBQ2hCLFFBQVEsR0FBRyxLQUFLLEVBQ2hCLElBQUksT0FFMkIsRUFENUIsS0FBSyxjQVJWLGtGQVNDLENBRFM7UUFJVixNQUFNLFNBQVMsR0FBRyxJQUFJLENB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
@@ -10,5 +10,6 @@ declare type Props = Pick<IconProps, 'onClick'>;
10
10
  export declare const ValidIcon: React.FC<Props>;
11
11
  export declare const ErrorIcon: React.FC<Props>;
12
12
  export declare const SearchIcon: React.FC<Props>;
13
+ export declare const UploadIcon: React.FC<Props>;
13
14
  export declare const ResetIcon: React.FC<Props>;
14
15
  export {};
@@ -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,27 @@ 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
+ .file\:typography-small-strong::file-selector-button{
3522
+ font: normal 500 14px/1.42 Inter;
3523
+ }
3524
+ .file\:mr-4::file-selector-button{
3525
+ margin-right: 12px;
3526
+ }
3527
+ .file\:border-0::file-selector-button{
3528
+ border-width: 0px;
3529
+ border-width: var(--aquarium-border-width-0);
3530
+ }
3531
+ .file\:bg-transparent::file-selector-button{
3532
+ background-color: transparent;
3533
+ background-color: var(--aquarium-colors-transparent);
3534
+ }
3535
+ .file\:p-0::file-selector-button{
3536
+ padding: 0px;
3537
+ }
3538
+ .file\:text-primary-intense::file-selector-button{
3539
+ color: rgba(53,69,190,1);
3540
+ color: var(--aquarium-text-color-primary-intense);
3541
+ }
3521
3542
  .placeholder\:text-inactive::-moz-placeholder{
3522
3543
  color: rgba(150,150,160,1);
3523
3544
  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,
@@ -10443,6 +10445,7 @@ var import_cross5 = __toESM(require_cross());
10443
10445
  var import_error3 = __toESM(require_error());
10444
10446
  var import_search3 = __toESM(require_search());
10445
10447
  var import_tick4 = __toESM(require_tick());
10448
+ var import_upload2 = __toESM(require_upload());
10446
10449
  var InputAdornment = ({
10447
10450
  placement = "right",
10448
10451
  className,
@@ -10467,6 +10470,12 @@ var SearchIcon = ({ onClick }) => /* @__PURE__ */ import_react62.default.createE
10467
10470
  "data-testid": "icon-search",
10468
10471
  onClick
10469
10472
  });
10473
+ var UploadIcon = ({ onClick }) => /* @__PURE__ */ import_react62.default.createElement(Icon, {
10474
+ icon: import_upload2.default,
10475
+ color: "primary-intense",
10476
+ "data-testid": "icon-upload",
10477
+ onClick
10478
+ });
10470
10479
  var ResetIcon = ({ onClick }) => /* @__PURE__ */ import_react62.default.createElement(Icon, {
10471
10480
  className: "hover:cursor-pointer",
10472
10481
  icon: import_cross5.default,
@@ -10497,11 +10506,14 @@ var createInput = (displayName, opts = {}) => {
10497
10506
  "type"
10498
10507
  ]);
10499
10508
  var _a2;
10500
- const inputType = opts.isSearch ? "search" : type;
10509
+ const inputType = opts.isSearch ? "search" : opts.isFile ? "file" : type;
10501
10510
  const inputRef = import_react63.default.useRef(null);
10502
10511
  (0, import_react63.useImperativeHandle)(ref, () => inputRef.current);
10503
- const handleReset = () => {
10512
+ const handleReset = (e) => {
10504
10513
  var _a3;
10514
+ if (opts.isFile) {
10515
+ e.preventDefault();
10516
+ }
10505
10517
  const el = inputRef.current;
10506
10518
  if (el) {
10507
10519
  const lastValue = el.value;
@@ -10514,7 +10526,8 @@ var createInput = (displayName, opts = {}) => {
10514
10526
  return /* @__PURE__ */ import_react63.default.createElement("span", {
10515
10527
  className: classNames("Aquarium-InputBase", tw("relative block"))
10516
10528
  }, opts.adornment && /* @__PURE__ */ import_react63.default.createElement(InputAdornment, {
10517
- placement: "left"
10529
+ placement: "left",
10530
+ className: opts.isFile ? "icon-stroke-2" : void 0
10518
10531
  }, opts.adornment), /* @__PURE__ */ import_react63.default.createElement("input", __spreadProps(__spreadValues({
10519
10532
  ref: inputRef,
10520
10533
  type: inputType
@@ -10527,7 +10540,8 @@ var createInput = (displayName, opts = {}) => {
10527
10540
  {
10528
10541
  "[&::-webkit-search-cancel-button]:appearance-none": opts.isSearch,
10529
10542
  "pl-7": opts.adornment,
10530
- "pr-7": opts.canReset || endAdornment
10543
+ "pr-7": opts.canReset || endAdornment,
10544
+ "file:text-primary-intense file:typography-small-strong file:border-0 file:bg-transparent file:p-0 file:mr-4": opts.isFile
10531
10545
  },
10532
10546
  getCommonInputStyles({ readOnly, valid }),
10533
10547
  props.className
@@ -10545,57 +10559,68 @@ var createInput = (displayName, opts = {}) => {
10545
10559
  return InputComponent;
10546
10560
  };
10547
10561
  var InputBase = createInput("InputBase");
10562
+ var FileInputBase = createInput("FileInputBase", {
10563
+ adornment: /* @__PURE__ */ import_react63.default.createElement(UploadIcon, null),
10564
+ canReset: true,
10565
+ isFile: true
10566
+ });
10548
10567
  var SearchInput = createInput("SearchInput", {
10549
10568
  adornment: /* @__PURE__ */ import_react63.default.createElement(SearchIcon, null),
10550
10569
  canReset: true,
10551
10570
  isSearch: true
10552
10571
  });
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";
10572
+ var createInputComponent = (displayName, options = {}) => {
10573
+ const InputComponentBase = options.input || InputBase;
10574
+ const InputComponent = import_react63.default.forwardRef((inputProps, ref) => {
10575
+ var _b, _c;
10576
+ const _a = inputProps, { readOnly = false, value: valueProp, onChange: onChangeProp } = _a, props = __objRest(_a, ["readOnly", "value", "onChange"]);
10577
+ const isControlled = typeof valueProp !== "undefined";
10578
+ const [valueState, setValueState] = (0, import_react63.useState)((_b = props.defaultValue) != null ? _b : "");
10579
+ const value = isControlled ? valueProp : valueState;
10580
+ const handleChange = (0, import_react63.useCallback)(
10581
+ (e) => {
10582
+ const next = e.target.value;
10583
+ if (!isControlled) {
10584
+ setValueState(next);
10585
+ }
10586
+ onChangeProp == null ? void 0 : onChangeProp(e);
10587
+ },
10588
+ [isControlled, onChangeProp]
10589
+ );
10590
+ const defaultId = (0, import_utils9.useId)();
10591
+ const id = (_c = props.id) != null ? _c : defaultId;
10592
+ const errorMessageId = (0, import_utils9.useId)();
10593
+ const errorProps = props.valid === false ? { "aria-invalid": true, "aria-describedby": errorMessageId } : {};
10594
+ const _d = getLabelControlProps(inputProps), { "data-testid": dataTestId } = _d, labelControlProps = __objRest(_d, ["data-testid"]);
10595
+ const baseProps = (0, import_omit5.default)(
10596
+ inputProps,
10597
+ Object.keys(labelControlProps).concat(isControlled ? ["defaultValue"] : ["value"])
10598
+ );
10599
+ return /* @__PURE__ */ import_react63.default.createElement(LabelControl, __spreadProps(__spreadValues({
10600
+ id: `${id}-label`,
10601
+ htmlFor: id,
10602
+ messageId: errorMessageId,
10603
+ length: value !== void 0 ? (0, import_toString.default)(value).length : void 0
10604
+ }, labelControlProps), {
10605
+ className: "Aquarium-Input"
10606
+ }), /* @__PURE__ */ import_react63.default.createElement(InputComponentBase, __spreadProps(__spreadValues(__spreadValues({
10607
+ ref
10608
+ }, baseProps), errorProps), {
10609
+ id,
10610
+ "data-testid": dataTestId,
10611
+ onChange: handleChange,
10612
+ disabled: props.disabled,
10613
+ maxLength: props.maxLength,
10614
+ required: props.required,
10615
+ valid: props.valid,
10616
+ readOnly
10617
+ })));
10618
+ });
10619
+ InputComponent.displayName = displayName;
10620
+ return InputComponent;
10621
+ };
10622
+ var FileInput = createInputComponent("FileInput", { input: FileInputBase });
10623
+ var Input2 = createInputComponent("Input", { input: InputBase });
10599
10624
  Input2.Skeleton = () => /* @__PURE__ */ import_react63.default.createElement(LabelControl.Skeleton, null, /* @__PURE__ */ import_react63.default.createElement(InputBase.Skeleton, null));
10600
10625
  Input2.Skeleton.displayName = "Input.Skeleton";
10601
10626
 
@@ -16074,6 +16099,7 @@ var system_default = __spreadValues({}, molecules_exports);
16074
16099
  EmptyState,
16075
16100
  EmptyStateLayout,
16076
16101
  ExternalLinkButton,
16102
+ FileInput,
16077
16103
  Flexbox,
16078
16104
  FlexboxItem,
16079
16105
  FormControl,