venice-ui 2.1.11 → 2.1.12

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.
@@ -0,0 +1,127 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.FillSelect = void 0;
27
+ const react_1 = __importStar(require("react"));
28
+ const Aligment_1 = require("../Aligment");
29
+ const FillSelect_styles_1 = require("./FillSelect.styles");
30
+ const Input_1 = require("../Input");
31
+ const common_1 = require("../common");
32
+ const react_dom_1 = require("react-dom");
33
+ const Icons_1 = require("../Icons");
34
+ const Theme_1 = require("../../Theme");
35
+ const Dropdown_1 = require("../Dropdown");
36
+ const Dropdown_styles_1 = require("../Dropdown/Dropdown.styles");
37
+ const FillSelect = ({ size = 'medium', label, labelPosition = 'top', disabled = false, error, errorMsg, width, options, value, placeholder = 'Please select', name, handleSelect, position = 'left', zIndex, readOnly = false, theme = Theme_1.mainTheme, }) => {
38
+ const [open, toogleOpen] = (0, react_1.useState)(false);
39
+ const [optionScope, setOptionScope] = (0, react_1.useState)(options);
40
+ const [inputValue, setInputValue] = (0, react_1.useState)('');
41
+ const ref = (0, react_1.useRef)(null);
42
+ const sourceRef = (0, react_1.useRef)(null);
43
+ const textRef = (0, react_1.useRef)(null);
44
+ const [dropdownStyles, setDropdownStyles] = (0, react_1.useState)({});
45
+ const getLabelForValue = (value) => {
46
+ return optionScope.find((option) => option.value === value).label;
47
+ };
48
+ const handleOpen = () => {
49
+ if (!disabled) {
50
+ if (sourceRef.current) {
51
+ const buttonRect = sourceRef.current.getBoundingClientRect();
52
+ const positionStyle = {
53
+ top: buttonRect.bottom + window.scrollY,
54
+ width: buttonRect.width,
55
+ };
56
+ if (position === 'left') {
57
+ positionStyle.left = buttonRect.left + window.scrollX;
58
+ }
59
+ else if (position === 'right') {
60
+ positionStyle.right =
61
+ window.innerWidth -
62
+ (buttonRect.left + buttonRect.width + window.scrollX);
63
+ }
64
+ setDropdownStyles(positionStyle);
65
+ }
66
+ toogleOpen(!open);
67
+ }
68
+ };
69
+ const selectOption = (e, selectedValue) => {
70
+ e.stopPropagation();
71
+ handleSelect(name, selectedValue);
72
+ toogleOpen(false);
73
+ };
74
+ const addToScope = () => {
75
+ if (inputValue !== '') {
76
+ const isExist = optionScope.find((_item) => _item.label === inputValue || _item.value === inputValue);
77
+ if (!isExist) {
78
+ const newOptionsScope = [
79
+ { value: inputValue, label: inputValue },
80
+ ...optionScope,
81
+ ];
82
+ setOptionScope(newOptionsScope);
83
+ handleSelect(name, inputValue);
84
+ setInputValue("");
85
+ toogleOpen(false);
86
+ }
87
+ }
88
+ };
89
+ const updateNewOption = (name, value) => {
90
+ setInputValue(value);
91
+ };
92
+ (0, react_1.useEffect)(() => {
93
+ const handleClickOutside = (event) => {
94
+ if (ref.current && !ref.current.contains(event.target)) {
95
+ toogleOpen(false);
96
+ }
97
+ };
98
+ const handleKeyDown = (e) => {
99
+ if (e.key === 'Escape') {
100
+ close();
101
+ }
102
+ };
103
+ if (open) {
104
+ document.addEventListener('click', handleClickOutside, true);
105
+ document.addEventListener('keydown', handleKeyDown);
106
+ }
107
+ return () => {
108
+ document.removeEventListener('click', handleClickOutside, true);
109
+ document.removeEventListener('keydown', handleKeyDown);
110
+ };
111
+ }, [open]);
112
+ return (react_1.default.createElement(Aligment_1.Aligment, { align: labelPosition === 'top' ? 'flex-start' : 'center', direction: labelPosition === 'top' ? 'column' : 'row', wrap: 'nowrap', width: width },
113
+ label && (react_1.default.createElement(Input_1.InputLabelElement, { size: size, labelPosition: labelPosition }, label)),
114
+ readOnly ? (react_1.default.createElement(Input_1.InputReadOnlyElement, { inputSize: size }, value)) : (react_1.default.createElement(Dropdown_styles_1.DropdownElement, { onClick: () => handleOpen(), ref: sourceRef },
115
+ react_1.default.createElement(Dropdown_1.Field, { inputSize: size, disabled: disabled, width: width, active: open, error: error, rightPadding: true }, value ? getLabelForValue(value) : placeholder),
116
+ react_1.default.createElement(Input_1.EyeIconWrapper, { size: size },
117
+ react_1.default.createElement(Icons_1.Icon, { name: open ? 'arrow_drop_up' : 'arrow_drop_down', size: 24, iconColor: theme.inputDefaultTextColor, iconHoverColor: theme.inputDefaultTextColor, iconBgHoverColor: "transparent" })),
118
+ open &&
119
+ (0, react_dom_1.createPortal)(react_1.default.createElement(common_1.Panel, { style: dropdownStyles, ref: ref, size: size, fullWidth: true, zIndex: zIndex },
120
+ react_1.default.createElement(FillSelect_styles_1.InputArea, { ref: textRef, onClick: (e) => e.stopPropagation() },
121
+ react_1.default.createElement(Input_1.Input, { value: inputValue, handleChange: updateNewOption, name: 'newOption' }),
122
+ react_1.default.createElement(Icons_1.Icon, { name: 'add_circle', size: 24, onClick: addToScope })),
123
+ optionScope &&
124
+ optionScope.map((option) => (react_1.default.createElement(common_1.PanelOption, { key: option.value, active: option.value === value, onClick: (e) => selectOption(e, option.value) }, option.label)))), document.body),
125
+ error && errorMsg && react_1.default.createElement(Input_1.InputErrorMsg, null, errorMsg)))));
126
+ };
127
+ exports.FillSelect = FillSelect;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.InputArea = void 0;
7
+ const styled_components_1 = __importDefault(require("styled-components"));
8
+ const Theme_1 = require("../../Theme");
9
+ exports.InputArea = styled_components_1.default.div `
10
+ padding: ${Theme_1.Theme.padding.s} ${Theme_1.Theme.padding.m};
11
+ display:flex;
12
+ gap:0.5rem;
13
+ `;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./FillSelect"), exports);
@@ -10,6 +10,7 @@ const File_1 = require("../File");
10
10
  const FormElements_1 = require("./FormElements");
11
11
  const Dropdown_1 = require("../Dropdown");
12
12
  const DatePicker_1 = require("../DatePicker");
13
+ const FillSelect_1 = require("../FillSelect");
13
14
  const Form = ({ formData, size = 'medium', read }) => {
14
15
  const onChangeHandler = (name, value) => {
15
16
  formData.action(name, value);
@@ -50,6 +51,8 @@ const Form = ({ formData, size = 'medium', read }) => {
50
51
  return (react_1.default.createElement(Input_1.Input, { type: "increase", label: item.label, value: item.value, name: item.name, size: size, handleChange: onIntChangeHandler, min: item.min, max: item.max, step: item.step, readOnly: read, autoFocus: item.autofocus, handleSubmit: item.submit, error: item.error, placeholder: item.placeholder }));
51
52
  case 'select':
52
53
  return (react_1.default.createElement(Dropdown_1.Dropdown, { options: item.options, handleSelect: onChangeHandler, name: item.name, value: item.value, size: size, label: item.label, position: item.position, zIndex: item.zIndex, readOnly: read, error: item.error, placeholder: item.placeholder }));
54
+ case 'fill':
55
+ return (react_1.default.createElement(FillSelect_1.FillSelect, { options: item.options, handleSelect: onChangeHandler, name: item.name, value: item.value, size: size, label: item.label, position: item.position, zIndex: item.zIndex, readOnly: read, error: item.error, placeholder: item.placeholder }));
53
56
  case 'file':
54
57
  return (react_1.default.createElement(File_1.File, { label: item.label, fileValue: item.value, name: item.name, size: size, handleChange: onFileHandler, readOnly: read, subLabel: item.subLabel, error: item.error }));
55
58
  case 'date':
package/dist/cjs/index.js CHANGED
@@ -27,6 +27,7 @@ __exportStar(require("./components/ElementHeader"), exports);
27
27
  __exportStar(require("./components/DropdownMenu"), exports);
28
28
  __exportStar(require("./components/Form"), exports);
29
29
  __exportStar(require("./components/File"), exports);
30
+ __exportStar(require("./components/FillSelect"), exports);
30
31
  __exportStar(require("./components/Filters"), exports);
31
32
  __exportStar(require("./components/Icons"), exports);
32
33
  __exportStar(require("./components/Input"), exports);
@@ -0,0 +1,100 @@
1
+ import React, { useState, useEffect, useRef } from 'react';
2
+ import { Aligment } from '../Aligment';
3
+ import { InputArea } from './FillSelect.styles';
4
+ import { EyeIconWrapper, Input, InputErrorMsg, InputLabelElement, InputReadOnlyElement, } from '../Input';
5
+ import { Panel, PanelOption } from '../common';
6
+ import { createPortal } from 'react-dom';
7
+ import { Icon } from '../Icons';
8
+ import { mainTheme } from '../../Theme';
9
+ import { Field } from '../Dropdown';
10
+ import { DropdownElement } from '../Dropdown/Dropdown.styles';
11
+ export const FillSelect = ({ size = 'medium', label, labelPosition = 'top', disabled = false, error, errorMsg, width, options, value, placeholder = 'Please select', name, handleSelect, position = 'left', zIndex, readOnly = false, theme = mainTheme, }) => {
12
+ const [open, toogleOpen] = useState(false);
13
+ const [optionScope, setOptionScope] = useState(options);
14
+ const [inputValue, setInputValue] = useState('');
15
+ const ref = useRef(null);
16
+ const sourceRef = useRef(null);
17
+ const textRef = useRef(null);
18
+ const [dropdownStyles, setDropdownStyles] = useState({});
19
+ const getLabelForValue = (value) => {
20
+ return optionScope.find((option) => option.value === value).label;
21
+ };
22
+ const handleOpen = () => {
23
+ if (!disabled) {
24
+ if (sourceRef.current) {
25
+ const buttonRect = sourceRef.current.getBoundingClientRect();
26
+ const positionStyle = {
27
+ top: buttonRect.bottom + window.scrollY,
28
+ width: buttonRect.width,
29
+ };
30
+ if (position === 'left') {
31
+ positionStyle.left = buttonRect.left + window.scrollX;
32
+ }
33
+ else if (position === 'right') {
34
+ positionStyle.right =
35
+ window.innerWidth -
36
+ (buttonRect.left + buttonRect.width + window.scrollX);
37
+ }
38
+ setDropdownStyles(positionStyle);
39
+ }
40
+ toogleOpen(!open);
41
+ }
42
+ };
43
+ const selectOption = (e, selectedValue) => {
44
+ e.stopPropagation();
45
+ handleSelect(name, selectedValue);
46
+ toogleOpen(false);
47
+ };
48
+ const addToScope = () => {
49
+ if (inputValue !== '') {
50
+ const isExist = optionScope.find((_item) => _item.label === inputValue || _item.value === inputValue);
51
+ if (!isExist) {
52
+ const newOptionsScope = [
53
+ { value: inputValue, label: inputValue },
54
+ ...optionScope,
55
+ ];
56
+ setOptionScope(newOptionsScope);
57
+ handleSelect(name, inputValue);
58
+ setInputValue("");
59
+ toogleOpen(false);
60
+ }
61
+ }
62
+ };
63
+ const updateNewOption = (name, value) => {
64
+ setInputValue(value);
65
+ };
66
+ useEffect(() => {
67
+ const handleClickOutside = (event) => {
68
+ if (ref.current && !ref.current.contains(event.target)) {
69
+ toogleOpen(false);
70
+ }
71
+ };
72
+ const handleKeyDown = (e) => {
73
+ if (e.key === 'Escape') {
74
+ close();
75
+ }
76
+ };
77
+ if (open) {
78
+ document.addEventListener('click', handleClickOutside, true);
79
+ document.addEventListener('keydown', handleKeyDown);
80
+ }
81
+ return () => {
82
+ document.removeEventListener('click', handleClickOutside, true);
83
+ document.removeEventListener('keydown', handleKeyDown);
84
+ };
85
+ }, [open]);
86
+ return (React.createElement(Aligment, { align: labelPosition === 'top' ? 'flex-start' : 'center', direction: labelPosition === 'top' ? 'column' : 'row', wrap: 'nowrap', width: width },
87
+ label && (React.createElement(InputLabelElement, { size: size, labelPosition: labelPosition }, label)),
88
+ readOnly ? (React.createElement(InputReadOnlyElement, { inputSize: size }, value)) : (React.createElement(DropdownElement, { onClick: () => handleOpen(), ref: sourceRef },
89
+ React.createElement(Field, { inputSize: size, disabled: disabled, width: width, active: open, error: error, rightPadding: true }, value ? getLabelForValue(value) : placeholder),
90
+ React.createElement(EyeIconWrapper, { size: size },
91
+ React.createElement(Icon, { name: open ? 'arrow_drop_up' : 'arrow_drop_down', size: 24, iconColor: theme.inputDefaultTextColor, iconHoverColor: theme.inputDefaultTextColor, iconBgHoverColor: "transparent" })),
92
+ open &&
93
+ createPortal(React.createElement(Panel, { style: dropdownStyles, ref: ref, size: size, fullWidth: true, zIndex: zIndex },
94
+ React.createElement(InputArea, { ref: textRef, onClick: (e) => e.stopPropagation() },
95
+ React.createElement(Input, { value: inputValue, handleChange: updateNewOption, name: 'newOption' }),
96
+ React.createElement(Icon, { name: 'add_circle', size: 24, onClick: addToScope })),
97
+ optionScope &&
98
+ optionScope.map((option) => (React.createElement(PanelOption, { key: option.value, active: option.value === value, onClick: (e) => selectOption(e, option.value) }, option.label)))), document.body),
99
+ error && errorMsg && React.createElement(InputErrorMsg, null, errorMsg)))));
100
+ };
@@ -0,0 +1,7 @@
1
+ import styled from "styled-components";
2
+ import { Theme } from "../../Theme";
3
+ export const InputArea = styled.div `
4
+ padding: ${Theme.padding.s} ${Theme.padding.m};
5
+ display:flex;
6
+ gap:0.5rem;
7
+ `;
@@ -0,0 +1 @@
1
+ export * from './FillSelect';
@@ -4,6 +4,7 @@ import { File } from '../File';
4
4
  import { FormRow, FormSubRow, FormWrapper } from './FormElements';
5
5
  import { Dropdown } from '../Dropdown';
6
6
  import { DatePicker } from '../DatePicker';
7
+ import { FillSelect } from '../FillSelect';
7
8
  export const Form = ({ formData, size = 'medium', read }) => {
8
9
  const onChangeHandler = (name, value) => {
9
10
  formData.action(name, value);
@@ -44,6 +45,8 @@ export const Form = ({ formData, size = 'medium', read }) => {
44
45
  return (React.createElement(Input, { type: "increase", label: item.label, value: item.value, name: item.name, size: size, handleChange: onIntChangeHandler, min: item.min, max: item.max, step: item.step, readOnly: read, autoFocus: item.autofocus, handleSubmit: item.submit, error: item.error, placeholder: item.placeholder }));
45
46
  case 'select':
46
47
  return (React.createElement(Dropdown, { options: item.options, handleSelect: onChangeHandler, name: item.name, value: item.value, size: size, label: item.label, position: item.position, zIndex: item.zIndex, readOnly: read, error: item.error, placeholder: item.placeholder }));
48
+ case 'fill':
49
+ return (React.createElement(FillSelect, { options: item.options, handleSelect: onChangeHandler, name: item.name, value: item.value, size: size, label: item.label, position: item.position, zIndex: item.zIndex, readOnly: read, error: item.error, placeholder: item.placeholder }));
47
50
  case 'file':
48
51
  return (React.createElement(File, { label: item.label, fileValue: item.value, name: item.name, size: size, handleChange: onFileHandler, readOnly: read, subLabel: item.subLabel, error: item.error }));
49
52
  case 'date':
package/dist/esm/index.js CHANGED
@@ -11,6 +11,7 @@ export * from './components/ElementHeader';
11
11
  export * from './components/DropdownMenu';
12
12
  export * from './components/Form';
13
13
  export * from './components/File';
14
+ export * from './components/FillSelect';
14
15
  export * from './components/Filters';
15
16
  export * from './components/Icons';
16
17
  export * from "./components/Input";
@@ -0,0 +1,10 @@
1
+ import { FC } from 'react';
2
+ import { IFormElement, IOption } from '../../types';
3
+ export interface IFillSelectProps extends IFormElement {
4
+ options: IOption[];
5
+ handleSelect: (name: string, value: string | number) => void;
6
+ position?: string;
7
+ zIndex?: number;
8
+ theme?: any;
9
+ }
10
+ export declare const FillSelect: FC<IFillSelectProps>;
@@ -0,0 +1 @@
1
+ export declare const InputArea: import("styled-components").StyledComponent<"div", any, {}, never>;
@@ -0,0 +1 @@
1
+ export * from './FillSelect';
@@ -11,6 +11,7 @@ export * from './components/ElementHeader';
11
11
  export * from './components/DropdownMenu';
12
12
  export * from './components/Form';
13
13
  export * from './components/File';
14
+ export * from './components/FillSelect';
14
15
  export * from './components/Filters';
15
16
  export * from './components/Icons';
16
17
  export * from "./components/Input";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "venice-ui",
3
- "version": "2.1.11",
3
+ "version": "2.1.12",
4
4
  "description": "Component library",
5
5
  "main": "index.js",
6
6
  "module": "./dist/esm/index.js",