albinasoft-ui-package 1.0.16 → 1.0.18
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/dist/assets/css/dark.css +2145 -0
- package/dist/assets/css/main.css +26263 -0
- package/dist/components/CustomInput.d.ts +4 -1
- package/dist/components/CustomInput.js +6 -5
- package/dist/components/CustomTreeView.d.ts +19 -5
- package/dist/components/CustomTreeView.js +76 -28
- package/package.json +1 -1
@@ -10,7 +10,7 @@ declare enum InputType {
|
|
10
10
|
interface CustomInputProps {
|
11
11
|
id?: string;
|
12
12
|
name?: string;
|
13
|
-
label
|
13
|
+
label?: string;
|
14
14
|
inputType?: InputType;
|
15
15
|
value: string;
|
16
16
|
placeholder?: string;
|
@@ -21,11 +21,14 @@ interface CustomInputProps {
|
|
21
21
|
disabled?: boolean;
|
22
22
|
readOnly?: boolean;
|
23
23
|
buttonIcon?: React.ReactNode;
|
24
|
+
buttonClass?: string;
|
24
25
|
buttonTooltip?: string;
|
25
26
|
description?: string | null;
|
26
27
|
tooltip?: string;
|
27
28
|
style?: React.CSSProperties;
|
29
|
+
inputClass?: string;
|
28
30
|
className?: string;
|
31
|
+
valid?: boolean;
|
29
32
|
buttonOnClick?: () => void;
|
30
33
|
onChange: (e: React.ChangeEvent<HTMLInputElement>) => void;
|
31
34
|
}
|
@@ -38,9 +38,10 @@ var InputType;
|
|
38
38
|
})(InputType || (InputType = {}));
|
39
39
|
exports.InputType = InputType;
|
40
40
|
var CustomInput = function (_a) {
|
41
|
-
var id = _a.id, name = _a.name, label = _a.label, _b = _a.inputType, inputType = _b === void 0 ? InputType.TEXT : _b, value = _a.value, placeholder = _a.placeholder, _c = _a.required, required = _c === void 0 ? false : _c, errorMessage = _a.errorMessage, _d = _a.conditionalErrorVisible, conditionalErrorVisible = _d === void 0 ? false : _d, conditionalErrorMessage = _a.conditionalErrorMessage, _e = _a.disabled, disabled = _e === void 0 ? false : _e, _f = _a.readOnly, readOnly = _f === void 0 ? false : _f, buttonIcon = _a.buttonIcon, buttonTooltip = _a.buttonTooltip, description = _a.description, tooltip = _a.tooltip, style = _a.style, className = _a.className, buttonOnClick = _a.buttonOnClick, onChange = _a.onChange;
|
42
|
-
var
|
41
|
+
var id = _a.id, name = _a.name, label = _a.label, _b = _a.inputType, inputType = _b === void 0 ? InputType.TEXT : _b, value = _a.value, placeholder = _a.placeholder, _c = _a.required, required = _c === void 0 ? false : _c, errorMessage = _a.errorMessage, _d = _a.conditionalErrorVisible, conditionalErrorVisible = _d === void 0 ? false : _d, conditionalErrorMessage = _a.conditionalErrorMessage, _e = _a.disabled, disabled = _e === void 0 ? false : _e, _f = _a.readOnly, readOnly = _f === void 0 ? false : _f, buttonIcon = _a.buttonIcon, buttonClass = _a.buttonClass, buttonTooltip = _a.buttonTooltip, description = _a.description, tooltip = _a.tooltip, style = _a.style, className = _a.className, _g = _a.valid, valid = _g === void 0 ? undefined : _g, buttonOnClick = _a.buttonOnClick, onChange = _a.onChange;
|
42
|
+
var _h = (0, react_1.useState)(false), showPassword = _h[0], setShowPassword = _h[1];
|
43
43
|
var handleType = inputType === InputType.PASSWORD && showPassword ? InputType.TEXT : inputType;
|
44
|
+
var inputClass = "form-control ".concat(valid === true ? 'is-valid' : '', " ").concat(valid === false ? 'is-invalid' : '');
|
44
45
|
var togglePasswordVisibility = function () {
|
45
46
|
setShowPassword(function (prev) { return !prev; });
|
46
47
|
};
|
@@ -49,11 +50,11 @@ var CustomInput = function (_a) {
|
|
49
50
|
react_1.default.createElement("label", { htmlFor: id, className: "form-label" }, label),
|
50
51
|
react_1.default.createElement("div", { className: "input-group position-relative" },
|
51
52
|
tooltip ? (react_1.default.createElement(react_bootstrap_1.OverlayTrigger, { placement: "bottom", overlay: react_1.default.createElement(react_bootstrap_1.Tooltip, { id: "tooltip-".concat(tooltip) }, tooltip) },
|
52
|
-
react_1.default.createElement("input", { id: id, name: name, type: handleType, value: value, placeholder: placeholder, onChange: onChange, className:
|
53
|
-
}))) : (react_1.default.createElement("input", { id: id, name: name, type: handleType, value: value, placeholder: placeholder, onChange: onChange, className:
|
53
|
+
react_1.default.createElement("input", { id: id, name: name, type: handleType, value: value, placeholder: placeholder, onChange: onChange, className: inputClass, style: style, required: required, disabled: disabled, readOnly: readOnly, autoComplete: "new-password" // Modern tarayıcılarda autocomplete autofill engellemek için
|
54
|
+
}))) : (react_1.default.createElement("input", { id: id, name: name, type: handleType, value: value, placeholder: placeholder, onChange: onChange, className: inputClass, style: style, required: required, disabled: disabled, readOnly: readOnly, autoComplete: "new-password" // Modern tarayıcılarda autocomplete autofill engellemek için
|
54
55
|
})),
|
55
56
|
inputType === InputType.PASSWORD && (react_1.default.createElement("button", { type: "button", onClick: togglePasswordVisibility, className: "btn btn-outline-secondary", title: showPassword ? "Parolayı Gizle" : "Parolayı Göster" }, showPassword ? react_1.default.createElement(fa_1.FaEyeSlash, null) : react_1.default.createElement(fa_1.FaEye, null))),
|
56
|
-
buttonIcon && buttonOnClick && (react_1.default.createElement("button", { type: "button", onClick: buttonOnClick, className: "btn btn-outline-secondary", title: buttonTooltip || "" }, buttonIcon)),
|
57
|
+
buttonIcon && buttonOnClick && (react_1.default.createElement("button", { type: "button", onClick: buttonOnClick, className: buttonClass || "btn btn-outline-secondary", title: buttonTooltip || "" }, buttonIcon)),
|
57
58
|
required && (react_1.default.createElement("div", { className: "invalid-feedback text-danger" },
|
58
59
|
react_1.default.createElement("div", { className: "description-icon" },
|
59
60
|
react_1.default.createElement(fa_1.FaExclamationTriangle, null)),
|
@@ -1,15 +1,29 @@
|
|
1
1
|
import React from 'react';
|
2
2
|
import 'react-checkbox-tree/lib/react-checkbox-tree.css';
|
3
|
+
export interface TreeNode {
|
4
|
+
label: string;
|
5
|
+
value: string;
|
6
|
+
children?: TreeNode[];
|
7
|
+
}
|
3
8
|
interface CustomTreeViewProps {
|
9
|
+
id?: string;
|
10
|
+
name?: string;
|
4
11
|
label?: string;
|
5
12
|
value: string;
|
6
13
|
treeData: TreeNode[];
|
14
|
+
placeholder?: string;
|
15
|
+
required?: boolean;
|
16
|
+
errorMessage?: string;
|
17
|
+
conditionalErrorVisible?: boolean;
|
18
|
+
conditionalErrorMessage?: string;
|
19
|
+
disabled?: boolean;
|
20
|
+
readOnly?: boolean;
|
21
|
+
description?: string | null;
|
22
|
+
tooltip?: string;
|
23
|
+
style?: React.CSSProperties;
|
24
|
+
className?: string;
|
7
25
|
onChange: (selected: string) => void;
|
8
|
-
|
9
|
-
export interface TreeNode {
|
10
|
-
label: string;
|
11
|
-
value: string;
|
12
|
-
children?: TreeNode[];
|
26
|
+
hasTriedToSubmit?: boolean;
|
13
27
|
}
|
14
28
|
declare const CustomTreeView: React.FC<CustomTreeViewProps>;
|
15
29
|
export default CustomTreeView;
|
@@ -51,18 +51,19 @@ var react_checkbox_tree_1 = __importDefault(require("react-checkbox-tree"));
|
|
51
51
|
require("react-checkbox-tree/lib/react-checkbox-tree.css");
|
52
52
|
var fa_1 = require("react-icons/fa");
|
53
53
|
var CustomInput_1 = __importStar(require("./CustomInput"));
|
54
|
+
var react_bootstrap_1 = require("react-bootstrap");
|
54
55
|
var CustomTreeView = function (_a) {
|
55
|
-
var label = _a.label, value = _a.value, treeData = _a.treeData, onChange = _a.onChange;
|
56
|
-
var
|
57
|
-
var
|
58
|
-
var
|
59
|
-
var
|
60
|
-
var
|
61
|
-
|
56
|
+
var id = _a.id, name = _a.name, label = _a.label, value = _a.value, treeData = _a.treeData, _b = _a.placeholder, placeholder = _b === void 0 ? "Ağaç Yapısını Filtrele..." : _b, _c = _a.required, required = _c === void 0 ? false : _c, errorMessage = _a.errorMessage, _d = _a.conditionalErrorVisible, conditionalErrorVisible = _d === void 0 ? false : _d, conditionalErrorMessage = _a.conditionalErrorMessage, _e = _a.disabled, disabled = _e === void 0 ? false : _e, _f = _a.readOnly, readOnly = _f === void 0 ? false : _f, description = _a.description, tooltip = _a.tooltip, style = _a.style, className = _a.className, onChange = _a.onChange, _g = _a.hasTriedToSubmit, hasTriedToSubmit = _g === void 0 ? false : _g;
|
57
|
+
var _h = (0, react_1.useState)(value ? [value] : []), checked = _h[0], setChecked = _h[1];
|
58
|
+
var _j = (0, react_1.useState)([]), expanded = _j[0], setExpanded = _j[1];
|
59
|
+
var _k = (0, react_1.useState)(''), filterTerm = _k[0], setFilterTerm = _k[1];
|
60
|
+
var _l = (0, react_1.useState)(treeData), filteredTreeData = _l[0], setFilteredTreeData = _l[1];
|
61
|
+
var _m = (0, react_1.useState)([]), selectedPath = _m[0], setSelectedPath = _m[1];
|
62
|
+
var _o = (0, react_1.useState)(false), isReadOnly = _o[0], setReadOnly = _o[1];
|
63
|
+
var _p = (0, react_1.useState)(false), isValid = _p[0], setIsValid = _p[1];
|
62
64
|
var markLeafCheckboxOnly = function (nodes) {
|
63
65
|
return nodes.map(function (node) { return (__assign(__assign({}, node), { showCheckbox: !(Array.isArray(node.children) && node.children.length > 0), children: node.children ? markLeafCheckboxOnly(node.children) : undefined })); });
|
64
66
|
};
|
65
|
-
// 🚀 Parent Path'i Bulma (recursive)
|
66
67
|
var findParentPath = function (nodes, targetValue, path) {
|
67
68
|
if (path === void 0) { path = []; }
|
68
69
|
for (var _i = 0, nodes_1 = nodes; _i < nodes_1.length; _i++) {
|
@@ -79,6 +80,19 @@ var CustomTreeView = function (_a) {
|
|
79
80
|
}
|
80
81
|
return null;
|
81
82
|
};
|
83
|
+
var findLeafLabelByValue = function (nodes, value) {
|
84
|
+
for (var _i = 0, nodes_2 = nodes; _i < nodes_2.length; _i++) {
|
85
|
+
var node = nodes_2[_i];
|
86
|
+
if (node.value === value)
|
87
|
+
return node.label;
|
88
|
+
if (node.children) {
|
89
|
+
var result = findLeafLabelByValue(node.children, value);
|
90
|
+
if (result)
|
91
|
+
return result;
|
92
|
+
}
|
93
|
+
}
|
94
|
+
return null;
|
95
|
+
};
|
82
96
|
// 🚀 Filtreleme fonksiyonu (path'leri de genişletiyoruz)
|
83
97
|
var filterTreeData = function (nodes, searchTerm) {
|
84
98
|
var pathsToExpand = [];
|
@@ -94,19 +108,17 @@ var CustomTreeView = function (_a) {
|
|
94
108
|
}).filter(Boolean);
|
95
109
|
return { filteredNodes: filteredNodes, pathsToExpand: pathsToExpand };
|
96
110
|
};
|
97
|
-
// 🚀 Filtreleme işlemi
|
98
111
|
(0, react_1.useEffect)(function () {
|
99
112
|
if (filterTerm.trim() === '') {
|
100
113
|
setFilteredTreeData(treeData);
|
101
|
-
setExpanded(__spreadArray([], selectedPath, true));
|
114
|
+
setExpanded(__spreadArray([], selectedPath, true));
|
102
115
|
}
|
103
116
|
else {
|
104
117
|
var _a = filterTreeData(treeData, filterTerm), filteredNodes = _a.filteredNodes, pathsToExpand = _a.pathsToExpand;
|
105
118
|
setFilteredTreeData(filteredNodes);
|
106
|
-
setExpanded(Array.from(new Set(__spreadArray(__spreadArray([], pathsToExpand, true), selectedPath, true))));
|
119
|
+
setExpanded(Array.from(new Set(__spreadArray(__spreadArray([], pathsToExpand, true), selectedPath, true))));
|
107
120
|
}
|
108
121
|
}, [filterTerm, treeData, selectedPath]);
|
109
|
-
// 🚀 Kullanıcı bir leaf seçtiğinde, o leaf'in parent'larını genişlet
|
110
122
|
var handleCheck = function (checkedNodes) {
|
111
123
|
var newlySelected = checkedNodes.find(function (node) { return !checked.includes(node); });
|
112
124
|
var selectedLeaf = newlySelected || '';
|
@@ -114,25 +126,61 @@ var CustomTreeView = function (_a) {
|
|
114
126
|
if (selectedLeaf) {
|
115
127
|
var parentPath = findParentPath(treeData, selectedLeaf);
|
116
128
|
if (parentPath) {
|
117
|
-
setSelectedPath(parentPath);
|
118
|
-
setExpanded(parentPath);
|
129
|
+
setSelectedPath(parentPath);
|
130
|
+
setExpanded(parentPath);
|
131
|
+
}
|
132
|
+
var selectedLabel = findLeafLabelByValue(treeData, selectedLeaf);
|
133
|
+
if (selectedLabel) {
|
134
|
+
setFilterTerm(selectedLabel);
|
135
|
+
setReadOnly(true);
|
119
136
|
}
|
120
137
|
}
|
121
|
-
setFilterTerm(''); // 🔥 Arama kutusunu temizle
|
122
138
|
onChange(selectedLeaf);
|
123
139
|
};
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
140
|
+
var handleReset = function () {
|
141
|
+
setFilterTerm('');
|
142
|
+
setChecked([]);
|
143
|
+
setExpanded([]);
|
144
|
+
setReadOnly(false);
|
145
|
+
};
|
146
|
+
// 🚀 Sayfa yüklendiğinde handleReset'i bir kere çalıştır
|
147
|
+
(0, react_1.useEffect)(function () {
|
148
|
+
handleCheck(['leafCheck']);
|
149
|
+
handleReset();
|
150
|
+
}, []);
|
151
|
+
// 🚀 Validasyon Kontrolü
|
152
|
+
(0, react_1.useEffect)(function () {
|
153
|
+
// Kullanıcı bir leaf seçmiş VE input boş değilse valid = true
|
154
|
+
setIsValid(checked.length > 0 && filterTerm.trim().length > 0);
|
155
|
+
}, [checked, filterTerm]);
|
156
|
+
return (react_1.default.createElement("div", { className: className },
|
157
|
+
react_1.default.createElement("div", { className: "form-group" },
|
158
|
+
tooltip ? (react_1.default.createElement(react_bootstrap_1.OverlayTrigger, { placement: "bottom", overlay: react_1.default.createElement(react_bootstrap_1.Tooltip, { id: "tooltip-".concat(tooltip) }, tooltip) },
|
159
|
+
react_1.default.createElement(CustomInput_1.default, { id: id && "input-".concat(id), name: name && "input-".concat(name), label: label && label, value: filterTerm, disabled: disabled, readOnly: isReadOnly, required: required, valid: hasTriedToSubmit ? isValid : undefined, buttonIcon: react_1.default.createElement(fa_1.FaTimes, null), buttonClass: 'btn btn-danger bg-soft-danger', buttonOnClick: handleReset, inputType: CustomInput_1.InputType.TEXT, placeholder: placeholder, style: style, onChange: function (e) { return setFilterTerm(e.target.value); } }))) : (react_1.default.createElement(CustomInput_1.default, { id: id && "input-".concat(id), name: name && "input-".concat(name), label: label && label, value: filterTerm, disabled: disabled, readOnly: isReadOnly, required: required, valid: hasTriedToSubmit ? isValid : undefined, buttonIcon: react_1.default.createElement(fa_1.FaTimes, null), buttonClass: 'btn btn-danger bg-soft-danger', buttonOnClick: handleReset, inputType: CustomInput_1.InputType.TEXT, placeholder: placeholder, style: style, onChange: function (e) { return setFilterTerm(e.target.value); } })),
|
160
|
+
react_1.default.createElement(react_checkbox_tree_1.default, { id: id, name: name, disabled: disabled, nodes: markLeafCheckboxOnly(filteredTreeData), checked: checked, expanded: expanded, onCheck: handleCheck, onExpand: setExpanded, icons: {
|
161
|
+
check: react_1.default.createElement(fa_1.FaCheckSquare, { color: "#4caf50" }),
|
162
|
+
uncheck: react_1.default.createElement(fa_1.FaSquare, { color: "currentColor" }),
|
163
|
+
halfCheck: react_1.default.createElement(fa_1.FaMinusSquare, { color: "#ff9800" }),
|
164
|
+
expandClose: react_1.default.createElement(fa_1.FaChevronRight, { color: "#3f51b5" }),
|
165
|
+
expandOpen: react_1.default.createElement(fa_1.FaChevronDown, { color: "#3f51b5" }),
|
166
|
+
parentClose: react_1.default.createElement(fa_1.FaFolder, { color: "#ff9800" }),
|
167
|
+
parentOpen: react_1.default.createElement(fa_1.FaFolderOpen, { color: "#ff9800" }),
|
168
|
+
leaf: react_1.default.createElement(fa_1.FaFile, { color: "#607d8b" }),
|
169
|
+
} }),
|
170
|
+
required && (react_1.default.createElement("div", { className: "invalid-feedback text-danger" },
|
171
|
+
react_1.default.createElement("div", { className: "description-icon" },
|
172
|
+
react_1.default.createElement(fa_1.FaExclamationTriangle, null)),
|
173
|
+
react_1.default.createElement("div", { className: "description-text" },
|
174
|
+
react_1.default.createElement("span", null, errorMessage || 'Bu alan boş bırakılamaz.')))),
|
175
|
+
conditionalErrorVisible && (react_1.default.createElement("div", { className: "conditional-error-message text-warning" },
|
176
|
+
react_1.default.createElement("div", { className: "description-icon" },
|
177
|
+
react_1.default.createElement(fa_1.FaExclamationTriangle, null)),
|
178
|
+
react_1.default.createElement("div", { className: "description-text" },
|
179
|
+
react_1.default.createElement("span", null, conditionalErrorMessage)))),
|
180
|
+
description && (react_1.default.createElement("div", { className: "form-description text-secondary" },
|
181
|
+
react_1.default.createElement("div", { className: "description-icon" },
|
182
|
+
react_1.default.createElement(fa_1.FaInfoCircle, null)),
|
183
|
+
react_1.default.createElement("div", { className: "description-text" },
|
184
|
+
react_1.default.createElement("span", null, description)))))));
|
137
185
|
};
|
138
186
|
exports.default = CustomTreeView;
|