ywana-core8 0.1.83 → 0.1.85
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/__previewjs__/Wrapper.tsx +8 -5
- package/build-doc.sh +10 -0
- package/dist/index.cjs +627 -194
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +353 -105
- package/dist/index.css.map +1 -1
- package/dist/index.modern.js +628 -196
- package/dist/index.modern.js.map +1 -1
- package/dist/index.umd.js +629 -196
- package/dist/index.umd.js.map +1 -1
- package/doc/README.md +196 -0
- package/doc/craco.config.js +31 -0
- package/doc/generate-examples.cjs +310 -0
- package/doc/package-lock.json +17298 -0
- package/doc/package.json +33 -0
- package/doc/public/index.html +22 -0
- package/doc/src/App.css +171 -0
- package/doc/src/App.js +214 -0
- package/doc/src/components/ExamplePage.js +104 -0
- package/doc/src/components/WelcomePage.js +84 -0
- package/doc/src/examples/button.example.js +47 -0
- package/doc/src/examples/input.example.js +91 -0
- package/doc/src/index.css +237 -0
- package/doc/src/index.js +11 -0
- package/package.json +9 -2
- package/preview.config.js +38 -0
- package/src/html/accordion.example.js +2 -2
- package/src/html/actions-cell.css +108 -0
- package/src/html/actions-cell.example.js +587 -0
- package/src/html/actions-cell.js +260 -0
- package/src/html/checkbox.example.js +2 -2
- package/src/html/chip.example.js +2 -2
- package/src/html/color.example.js +2 -2
- package/src/html/form.example.js +2 -2
- package/src/html/header2.example.js +2 -2
- package/src/html/index.js +1 -0
- package/src/html/menu.css +9 -2
- package/src/html/menu.js +14 -2
- package/src/html/progress.example.js +2 -2
- package/src/html/property.example.js +2 -2
- package/src/html/radio.example.js +2 -2
- package/src/html/switch.example.js +2 -2
- package/src/html/tab.example.js +2 -2
- package/src/html/table.css +47 -1
- package/src/html/table.example.js +1012 -0
- package/src/html/table.js +12 -7
- package/src/html/table2-actions-test.js +138 -0
- package/src/html/table2.css +40 -3
- package/src/html/table2.example.js +330 -0
- package/src/html/table2.js +56 -13
- package/src/html/textfield.css +17 -4
- package/src/html/tokenfield.example.js +2 -2
- package/src/html/tree.css +42 -7
- package/src/html/tree.example.js +169 -7
- package/src/html/tree.js +216 -93
- package/src/widgets/calendar/Calendar.js +1 -1
- /package/{ACCORDION_EVALUATION.md → doc/evalulations/ACCORDION_EVALUATION.md} +0 -0
- /package/{CHECKBOX_EVALUATION.md → doc/evalulations/CHECKBOX_EVALUATION.md} +0 -0
- /package/{CHIP_EVALUATION.md → doc/evalulations/CHIP_EVALUATION.md} +0 -0
- /package/{COLOR_EVALUATION.md → doc/evalulations/COLOR_EVALUATION.md} +0 -0
- /package/{COMPONENTS_EVALUATION.md → doc/evalulations/COMPONENTS_EVALUATION.md} +0 -0
- /package/{FORM_EVALUATION.md → doc/evalulations/FORM_EVALUATION.md} +0 -0
- /package/{HEADER_EVALUATION.md → doc/evalulations/HEADER_EVALUATION.md} +0 -0
- /package/{ICON_EVALUATION.md → doc/evalulations/ICON_EVALUATION.md} +0 -0
- /package/{LIST_EVALUATION.md → doc/evalulations/LIST_EVALUATION.md} +0 -0
- /package/{PROGRESS_EVALUATION.md → doc/evalulations/PROGRESS_EVALUATION.md} +0 -0
- /package/{RADIO_EVALUATION.md → doc/evalulations/RADIO_EVALUATION.md} +0 -0
- /package/{RADIO_VISUAL_FIX.md → doc/evalulations/RADIO_VISUAL_FIX.md} +0 -0
- /package/{SECTION_IMPROVEMENTS.md → doc/evalulations/SECTION_IMPROVEMENTS.md} +0 -0
- /package/{SWITCH_EVALUATION.md → doc/evalulations/SWITCH_EVALUATION.md} +0 -0
- /package/{SWITCH_VISUAL_FIX.md → doc/evalulations/SWITCH_VISUAL_FIX.md} +0 -0
- /package/{TAB_EVALUATION.md → doc/evalulations/TAB_EVALUATION.md} +0 -0
- /package/{TEXTFIELD_EVALUATION.md → doc/evalulations/TEXTFIELD_EVALUATION.md} +0 -0
- /package/{TOOLTIP_FIX.md → doc/evalulations/TOOLTIP_FIX.md} +0 -0
- /package/{TREE_EVALUATION.md → doc/evalulations/TREE_EVALUATION.md} +0 -0
- /package/src/incubator/{PDFViewer.js → pdfViewer.js} +0 -0
package/dist/index.cjs
CHANGED
@@ -6,7 +6,7 @@ var reactNotificationsComponent = require('react-notifications-component');
|
|
6
6
|
require('react-notifications-component/dist/theme.css');
|
7
7
|
var moment$1 = require('moment');
|
8
8
|
var momentRange = require('moment-range');
|
9
|
-
require('moment/locale/es');
|
9
|
+
require('moment/locale/es.js');
|
10
10
|
var axios = require('axios');
|
11
11
|
var equal = require('deep-equal');
|
12
12
|
|
@@ -1357,7 +1357,7 @@ var PropTypes = propTypes;
|
|
1357
1357
|
*/
|
1358
1358
|
var SiteContext = React__default["default"].createContext({});
|
1359
1359
|
|
1360
|
-
var _excluded$
|
1360
|
+
var _excluded$i = ["format", "children", "className", "size", "weight", "color", "align", "transform", "decoration", "truncate", "maxLength", "locale", "currency", "minimumFractionDigits", "maximumFractionDigits", "dateStyle", "timeStyle", "fallback", "loading", "skeleton", "copyable", "selectable", "as", "style", "onClick"];
|
1361
1361
|
function _catch$d(body, recover) {
|
1362
1362
|
try {
|
1363
1363
|
var result = body();
|
@@ -1428,7 +1428,7 @@ var Text = function Text(props) {
|
|
1428
1428
|
as = _props$as === void 0 ? 'span' : _props$as,
|
1429
1429
|
style = props.style,
|
1430
1430
|
onClick = props.onClick,
|
1431
|
-
restProps = _objectWithoutPropertiesLoose(props, _excluded$
|
1431
|
+
restProps = _objectWithoutPropertiesLoose(props, _excluded$i);
|
1432
1432
|
var site = React.useContext(SiteContext);
|
1433
1433
|
|
1434
1434
|
// Memoize formatted value for performance
|
@@ -1814,7 +1814,7 @@ Icon.defaultProps = {
|
|
1814
1814
|
className: ''
|
1815
1815
|
};
|
1816
1816
|
|
1817
|
-
var _excluded$
|
1817
|
+
var _excluded$h = ["className", "sections", "disabled", "allowMultiple", "animated", "onCheck", "onToggle", "onSectionChange", "ariaLabel"],
|
1818
1818
|
_excluded2$9 = ["checked", "icon", "title", "subtitle", "open", "disabled", "animated", "sectionIndex", "onToggle", "onCheck", "toolbar", "info", "children", "ariaLabel"];
|
1819
1819
|
|
1820
1820
|
/**
|
@@ -1834,7 +1834,7 @@ var Accordion = function Accordion(props) {
|
|
1834
1834
|
onToggle = props.onToggle,
|
1835
1835
|
onSectionChange = props.onSectionChange,
|
1836
1836
|
ariaLabel = props.ariaLabel,
|
1837
|
-
restProps = _objectWithoutPropertiesLoose(props, _excluded$
|
1837
|
+
restProps = _objectWithoutPropertiesLoose(props, _excluded$h);
|
1838
1838
|
var _useState = React.useState([]),
|
1839
1839
|
openSections = _useState[0],
|
1840
1840
|
setOpenSections = _useState[1];
|
@@ -2080,6 +2080,340 @@ Accordion.defaultProps = {
|
|
2080
2080
|
animated: true
|
2081
2081
|
};
|
2082
2082
|
|
2083
|
+
/**
|
2084
|
+
* Page Context
|
2085
|
+
*/
|
2086
|
+
var MenuContext = React__default["default"].createContext({});
|
2087
|
+
|
2088
|
+
/**
|
2089
|
+
* Menu
|
2090
|
+
**/
|
2091
|
+
var Menu = function Menu(props) {
|
2092
|
+
var children = props.children;
|
2093
|
+
return /*#__PURE__*/React__default["default"].createElement("ul", null, children);
|
2094
|
+
};
|
2095
|
+
|
2096
|
+
/**
|
2097
|
+
* Menu Icon
|
2098
|
+
*/
|
2099
|
+
var MenuIcon = function MenuIcon(props) {
|
2100
|
+
var _props$icon = props.icon,
|
2101
|
+
icon = _props$icon === void 0 ? "more_vert" : _props$icon,
|
2102
|
+
children = props.children,
|
2103
|
+
_props$align = props.align,
|
2104
|
+
align = _props$align === void 0 ? "left" : _props$align,
|
2105
|
+
_props$size = props.size,
|
2106
|
+
size = _props$size === void 0 ? "normal" : _props$size;
|
2107
|
+
var _useState = React.useState(false),
|
2108
|
+
open = _useState[0],
|
2109
|
+
setOpen = _useState[1];
|
2110
|
+
function toggle() {
|
2111
|
+
setOpen(!open);
|
2112
|
+
}
|
2113
|
+
|
2114
|
+
// Convertir valores de align a clases CSS
|
2115
|
+
var getAlignClass = function getAlignClass(alignment) {
|
2116
|
+
switch (alignment) {
|
2117
|
+
case 'right':
|
2118
|
+
return 'alignRight';
|
2119
|
+
case 'left':
|
2120
|
+
return 'alignLeft';
|
2121
|
+
default:
|
2122
|
+
return 'alignLeft';
|
2123
|
+
// Por defecto a la izquierda
|
2124
|
+
}
|
2125
|
+
};
|
2126
|
+
return /*#__PURE__*/React__default["default"].createElement(MenuContext.Provider, {
|
2127
|
+
value: [open, setOpen]
|
2128
|
+
}, /*#__PURE__*/React__default["default"].createElement("div", {
|
2129
|
+
className: "menu-icon"
|
2130
|
+
}, /*#__PURE__*/React__default["default"].createElement(Icon, {
|
2131
|
+
icon: icon,
|
2132
|
+
size: size,
|
2133
|
+
clickable: true,
|
2134
|
+
action: toggle
|
2135
|
+
}), open ? /*#__PURE__*/React__default["default"].createElement("menu", {
|
2136
|
+
className: getAlignClass(align)
|
2137
|
+
}, children) : null, open ? /*#__PURE__*/React__default["default"].createElement("div", {
|
2138
|
+
className: "overlay",
|
2139
|
+
onClick: toggle
|
2140
|
+
}) : null));
|
2141
|
+
};
|
2142
|
+
|
2143
|
+
/**
|
2144
|
+
* Menu Item
|
2145
|
+
*/
|
2146
|
+
var MenuItem = function MenuItem(props) {
|
2147
|
+
var icon = props.icon,
|
2148
|
+
label = props.label,
|
2149
|
+
meta = props.meta,
|
2150
|
+
_props$disabled = props.disabled,
|
2151
|
+
disabled = _props$disabled === void 0 ? false : _props$disabled,
|
2152
|
+
_props$size2 = props.size,
|
2153
|
+
size = _props$size2 === void 0 ? "normal" : _props$size2,
|
2154
|
+
onSelect = props.onSelect;
|
2155
|
+
var _useContext = React.useContext(MenuContext),
|
2156
|
+
setOpen = _useContext[1];
|
2157
|
+
function select() {
|
2158
|
+
if (!disabled) {
|
2159
|
+
if (onSelect) onSelect();
|
2160
|
+
setOpen(false);
|
2161
|
+
}
|
2162
|
+
}
|
2163
|
+
var style = disabled ? "disabled" : "";
|
2164
|
+
var labelTxt = label ? /*#__PURE__*/React__default["default"].createElement(Text, {
|
2165
|
+
format: TEXTFORMATS.STRING
|
2166
|
+
}, label) : null;
|
2167
|
+
return /*#__PURE__*/React__default["default"].createElement("li", {
|
2168
|
+
className: "menu-item " + style,
|
2169
|
+
onClick: select
|
2170
|
+
}, icon ? /*#__PURE__*/React__default["default"].createElement(Icon, {
|
2171
|
+
icon: icon,
|
2172
|
+
size: size
|
2173
|
+
}) : null, /*#__PURE__*/React__default["default"].createElement("label", null, labelTxt), meta ? /*#__PURE__*/React__default["default"].createElement("div", {
|
2174
|
+
className: "meta"
|
2175
|
+
}, meta) : null);
|
2176
|
+
};
|
2177
|
+
|
2178
|
+
/**
|
2179
|
+
* Menu Separator
|
2180
|
+
*/
|
2181
|
+
var MenuSeparator = function MenuSeparator(props) {
|
2182
|
+
return /*#__PURE__*/React__default["default"].createElement("li", {
|
2183
|
+
className: "menu-separator"
|
2184
|
+
});
|
2185
|
+
};
|
2186
|
+
|
2187
|
+
var _excluded$g = ["actions", "maxWidth", "menuIcon", "menuAlign", "menuSize", "className", "style", "gap"];
|
2188
|
+
|
2189
|
+
/**
|
2190
|
+
* ActionsCell - Componente reutilizable para manejar acciones con overflow automático
|
2191
|
+
*
|
2192
|
+
* Características:
|
2193
|
+
* - Detecta automáticamente si las acciones exceden el ancho máximo
|
2194
|
+
* - Convierte automáticamente a menú desplegable cuando es necesario
|
2195
|
+
* - Extrae acciones de componentes React para crear elementos de menú
|
2196
|
+
* - Reutilizable en tablas, headers, accordions, listas, etc.
|
2197
|
+
*/
|
2198
|
+
var ActionsCell = function ActionsCell(_ref) {
|
2199
|
+
var actions = _ref.actions,
|
2200
|
+
_ref$maxWidth = _ref.maxWidth,
|
2201
|
+
maxWidth = _ref$maxWidth === void 0 ? 200 : _ref$maxWidth,
|
2202
|
+
_ref$menuIcon = _ref.menuIcon,
|
2203
|
+
menuIcon = _ref$menuIcon === void 0 ? "more_horiz" : _ref$menuIcon,
|
2204
|
+
_ref$menuAlign = _ref.menuAlign,
|
2205
|
+
menuAlign = _ref$menuAlign === void 0 ? "left" : _ref$menuAlign,
|
2206
|
+
_ref$menuSize = _ref.menuSize,
|
2207
|
+
menuSize = _ref$menuSize === void 0 ? "small" : _ref$menuSize,
|
2208
|
+
_ref$className = _ref.className,
|
2209
|
+
className = _ref$className === void 0 ? "" : _ref$className,
|
2210
|
+
_ref$style = _ref.style,
|
2211
|
+
style = _ref$style === void 0 ? {} : _ref$style,
|
2212
|
+
_ref$gap = _ref.gap,
|
2213
|
+
gap = _ref$gap === void 0 ? "4px" : _ref$gap,
|
2214
|
+
restProps = _objectWithoutPropertiesLoose(_ref, _excluded$g);
|
2215
|
+
var _useState = React.useState(false),
|
2216
|
+
isOverflowing = _useState[0],
|
2217
|
+
setIsOverflowing = _useState[1];
|
2218
|
+
var _useState2 = React.useState(false),
|
2219
|
+
isReady = _useState2[0],
|
2220
|
+
setIsReady = _useState2[1];
|
2221
|
+
var actionsRef = React.useRef(null);
|
2222
|
+
var containerRef = React.useRef(null);
|
2223
|
+
|
2224
|
+
// Check if actions overflow the max width
|
2225
|
+
React.useEffect(function () {
|
2226
|
+
var checkOverflow = function checkOverflow() {
|
2227
|
+
if (actions) {
|
2228
|
+
try {
|
2229
|
+
// Create a temporary element to measure the actual width needed
|
2230
|
+
var tempDiv = document.createElement('div');
|
2231
|
+
tempDiv.style.cssText = "\n position: absolute;\n visibility: hidden;\n white-space: nowrap;\n display: flex;\n align-items: center;\n gap: " + gap + ";\n pointer-events: none;\n z-index: -1000;\n top: -1000px;\n left: -1000px;\n ";
|
2232
|
+
|
2233
|
+
// Create a wrapper to render the actions
|
2234
|
+
var actionsWrapper = document.createElement('div');
|
2235
|
+
actionsWrapper.style.cssText = "\n display: flex;\n align-items: center;\n gap: " + gap + ";\n flex-wrap: nowrap;\n ";
|
2236
|
+
|
2237
|
+
// We need to render the React element to measure it properly
|
2238
|
+
// For now, we'll use a heuristic based on the number of actions
|
2239
|
+
var estimatedWidth = 0;
|
2240
|
+
if (actions.props && actions.props.children) {
|
2241
|
+
var children = Array.isArray(actions.props.children) ? actions.props.children : [actions.props.children];
|
2242
|
+
children.forEach(function (child) {
|
2243
|
+
if (child && child.props) {
|
2244
|
+
// Estimate width based on button content
|
2245
|
+
var hasText = child.props.children && typeof child.props.children === 'string';
|
2246
|
+
var textLength = hasText ? child.props.children.length : 0;
|
2247
|
+
if (hasText) {
|
2248
|
+
// Button with text: ~8px per character + 32px for icon + padding
|
2249
|
+
estimatedWidth += textLength * 8 + 32 + 16;
|
2250
|
+
} else {
|
2251
|
+
// Icon-only button: ~32px + padding
|
2252
|
+
estimatedWidth += 32 + 8;
|
2253
|
+
}
|
2254
|
+
}
|
2255
|
+
});
|
2256
|
+
|
2257
|
+
// Add gap between buttons
|
2258
|
+
var gapWidth = parseInt(gap) || 4;
|
2259
|
+
estimatedWidth += (children.length - 1) * gapWidth;
|
2260
|
+
} else {
|
2261
|
+
// Single action
|
2262
|
+
var hasText = actions.props && actions.props.children && typeof actions.props.children === 'string';
|
2263
|
+
var textLength = hasText ? actions.props.children.length : 0;
|
2264
|
+
if (hasText) {
|
2265
|
+
estimatedWidth = textLength * 8 + 32 + 16;
|
2266
|
+
} else {
|
2267
|
+
estimatedWidth = 32 + 8;
|
2268
|
+
}
|
2269
|
+
}
|
2270
|
+
|
2271
|
+
// Check if it overflows the max width (with some padding for safety)
|
2272
|
+
var shouldOverflow = estimatedWidth > maxWidth - 8; // 8px for container padding
|
2273
|
+
setIsOverflowing(shouldOverflow);
|
2274
|
+
setIsReady(true);
|
2275
|
+
} catch (error) {
|
2276
|
+
console.warn('ActionsCell: Error measuring width', error);
|
2277
|
+
setIsOverflowing(false);
|
2278
|
+
setIsReady(true);
|
2279
|
+
}
|
2280
|
+
} else {
|
2281
|
+
setIsReady(true);
|
2282
|
+
}
|
2283
|
+
};
|
2284
|
+
|
2285
|
+
// Use a small delay to ensure DOM is ready
|
2286
|
+
var timer = setTimeout(checkOverflow, 10);
|
2287
|
+
return function () {
|
2288
|
+
return clearTimeout(timer);
|
2289
|
+
};
|
2290
|
+
}, [actions, maxWidth, gap]);
|
2291
|
+
|
2292
|
+
// Extract action items from React elements for menu
|
2293
|
+
var extractActionItems = function extractActionItems(actionsElement) {
|
2294
|
+
if (!actionsElement) return [];
|
2295
|
+
var items = [];
|
2296
|
+
try {
|
2297
|
+
// If it's a div with children (multiple actions)
|
2298
|
+
if (actionsElement.props && actionsElement.props.children) {
|
2299
|
+
var children = Array.isArray(actionsElement.props.children) ? actionsElement.props.children : [actionsElement.props.children];
|
2300
|
+
children.forEach(function (child, index) {
|
2301
|
+
if (child && child.props) {
|
2302
|
+
var _child$props = child.props,
|
2303
|
+
icon = _child$props.icon,
|
2304
|
+
label = _child$props.children,
|
2305
|
+
onClick = _child$props.onClick,
|
2306
|
+
disabled = _child$props.disabled,
|
2307
|
+
title = _child$props.title;
|
2308
|
+
items.push({
|
2309
|
+
id: "action-" + index,
|
2310
|
+
icon: icon,
|
2311
|
+
label: title || label || "Action " + (index + 1),
|
2312
|
+
onSelect: onClick,
|
2313
|
+
disabled: disabled
|
2314
|
+
});
|
2315
|
+
}
|
2316
|
+
});
|
2317
|
+
} else if (actionsElement.props) {
|
2318
|
+
// Single action
|
2319
|
+
var _actionsElement$props = actionsElement.props,
|
2320
|
+
icon = _actionsElement$props.icon,
|
2321
|
+
label = _actionsElement$props.children,
|
2322
|
+
onClick = _actionsElement$props.onClick,
|
2323
|
+
disabled = _actionsElement$props.disabled,
|
2324
|
+
title = _actionsElement$props.title;
|
2325
|
+
items.push({
|
2326
|
+
id: 'action-0',
|
2327
|
+
icon: icon,
|
2328
|
+
label: title || label || 'Action',
|
2329
|
+
onSelect: onClick,
|
2330
|
+
disabled: disabled
|
2331
|
+
});
|
2332
|
+
}
|
2333
|
+
} catch (error) {
|
2334
|
+
console.warn('ActionsCell: Error extracting action items', error);
|
2335
|
+
}
|
2336
|
+
return items;
|
2337
|
+
};
|
2338
|
+
if (!actions) return null;
|
2339
|
+
var containerClasses = ['actions-cell', className].filter(Boolean).join(' ');
|
2340
|
+
var containerStyles = _extends({
|
2341
|
+
maxWidth: maxWidth + "px",
|
2342
|
+
width: isOverflowing ? 'auto' : 'fit-content'
|
2343
|
+
}, style);
|
2344
|
+
return /*#__PURE__*/React__default["default"].createElement("div", _extends({
|
2345
|
+
ref: containerRef,
|
2346
|
+
className: containerClasses,
|
2347
|
+
style: containerStyles
|
2348
|
+
}, restProps), !isReady ?
|
2349
|
+
/*#__PURE__*/
|
2350
|
+
// Loading state - show a minimal placeholder
|
2351
|
+
React__default["default"].createElement("div", {
|
2352
|
+
className: "actions-cell__loading",
|
2353
|
+
style: {
|
2354
|
+
width: '48px',
|
2355
|
+
height: '32px'
|
2356
|
+
}
|
2357
|
+
}) : !isOverflowing ?
|
2358
|
+
/*#__PURE__*/
|
2359
|
+
// Show actions normally
|
2360
|
+
React__default["default"].createElement("div", {
|
2361
|
+
ref: actionsRef,
|
2362
|
+
className: "actions-cell__content",
|
2363
|
+
style: {
|
2364
|
+
display: 'flex',
|
2365
|
+
alignItems: 'center',
|
2366
|
+
gap: gap,
|
2367
|
+
flexWrap: 'nowrap'
|
2368
|
+
}
|
2369
|
+
}, actions) :
|
2370
|
+
/*#__PURE__*/
|
2371
|
+
// Show menu when overflowing
|
2372
|
+
React__default["default"].createElement(Fragment, null, /*#__PURE__*/React__default["default"].createElement("div", {
|
2373
|
+
ref: actionsRef,
|
2374
|
+
style: {
|
2375
|
+
position: 'absolute',
|
2376
|
+
visibility: 'hidden',
|
2377
|
+
whiteSpace: 'nowrap',
|
2378
|
+
display: 'flex',
|
2379
|
+
alignItems: 'center',
|
2380
|
+
gap: gap,
|
2381
|
+
pointerEvents: 'none',
|
2382
|
+
zIndex: -1000
|
2383
|
+
}
|
2384
|
+
}, actions), /*#__PURE__*/React__default["default"].createElement(MenuIcon, {
|
2385
|
+
icon: menuIcon,
|
2386
|
+
size: menuSize,
|
2387
|
+
align: menuAlign
|
2388
|
+
}, extractActionItems(actions).map(function (item) {
|
2389
|
+
return /*#__PURE__*/React__default["default"].createElement(MenuItem, {
|
2390
|
+
key: item.id,
|
2391
|
+
icon: item.icon,
|
2392
|
+
label: item.label,
|
2393
|
+
onSelect: item.onSelect,
|
2394
|
+
disabled: item.disabled
|
2395
|
+
});
|
2396
|
+
}))));
|
2397
|
+
};
|
2398
|
+
ActionsCell.propTypes = {
|
2399
|
+
/** Acciones a mostrar (componentes React) */
|
2400
|
+
actions: PropTypes.node,
|
2401
|
+
/** Ancho máximo antes de convertirse en menú */
|
2402
|
+
maxWidth: PropTypes.number,
|
2403
|
+
/** Icono del menú desplegable */
|
2404
|
+
menuIcon: PropTypes.string,
|
2405
|
+
/** Alineación del menú (left: se abre hacia la izquierda, right: hacia la derecha, center: centrado) */
|
2406
|
+
menuAlign: PropTypes.oneOf(['left', 'right', 'center']),
|
2407
|
+
/** Tamaño del icono del menú */
|
2408
|
+
menuSize: PropTypes.oneOf(['small', 'medium', 'large']),
|
2409
|
+
/** Clase CSS adicional */
|
2410
|
+
className: PropTypes.string,
|
2411
|
+
/** Estilos adicionales */
|
2412
|
+
style: PropTypes.object,
|
2413
|
+
/** Espacio entre acciones */
|
2414
|
+
gap: PropTypes.string
|
2415
|
+
};
|
2416
|
+
|
2083
2417
|
var _excluded$f = ["id", "label", "icon", "action", "disabled", "loading", "outlined", "raised", "size", "type", "className", "ariaLabel", "tooltip", "form", "onClick", "onFocus", "onBlur", "onKeyDown"],
|
2084
2418
|
_excluded2$8 = ["states", "state", "className", "disabled", "onStateChange"];
|
2085
2419
|
function _catch$c(body, recover) {
|
@@ -4872,96 +5206,6 @@ List.defaultProps = {
|
|
4872
5206
|
role: 'list'
|
4873
5207
|
};
|
4874
5208
|
|
4875
|
-
/**
|
4876
|
-
* Page Context
|
4877
|
-
*/
|
4878
|
-
var MenuContext = React__default["default"].createContext({});
|
4879
|
-
|
4880
|
-
/**
|
4881
|
-
* Menu
|
4882
|
-
**/
|
4883
|
-
var Menu = function Menu(props) {
|
4884
|
-
var children = props.children;
|
4885
|
-
return /*#__PURE__*/React__default["default"].createElement("ul", null, children);
|
4886
|
-
};
|
4887
|
-
|
4888
|
-
/**
|
4889
|
-
* Menu Icon
|
4890
|
-
*/
|
4891
|
-
var MenuIcon = function MenuIcon(props) {
|
4892
|
-
var _props$icon = props.icon,
|
4893
|
-
icon = _props$icon === void 0 ? "more_vert" : _props$icon,
|
4894
|
-
children = props.children,
|
4895
|
-
align = props.align,
|
4896
|
-
_props$size = props.size,
|
4897
|
-
size = _props$size === void 0 ? "normal" : _props$size;
|
4898
|
-
var _useState = React.useState(false),
|
4899
|
-
open = _useState[0],
|
4900
|
-
setOpen = _useState[1];
|
4901
|
-
function toggle() {
|
4902
|
-
setOpen(!open);
|
4903
|
-
}
|
4904
|
-
return /*#__PURE__*/React__default["default"].createElement(MenuContext.Provider, {
|
4905
|
-
value: [open, setOpen]
|
4906
|
-
}, /*#__PURE__*/React__default["default"].createElement("div", {
|
4907
|
-
className: "menu-icon"
|
4908
|
-
}, /*#__PURE__*/React__default["default"].createElement(Icon, {
|
4909
|
-
icon: icon,
|
4910
|
-
size: size,
|
4911
|
-
clickable: true,
|
4912
|
-
action: toggle
|
4913
|
-
}), open ? /*#__PURE__*/React__default["default"].createElement("menu", {
|
4914
|
-
className: "" + align
|
4915
|
-
}, children) : null, open ? /*#__PURE__*/React__default["default"].createElement("div", {
|
4916
|
-
className: "overlay",
|
4917
|
-
onClick: toggle
|
4918
|
-
}) : null));
|
4919
|
-
};
|
4920
|
-
|
4921
|
-
/**
|
4922
|
-
* Menu Item
|
4923
|
-
*/
|
4924
|
-
var MenuItem = function MenuItem(props) {
|
4925
|
-
var icon = props.icon,
|
4926
|
-
label = props.label,
|
4927
|
-
meta = props.meta,
|
4928
|
-
_props$disabled = props.disabled,
|
4929
|
-
disabled = _props$disabled === void 0 ? false : _props$disabled,
|
4930
|
-
_props$size2 = props.size,
|
4931
|
-
size = _props$size2 === void 0 ? "normal" : _props$size2,
|
4932
|
-
onSelect = props.onSelect;
|
4933
|
-
var _useContext = React.useContext(MenuContext),
|
4934
|
-
setOpen = _useContext[1];
|
4935
|
-
function select() {
|
4936
|
-
if (!disabled) {
|
4937
|
-
if (onSelect) onSelect();
|
4938
|
-
setOpen(false);
|
4939
|
-
}
|
4940
|
-
}
|
4941
|
-
var style = disabled ? "disabled" : "";
|
4942
|
-
var labelTxt = label ? /*#__PURE__*/React__default["default"].createElement(Text, {
|
4943
|
-
format: TEXTFORMATS.STRING
|
4944
|
-
}, label) : null;
|
4945
|
-
return /*#__PURE__*/React__default["default"].createElement("li", {
|
4946
|
-
className: "menu-item " + style,
|
4947
|
-
onClick: select
|
4948
|
-
}, icon ? /*#__PURE__*/React__default["default"].createElement(Icon, {
|
4949
|
-
icon: icon,
|
4950
|
-
size: size
|
4951
|
-
}) : null, /*#__PURE__*/React__default["default"].createElement("label", null, labelTxt), meta ? /*#__PURE__*/React__default["default"].createElement("div", {
|
4952
|
-
className: "meta"
|
4953
|
-
}, meta) : null);
|
4954
|
-
};
|
4955
|
-
|
4956
|
-
/**
|
4957
|
-
* Menu Separator
|
4958
|
-
*/
|
4959
|
-
var MenuSeparator = function MenuSeparator(props) {
|
4960
|
-
return /*#__PURE__*/React__default["default"].createElement("li", {
|
4961
|
-
className: "menu-separator"
|
4962
|
-
});
|
4963
|
-
};
|
4964
|
-
|
4965
5209
|
var _excluded$9 = ["id", "className", "label", "name", "initial", "value", "editable", "onChange", "options", "type", "disabled", "required", "placeholder", "multiline", "rows", "maxLength", "minLength", "pattern", "validateValue", "size", "variant", "layout", "nameWidth", "copyable", "error", "helperText", "onFocus", "onBlur", "onValidationError", "clearable", "readOnly", "loading", "skeleton", "style"];
|
4966
5210
|
function _catch$a(body, recover) {
|
4967
5211
|
try {
|
@@ -6570,6 +6814,11 @@ var DataTable = function DataTable(props) {
|
|
6570
6814
|
var _useState2 = React.useState(false),
|
6571
6815
|
allChecked = _useState2[0],
|
6572
6816
|
setAllChecked = _useState2[1];
|
6817
|
+
|
6818
|
+
// Detectar si alguna fila tiene info para mostrar la columna de expansión
|
6819
|
+
var hasInfoRows = rows.some(function (row) {
|
6820
|
+
return row.info;
|
6821
|
+
});
|
6573
6822
|
function changeSort(id) {
|
6574
6823
|
if (multisort) {
|
6575
6824
|
var _Object$assign;
|
@@ -6650,15 +6899,16 @@ var DataTable = function DataTable(props) {
|
|
6650
6899
|
}).length] : [2, 1],
|
6651
6900
|
rowspan = _ref2[0],
|
6652
6901
|
colspan = _ref2[1];
|
6902
|
+
var headerClasses = (resizableStyle + " " + id).trim();
|
6653
6903
|
return /*#__PURE__*/React__default["default"].createElement("th", {
|
6654
6904
|
key: id,
|
6655
|
-
className:
|
6905
|
+
className: headerClasses,
|
6656
6906
|
rowSpan: rowspan,
|
6657
6907
|
colSpan: colspan
|
6658
6908
|
}, /*#__PURE__*/React__default["default"].createElement("div", null, id === "checked" && onCheckAll ? /*#__PURE__*/React__default["default"].createElement(CheckBox, {
|
6659
6909
|
onChange: checkAll,
|
6660
6910
|
value: allChecked
|
6661
|
-
}) : /*#__PURE__*/React__default["default"].createElement(Text, {
|
6911
|
+
}) : id === "actions" ? null : /*#__PURE__*/React__default["default"].createElement(Text, {
|
6662
6912
|
key: "th_" + id
|
6663
6913
|
}, label), sortable ? /*#__PURE__*/React__default["default"].createElement(SortIcon, {
|
6664
6914
|
sortDir: sortDir[id],
|
@@ -6666,10 +6916,13 @@ var DataTable = function DataTable(props) {
|
|
6666
6916
|
return changeSort(id);
|
6667
6917
|
}
|
6668
6918
|
}) : null));
|
6669
|
-
}), /*#__PURE__*/React__default["default"].createElement("th", {
|
6919
|
+
}), hasInfoRows ? /*#__PURE__*/React__default["default"].createElement("th", {
|
6670
6920
|
rowSpan: 2,
|
6671
|
-
colSpan: 1
|
6672
|
-
|
6921
|
+
colSpan: 1,
|
6922
|
+
style: {
|
6923
|
+
width: '3rem'
|
6924
|
+
}
|
6925
|
+
}) : null), /*#__PURE__*/React__default["default"].createElement("tr", null, columns.filter(function (_ref3) {
|
6673
6926
|
var type = _ref3.type;
|
6674
6927
|
return type === TYPES$1.ENTITY;
|
6675
6928
|
}).map(function (column) {
|
@@ -6692,7 +6945,8 @@ var DataTable = function DataTable(props) {
|
|
6692
6945
|
onSelect: select,
|
6693
6946
|
onDrop: moveRow,
|
6694
6947
|
editable: editable,
|
6695
|
-
expanded: expanded
|
6948
|
+
expanded: expanded,
|
6949
|
+
hasInfoRows: hasInfoRows
|
6696
6950
|
});
|
6697
6951
|
}) : /*#__PURE__*/React__default["default"].createElement("tr", null, /*#__PURE__*/React__default["default"].createElement("td", {
|
6698
6952
|
colSpan: 1000
|
@@ -6773,7 +7027,9 @@ var DataTableRow$1 = function DataTableRow(props) {
|
|
6773
7027
|
onSelect = props.onSelect,
|
6774
7028
|
editable = props.editable,
|
6775
7029
|
_props$expanded2 = props.expanded,
|
6776
|
-
expanded = _props$expanded2 === void 0 ? false : _props$expanded2
|
7030
|
+
expanded = _props$expanded2 === void 0 ? false : _props$expanded2,
|
7031
|
+
_props$hasInfoRows = props.hasInfoRows,
|
7032
|
+
hasInfoRows = _props$hasInfoRows === void 0 ? false : _props$hasInfoRows;
|
6777
7033
|
var _row$selected = row.selected,
|
6778
7034
|
selected = _row$selected === void 0 ? false : _row$selected,
|
6779
7035
|
className = row.className;
|
@@ -6797,16 +7053,16 @@ var DataTableRow$1 = function DataTableRow(props) {
|
|
6797
7053
|
cell: row[column.id],
|
6798
7054
|
editable: editable || column.editable
|
6799
7055
|
});
|
6800
|
-
}), row.info ? /*#__PURE__*/React__default["default"].createElement("td", null, /*#__PURE__*/React__default["default"].createElement(Icon, {
|
7056
|
+
}), hasInfoRows ? row.info ? /*#__PURE__*/React__default["default"].createElement("td", null, /*#__PURE__*/React__default["default"].createElement(Icon, {
|
6801
7057
|
icon: infoIcon,
|
6802
7058
|
clickable: true,
|
6803
7059
|
action: function action() {
|
6804
7060
|
return toggleInfo(!isInfoOpen);
|
6805
7061
|
}
|
6806
|
-
})) : /*#__PURE__*/React__default["default"].createElement("td", null)), row.info && isInfoOpen ? /*#__PURE__*/React__default["default"].createElement("tr", {
|
7062
|
+
})) : /*#__PURE__*/React__default["default"].createElement("td", null) : null), row.info && isInfoOpen ? /*#__PURE__*/React__default["default"].createElement("tr", {
|
6807
7063
|
className: "table-row-info"
|
6808
7064
|
}, /*#__PURE__*/React__default["default"].createElement("td", {
|
6809
|
-
colSpan: columns.length + 1
|
7065
|
+
colSpan: columns.length + (hasInfoRows ? 1 : 0)
|
6810
7066
|
}, isFunction$2(row.info) ? row.info() : row.info)) : null);
|
6811
7067
|
};
|
6812
7068
|
|
@@ -8353,7 +8609,6 @@ var DataTable2 = function DataTable2(props) {
|
|
8353
8609
|
|
8354
8610
|
// Handle tool selection
|
8355
8611
|
var handleToolSelect = React.useCallback(function (toolId) {
|
8356
|
-
console.log('handleToolSelect called with toolId:', toolId);
|
8357
8612
|
setActiveTool(function (prev) {
|
8358
8613
|
var newTool = prev === toolId ? null : toolId;
|
8359
8614
|
console.log('Tool changed from', prev, 'to', newTool);
|
@@ -8370,12 +8625,12 @@ var DataTable2 = function DataTable2(props) {
|
|
8370
8625
|
var defaultTools = React.useMemo(function () {
|
8371
8626
|
return [{
|
8372
8627
|
id: 'columns',
|
8373
|
-
icon: '
|
8628
|
+
icon: 'view_column',
|
8374
8629
|
title: 'Configurar columnas',
|
8375
8630
|
component: ColumnsPanel
|
8376
8631
|
}, {
|
8377
8632
|
id: 'export',
|
8378
|
-
icon: '
|
8633
|
+
icon: 'ios_share',
|
8379
8634
|
title: 'Exportar datos',
|
8380
8635
|
component: ExportPanel
|
8381
8636
|
}];
|
@@ -8456,12 +8711,19 @@ var DataTable2 = function DataTable2(props) {
|
|
8456
8711
|
return ['datatable2', "datatable2--" + size, "datatable2--" + density, "datatable2--" + theme, readability && 'datatable2--readable', readability && "datatable2--readable-" + readability, striped && 'datatable2--striped', bordered && 'datatable2--bordered', !hover && 'datatable2--no-hover', loading && 'datatable2--loading', skeleton && 'datatable2--skeleton', className].filter(Boolean).join(' ');
|
8457
8712
|
}, [size, density, theme, readability, striped, bordered, hover, loading, skeleton, className]);
|
8458
8713
|
|
8459
|
-
// Check if any row has actions column
|
8714
|
+
// Check if any row has actions column or if there's an actions column defined
|
8460
8715
|
var hasActionsColumn = React.useMemo(function () {
|
8461
|
-
|
8716
|
+
var hasActionsColumnDefined = columns.some(function (col) {
|
8717
|
+
return col.id === 'actions';
|
8718
|
+
});
|
8719
|
+
var hasRowsWithActions = rows.some(function (row) {
|
8720
|
+
return row.actions && Array.isArray(row.actions);
|
8721
|
+
});
|
8722
|
+
var hasRowsWithInfo = rows.some(function (row) {
|
8462
8723
|
return row.info;
|
8463
|
-
})
|
8464
|
-
|
8724
|
+
});
|
8725
|
+
return hasActionsColumnDefined || hasRowsWithActions || hasRowsWithInfo || filterable;
|
8726
|
+
}, [columns, rows, filterable]);
|
8465
8727
|
|
8466
8728
|
// Función de ordenamiento (similar a table.js)
|
8467
8729
|
var multiSort = React.useCallback(function (array, sortObject) {
|
@@ -8940,7 +9202,9 @@ var DataTableSummaryRow = function DataTableSummaryRow(_ref5) {
|
|
8940
9202
|
}, summary.formatted) :
|
8941
9203
|
// Mostrar "Total" en la primera columna si no hay checkboxes ni números
|
8942
9204
|
index === 0 && !shouldShowCheckboxes && !showRowNumbers ? /*#__PURE__*/React__default["default"].createElement("strong", null, "Total") : null);
|
8943
|
-
}), hasActionsColumn &&
|
9205
|
+
}), hasActionsColumn && !columns.some(function (col) {
|
9206
|
+
return col.id === 'actions';
|
9207
|
+
}) && /*#__PURE__*/React__default["default"].createElement("td", {
|
8944
9208
|
className: "datatable2__summary-cell datatable2__summary-cell--actions"
|
8945
9209
|
}));
|
8946
9210
|
};
|
@@ -9141,9 +9405,11 @@ var DataTableHeader = function DataTableHeader(_ref8) {
|
|
9141
9405
|
width: columnWidths[column.id],
|
9142
9406
|
onResize: onColumnResize
|
9143
9407
|
});
|
9144
|
-
}), hasActionsColumn &&
|
9408
|
+
}), hasActionsColumn && !columns.some(function (col) {
|
9409
|
+
return col.id === 'actions';
|
9410
|
+
}) && /*#__PURE__*/React__default["default"].createElement("th", {
|
9145
9411
|
className: "datatable2__actions-header"
|
9146
|
-
}
|
9412
|
+
})), filterable && /*#__PURE__*/React__default["default"].createElement(DataTableFiltersRow, {
|
9147
9413
|
columns: columns,
|
9148
9414
|
onClear: onClearFilters,
|
9149
9415
|
showRowNumbers: showRowNumbers,
|
@@ -9391,6 +9657,34 @@ var DataTableRow = function DataTableRow(_ref1) {
|
|
9391
9657
|
}
|
9392
9658
|
}));
|
9393
9659
|
}
|
9660
|
+
|
9661
|
+
// Manejar columna "actions" de manera especial
|
9662
|
+
if (column.id === 'actions') {
|
9663
|
+
return /*#__PURE__*/React__default["default"].createElement("td", {
|
9664
|
+
key: column.id,
|
9665
|
+
className: "datatable2__actions-cell"
|
9666
|
+
}, row.actions && Array.isArray(row.actions) && /*#__PURE__*/React__default["default"].createElement("div", {
|
9667
|
+
className: "datatable2__actions-container"
|
9668
|
+
}, row.actions.map(function (action, index) {
|
9669
|
+
return /*#__PURE__*/React__default["default"].createElement("span", {
|
9670
|
+
key: index,
|
9671
|
+
className: "datatable2__action-item"
|
9672
|
+
}, action);
|
9673
|
+
})), row.info && /*#__PURE__*/React__default["default"].createElement(Icon, {
|
9674
|
+
icon: isExpanded ? "expand_less" : "expand_more",
|
9675
|
+
size: "small",
|
9676
|
+
clickable: true,
|
9677
|
+
action: function action() {
|
9678
|
+
if (row.info && typeof row.info === 'object' && row.info.action) {
|
9679
|
+
row.info.action(row);
|
9680
|
+
}
|
9681
|
+
if (onRowExpand) {
|
9682
|
+
onRowExpand(row.id);
|
9683
|
+
}
|
9684
|
+
},
|
9685
|
+
className: "datatable2__expand-icon"
|
9686
|
+
}));
|
9687
|
+
}
|
9394
9688
|
return /*#__PURE__*/React__default["default"].createElement(DataTableCell, {
|
9395
9689
|
key: column.id,
|
9396
9690
|
column: column,
|
@@ -9402,7 +9696,9 @@ var DataTableRow = function DataTableRow(_ref1) {
|
|
9402
9696
|
onCellEdit: onCellEdit,
|
9403
9697
|
cellClassName: cellClassName
|
9404
9698
|
});
|
9405
|
-
}), hasActionsColumn &&
|
9699
|
+
}), hasActionsColumn && !columns.some(function (col) {
|
9700
|
+
return col.id === 'actions';
|
9701
|
+
}) && /*#__PURE__*/React__default["default"].createElement("td", {
|
9406
9702
|
className: "datatable2__actions-cell"
|
9407
9703
|
}, row.info && /*#__PURE__*/React__default["default"].createElement(Icon, {
|
9408
9704
|
icon: isExpanded ? "expand_less" : "expand_more",
|
@@ -9415,7 +9711,8 @@ var DataTableRow = function DataTableRow(_ref1) {
|
|
9415
9711
|
if (onRowExpand) {
|
9416
9712
|
onRowExpand(row.id);
|
9417
9713
|
}
|
9418
|
-
}
|
9714
|
+
},
|
9715
|
+
className: "datatable2__expand-icon"
|
9419
9716
|
})));
|
9420
9717
|
};
|
9421
9718
|
|
@@ -9578,7 +9875,9 @@ var DataTableFiltersRow = function DataTableFiltersRow(_ref11) {
|
|
9578
9875
|
key: column.id,
|
9579
9876
|
className: "datatable2__filter-cell"
|
9580
9877
|
}, column.filterable ? renderFilterField(column) : null);
|
9581
|
-
}), hasActionsColumn &&
|
9878
|
+
}), hasActionsColumn && !columns.some(function (col) {
|
9879
|
+
return col.id === 'actions';
|
9880
|
+
}) && /*#__PURE__*/React__default["default"].createElement("td", {
|
9582
9881
|
className: "datatable2__filter-cell datatable2__filter-cell--actions"
|
9583
9882
|
}, /*#__PURE__*/React__default["default"].createElement(Icon, {
|
9584
9883
|
icon: "close",
|
@@ -11350,10 +11649,20 @@ Token.defaultProps = {
|
|
11350
11649
|
variant: 'default'
|
11351
11650
|
};
|
11352
11651
|
|
11353
|
-
var _excluded$4 = ["nodes", "children", "searchable", "searchPlaceholder", "searchBy", "filterable", "sortable", "sortBy", "sortDirection", "multiSelect", "onMultiSelect", "
|
11652
|
+
var _excluded$4 = ["nodes", "children", "searchable", "searchPlaceholder", "searchBy", "filterable", "sortable", "sortBy", "sortDirection", "multiSelect", "onMultiSelect", "showExpandIcon", "onExpandAll", "onCollapseAll", "disabled", "loading", "empty", "emptyMessage", "emptyIcon", "className", "style", "ariaLabel"],
|
11354
11653
|
_excluded2$1 = ["id", "icon", "label", "tooltip", "open", "children", "actions", "onSelect", "disabled", "draggable", "onDragStart", "onDragEnd", "onDrop", "expandable", "level", "hasChildren", "loading", "badge", "className", "style"],
|
11355
11654
|
_excluded3 = ["id", "icon", "label", "actions", "onSelect", "selected", "onCheck", "checked", "disabled", "draggable", "onDragStart", "onDragEnd", "onDrop", "level", "badge", "tooltip", "className", "style"];
|
11356
11655
|
|
11656
|
+
// Context for tree state
|
11657
|
+
var TreeContext = React.createContext({
|
11658
|
+
multiSelect: false,
|
11659
|
+
selectedItems: [],
|
11660
|
+
onMultiSelect: null,
|
11661
|
+
searchTerm: '',
|
11662
|
+
forceExpandAll: false,
|
11663
|
+
forceCollapseAll: false
|
11664
|
+
});
|
11665
|
+
|
11357
11666
|
/**
|
11358
11667
|
* Enhanced Tree component with improved functionality while maintaining 100% compatibility
|
11359
11668
|
*/
|
@@ -11365,13 +11674,13 @@ var Tree = function Tree(props) {
|
|
11365
11674
|
searchable = _props$searchable === void 0 ? false : _props$searchable,
|
11366
11675
|
_props$searchPlacehol = props.searchPlaceholder,
|
11367
11676
|
searchPlaceholder = _props$searchPlacehol === void 0 ? "Search..." : _props$searchPlacehol,
|
11677
|
+
_props$searchBy = props.searchBy,
|
11678
|
+
searchBy = _props$searchBy === void 0 ? ['label'] : _props$searchBy,
|
11368
11679
|
_props$multiSelect = props.multiSelect,
|
11369
11680
|
multiSelect = _props$multiSelect === void 0 ? false : _props$multiSelect,
|
11370
11681
|
onMultiSelect = props.onMultiSelect,
|
11371
|
-
_props$
|
11372
|
-
|
11373
|
-
_props$collapseAll = props.collapseAll,
|
11374
|
-
collapseAll = _props$collapseAll === void 0 ? false : _props$collapseAll,
|
11682
|
+
_props$showExpandIcon = props.showExpandIcon,
|
11683
|
+
showExpandIcon = _props$showExpandIcon === void 0 ? false : _props$showExpandIcon,
|
11375
11684
|
onExpandAll = props.onExpandAll,
|
11376
11685
|
onCollapseAll = props.onCollapseAll,
|
11377
11686
|
_props$disabled = props.disabled,
|
@@ -11392,8 +11701,18 @@ var Tree = function Tree(props) {
|
|
11392
11701
|
searchTerm = _useState[0],
|
11393
11702
|
setSearchTerm = _useState[1];
|
11394
11703
|
var _useState2 = React.useState([]),
|
11704
|
+
selectedItems = _useState2[0],
|
11395
11705
|
setSelectedItems = _useState2[1];
|
11396
11706
|
React.useState(new Set());
|
11707
|
+
var _useState4 = React.useState(false),
|
11708
|
+
allExpanded = _useState4[0],
|
11709
|
+
setAllExpanded = _useState4[1];
|
11710
|
+
var _useState5 = React.useState(false),
|
11711
|
+
forceExpandAll = _useState5[0],
|
11712
|
+
setForceExpandAll = _useState5[1];
|
11713
|
+
var _useState6 = React.useState(false),
|
11714
|
+
forceCollapseAll = _useState6[0],
|
11715
|
+
setForceCollapseAll = _useState6[1];
|
11397
11716
|
var treeRef = React.useRef(null);
|
11398
11717
|
|
11399
11718
|
// Validate props
|
@@ -11406,8 +11725,70 @@ var Tree = function Tree(props) {
|
|
11406
11725
|
setSearchTerm(value);
|
11407
11726
|
}, []);
|
11408
11727
|
|
11728
|
+
// Apply expansion state to nodes based on current tree state
|
11729
|
+
var applyExpansionState = React.useCallback(function (nodeElements) {
|
11730
|
+
return React__default["default"].Children.toArray(nodeElements).map(function (child) {
|
11731
|
+
var _child$type;
|
11732
|
+
if (!React__default["default"].isValidElement(child)) return child;
|
11733
|
+
|
11734
|
+
// If it's a TreeNode, apply the current expansion state
|
11735
|
+
if (((_child$type = child.type) == null ? void 0 : _child$type.displayName) === 'TreeNode' || child.props.hasOwnProperty('open')) {
|
11736
|
+
var processedChildren = child.props.children ? applyExpansionState(child.props.children) : child.props.children;
|
11737
|
+
return React__default["default"].cloneElement(child, _extends({}, child.props, {
|
11738
|
+
open: allExpanded,
|
11739
|
+
// Apply current expansion state
|
11740
|
+
children: processedChildren
|
11741
|
+
}));
|
11742
|
+
}
|
11743
|
+
return child;
|
11744
|
+
});
|
11745
|
+
}, [allExpanded]);
|
11746
|
+
|
11747
|
+
// Filter nodes based on search term and auto-expand matching nodes
|
11748
|
+
var filterNodes = React.useCallback(function (nodeElements, searchTerm) {
|
11749
|
+
if (!searchTerm.trim()) {
|
11750
|
+
// When search is cleared, apply current expansion state
|
11751
|
+
return applyExpansionState(nodeElements);
|
11752
|
+
}
|
11753
|
+
return React__default["default"].Children.toArray(nodeElements).map(function (child) {
|
11754
|
+
if (!React__default["default"].isValidElement(child)) return child;
|
11755
|
+
|
11756
|
+
// Check if current node matches search
|
11757
|
+
var label = child.props.label || '';
|
11758
|
+
var matches = searchBy.some(function (field) {
|
11759
|
+
var value = child.props[field] || label;
|
11760
|
+
return typeof value === 'string' && value.toLowerCase().includes(searchTerm.toLowerCase());
|
11761
|
+
});
|
11762
|
+
|
11763
|
+
// Check if any children match (recursive)
|
11764
|
+
var hasMatchingChildren = false;
|
11765
|
+
var filteredChildren = child.props.children;
|
11766
|
+
if (child.props.children) {
|
11767
|
+
filteredChildren = filterNodes(child.props.children, searchTerm);
|
11768
|
+
hasMatchingChildren = React__default["default"].Children.count(filteredChildren) > 0;
|
11769
|
+
}
|
11770
|
+
|
11771
|
+
// If current node or children match, include it and auto-expand
|
11772
|
+
if (matches || hasMatchingChildren) {
|
11773
|
+
var _child$type2;
|
11774
|
+
// Clone the element and force it to be open if it's a TreeNode
|
11775
|
+
if (((_child$type2 = child.type) == null ? void 0 : _child$type2.displayName) === 'TreeNode' || child.props.hasOwnProperty('open')) {
|
11776
|
+
return React__default["default"].cloneElement(child, _extends({}, child.props, {
|
11777
|
+
open: true,
|
11778
|
+
// Auto-expand nodes with matches during search
|
11779
|
+
children: filteredChildren
|
11780
|
+
}));
|
11781
|
+
}
|
11782
|
+
return React__default["default"].cloneElement(child, _extends({}, child.props, {
|
11783
|
+
children: filteredChildren
|
11784
|
+
}));
|
11785
|
+
}
|
11786
|
+
return null;
|
11787
|
+
}).filter(Boolean);
|
11788
|
+
}, [searchBy, applyExpansionState]);
|
11789
|
+
|
11409
11790
|
// Handle multi-selection
|
11410
|
-
React.useCallback(function (id, selected) {
|
11791
|
+
var handleMultiSelect = React.useCallback(function (id, selected) {
|
11411
11792
|
if (!multiSelect) return;
|
11412
11793
|
setSelectedItems(function (prev) {
|
11413
11794
|
var newSelected = selected ? [].concat(prev, [id]) : prev.filter(function (item) {
|
@@ -11420,15 +11801,26 @@ var Tree = function Tree(props) {
|
|
11420
11801
|
});
|
11421
11802
|
}, [multiSelect, onMultiSelect]);
|
11422
11803
|
|
11423
|
-
// Handle expand/collapse all
|
11424
|
-
var
|
11425
|
-
|
11426
|
-
|
11427
|
-
|
11428
|
-
|
11429
|
-
|
11430
|
-
|
11431
|
-
|
11804
|
+
// Handle expand/collapse toggle - using context to propagate to all TreeNodes
|
11805
|
+
var handleExpandToggle = React.useCallback(function () {
|
11806
|
+
var newState = !allExpanded;
|
11807
|
+
setAllExpanded(newState);
|
11808
|
+
if (newState) {
|
11809
|
+
if (onExpandAll) onExpandAll();
|
11810
|
+
// Trigger expand all via context
|
11811
|
+
setForceExpandAll(true);
|
11812
|
+
setTimeout(function () {
|
11813
|
+
return setForceExpandAll(false);
|
11814
|
+
}, 100);
|
11815
|
+
} else {
|
11816
|
+
if (onCollapseAll) onCollapseAll();
|
11817
|
+
// Trigger collapse all via context
|
11818
|
+
setForceCollapseAll(true);
|
11819
|
+
setTimeout(function () {
|
11820
|
+
return setForceCollapseAll(false);
|
11821
|
+
}, 100);
|
11822
|
+
}
|
11823
|
+
}, [allExpanded, onExpandAll, onCollapseAll]);
|
11432
11824
|
|
11433
11825
|
// Generate CSS classes
|
11434
11826
|
var cssClasses = ['tree', disabled && 'tree--disabled', loading && 'tree--loading', searchable && 'tree--searchable', multiSelect && 'tree--multi-select', className].filter(Boolean).join(' ');
|
@@ -11476,11 +11868,23 @@ var Tree = function Tree(props) {
|
|
11476
11868
|
size: "large"
|
11477
11869
|
}), /*#__PURE__*/React__default["default"].createElement(Text, null, emptyMessage)));
|
11478
11870
|
}
|
11479
|
-
|
11871
|
+
var contextValue = {
|
11872
|
+
multiSelect: multiSelect,
|
11873
|
+
selectedItems: selectedItems,
|
11874
|
+
onMultiSelect: handleMultiSelect,
|
11875
|
+
searchTerm: searchTerm,
|
11876
|
+
forceExpandAll: forceExpandAll,
|
11877
|
+
forceCollapseAll: forceCollapseAll
|
11878
|
+
};
|
11879
|
+
return /*#__PURE__*/React__default["default"].createElement(TreeContext.Provider, {
|
11880
|
+
value: contextValue
|
11881
|
+
}, /*#__PURE__*/React__default["default"].createElement("div", _extends({
|
11480
11882
|
className: cssClasses,
|
11481
11883
|
style: style,
|
11482
11884
|
ref: treeRef
|
11483
|
-
}, ariaAttributes, restProps), searchable && /*#__PURE__*/React__default["default"].createElement("div", {
|
11885
|
+
}, ariaAttributes, restProps), (searchable || showExpandIcon) && /*#__PURE__*/React__default["default"].createElement("div", {
|
11886
|
+
className: "tree__header " + (!searchable && showExpandIcon ? 'tree__header--expand-only' : '')
|
11887
|
+
}, searchable && /*#__PURE__*/React__default["default"].createElement("div", {
|
11484
11888
|
className: "tree__search"
|
11485
11889
|
}, /*#__PURE__*/React__default["default"].createElement(TextField, {
|
11486
11890
|
id: "tree-search",
|
@@ -11490,29 +11894,17 @@ var Tree = function Tree(props) {
|
|
11490
11894
|
icon: "search",
|
11491
11895
|
outlined: true,
|
11492
11896
|
size: "small"
|
11493
|
-
})),
|
11494
|
-
className: "
|
11495
|
-
}, expandAll && /*#__PURE__*/React__default["default"].createElement("button", {
|
11496
|
-
className: "tree__control-button",
|
11497
|
-
onClick: handleExpandAll,
|
11498
|
-
"aria-label": "Expand all nodes"
|
11499
|
-
}, /*#__PURE__*/React__default["default"].createElement(Icon, {
|
11500
|
-
icon: "unfold_more",
|
11501
|
-
size: "small"
|
11502
|
-
}), /*#__PURE__*/React__default["default"].createElement(Text, {
|
11503
|
-
size: "sm"
|
11504
|
-
}, "Expand All")), collapseAll && /*#__PURE__*/React__default["default"].createElement("button", {
|
11505
|
-
className: "tree__control-button",
|
11506
|
-
onClick: handleCollapseAll,
|
11507
|
-
"aria-label": "Collapse all nodes"
|
11897
|
+
})), showExpandIcon && /*#__PURE__*/React__default["default"].createElement("div", {
|
11898
|
+
className: "tree__expand-control"
|
11508
11899
|
}, /*#__PURE__*/React__default["default"].createElement(Icon, {
|
11509
|
-
icon: "unfold_less",
|
11510
|
-
size: "small"
|
11511
|
-
|
11512
|
-
|
11513
|
-
|
11900
|
+
icon: allExpanded ? "unfold_less" : "unfold_more",
|
11901
|
+
size: "small",
|
11902
|
+
clickable: true,
|
11903
|
+
action: handleExpandToggle,
|
11904
|
+
tooltip: allExpanded ? "Collapse all" : "Expand all"
|
11905
|
+
}))), /*#__PURE__*/React__default["default"].createElement("div", {
|
11514
11906
|
className: "tree__content"
|
11515
|
-
}, nodes, children));
|
11907
|
+
}, nodes, searchable ? filterNodes(children, searchTerm) : applyExpansionState(children))));
|
11516
11908
|
};
|
11517
11909
|
|
11518
11910
|
/**
|
@@ -11548,19 +11940,44 @@ var TreeNode = function TreeNode(props) {
|
|
11548
11940
|
className = props.className,
|
11549
11941
|
style = props.style,
|
11550
11942
|
restProps = _objectWithoutPropertiesLoose(props, _excluded2$1);
|
11551
|
-
var
|
11552
|
-
isOpen =
|
11553
|
-
setIsOpen =
|
11554
|
-
var
|
11555
|
-
isDragging =
|
11556
|
-
setIsDragging =
|
11943
|
+
var _useState7 = React.useState(open),
|
11944
|
+
isOpen = _useState7[0],
|
11945
|
+
setIsOpen = _useState7[1];
|
11946
|
+
var _useState8 = React.useState(false),
|
11947
|
+
isDragging = _useState8[0],
|
11948
|
+
setIsDragging = _useState8[1];
|
11557
11949
|
var nodeRef = React.useRef(null);
|
11558
11950
|
|
11951
|
+
// Get tree context for forced expand/collapse
|
11952
|
+
var treeContext = React.useContext(TreeContext);
|
11953
|
+
var forceExpandAll = treeContext.forceExpandAll,
|
11954
|
+
forceCollapseAll = treeContext.forceCollapseAll;
|
11955
|
+
|
11559
11956
|
// Sync with open prop
|
11560
11957
|
React.useEffect(function () {
|
11561
11958
|
setIsOpen(open);
|
11562
11959
|
}, [open]);
|
11563
11960
|
|
11961
|
+
// Handle forced expand/collapse from tree context
|
11962
|
+
React.useEffect(function () {
|
11963
|
+
if (forceExpandAll && expandable) {
|
11964
|
+
setIsOpen(true);
|
11965
|
+
// Also update the DOM element
|
11966
|
+
if (nodeRef.current) {
|
11967
|
+
nodeRef.current.open = true;
|
11968
|
+
}
|
11969
|
+
}
|
11970
|
+
}, [forceExpandAll, expandable]);
|
11971
|
+
React.useEffect(function () {
|
11972
|
+
if (forceCollapseAll && expandable) {
|
11973
|
+
setIsOpen(false);
|
11974
|
+
// Also update the DOM element
|
11975
|
+
if (nodeRef.current) {
|
11976
|
+
nodeRef.current.open = false;
|
11977
|
+
}
|
11978
|
+
}
|
11979
|
+
}, [forceCollapseAll, expandable]);
|
11980
|
+
|
11564
11981
|
// Handle selection (maintaining original behavior)
|
11565
11982
|
var handleSelect = React.useCallback(function (event) {
|
11566
11983
|
if (disabled) return;
|
@@ -11568,14 +11985,13 @@ var TreeNode = function TreeNode(props) {
|
|
11568
11985
|
if (onSelect) onSelect(id);
|
11569
11986
|
}, [disabled, onSelect, id]);
|
11570
11987
|
|
11571
|
-
// Handle toggle
|
11988
|
+
// Handle toggle - sync with details element
|
11572
11989
|
var handleToggle = React.useCallback(function (event) {
|
11573
11990
|
if (disabled || !expandable) return;
|
11574
|
-
|
11575
|
-
|
11576
|
-
|
11577
|
-
|
11578
|
-
});
|
11991
|
+
|
11992
|
+
// Sync our state with the details element
|
11993
|
+
var detailsElement = event.currentTarget;
|
11994
|
+
setIsOpen(detailsElement.open);
|
11579
11995
|
}, [disabled, expandable]);
|
11580
11996
|
|
11581
11997
|
// Handle keyboard interaction
|
@@ -11653,24 +12069,29 @@ var TreeNode = function TreeNode(props) {
|
|
11653
12069
|
onDragStart: handleDragStart,
|
11654
12070
|
onDragEnd: handleDragEnd,
|
11655
12071
|
onDrop: handleDrop,
|
11656
|
-
onDragOver: handleDragOver
|
12072
|
+
onDragOver: handleDragOver,
|
12073
|
+
onToggle: handleToggle
|
11657
12074
|
}, restProps), /*#__PURE__*/React__default["default"].createElement("summary", _extends({
|
11658
12075
|
className: "tree-item",
|
11659
12076
|
onClick: function onClick(event) {
|
11660
|
-
// Si se hace click en el
|
11661
|
-
if (event.target
|
11662
|
-
|
12077
|
+
// Si se hace click en el toggle, permitir el comportamiento natural
|
12078
|
+
if (event.target.closest('.tree-node__toggle')) {
|
12079
|
+
// No hacer nada, dejar que el details maneje el toggle
|
12080
|
+
return;
|
12081
|
+
}
|
12082
|
+
|
12083
|
+
// Si hay onSelect y se hace click fuera del toggle, seleccionar
|
12084
|
+
if (onSelect) {
|
12085
|
+
event.preventDefault(); // Prevenir el toggle del details
|
12086
|
+
handleSelect(event);
|
11663
12087
|
}
|
12088
|
+
// Si no hay onSelect, permitir el comportamiento natural del details
|
11664
12089
|
},
|
11665
12090
|
onKeyDown: handleKeyDown
|
11666
12091
|
}, ariaAttributes, {
|
11667
12092
|
title: tooltip
|
11668
12093
|
}), hasChildren && expandable && /*#__PURE__*/React__default["default"].createElement("div", {
|
11669
|
-
className: "tree-node__toggle"
|
11670
|
-
onClick: function onClick(event) {
|
11671
|
-
event.stopPropagation();
|
11672
|
-
handleToggle(event);
|
11673
|
-
}
|
12094
|
+
className: "tree-node__toggle"
|
11674
12095
|
}, /*#__PURE__*/React__default["default"].createElement(Icon, {
|
11675
12096
|
icon: isOpen ? 'expand_less' : 'expand_more',
|
11676
12097
|
size: "small",
|
@@ -11687,11 +12108,7 @@ var TreeNode = function TreeNode(props) {
|
|
11687
12108
|
icon: "hourglass_empty",
|
11688
12109
|
size: "small"
|
11689
12110
|
})), /*#__PURE__*/React__default["default"].createElement("div", {
|
11690
|
-
className: "label " + clickable
|
11691
|
-
onClick: function onClick(event) {
|
11692
|
-
event.stopPropagation();
|
11693
|
-
handleSelect(event);
|
11694
|
-
}
|
12111
|
+
className: "label " + clickable
|
11695
12112
|
}, /*#__PURE__*/React__default["default"].createElement("span", {
|
11696
12113
|
className: "tree-node__label-text"
|
11697
12114
|
}, labelTxt), badge && /*#__PURE__*/React__default["default"].createElement("span", {
|
@@ -11733,11 +12150,20 @@ var TreeItem = function TreeItem(props) {
|
|
11733
12150
|
className = props.className,
|
11734
12151
|
style = props.style,
|
11735
12152
|
restProps = _objectWithoutPropertiesLoose(props, _excluded3);
|
11736
|
-
var
|
11737
|
-
isDragging =
|
11738
|
-
setIsDragging =
|
12153
|
+
var _useState9 = React.useState(false),
|
12154
|
+
isDragging = _useState9[0],
|
12155
|
+
setIsDragging = _useState9[1];
|
11739
12156
|
var itemRef = React.useRef(null);
|
11740
12157
|
|
12158
|
+
// Get tree context
|
12159
|
+
var treeContext = React.useContext(TreeContext);
|
12160
|
+
var multiSelect = treeContext.multiSelect,
|
12161
|
+
selectedItems = treeContext.selectedItems,
|
12162
|
+
handleTreeMultiSelect = treeContext.onMultiSelect;
|
12163
|
+
|
12164
|
+
// Check if this item is selected in multi-select mode
|
12165
|
+
var isMultiSelected = multiSelect && selectedItems.includes(id);
|
12166
|
+
|
11741
12167
|
// Handle selection (maintaining original behavior)
|
11742
12168
|
var handleSelect = React.useCallback(function (event) {
|
11743
12169
|
if (disabled) return;
|
@@ -11745,12 +12171,20 @@ var TreeItem = function TreeItem(props) {
|
|
11745
12171
|
if (onSelect) onSelect(id);
|
11746
12172
|
}, [disabled, onSelect, id]);
|
11747
12173
|
|
11748
|
-
// Handle checkbox (maintaining original behavior)
|
12174
|
+
// Handle checkbox (maintaining original behavior + multi-select)
|
11749
12175
|
var handleCheck = React.useCallback(function (event) {
|
11750
12176
|
if (disabled) return;
|
11751
12177
|
event.stopPropagation();
|
11752
|
-
|
11753
|
-
|
12178
|
+
var isChecked = event.target.checked;
|
12179
|
+
|
12180
|
+
// Handle original onCheck callback
|
12181
|
+
if (onCheck) onCheck(id, isChecked);
|
12182
|
+
|
12183
|
+
// Handle multi-select if enabled
|
12184
|
+
if (multiSelect && handleTreeMultiSelect) {
|
12185
|
+
handleTreeMultiSelect(id, isChecked);
|
12186
|
+
}
|
12187
|
+
}, [disabled, onCheck, id, multiSelect, handleTreeMultiSelect]);
|
11754
12188
|
|
11755
12189
|
// Handle keyboard interaction
|
11756
12190
|
var handleKeyDown = React.useCallback(function (event) {
|
@@ -11817,11 +12251,11 @@ var TreeItem = function TreeItem(props) {
|
|
11817
12251
|
onDrop: handleDrop,
|
11818
12252
|
onDragOver: handleDragOver,
|
11819
12253
|
title: tooltip
|
11820
|
-
}, ariaAttributes, restProps), onCheck && /*#__PURE__*/React__default["default"].createElement("div", {
|
12254
|
+
}, ariaAttributes, restProps), (onCheck || multiSelect) && /*#__PURE__*/React__default["default"].createElement("div", {
|
11821
12255
|
className: "tree-item__checkbox"
|
11822
12256
|
}, /*#__PURE__*/React__default["default"].createElement("input", {
|
11823
12257
|
type: "checkbox",
|
11824
|
-
checked: checked,
|
12258
|
+
checked: multiSelect ? isMultiSelected : checked,
|
11825
12259
|
onChange: handleCheck,
|
11826
12260
|
disabled: disabled,
|
11827
12261
|
"aria-label": "Select " + (typeof label === 'string' ? label : 'item')
|
@@ -11864,10 +12298,8 @@ Tree.propTypes = {
|
|
11864
12298
|
multiSelect: PropTypes.bool,
|
11865
12299
|
/** Multi-selection callback */
|
11866
12300
|
onMultiSelect: PropTypes.func,
|
11867
|
-
/** Show expand
|
11868
|
-
|
11869
|
-
/** Show collapse all button */
|
11870
|
-
collapseAll: PropTypes.bool,
|
12301
|
+
/** Show expand/collapse icon */
|
12302
|
+
showExpandIcon: PropTypes.bool,
|
11871
12303
|
/** Expand all callback */
|
11872
12304
|
onExpandAll: PropTypes.func,
|
11873
12305
|
/** Collapse all callback */
|
@@ -23011,6 +23443,7 @@ var isFunction = function isFunction(value) {
|
|
23011
23443
|
|
23012
23444
|
exports.Accordion = Accordion;
|
23013
23445
|
exports.ActionButton = ActionButton;
|
23446
|
+
exports.ActionsCell = ActionsCell;
|
23014
23447
|
exports.Avatar = Avatar;
|
23015
23448
|
exports.Button = Button;
|
23016
23449
|
exports.Calendar = Calendar;
|