albinasoft-ui-package 1.1.62 → 1.1.64

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,9 @@
1
+ import React from "react";
2
+ export interface CustomContainerProps {
3
+ id?: string;
4
+ className?: string;
5
+ style?: React.CSSProperties;
6
+ children?: React.ReactNode;
7
+ }
8
+ declare const CustomContainer: React.FC<CustomContainerProps>;
9
+ export default CustomContainer;
@@ -0,0 +1,12 @@
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
+ // CustomContainer.tsx
7
+ var react_1 = __importDefault(require("react"));
8
+ var CustomContainer = function (_a) {
9
+ var id = _a.id, _b = _a.className, className = _b === void 0 ? "custom-container" : _b, style = _a.style, children = _a.children;
10
+ return (react_1.default.createElement("div", { id: id, className: className, style: style }, children));
11
+ };
12
+ exports.default = CustomContainer;
@@ -17,7 +17,8 @@ declare enum ElementType {
17
17
  BUTTON = "button",
18
18
  AUTOCOMPLETEINPUT = "autocompleteinput",
19
19
  PHONE = "phone",
20
- FILEUPLOADER = "fileuploader"
20
+ FILEUPLOADER = "fileuploader",
21
+ CONTAINER = "container"
21
22
  }
22
23
  interface InputElement {
23
24
  id?: string;
@@ -211,7 +212,18 @@ interface FileUploaderElement {
211
212
  innerRowId?: number;
212
213
  colClass?: string;
213
214
  }
214
- type FormElement = InputElement | TextareaElement | CheckboxElement | RadioButtonElement | SelectElement | SimpleSelectElement | DateTimePickerElement | TextElement | DividerElement | RichTextboxElement | TreeViewElement | ButtonElement | AutoCompleteInputElement | PhoneElement | FileUploaderElement;
215
+ interface ContainerElement {
216
+ id?: string;
217
+ type: ElementType.CONTAINER;
218
+ className?: string;
219
+ style?: React.CSSProperties;
220
+ rowId?: number;
221
+ colId?: number;
222
+ innerRowId?: number;
223
+ colClass?: string;
224
+ children?: React.ReactNode;
225
+ }
226
+ type FormElement = InputElement | TextareaElement | CheckboxElement | RadioButtonElement | SelectElement | SimpleSelectElement | DateTimePickerElement | TextElement | DividerElement | RichTextboxElement | TreeViewElement | ButtonElement | AutoCompleteInputElement | PhoneElement | FileUploaderElement | ContainerElement;
215
227
  interface CustomFormProps {
216
228
  elements: FormElement[];
217
229
  innerRowCustomClass?: string;
@@ -92,6 +92,7 @@ var CustomTreeView_1 = __importDefault(require("./CustomTreeView"));
92
92
  var CustomAutocompleteInput_1 = __importDefault(require("./CustomAutocompleteInput"));
93
93
  var CustomFileUploader_1 = __importDefault(require("./CustomFileUploader"));
94
94
  var CustomPhoneInput_1 = __importDefault(require("./CustomPhoneInput"));
95
+ var CustomContainer_1 = __importDefault(require("./CustomContainer"));
95
96
  var ElementType;
96
97
  (function (ElementType) {
97
98
  ElementType["INPUT"] = "input";
@@ -109,6 +110,7 @@ var ElementType;
109
110
  ElementType["AUTOCOMPLETEINPUT"] = "autocompleteinput";
110
111
  ElementType["PHONE"] = "phone";
111
112
  ElementType["FILEUPLOADER"] = "fileuploader";
113
+ ElementType["CONTAINER"] = "container";
112
114
  })(ElementType || (ElementType = {}));
113
115
  exports.ElementType = ElementType;
114
116
  var CustomForm = function (_a) {
@@ -263,7 +265,7 @@ var CustomForm = function (_a) {
263
265
  } }))) : 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 ? (
264
266
  // FILEUPLOADER elemanı için CustomFileUploader'ı render ediyoruz
265
267
  react_1.default.createElement(react_1.default.Fragment, null,
266
- react_1.default.createElement(CustomFileUploader_1.default, { ref: getUploaderRefCb(element.id), url: element.url, multi: element.multi, allowedTypes: element.allowedTypes, maxFile: element.maxFile, maxSize: element.maxSize, required: element.required, submitted: submitted, onUploadComplete: element.onUploadComplete, onRemoveUploaded: element.onRemoveUploaded, onPendingChange: element.onPendingChange, clearTrigger: element.clearTrigger, label: element.label, translations: element.translations, onUploadingChange: setIsUploading, onNotify: onNotify }))) : null)); })));
268
+ react_1.default.createElement(CustomFileUploader_1.default, { ref: getUploaderRefCb(element.id), url: element.url, multi: element.multi, allowedTypes: element.allowedTypes, maxFile: element.maxFile, maxSize: element.maxSize, required: element.required, submitted: submitted, onUploadComplete: element.onUploadComplete, onRemoveUploaded: element.onRemoveUploaded, onPendingChange: element.onPendingChange, clearTrigger: element.clearTrigger, label: element.label, translations: element.translations, onUploadingChange: setIsUploading, onNotify: onNotify }))) : element.type === ElementType.CONTAINER ? (react_1.default.createElement(CustomContainer_1.default, __assign({}, element), element.children)) : null)); })));
267
269
  })));
268
270
  })));
269
271
  }),
@@ -14,6 +14,7 @@ export interface CustomTreeViewProps {
14
14
  required?: boolean;
15
15
  submitted?: boolean;
16
16
  errorMessage?: string;
17
+ clearTheLineOnSelect?: boolean;
17
18
  onChange: (selected: string | string[] | null) => void;
18
19
  }
19
20
  declare const CustomTreeView: React.FC<CustomTreeViewProps>;
@@ -1,5 +1,4 @@
1
1
  "use strict";
2
- // src/components/CustomTreeView.tsx
3
2
  var __assign = (this && this.__assign) || function () {
4
3
  __assign = Object.assign || function(t) {
5
4
  for (var s, i = 1, n = arguments.length; i < n; i++) {
@@ -50,11 +49,11 @@ var TreeItem_1 = require("@mui/x-tree-view/TreeItem");
50
49
  var fa_1 = require("react-icons/fa");
51
50
  require("../assets/css/custom-treeview.css");
52
51
  var CustomTreeView = function (_a) {
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
- // Helper to find a node by value
52
+ 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, _f = _a.clearTheLineOnSelect, clearTheLineOnSelect = _f === void 0 ? false : _f, onChange = _a.onChange;
53
+ var _g = (0, react_1.useState)(""), filterTerm = _g[0], setFilterTerm = _g[1];
54
+ var _h = (0, react_1.useState)([]), selectedItems = _h[0], setSelectedItems = _h[1];
55
+ var _j = (0, react_1.useState)([]), expandedItems = _j[0], setExpandedItems = _j[1];
56
+ // ---- Helpers ----
58
57
  var findNodeByValue = function (nodes, val) {
59
58
  for (var _i = 0, nodes_1 = nodes; _i < nodes_1.length; _i++) {
60
59
  var node = nodes_1[_i];
@@ -72,7 +71,48 @@ var CustomTreeView = function (_a) {
72
71
  var node = findNodeByValue(nodes, val);
73
72
  return node ? node.label : val;
74
73
  };
75
- // Reflect prop value in internal state
74
+ // Bir düğümün köke kadar yolunu döndür (root..target)
75
+ var findPathToNode = function (nodes, target, path) {
76
+ if (path === void 0) { path = []; }
77
+ for (var _i = 0, nodes_2 = nodes; _i < nodes_2.length; _i++) {
78
+ var node = nodes_2[_i];
79
+ var currentPath = __spreadArray(__spreadArray([], path, true), [node.value], false);
80
+ if (node.value === target)
81
+ return currentPath;
82
+ if (node.children) {
83
+ var result = findPathToNode(node.children, target, currentPath);
84
+ if (result)
85
+ return result;
86
+ }
87
+ }
88
+ return null;
89
+ };
90
+ // Bir düğümün atalarını (kök dâhil, kendisi hariç) döndür
91
+ var getAncestors = function (nodes, target) {
92
+ var path = findPathToNode(nodes, target);
93
+ if (!path)
94
+ return [];
95
+ return path.slice(0, -1);
96
+ };
97
+ // Bir düğümün tüm altlarını (çocuk/torun…) döndür
98
+ var getDescendants = function (nodes, target) {
99
+ var root = findNodeByValue(nodes, target);
100
+ if (!root)
101
+ return [];
102
+ var acc = [];
103
+ var walk = function (n) {
104
+ if (!n.children)
105
+ return;
106
+ for (var _i = 0, _a = n.children; _i < _a.length; _i++) {
107
+ var c = _a[_i];
108
+ acc.push(c.value);
109
+ walk(c);
110
+ }
111
+ };
112
+ walk(root);
113
+ return acc;
114
+ };
115
+ // ---- State <-> Prop senkronizasyonu ----
76
116
  (0, react_1.useEffect)(function () {
77
117
  var initial = Array.isArray(value) ? value : value ? [value] : [];
78
118
  setSelectedItems(initial);
@@ -83,21 +123,6 @@ var CustomTreeView = function (_a) {
83
123
  return;
84
124
  var valuesArray = Array.isArray(value) ? value : [value];
85
125
  var pathsToExpand = new Set();
86
- var findPathToNode = function (nodes, target, path) {
87
- if (path === void 0) { path = []; }
88
- for (var _i = 0, nodes_2 = nodes; _i < nodes_2.length; _i++) {
89
- var node = nodes_2[_i];
90
- var currentPath = __spreadArray(__spreadArray([], path, true), [node.value], false);
91
- if (node.value === target)
92
- return currentPath;
93
- if (node.children) {
94
- var result = findPathToNode(node.children, target, currentPath);
95
- if (result)
96
- return result;
97
- }
98
- }
99
- return null;
100
- };
101
126
  valuesArray.forEach(function (val) {
102
127
  var path = findPathToNode(treeData, val);
103
128
  if (path) {
@@ -106,7 +131,7 @@ var CustomTreeView = function (_a) {
106
131
  });
107
132
  setExpandedItems(Array.from(pathsToExpand));
108
133
  }, [value, treeData]);
109
- // Filter tree utility
134
+ // ---- Filtreleme ----
110
135
  var filterTree = function (nodes, term) {
111
136
  var norm = term.toLocaleLowerCase("tr-TR");
112
137
  var paths = [];
@@ -130,39 +155,52 @@ var CustomTreeView = function (_a) {
130
155
  pathsToExpand: Array.from(new Set(paths)),
131
156
  };
132
157
  };
133
- // Determine filtered nodes and which to expand
134
- var _j = filterTerm
135
- ? filterTree(treeData, filterTerm)
136
- : { filteredNodes: treeData, pathsToExpand: [] }, filteredNodes = _j.filteredNodes, pathsToExpand = _j.pathsToExpand;
137
- // Auto-expand when filtering
158
+ var _k = filterTree(treeData, filterTerm), filteredNodes = _k.filteredNodes, pathsToExpand = _k.pathsToExpand;
159
+ // Filtre aktifken otomatik expand
138
160
  (0, react_1.useEffect)(function () {
139
161
  if (filterTerm) {
140
162
  setExpandedItems(pathsToExpand);
141
163
  }
142
164
  }, [filterTerm, pathsToExpand]);
143
- // Handle selection changes
165
+ // ---- Seçim değişimi ----
144
166
  var handleSelectionChange = function (_evt, itemIds) {
145
167
  var newSel = Array.isArray(itemIds) ? itemIds : itemIds ? [itemIds] : [];
168
+ // Önceki ve yeni seçimler arasındaki farktan eklenen/kaldırılanı bul
169
+ var prev = new Set(selectedItems);
170
+ var curr = new Set(newSel);
171
+ var added = Array.from(curr).filter(function (id) { return !prev.has(id); });
172
+ var removed = Array.from(prev).filter(function (id) { return !curr.has(id); });
173
+ var addedId = added[0] || null;
174
+ if (clearTheLineOnSelect && addedId) {
175
+ // Sadece addedId çizgisini temizle (atalar + altlar)
176
+ var toRemove_1 = new Set();
177
+ getAncestors(treeData, addedId).forEach(function (a) { return toRemove_1.add(a); });
178
+ getDescendants(treeData, addedId).forEach(function (d) { return toRemove_1.add(d); });
179
+ // addedId'yi daima koru
180
+ newSel = newSel.filter(function (val) { return val === addedId || !toRemove_1.has(val); });
181
+ // Emniyet: addedId listede değilse ekle
182
+ if (!newSel.includes(addedId)) {
183
+ newSel = __spreadArray(__spreadArray([], newSel, true), [addedId], false);
184
+ }
185
+ }
146
186
  setSelectedItems(newSel);
147
187
  onChange(multi ? newSel : newSel[0] || null);
148
188
  };
149
- // Remove single badge
189
+ // Tek bir rozet (badge) kaldırma
150
190
  var handleBadgeRemove = function (val) {
151
191
  var filtered = selectedItems.filter(function (v) { return v !== val; });
152
192
  setSelectedItems(filtered);
153
193
  onChange(multi ? filtered : filtered[0] || null);
154
194
  };
155
- // Clear filter only
156
195
  var handleReset = function () {
157
196
  setFilterTerm("");
158
197
  };
159
- // Clear all selections
160
198
  var handleClearAll = function () {
161
199
  setSelectedItems([]);
162
200
  onChange(multi ? [] : null);
163
201
  setExpandedItems([]);
164
202
  };
165
- // Render tree recursively
203
+ // Ağaç render (recursive)
166
204
  var renderTree = function (nodes) {
167
205
  return nodes.map(function (node) { return (react_1.default.createElement(TreeItem_1.TreeItem, { key: node.value, itemId: node.value, label: react_1.default.createElement("span", { onClick: function () {
168
206
  var next = multi
package/dist/index.d.ts CHANGED
@@ -19,5 +19,6 @@ export { default as CustomRichTextbox } from './components/CustomRichTextbox';
19
19
  export { default as CustomProgressBar } from './components/CustomProgressBar';
20
20
  export { default as CustomTab, AlignTabs, TabSize, type TabItem, type CustomTabProps, } from './components/CustomTab';
21
21
  export { default as CustomTimeline, DotColor, type AdditionalInfo, type TimelineElement, } from './components/CustomTimeline';
22
+ export { default as CustomContainer, type CustomContainerProps, } from './components/CustomContainer';
22
23
  export type { Notify } from './types/notify';
23
24
  export { noopNotify } from './types/notify';
package/dist/index.js CHANGED
@@ -4,7 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  return (mod && mod.__esModule) ? mod : { "default": mod };
5
5
  };
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.noopNotify = exports.DotColor = exports.CustomTimeline = exports.TabSize = exports.AlignTabs = exports.CustomTab = exports.CustomProgressBar = exports.CustomRichTextbox = exports.defaultTranslations = exports.AllowedTypes = exports.CustomFileUploader = exports.CustomDatatable = exports.CustomModal = exports.DividerWidth = exports.DividerThickness = exports.DividerAlignment = exports.DividerColor = exports.CustomDivider = exports.TextColor = exports.FontWeight = exports.LineHeight = exports.FontSize = exports.TextAlign = exports.TextType = exports.CustomText = exports.TimeFormat = exports.CustomDateTimePicker = exports.CustomTreeView = exports.CustomSimpleSelect = exports.CustomSelect = exports.CustomRadioButton = exports.CustomPhoneInput = exports.CustomTextarea = exports.InputType = exports.CustomInput = exports.CustomCheckbox = exports.CustomButton = exports.CustomAutocompleteInput = exports.ElementType = exports.CustomForm = void 0;
7
+ exports.noopNotify = exports.CustomContainer = exports.DotColor = exports.CustomTimeline = exports.TabSize = exports.AlignTabs = exports.CustomTab = exports.CustomProgressBar = exports.CustomRichTextbox = exports.defaultTranslations = exports.AllowedTypes = exports.CustomFileUploader = exports.CustomDatatable = exports.CustomModal = exports.DividerWidth = exports.DividerThickness = exports.DividerAlignment = exports.DividerColor = exports.CustomDivider = exports.TextColor = exports.FontWeight = exports.LineHeight = exports.FontSize = exports.TextAlign = exports.TextType = exports.CustomText = exports.TimeFormat = exports.CustomDateTimePicker = exports.CustomTreeView = exports.CustomSimpleSelect = exports.CustomSelect = exports.CustomRadioButton = exports.CustomPhoneInput = exports.CustomTextarea = exports.InputType = exports.CustomInput = exports.CustomCheckbox = exports.CustomButton = exports.CustomAutocompleteInput = exports.ElementType = exports.CustomForm = void 0;
8
8
  // ---- Form orchestrator ----
9
9
  var CustomForm_1 = require("./components/CustomForm");
10
10
  Object.defineProperty(exports, "CustomForm", { enumerable: true, get: function () { return __importDefault(CustomForm_1).default; } });
@@ -74,5 +74,7 @@ Object.defineProperty(exports, "TabSize", { enumerable: true, get: function () {
74
74
  var CustomTimeline_1 = require("./components/CustomTimeline");
75
75
  Object.defineProperty(exports, "CustomTimeline", { enumerable: true, get: function () { return __importDefault(CustomTimeline_1).default; } });
76
76
  Object.defineProperty(exports, "DotColor", { enumerable: true, get: function () { return CustomTimeline_1.DotColor; } });
77
+ var CustomContainer_1 = require("./components/CustomContainer");
78
+ Object.defineProperty(exports, "CustomContainer", { enumerable: true, get: function () { return __importDefault(CustomContainer_1).default; } });
77
79
  var notify_1 = require("./types/notify");
78
80
  Object.defineProperty(exports, "noopNotify", { enumerable: true, get: function () { return notify_1.noopNotify; } });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "albinasoft-ui-package",
3
- "version": "1.1.62",
3
+ "version": "1.1.64",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "scripts": {