albinasoft-ui-package 1.1.43 → 1.1.44
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,84 @@
|
|
1
|
+
.form-control-unreq {
|
2
|
+
display: block;
|
3
|
+
width: 100%;
|
4
|
+
padding: .5rem 1rem;
|
5
|
+
font-size: 1rem;
|
6
|
+
font-weight: 400;
|
7
|
+
line-height: 1.5;
|
8
|
+
|
9
|
+
background-color: #fff;
|
10
|
+
-webkit-background-clip: padding-box;
|
11
|
+
background-clip: padding-box;
|
12
|
+
border: 1px solid #131313;
|
13
|
+
-webkit-appearance: none;
|
14
|
+
-moz-appearance: none;
|
15
|
+
appearance: none;
|
16
|
+
-webkit-border-radius: .25rem;
|
17
|
+
border-radius: .25rem;
|
18
|
+
-webkit-box-shadow: 0 0 0 0;
|
19
|
+
box-shadow: 0 0 0 0;
|
20
|
+
-webkit-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, -webkit-box-shadow .15s ease-in-out;
|
21
|
+
transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, -webkit-box-shadow .15s ease-in-out;
|
22
|
+
-o-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out;
|
23
|
+
transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out;
|
24
|
+
transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out, -webkit-box-shadow .15s ease-in-out;
|
25
|
+
|
26
|
+
all: unset;
|
27
|
+
width: 100%;
|
28
|
+
padding: 0.375rem 0.75rem;
|
29
|
+
border: 1px solid #ccc;
|
30
|
+
border-radius: 0.25rem;
|
31
|
+
}
|
32
|
+
|
33
|
+
@media(prefers-reduced-motion: reduce) {
|
34
|
+
.form-control-unreq {
|
35
|
+
-webkit-transition: none;
|
36
|
+
-o-transition: none;
|
37
|
+
transition: none
|
38
|
+
}
|
39
|
+
}
|
40
|
+
|
41
|
+
.dark .form-control-unreq {
|
42
|
+
color: #A2A4A9;
|
43
|
+
background-color: #222738;
|
44
|
+
border-color: #30384f;
|
45
|
+
border: 1px solid rgba(255, 255, 255, .1);
|
46
|
+
}
|
47
|
+
|
48
|
+
.dark .form-control-unreq::placeholder {
|
49
|
+
color: #6c757d; /* Lighter shade to make it visible */
|
50
|
+
opacity: 1; /* Ensure the placeholder color is solid */
|
51
|
+
}
|
52
|
+
|
53
|
+
|
54
|
+
.was-validated .form-control-unreq:valid:focus,
|
55
|
+
.form-control-unreq.is-valid:focus {
|
56
|
+
border-color: #1aa053;
|
57
|
+
-webkit-box-shadow: 0 0 0rem 0rem rgba(26, 160, 83, .15);
|
58
|
+
box-shadow: 0 0 0rem 0rem rgba(26, 160, 83, .15)
|
59
|
+
}
|
60
|
+
|
61
|
+
.was-validated textarea.form-control-unreq:valid,
|
62
|
+
textarea.form-control-unreq.is-valid {
|
63
|
+
padding-right: -webkit-calc(1.5em + 1rem);
|
64
|
+
padding-right: calc(1.5em + 1rem);
|
65
|
+
background-position: top -webkit-calc(0.375em + 0.25rem) right -webkit-calc(0.375em + 0.25rem);
|
66
|
+
background-position: top calc(0.375em + 0.25rem) right calc(0.375em + 0.25rem)
|
67
|
+
}
|
68
|
+
|
69
|
+
|
70
|
+
.treeview-input-group {
|
71
|
+
display: flex;
|
72
|
+
gap: 0.5rem;
|
73
|
+
align-items: center;
|
74
|
+
}
|
75
|
+
|
76
|
+
.treeview-input-group input {
|
77
|
+
flex-grow: 1;
|
78
|
+
min-width: 0; /* Overflow kontrolü */
|
79
|
+
}
|
80
|
+
|
81
|
+
.treeview-input-group button {
|
82
|
+
white-space: nowrap;
|
83
|
+
}
|
84
|
+
|
@@ -123,7 +123,7 @@ var CustomForm = function (_a) {
|
|
123
123
|
var _g = (0, react_1.useState)(false), submitted = _g[0], setSubmitted = _g[1];
|
124
124
|
var _h = (0, react_1.useState)(false), isUploading = _h[0], setIsUploading = _h[1];
|
125
125
|
var handleConfirm = function (e) { return __awaiter(void 0, void 0, void 0, function () {
|
126
|
-
var form, customSelectValid, isValid, formValues_1, error_1;
|
126
|
+
var form, customSelectValid, customTreeViewValid, isValid, formValues_1, error_1;
|
127
127
|
return __generator(this, function (_a) {
|
128
128
|
switch (_a.label) {
|
129
129
|
case 0:
|
@@ -134,16 +134,28 @@ var CustomForm = function (_a) {
|
|
134
134
|
return [2 /*return*/];
|
135
135
|
customSelectValid = true;
|
136
136
|
elements.forEach(function (element) {
|
137
|
-
if (element.type === ElementType.SELECT &&
|
137
|
+
if (element.type === ElementType.SELECT &&
|
138
|
+
element.required) {
|
138
139
|
var selectElement = element;
|
139
140
|
// Eğer değer boş (string) veya boş array ise geçersiz kabul edin
|
140
|
-
if ((Array.isArray(selectElement.value) &&
|
141
|
+
if ((Array.isArray(selectElement.value) &&
|
142
|
+
selectElement.value.length === 0) ||
|
141
143
|
(!Array.isArray(selectElement.value) && !selectElement.value)) {
|
142
144
|
customSelectValid = false;
|
143
145
|
}
|
144
146
|
}
|
145
147
|
});
|
146
|
-
|
148
|
+
customTreeViewValid = true;
|
149
|
+
elements.forEach(function (element) {
|
150
|
+
if (element.type === ElementType.TREEVIEW && element.required) {
|
151
|
+
var val = element.value;
|
152
|
+
var arr = Array.isArray(val) ? val : val ? [val] : [];
|
153
|
+
if (arr.length === 0) {
|
154
|
+
customTreeViewValid = false;
|
155
|
+
}
|
156
|
+
}
|
157
|
+
});
|
158
|
+
isValid = form.checkValidity() && customSelectValid && customTreeViewValid;
|
147
159
|
if (!isValid) return [3 /*break*/, 6];
|
148
160
|
setIsLoading(true);
|
149
161
|
_a.label = 1;
|
@@ -227,7 +239,11 @@ var CustomForm = function (_a) {
|
|
227
239
|
var colId = _a[0], innerRows = _a[1];
|
228
240
|
return (react_1.default.createElement("div", { className: "col", key: "col-".concat(rowId, "-").concat(colId) }, Object.entries(innerRows).map(function (_a) {
|
229
241
|
var innerRowId = _a[0], elements = _a[1];
|
230
|
-
return (react_1.default.createElement("div", { className: "row ".concat(innerRowCustomClass), key: "inner-row-".concat(rowId, "-").concat(colId, "-").concat(innerRowId) }, elements.map(function (element) { return (react_1.default.createElement("div", { className: element.colClass || "col-12", key: element.id }, element.type === ElementType.TEXT ? (react_1.default.createElement(CustomText_1.default, __assign({}, element))) : element.type === ElementType.INPUT ? (react_1.default.createElement(CustomInput_1.default, __assign({}, element))) : element.type === ElementType.TEXTAREA ? (react_1.default.createElement(CustomTextarea_1.default, __assign({}, element))) : element.type === ElementType.CHECKBOX ? (react_1.default.createElement(CustomCheckbox_1.default, __assign({}, element))) : element.type === ElementType.RADIO ? (react_1.default.createElement(CustomRadioButton_1.default, __assign({}, element))) : element.type === ElementType.SELECT ? (react_1.default.createElement(CustomSelect_1.default, __assign({}, element, { submitted: submitted }))) : element.type === ElementType.SIMPLESELECT ? (react_1.default.createElement(CustomSimpleSelect_1.default, __assign({}, element, { value: Array.isArray(element.value)
|
242
|
+
return (react_1.default.createElement("div", { className: "row ".concat(innerRowCustomClass), key: "inner-row-".concat(rowId, "-").concat(colId, "-").concat(innerRowId) }, elements.map(function (element) { return (react_1.default.createElement("div", { className: element.colClass || "col-12", key: element.id }, element.type === ElementType.TEXT ? (react_1.default.createElement(CustomText_1.default, __assign({}, element))) : element.type === ElementType.INPUT ? (react_1.default.createElement(CustomInput_1.default, __assign({}, element))) : element.type === ElementType.TEXTAREA ? (react_1.default.createElement(CustomTextarea_1.default, __assign({}, element))) : element.type === ElementType.CHECKBOX ? (react_1.default.createElement(CustomCheckbox_1.default, __assign({}, element))) : element.type === ElementType.RADIO ? (react_1.default.createElement(CustomRadioButton_1.default, __assign({}, element))) : element.type === ElementType.SELECT ? (react_1.default.createElement(CustomSelect_1.default, __assign({}, element, { submitted: submitted }))) : element.type === ElementType.SIMPLESELECT ? (react_1.default.createElement(CustomSimpleSelect_1.default, __assign({}, element, { value: Array.isArray(element.value)
|
243
|
+
? element.value[0] || ""
|
244
|
+
: "", onChange: function (val) {
|
245
|
+
return element.onChange(val);
|
246
|
+
} }))) : element.type === ElementType.DATETIMEPICKER ? (react_1.default.createElement(CustomDateTimePicker_1.default, __assign({}, element, { submitted: submitted }))) : element.type === ElementType.DIVIDER ? (react_1.default.createElement(CustomDivider_1.default, __assign({}, element))) : element.type === ElementType.RICHTEXTBOX ? (react_1.default.createElement(CustomRichTextbox_1.default, __assign({}, element))) : element.type === ElementType.TREEVIEW ? (react_1.default.createElement(CustomTreeView_1.default, __assign({}, element, { submitted: submitted }))) : element.type === ElementType.BUTTON ? (react_1.default.createElement(CustomButton_1.default, __assign({}, element, { isLoading: isLoading }))) : element.type === ElementType.AUTOCOMPLETEINPUT ? (react_1.default.createElement(CustomAutocompleteInput_1.default, __assign({}, element))) : element.type === ElementType.PHONE ? (react_1.default.createElement(CustomPhoneInput_1.default, __assign({}, element))) : element.type === ElementType.FILEUPLOADER ? (
|
231
247
|
// FILEUPLOADER elemanı için CustomFileUploader'ı render ediyoruz
|
232
248
|
react_1.default.createElement(react_1.default.Fragment, null,
|
233
249
|
react_1.default.createElement(CustomFileUploader_1.default, { url: element.url, multi: element.multi, allowedTypes: element.allowedTypes, maxFile: element.maxFile, maxSize: element.maxSize, onUploadComplete: element.onUploadComplete, onRemoveUploaded: element.onRemoveUploaded, onPendingChange: element.onPendingChange, clearTrigger: element.clearTrigger, label: element.label, translations: element.translations, onUploadingChange: setIsUploading }))) : null)); })));
|
@@ -32,7 +32,6 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
32
32
|
return to.concat(ar || Array.prototype.slice.call(from));
|
33
33
|
};
|
34
34
|
Object.defineProperty(exports, "__esModule", { value: true });
|
35
|
-
//CustomSelect.tsx
|
36
35
|
var react_1 = __importStar(require("react"));
|
37
36
|
var fa_1 = require("react-icons/fa");
|
38
37
|
require("../assets/css/custom-select.css");
|
@@ -1,21 +1,19 @@
|
|
1
|
-
import React from
|
1
|
+
import React from "react";
|
2
|
+
import "../assets/css/custom-treeview.css";
|
2
3
|
export interface TreeNode {
|
3
4
|
label: string;
|
4
5
|
value: string;
|
5
6
|
children?: TreeNode[];
|
6
7
|
}
|
7
8
|
export interface CustomTreeViewProps {
|
8
|
-
/** Eğer başlık göstermek isterseniz */
|
9
9
|
label?: string;
|
10
|
-
/** Seçili değerin (veya çokluysa dizi halinde) prop’u */
|
11
10
|
value: string | string[] | null;
|
12
|
-
/** Gösterilecek ağaç verisi */
|
13
11
|
treeData: TreeNode[];
|
14
|
-
/** Input placeholder’ı */
|
15
12
|
placeholder?: string;
|
16
|
-
/** Çoklu seçim modu */
|
17
13
|
multi?: boolean;
|
18
|
-
|
14
|
+
required?: boolean;
|
15
|
+
submitted?: boolean;
|
16
|
+
errorMessage?: string;
|
19
17
|
onChange: (selected: string | string[] | null) => void;
|
20
18
|
}
|
21
19
|
declare const CustomTreeView: React.FC<CustomTreeViewProps>;
|
@@ -48,12 +48,12 @@ var react_1 = __importStar(require("react"));
|
|
48
48
|
var SimpleTreeView_1 = require("@mui/x-tree-view/SimpleTreeView");
|
49
49
|
var TreeItem_1 = require("@mui/x-tree-view/TreeItem");
|
50
50
|
var fa_1 = require("react-icons/fa");
|
51
|
-
|
51
|
+
require("../assets/css/custom-treeview.css");
|
52
52
|
var CustomTreeView = function (_a) {
|
53
|
-
var label = _a.label, value = _a.value, treeData = _a.treeData, _b = _a.placeholder, placeholder = _b === void 0 ?
|
54
|
-
var
|
55
|
-
var
|
56
|
-
var
|
53
|
+
var 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.multi, multi = _c === void 0 ? false : _c, _d = _a.required, required = _d === void 0 ? false : _d, submitted = _a.submitted, errorMessage = _a.errorMessage, onChange = _a.onChange;
|
54
|
+
var _f = (0, react_1.useState)(""), filterTerm = _f[0], setFilterTerm = _f[1];
|
55
|
+
var _g = (0, react_1.useState)([]), selectedItems = _g[0], setSelectedItems = _g[1];
|
56
|
+
var _h = (0, react_1.useState)([]), expandedItems = _h[0], setExpandedItems = _h[1];
|
57
57
|
// Helper to find a node by value
|
58
58
|
var findNodeByValue = function (nodes, val) {
|
59
59
|
for (var _i = 0, nodes_1 = nodes; _i < nodes_1.length; _i++) {
|
@@ -79,11 +79,11 @@ var CustomTreeView = function (_a) {
|
|
79
79
|
}, [value]);
|
80
80
|
// Filter tree utility
|
81
81
|
var filterTree = function (nodes, term) {
|
82
|
-
var norm = term.toLocaleLowerCase(
|
82
|
+
var norm = term.toLocaleLowerCase("tr-TR");
|
83
83
|
var paths = [];
|
84
84
|
var filtered = nodes
|
85
85
|
.map(function (node) {
|
86
|
-
var labelNorm = node.label.toLocaleLowerCase(
|
86
|
+
var labelNorm = node.label.toLocaleLowerCase("tr-TR");
|
87
87
|
var childResult = node.children
|
88
88
|
? filterTree(node.children, term)
|
89
89
|
: { filteredNodes: [], pathsToExpand: [] };
|
@@ -96,12 +96,15 @@ var CustomTreeView = function (_a) {
|
|
96
96
|
return null;
|
97
97
|
})
|
98
98
|
.filter(Boolean);
|
99
|
-
return {
|
99
|
+
return {
|
100
|
+
filteredNodes: filtered,
|
101
|
+
pathsToExpand: Array.from(new Set(paths)),
|
102
|
+
};
|
100
103
|
};
|
101
104
|
// Determine filtered nodes and which to expand
|
102
|
-
var
|
105
|
+
var _j = filterTerm
|
103
106
|
? filterTree(treeData, filterTerm)
|
104
|
-
: { filteredNodes: treeData, pathsToExpand: [] }, filteredNodes =
|
107
|
+
: { filteredNodes: treeData, pathsToExpand: [] }, filteredNodes = _j.filteredNodes, pathsToExpand = _j.pathsToExpand;
|
105
108
|
// Auto-expand when filtering
|
106
109
|
(0, react_1.useEffect)(function () {
|
107
110
|
if (filterTerm) {
|
@@ -122,7 +125,7 @@ var CustomTreeView = function (_a) {
|
|
122
125
|
};
|
123
126
|
// Clear filter only
|
124
127
|
var handleReset = function () {
|
125
|
-
setFilterTerm(
|
128
|
+
setFilterTerm("");
|
126
129
|
};
|
127
130
|
// Clear all selections
|
128
131
|
var handleClearAll = function () {
|
@@ -139,19 +142,27 @@ var CustomTreeView = function (_a) {
|
|
139
142
|
: __spreadArray(__spreadArray([], selectedItems, true), [node.value], false)
|
140
143
|
: [node.value];
|
141
144
|
handleSelectionChange({}, next);
|
142
|
-
}, style: { cursor:
|
145
|
+
}, style: { cursor: "pointer" } }, node.label || "Kök") }, node.children ? renderTree(node.children) : null)); });
|
143
146
|
};
|
144
147
|
return (react_1.default.createElement("div", null,
|
145
|
-
react_1.default.createElement(
|
148
|
+
react_1.default.createElement("div", { className: "form-group" },
|
149
|
+
label && react_1.default.createElement("label", { className: "form-label" }, label),
|
150
|
+
react_1.default.createElement("div", { className: "treeview-input-group" },
|
151
|
+
react_1.default.createElement("input", { type: "text", value: filterTerm, onChange: function (e) { return setFilterTerm(e.target.value); }, placeholder: placeholder, className: "form-control-unreq", autoComplete: "off", name: "tree-filter-".concat(label === null || label === void 0 ? void 0 : label.replace(/\s+/g, "-").toLowerCase()), required: false }),
|
152
|
+
react_1.default.createElement("button", { type: "button", onClick: handleReset, className: "btn btn-danger bg-soft-danger", title: "Temizle" },
|
153
|
+
react_1.default.createElement(fa_1.FaTimes, null)))),
|
146
154
|
multi && selectedItems.length > 0 && (react_1.default.createElement("div", { className: "mb-2" },
|
147
|
-
selectedItems.length > 1 && (react_1.default.createElement("span", { className: "btn btn-sm btn-danger rounded-pill me-1", style: { cursor:
|
155
|
+
selectedItems.length > 1 && (react_1.default.createElement("span", { className: "btn btn-sm btn-danger rounded-pill me-1", style: { cursor: "pointer" }, onClick: handleClearAll },
|
148
156
|
react_1.default.createElement(fa_1.FaTrash, null))),
|
149
|
-
selectedItems.map(function (val) { return (react_1.default.createElement("span", { key: val, className: "badge bg-secondary me-1", style: { cursor:
|
157
|
+
selectedItems.map(function (val) { return (react_1.default.createElement("span", { key: val, className: "badge bg-secondary me-1", style: { cursor: "pointer" }, onClick: function () { return handleBadgeRemove(val); } },
|
150
158
|
findLabelByValue(treeData, val),
|
151
159
|
" \u00D7")); }))),
|
152
160
|
react_1.default.createElement(SimpleTreeView_1.SimpleTreeView, { checkboxSelection: true, multiSelect: multi, selectedItems: selectedItems, expandedItems: expandedItems, onSelectedItemsChange: handleSelectionChange, onExpandedItemsChange: function (_e, ids) {
|
153
161
|
var arr = Array.isArray(ids) ? ids : ids ? [ids] : [];
|
154
162
|
setExpandedItems(arr);
|
155
|
-
} }, renderTree(filteredNodes))
|
163
|
+
} }, renderTree(filteredNodes)),
|
164
|
+
submitted && required && selectedItems.length === 0 && (react_1.default.createElement("div", { className: "invalid-feedback d-block mt-2 text-danger" },
|
165
|
+
react_1.default.createElement(fa_1.FaExclamationTriangle, { className: "me-2" }),
|
166
|
+
errorMessage || "Lütfen en az bir seçim yapınız."))));
|
156
167
|
};
|
157
168
|
exports.default = CustomTreeView;
|