albinasoft-ui-package 1.0.21 → 1.0.24

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,38 @@
1
+ .progress-bar-container {
2
+ margin-bottom: 30px;
3
+ padding: 10px;
4
+ width: 100%;
5
+ }
6
+
7
+ .step-item {
8
+ cursor: pointer;
9
+ display: flex;
10
+ align-items: center;
11
+ flex-direction: column;
12
+ position: relative;
13
+ z-index: 1;
14
+ }
15
+
16
+ .step-circle {
17
+ width: 30px;
18
+ height: 30px;
19
+ border-radius: 50%;
20
+ color: #fff;
21
+ display: flex;
22
+ justify-content: center;
23
+ align-items: center;
24
+ font-weight: bold;
25
+ margin-bottom: 10px;
26
+ }
27
+
28
+ .step-label {
29
+ font-size: 14px;
30
+ font-weight: bold;
31
+ }
32
+
33
+ .step-line {
34
+ flex: 1;
35
+ height: 4px;
36
+ margin: 0 10px;
37
+ }
38
+
@@ -0,0 +1,9 @@
1
+ import React from "react";
2
+ import "@css/ProgressBar.css";
3
+ interface ProgressBarProps {
4
+ activeStep: number;
5
+ stepLabels: string[];
6
+ onStepClick: (step: number) => void;
7
+ }
8
+ declare const ProgressBar: React.FC<ProgressBarProps>;
9
+ export default ProgressBar;
@@ -0,0 +1,40 @@
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
+ var react_1 = __importDefault(require("react"));
7
+ require("@css/ProgressBar.css");
8
+ var ProgressBar = function (_a) {
9
+ var activeStep = _a.activeStep, stepLabels = _a.stepLabels, onStepClick = _a.onStepClick;
10
+ return (react_1.default.createElement("div", { className: "progress-bar-container" },
11
+ react_1.default.createElement("div", { style: { display: "flex", alignItems: "center", position: "relative" } }, stepLabels.map(function (label, index) {
12
+ var currentStep = index + 1;
13
+ var isActive = activeStep >= currentStep;
14
+ var isCompleted = activeStep > currentStep;
15
+ return (react_1.default.createElement(react_1.default.Fragment, { key: label },
16
+ react_1.default.createElement("div", { onClick: function () { return onStepClick(currentStep); }, className: "step-item", style: {
17
+ cursor: activeStep === currentStep ? "default" : "pointer",
18
+ zIndex: isActive ? 2 : 1,
19
+ } },
20
+ react_1.default.createElement("div", { className: "step-circle", style: {
21
+ backgroundColor: isCompleted
22
+ ? "#4caf50"
23
+ : isActive
24
+ ? "#ffa500"
25
+ : "#ccc",
26
+ border: isActive ? "2px solid #4caf50" : "none",
27
+ } }, currentStep),
28
+ react_1.default.createElement("span", { className: "step-label", style: {
29
+ color: isCompleted
30
+ ? "#4caf50"
31
+ : isActive
32
+ ? "#ffa500"
33
+ : "#ccc",
34
+ } }, label)),
35
+ index < stepLabels.length - 1 && (react_1.default.createElement("div", { className: "step-line", style: {
36
+ backgroundColor: activeStep > currentStep ? "#4caf50" : "#ddd",
37
+ } }))));
38
+ }))));
39
+ };
40
+ exports.default = ProgressBar;
@@ -1,29 +1,16 @@
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
- }
8
3
  interface CustomTreeViewProps {
9
- id?: string;
10
- name?: string;
11
4
  label?: string;
12
5
  value: string;
13
6
  treeData: TreeNode[];
14
7
  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;
25
8
  onChange: (selected: string) => void;
26
- hasTriedToSubmit?: boolean;
9
+ }
10
+ export interface TreeNode {
11
+ label: string;
12
+ value: string;
13
+ children?: TreeNode[];
27
14
  }
28
15
  declare const CustomTreeView: React.FC<CustomTreeViewProps>;
29
16
  export default CustomTreeView;
@@ -51,19 +51,20 @@ 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");
55
54
  var CustomTreeView = function (_a) {
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];
55
+ var label = _a.label, value = _a.value, treeData = _a.treeData, _b = _a.placeholder, placeholder = _b === void 0 ? "Ağaç Yapısını Filtrele..." : _b, onChange = _a.onChange;
56
+ var _c = (0, react_1.useState)(value ? [value] : []), checked = _c[0], setChecked = _c[1];
57
+ var _d = (0, react_1.useState)([]), expanded = _d[0], setExpanded = _d[1];
58
+ var _e = (0, react_1.useState)(''), filterTerm = _e[0], setFilterTerm = _e[1];
59
+ var _f = (0, react_1.useState)(treeData), filteredTreeData = _f[0], setFilteredTreeData = _f[1];
60
+ var _g = (0, react_1.useState)([]), selectedPath = _g[0], setSelectedPath = _g[1];
61
+ var _h = (0, react_1.useState)(''), inputValue = _h[0], setInputValue = _h[1];
62
+ var _j = (0, react_1.useState)(false), isInputDisabled = _j[0], setIsInputDisabled = _j[1];
63
+ // Recursive function to add `showCheckbox` only for leaf nodes
64
64
  var markLeafCheckboxOnly = function (nodes) {
65
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 })); });
66
66
  };
67
+ // Parent Path'i Bulma (recursive)
67
68
  var findParentPath = function (nodes, targetValue, path) {
68
69
  if (path === void 0) { path = []; }
69
70
  for (var _i = 0, nodes_1 = nodes; _i < nodes_1.length; _i++) {
@@ -80,24 +81,11 @@ var CustomTreeView = function (_a) {
80
81
  }
81
82
  return null;
82
83
  };
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
- };
96
- // 🚀 Filtreleme fonksiyonu (path'leri de genişletiyoruz)
84
+ // Filtreleme fonksiyonu (path'leri de genişletiyoruz)
97
85
  var filterTreeData = function (nodes, searchTerm) {
98
86
  var pathsToExpand = [];
99
87
  var filteredNodes = nodes.map(function (node) {
100
- var nodeMatches = node.label.toLowerCase().includes(searchTerm.toLowerCase());
88
+ var nodeMatches = node.label.toLowerCase().includes(searchTerm.toLocaleLowerCase('tr-TR'));
101
89
  var children = node.children ? filterTreeData(node.children, searchTerm) : { filteredNodes: [], pathsToExpand: [] };
102
90
  var childMatches = children.filteredNodes.length > 0;
103
91
  if (nodeMatches || childMatches) {
@@ -108,17 +96,33 @@ var CustomTreeView = function (_a) {
108
96
  }).filter(Boolean);
109
97
  return { filteredNodes: filteredNodes, pathsToExpand: pathsToExpand };
110
98
  };
99
+ // Belirtilen value'ya karşılık gelen leaf'in label'ını bulur (recursive)
100
+ var findLeafLabel = function (nodes, targetValue) {
101
+ for (var _i = 0, nodes_2 = nodes; _i < nodes_2.length; _i++) {
102
+ var node = nodes_2[_i];
103
+ if (node.value === targetValue)
104
+ return node.label;
105
+ if (node.children) {
106
+ var result = findLeafLabel(node.children, targetValue);
107
+ if (result)
108
+ return result;
109
+ }
110
+ }
111
+ return null;
112
+ };
113
+ // Filtreleme işlemi
111
114
  (0, react_1.useEffect)(function () {
112
115
  if (filterTerm.trim() === '') {
113
116
  setFilteredTreeData(treeData);
114
- setExpanded(__spreadArray([], selectedPath, true));
117
+ setExpanded(__spreadArray([], selectedPath, true)); // 🔥 Seçim yapılmış path açık kalsın
115
118
  }
116
119
  else {
117
120
  var _a = filterTreeData(treeData, filterTerm), filteredNodes = _a.filteredNodes, pathsToExpand = _a.pathsToExpand;
118
121
  setFilteredTreeData(filteredNodes);
119
- setExpanded(Array.from(new Set(__spreadArray(__spreadArray([], pathsToExpand, true), selectedPath, true))));
122
+ setExpanded(Array.from(new Set(__spreadArray(__spreadArray([], pathsToExpand, true), selectedPath, true)))); // 🔥 Genişletilecek tüm path'leri belirle
120
123
  }
121
124
  }, [filterTerm, treeData, selectedPath]);
125
+ // Kullanıcı bir leaf seçtiğinde, o leaf'in parent'larını genişlet
122
126
  var handleCheck = function (checkedNodes) {
123
127
  var newlySelected = checkedNodes.find(function (node) { return !checked.includes(node); });
124
128
  var selectedLeaf = newlySelected || '';
@@ -126,61 +130,35 @@ var CustomTreeView = function (_a) {
126
130
  if (selectedLeaf) {
127
131
  var parentPath = findParentPath(treeData, selectedLeaf);
128
132
  if (parentPath) {
129
- setSelectedPath(parentPath);
130
- setExpanded(parentPath);
131
- }
132
- var selectedLabel = findLeafLabelByValue(treeData, selectedLeaf);
133
- if (selectedLabel) {
134
- setFilterTerm(selectedLabel);
135
- setReadOnly(true);
133
+ setSelectedPath(parentPath); // 🔥 Kalıcı olarak bu path'i hatırla
134
+ setExpanded(parentPath); // 🔥 Yalnızca bu leaf'in parent path'i açık kalacak
136
135
  }
136
+ var selectedLabel = findLeafLabel(treeData, selectedLeaf) || '';
137
+ setInputValue(selectedLabel);
138
+ setIsInputDisabled(true);
137
139
  }
140
+ setFilterTerm('');
138
141
  onChange(selectedLeaf);
139
142
  };
140
143
  var handleReset = function () {
141
144
  setFilterTerm('');
142
145
  setChecked([]);
143
146
  setExpanded([]);
144
- setReadOnly(false);
147
+ setInputValue('');
148
+ setIsInputDisabled(false);
145
149
  };
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)))))));
150
+ return (react_1.default.createElement("div", null,
151
+ label && react_1.default.createElement("label", null, label),
152
+ react_1.default.createElement(CustomInput_1.default, { id: "tree-search", value: inputValue || filterTerm, inputType: CustomInput_1.InputType.TEXT, disabled: isInputDisabled, placeholder: placeholder, buttonIcon: react_1.default.createElement(fa_1.FaTimes, null), buttonClass: 'btn btn-danger bg-soft-danger', buttonOnClick: handleReset, onChange: function (e) { return setFilterTerm(e.target.value); } }),
153
+ react_1.default.createElement(react_checkbox_tree_1.default, { nodes: markLeafCheckboxOnly(filteredTreeData), checked: checked, expanded: expanded, onCheck: handleCheck, onExpand: setExpanded, icons: {
154
+ check: react_1.default.createElement(fa_1.FaCheckSquare, { color: "#4caf50" }),
155
+ uncheck: react_1.default.createElement(fa_1.FaSquare, { color: "currentColor" }),
156
+ halfCheck: react_1.default.createElement(fa_1.FaMinusSquare, { color: "#ff9800" }),
157
+ expandClose: react_1.default.createElement(fa_1.FaChevronRight, { color: "#3f51b5" }),
158
+ expandOpen: react_1.default.createElement(fa_1.FaChevronDown, { color: "#3f51b5" }),
159
+ parentClose: react_1.default.createElement(fa_1.FaFolder, { color: "#ff9800" }),
160
+ parentOpen: react_1.default.createElement(fa_1.FaFolderOpen, { color: "#ff9800" }),
161
+ leaf: react_1.default.createElement(fa_1.FaFile, { color: "#607d8b" }),
162
+ } })));
185
163
  };
186
164
  exports.default = CustomTreeView;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "albinasoft-ui-package",
3
- "version": "1.0.21",
3
+ "version": "1.0.24",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "scripts": {