@dreamtree-org/twreact-ui 2.0.2 → 2.0.4
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/README.md +9 -3
- package/ai-skills/dreamtree-ui.md +15 -3
- package/dist/ai-schema.json +25 -1
- package/dist/components/core/DatePicker.d.ts.map +1 -1
- package/dist/components/core/DateRangePicker.d.ts.map +1 -1
- package/dist/components/core/Select.d.ts.map +1 -1
- package/dist/components/core/Table/Table.d.ts.map +1 -1
- package/dist/components/navigation/Navbar.d.ts.map +1 -1
- package/dist/components/navigation/Sidebar.d.ts +2 -0
- package/dist/components/navigation/Sidebar.d.ts.map +1 -1
- package/dist/esm/components/core/DatePicker.js +4 -1
- package/dist/esm/components/core/DateRangePicker.js +6 -2
- package/dist/esm/components/core/Select.js +6 -2
- package/dist/esm/components/core/Table/Table.js +11 -3
- package/dist/esm/components/navigation/Navbar.js +23 -6
- package/dist/esm/components/navigation/Sidebar.js +9 -2
- package/dist/esm/hooks/useApi.js +37 -16
- package/dist/esm/hooks/useFocusTrap.js +21 -9
- package/dist/hooks/useApi.d.ts +18 -1
- package/dist/hooks/useApi.d.ts.map +1 -1
- package/dist/hooks/useFocusTrap.d.ts.map +1 -1
- package/dist/index.esm.js +121 -45
- package/dist/index.js +121 -45
- package/dist/types/index.d.ts +8 -1
- package/dist/types/index.d.ts.map +1 -1
- package/mcp/catalog.snapshot.json +51 -15
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -5996,9 +5996,29 @@ function Portal(_ref) {
|
|
|
5996
5996
|
// Internal (not exported from the package). Shared focus management for the
|
|
5997
5997
|
// overlay primitives (Drawer, Dialog, Popover, Tour, Sidebar, AppShell).
|
|
5998
5998
|
var FOCUSABLE_SELECTOR = ["a[href]", "button:not([disabled])", "textarea:not([disabled])", "input:not([disabled])", "select:not([disabled])", '[tabindex]:not([tabindex="-1"])'].join(",");
|
|
5999
|
+
// A responsive drawer (Sidebar's `md:hidden`, AppShell's `lg:hidden`) can be
|
|
6000
|
+
// "open" while CSS hides it on wide viewports; there is nothing to trap then.
|
|
6001
|
+
// `stopAt` (exclusive) bounds the walk, so getFocusable checks only the
|
|
6002
|
+
// elements between a candidate and its root.
|
|
6003
|
+
var isDisplayNone = function isDisplayNone(el) {
|
|
6004
|
+
var stopAt = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
|
|
6005
|
+
for (var node = el; node && node.nodeType === 1 && node !== stopAt; node = node.parentElement) {
|
|
6006
|
+
if (window.getComputedStyle(node).display === "none") return true;
|
|
6007
|
+
}
|
|
6008
|
+
return false;
|
|
6009
|
+
};
|
|
6010
|
+
// `.focus()` silently fails on an element that is not rendered (`display:none`
|
|
6011
|
+
// on it or an ancestor) or is `visibility:hidden` (inherited, so the element's
|
|
6012
|
+
// own computed value covers its ancestors). getClientRects() is not used:
|
|
6013
|
+
// jsdom reports empty rects for every element.
|
|
6014
|
+
var isRendered = function isRendered(el, root) {
|
|
6015
|
+
return window.getComputedStyle(el).visibility !== "hidden" && !isDisplayNone(el, root);
|
|
6016
|
+
};
|
|
6017
|
+
// Tabbable, rendered descendants of `root`, in DOM order. Used for the initial
|
|
6018
|
+
// focus and for the Tab trap's first/last items.
|
|
5999
6019
|
var getFocusable = function getFocusable(root) {
|
|
6000
6020
|
return root ? Array.from(root.querySelectorAll(FOCUSABLE_SELECTOR)).filter(function (el) {
|
|
6001
|
-
return el.getAttribute("aria-hidden") !== "true";
|
|
6021
|
+
return el.getAttribute("aria-hidden") !== "true" && isRendered(el, root);
|
|
6002
6022
|
}) : [];
|
|
6003
6023
|
};
|
|
6004
6024
|
// Only the most recently opened overlay reacts to Escape / Tab, so a Popover
|
|
@@ -6007,14 +6027,6 @@ var layerStack = [];
|
|
|
6007
6027
|
var isTopLayer = function isTopLayer(token) {
|
|
6008
6028
|
return layerStack[layerStack.length - 1] === token;
|
|
6009
6029
|
};
|
|
6010
|
-
// A responsive drawer (Sidebar's `md:hidden`, AppShell's `lg:hidden`) can be
|
|
6011
|
-
// "open" while CSS hides it on wide viewports; there is nothing to trap then.
|
|
6012
|
-
var isDisplayNone = function isDisplayNone(el) {
|
|
6013
|
-
for (var node = el; node && node.nodeType === 1; node = node.parentElement) {
|
|
6014
|
-
if (window.getComputedStyle(node).display === "none") return true;
|
|
6015
|
-
}
|
|
6016
|
-
return false;
|
|
6017
|
-
};
|
|
6018
6030
|
function cycleFocus(e, panel) {
|
|
6019
6031
|
if (isDisplayNone(panel)) return;
|
|
6020
6032
|
var focusables = getFocusable(panel);
|
|
@@ -6919,7 +6931,7 @@ var SheetCloseButton = function SheetCloseButton(_ref5) {
|
|
|
6919
6931
|
|
|
6920
6932
|
var _excluded$Y = ["open", "isOpen", "placement", "title", "description", "showCloseButton", "haptics", "onSnapChange"],
|
|
6921
6933
|
_excluded2$9 = ["className"],
|
|
6922
|
-
_excluded3$
|
|
6934
|
+
_excluded3$5 = ["className"],
|
|
6923
6935
|
_excluded4$3 = ["className"];
|
|
6924
6936
|
function ownKeys$16(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
6925
6937
|
function _objectSpread$16(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$16(Object(t), true).forEach(function (r) { _defineProperty$4(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$16(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
@@ -7007,7 +7019,7 @@ var SheetHeader = /*#__PURE__*/React.forwardRef(function (_ref3, ref) {
|
|
|
7007
7019
|
});
|
|
7008
7020
|
var SheetBody = /*#__PURE__*/React.forwardRef(function (_ref4, _ref5) {
|
|
7009
7021
|
var className = _ref4.className,
|
|
7010
|
-
props = _objectWithoutProperties$1(_ref4, _excluded3$
|
|
7022
|
+
props = _objectWithoutProperties$1(_ref4, _excluded3$5);
|
|
7011
7023
|
var ctx = React.useContext(SheetContext);
|
|
7012
7024
|
var dragProps = ctx ? mergeHandlers(ctx.bodyDragProps, props) : {};
|
|
7013
7025
|
return jsxRuntime.jsx("div", _objectSpread$16(_objectSpread$16(_objectSpread$16({
|
|
@@ -7517,7 +7529,8 @@ var Select = /*#__PURE__*/React.forwardRef(function (_ref, forwardedRef) {
|
|
|
7517
7529
|
return document.removeEventListener("mousedown", handleClickOutside);
|
|
7518
7530
|
};
|
|
7519
7531
|
}, []);
|
|
7520
|
-
var
|
|
7532
|
+
var isEmpty = selectedOptions.length === 0;
|
|
7533
|
+
var showClearButton = allowClear && !disabled && !isEmpty;
|
|
7521
7534
|
var displayValue = function displayValue() {
|
|
7522
7535
|
var _selectedOptions$;
|
|
7523
7536
|
if (multiSelect) {
|
|
@@ -7775,9 +7788,12 @@ var Select = /*#__PURE__*/React.forwardRef(function (_ref, forwardedRef) {
|
|
|
7775
7788
|
"aria-invalid": error ? true : undefined,
|
|
7776
7789
|
className: cn("flex w-full items-center justify-between rounded-md border border-gray-300 focus:outline-none focus:ring-2 focus:ring-primary-500 focus:border-transparent disabled:cursor-not-allowed disabled:opacity-50", SIZE_CLASSES$3[size] || SIZE_CLASSES$3.md, {
|
|
7777
7790
|
"border-error-500 focus:ring-error-500": error,
|
|
7778
|
-
|
|
7791
|
+
// Empty: the placeholder reads muted, like Input's
|
|
7792
|
+
// ::placeholder (#159). `className` still merges last.
|
|
7793
|
+
"text-muted": isEmpty,
|
|
7779
7794
|
"pr-14": showClearButton
|
|
7780
7795
|
}, className),
|
|
7796
|
+
"data-empty": isEmpty ? "" : undefined,
|
|
7781
7797
|
onClick: function onClick() {
|
|
7782
7798
|
if (!disabled) {
|
|
7783
7799
|
setIsOpen(function (prev) {
|
|
@@ -10666,7 +10682,7 @@ function FieldInput(_ref) {
|
|
|
10666
10682
|
});
|
|
10667
10683
|
}
|
|
10668
10684
|
|
|
10669
|
-
var _excluded$U = ["data", "columns", "sortable", "filterable", "selectable", "pagination", "pageSize", "onSort", "onFilter", "onFetch", "onFilterChange", "onSelectionChange", "onRowClick", "hasDetails", "DetailsComponent", "className", "withAction", "onAction", "actions", "replaceDefaultActions", "showSerial", "cellClass", "rowClass", "globalSearch", "limitOptions", "showLimitSelector", "onLimitChange", "showReloadButton", "renderReloadButton", "onReload", "stripedRows", "theme", "responsiveBreakpoint", "showToolbar", "showColumnPicker", "wrapCells", "mobileMaxFields", "serverSide", "totalRecords", "pageNumber", "onPageChange", "TheadComponent", "TfootComponent", "interactive", "onSave", "onEdit", "onRowAdd", "onRowDelete", "editKeyBinding", "newRowPosition", "addRowRef", "onInitAddRow", "renderAddRowButton", "renderExternalAddRow", "actionMenuPresentation", "defaultMobileView", "mobileFiltersPresentation", "swipeActions", "stickyHeader"],
|
|
10685
|
+
var _excluded$U = ["data", "columns", "sortable", "filterable", "selectable", "pagination", "paginationPosition", "pageSize", "onSort", "onFilter", "onFetch", "onFilterChange", "onSelectionChange", "onRowClick", "hasDetails", "DetailsComponent", "className", "withAction", "onAction", "actions", "replaceDefaultActions", "showSerial", "cellClass", "rowClass", "globalSearch", "limitOptions", "showLimitSelector", "onLimitChange", "showReloadButton", "renderReloadButton", "onReload", "stripedRows", "theme", "responsiveBreakpoint", "showToolbar", "showColumnPicker", "wrapCells", "mobileMaxFields", "serverSide", "totalRecords", "pageNumber", "onPageChange", "TheadComponent", "TfootComponent", "interactive", "onSave", "onEdit", "onRowAdd", "onRowDelete", "editKeyBinding", "newRowPosition", "addRowRef", "onInitAddRow", "renderAddRowButton", "renderExternalAddRow", "actionMenuPresentation", "defaultMobileView", "mobileFiltersPresentation", "swipeActions", "stickyHeader"],
|
|
10670
10686
|
_excluded2$8 = ["_key", "_isNew"];
|
|
10671
10687
|
function ownKeys$_(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
10672
10688
|
function _objectSpread$_(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$_(Object(t), true).forEach(function (r) { _defineProperty$4(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$_(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
@@ -10693,6 +10709,8 @@ var Table = /*#__PURE__*/React.forwardRef(function Table(_ref, ref) {
|
|
|
10693
10709
|
selectable = _ref$selectable === void 0 ? false : _ref$selectable,
|
|
10694
10710
|
_ref$pagination = _ref.pagination,
|
|
10695
10711
|
pagination = _ref$pagination === void 0 ? false : _ref$pagination,
|
|
10712
|
+
_ref$paginationPositi = _ref.paginationPosition,
|
|
10713
|
+
paginationPosition = _ref$paginationPositi === void 0 ? "both" : _ref$paginationPositi,
|
|
10696
10714
|
_ref$pageSize = _ref.pageSize,
|
|
10697
10715
|
pageSize = _ref$pageSize === void 0 ? 25 : _ref$pageSize,
|
|
10698
10716
|
onSort = _ref.onSort,
|
|
@@ -11830,6 +11848,12 @@ var Table = /*#__PURE__*/React.forwardRef(function Table(_ref, ref) {
|
|
|
11830
11848
|
openSwipe: openSwipe,
|
|
11831
11849
|
setOpenSwipe: setOpenSwipe
|
|
11832
11850
|
};
|
|
11851
|
+
// Which pager(s) render when `pagination` is on: the toolbar's compact
|
|
11852
|
+
// PaginationHeader ("top"), the PaginationFooter ("bottom"), or both
|
|
11853
|
+
// (default). Unknown values fall back to "both" (#135).
|
|
11854
|
+
var pagerPosition = paginationPosition === "top" || paginationPosition === "bottom" ? paginationPosition : "both";
|
|
11855
|
+
var showHeaderPager = pagination && pagerPosition !== "bottom";
|
|
11856
|
+
var showFooterPager = pagination && pagerPosition !== "top";
|
|
11833
11857
|
var showToolbarBar = showToolbar || interactive && (isDirty || !!renderAddRowButton || !!renderExternalAddRow);
|
|
11834
11858
|
var renderAddRowClickableRow = React.useCallback(function () {
|
|
11835
11859
|
return jsxRuntime.jsx("tr", {
|
|
@@ -11946,7 +11970,7 @@ var Table = /*#__PURE__*/React.forwardRef(function Table(_ref, ref) {
|
|
|
11946
11970
|
}), showToolbar && jsxRuntime.jsxs("div", {
|
|
11947
11971
|
className: "text-sm whitespace-nowrap",
|
|
11948
11972
|
children: [resultRange.start, " - ", resultRange.end, " of ", resultRange.total, " ", "results"]
|
|
11949
|
-
}), showToolbar &&
|
|
11973
|
+
}), showToolbar && showHeaderPager && jsxRuntime.jsx(PaginationHeader, {
|
|
11950
11974
|
currentPage: pageIndex,
|
|
11951
11975
|
totalPages: totalPages,
|
|
11952
11976
|
onPageChange: handlePageChange,
|
|
@@ -12227,7 +12251,7 @@ var Table = /*#__PURE__*/React.forwardRef(function Table(_ref, ref) {
|
|
|
12227
12251
|
}), TfootComponent && typeof TfootComponent === "function" ? jsxRuntime.jsx(TfootComponent, {
|
|
12228
12252
|
columns: columnsState,
|
|
12229
12253
|
data: filteredData
|
|
12230
|
-
}) : TfootComponent,
|
|
12254
|
+
}) : TfootComponent, showFooterPager && jsxRuntime.jsx(PaginationFooter, {
|
|
12231
12255
|
currentPage: pageIndex,
|
|
12232
12256
|
totalPages: totalPages,
|
|
12233
12257
|
onPageChange: handlePageChange,
|
|
@@ -18213,10 +18237,13 @@ var DatePicker = /*#__PURE__*/React.forwardRef(function (_ref, forwardedRef) {
|
|
|
18213
18237
|
"aria-invalid": error ? true : undefined,
|
|
18214
18238
|
className: cn("flex w-full items-center justify-between rounded-md border border-gray-300 bg-white px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-primary-500 focus:border-transparent disabled:cursor-not-allowed disabled:opacity-50", {
|
|
18215
18239
|
"border-error-500 focus:ring-error-500": error,
|
|
18216
|
-
|
|
18240
|
+
// Empty: the placeholder reads muted, like Input's
|
|
18241
|
+
// ::placeholder (#159). `className` still merges last.
|
|
18242
|
+
"text-muted": !selected,
|
|
18217
18243
|
// leave room for the sibling clear button overlaid on the field
|
|
18218
18244
|
"pr-16": showClear && selected
|
|
18219
18245
|
}, className),
|
|
18246
|
+
"data-empty": selected ? undefined : "",
|
|
18220
18247
|
onClick: function onClick() {
|
|
18221
18248
|
return setIsOpen(function (open) {
|
|
18222
18249
|
return !open;
|
|
@@ -19184,7 +19211,7 @@ ColorPicker.displayName = "ColorPicker";
|
|
|
19184
19211
|
|
|
19185
19212
|
var _excluded$P = ["fields", "onSubmit", "defaultValues", "validationSchema", "className", "submitText", "resetText", "submitButtonClass", "resetButtonClass", "showReset", "submitDisabled"],
|
|
19186
19213
|
_excluded2$7 = ["type", "name", "label", "required", "options", "placeholder", "helperText"],
|
|
19187
|
-
_excluded3$
|
|
19214
|
+
_excluded3$4 = ["onChange", "ref", "value"];
|
|
19188
19215
|
function ownKeys$U(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
19189
19216
|
function _objectSpread$U(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$U(Object(t), true).forEach(function (r) { _defineProperty$4(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$U(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
19190
19217
|
/**
|
|
@@ -19514,7 +19541,7 @@ var Form = /*#__PURE__*/React.forwardRef(function Form(_ref2, ref) {
|
|
|
19514
19541
|
_onChange3 = _ref9$field.onChange,
|
|
19515
19542
|
ref = _ref9$field.ref,
|
|
19516
19543
|
value = _ref9$field.value,
|
|
19517
|
-
field = _objectWithoutProperties$1(_ref9$field, _excluded3$
|
|
19544
|
+
field = _objectWithoutProperties$1(_ref9$field, _excluded3$4);
|
|
19518
19545
|
return jsxRuntime.jsxs("div", {
|
|
19519
19546
|
className: "w-full",
|
|
19520
19547
|
children: [label && jsxRuntime.jsxs("label", {
|
|
@@ -20480,7 +20507,8 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function DateRangePicker(_re
|
|
|
20480
20507
|
}));
|
|
20481
20508
|
};
|
|
20482
20509
|
// Display placeholder until both start and end are committed (mandatory range).
|
|
20483
|
-
var
|
|
20510
|
+
var isEmpty = !committed.start || !committed.end;
|
|
20511
|
+
var triggerText = isEmpty ? placeholder : formatRange(committed.start, committed.end);
|
|
20484
20512
|
var draftText = localStart && localEnd ? formatRange(localStart, localEnd) : placeholder;
|
|
20485
20513
|
var presetList = Array.isArray(presets) && presets.length > 0 ? presets : null;
|
|
20486
20514
|
var presetChips = presetList ? jsxRuntime.jsx("div", {
|
|
@@ -20560,9 +20588,12 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function DateRangePicker(_re
|
|
|
20560
20588
|
"aria-invalid": error ? true : undefined,
|
|
20561
20589
|
className: cn("flex w-full items-center justify-between rounded-md border border-gray-300 bg-white px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-primary-500 focus:border-transparent disabled:cursor-not-allowed disabled:opacity-50", {
|
|
20562
20590
|
"border-error-500 focus:ring-error-500": error,
|
|
20563
|
-
|
|
20591
|
+
// Empty: the placeholder reads muted, like Input's
|
|
20592
|
+
// ::placeholder (#159). `className` still merges last.
|
|
20593
|
+
"text-muted": isEmpty,
|
|
20564
20594
|
"pr-16": showClearButton
|
|
20565
20595
|
}, className),
|
|
20596
|
+
"data-empty": isEmpty ? "" : undefined,
|
|
20566
20597
|
onClick: function onClick() {
|
|
20567
20598
|
// The trigger always toggles, even mid-pick (DTUI-35): closing
|
|
20568
20599
|
// drops the uncommitted start, reopening starts from the last
|
|
@@ -25479,7 +25510,7 @@ var SearchField = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
|
25479
25510
|
});
|
|
25480
25511
|
SearchField.displayName = "SearchField";
|
|
25481
25512
|
|
|
25482
|
-
var _excluded$u = ["items", "collapsed", "onToggle", "className", "containerClassName", "stickyOffset", "logo", "footer", "user", "onUserClick", "drawerPosition", "isMobileOpen", "setIsMobileOpen", "showCollapsedTooltips", "tooltipOptions", "linkAs", "expandedIds", "defaultExpandedIds", "onExpandedChange", "swipeable"];
|
|
25513
|
+
var _excluded$u = ["items", "collapsed", "collapsible", "onToggle", "className", "containerClassName", "stickyOffset", "logo", "footer", "user", "onUserClick", "drawerPosition", "isMobileOpen", "setIsMobileOpen", "showCollapsedTooltips", "tooltipOptions", "linkAs", "expandedIds", "defaultExpandedIds", "onExpandedChange", "swipeable"];
|
|
25483
25514
|
function ownKeys$z(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
25484
25515
|
function _objectSpread$z(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$z(Object(t), true).forEach(function (r) { _defineProperty$4(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$z(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
25485
25516
|
// From `md` up the sidebar is an in-flow sticky column; below it, the same
|
|
@@ -25648,6 +25679,8 @@ var hasBadge$1 = function hasBadge(item) {
|
|
|
25648
25679
|
* - linkAs: element type used for items with `href` (default "a"; pass Next.js Link etc.)
|
|
25649
25680
|
* - collapsed: boolean (desktop collapsed)
|
|
25650
25681
|
* - onToggle: function to toggle collapse
|
|
25682
|
+
* - collapsible: boolean (default true) — false hides the md+ collapse/expand
|
|
25683
|
+
* toggle (the drawer keeps its "Close navigation" button)
|
|
25651
25684
|
* - expandedIds / defaultExpandedIds / onExpandedChange: open groups (ids)
|
|
25652
25685
|
* - className, containerClassName, stickyOffset, logo, footer, user, onUserClick
|
|
25653
25686
|
* - drawerPosition: 'left' | 'right'
|
|
@@ -25664,6 +25697,8 @@ var Sidebar = /*#__PURE__*/React.forwardRef(function (_ref2, ref) {
|
|
|
25664
25697
|
items = _ref2$items === void 0 ? [] : _ref2$items,
|
|
25665
25698
|
_ref2$collapsed = _ref2.collapsed,
|
|
25666
25699
|
collapsed = _ref2$collapsed === void 0 ? false : _ref2$collapsed,
|
|
25700
|
+
_ref2$collapsible = _ref2.collapsible,
|
|
25701
|
+
collapsible = _ref2$collapsible === void 0 ? true : _ref2$collapsible,
|
|
25667
25702
|
onToggle = _ref2.onToggle,
|
|
25668
25703
|
className = _ref2.className,
|
|
25669
25704
|
containerClassName = _ref2.containerClassName,
|
|
@@ -25995,6 +26030,9 @@ var Sidebar = /*#__PURE__*/React.forwardRef(function (_ref2, ref) {
|
|
|
25995
26030
|
if (drawerMode && mobileOpen && setIsMobileOpen) setIsMobileOpen(false);else onToggle === null || onToggle === void 0 || onToggle();
|
|
25996
26031
|
};
|
|
25997
26032
|
var toggleLabel = drawerMode ? "Close navigation" : effectiveCollapsed ? "Expand sidebar" : "Collapse sidebar";
|
|
26033
|
+
// `collapsible={false}`: no collapse/expand toggle on md+. The drawer keeps
|
|
26034
|
+
// its close button (44px touch target, the drawer's only visible close).
|
|
26035
|
+
var showToggle = drawerMode || collapsible;
|
|
25998
26036
|
var CloseChevron = isRight ? ChevronRight : ChevronLeft;
|
|
25999
26037
|
var toggleIcon = drawerMode ? jsxRuntime.jsx(CloseChevron, {
|
|
26000
26038
|
className: "h-5 w-5",
|
|
@@ -26061,7 +26099,7 @@ var Sidebar = /*#__PURE__*/React.forwardRef(function (_ref2, ref) {
|
|
|
26061
26099
|
children: [!effectiveCollapsed && logo && jsxRuntime.jsx("div", {
|
|
26062
26100
|
className: "flex min-w-0 items-center",
|
|
26063
26101
|
children: logo
|
|
26064
|
-
}), jsxRuntime.jsx("button", {
|
|
26102
|
+
}), showToggle && jsxRuntime.jsx("button", {
|
|
26065
26103
|
type: "button",
|
|
26066
26104
|
onClick: handleToggleClick,
|
|
26067
26105
|
className: cn("inline-flex h-11 w-11 shrink-0 items-center justify-center rounded-md", "hover:bg-gray-100 dark:hover:bg-gray-800", "focus:outline-none focus-visible:ring-2 focus-visible:ring-primary-500"),
|
|
@@ -26286,7 +26324,8 @@ var Avatar = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
|
26286
26324
|
Avatar.displayName = 'Avatar';
|
|
26287
26325
|
|
|
26288
26326
|
var _excluded$r = ["emitter", "content", "notifications"],
|
|
26289
|
-
_excluded2$5 = ["emitter", "logo", "center", "items", "user", "notifications", "searchable", "onSearch", "leftIcon", "rightMenuContent", "onLeftIconClick", "onLoginClick", "onLogoutClick", "className", "onFetch", "isMobileOpen", "setIsMobileOpen", "sticky", "largeTitle"]
|
|
26327
|
+
_excluded2$5 = ["emitter", "logo", "center", "items", "user", "notifications", "searchable", "onSearch", "leftIcon", "rightMenuContent", "onLeftIconClick", "leftIconLabel", "leftIconProps", "onLoginClick", "onLogoutClick", "className", "onFetch", "isMobileOpen", "setIsMobileOpen", "sticky", "largeTitle"],
|
|
26328
|
+
_excluded3$3 = ["className", "onClick"];
|
|
26290
26329
|
function ownKeys$w(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
26291
26330
|
function _objectSpread$w(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$w(Object(t), true).forEach(function (r) { _defineProperty$4(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$w(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
26292
26331
|
var NO_NOTIFICATIONS = [];
|
|
@@ -26517,6 +26556,9 @@ var Navbar = /*#__PURE__*/React.forwardRef(function (_ref3, ref) {
|
|
|
26517
26556
|
leftIcon = _ref3$leftIcon === void 0 ? jsxRuntime.jsx(ChevronLeft, {}) : _ref3$leftIcon,
|
|
26518
26557
|
RightMenuContentProp = _ref3.rightMenuContent,
|
|
26519
26558
|
onLeftIconClick = _ref3.onLeftIconClick,
|
|
26559
|
+
_ref3$leftIconLabel = _ref3.leftIconLabel,
|
|
26560
|
+
leftIconLabel = _ref3$leftIconLabel === void 0 ? "Go back" : _ref3$leftIconLabel,
|
|
26561
|
+
leftIconProps = _ref3.leftIconProps,
|
|
26520
26562
|
_ref3$onLoginClick = _ref3.onLoginClick,
|
|
26521
26563
|
onLoginClick = _ref3$onLoginClick === void 0 ? function () {
|
|
26522
26564
|
return console.log("invoked onLoginClick");
|
|
@@ -26563,6 +26605,18 @@ var Navbar = /*#__PURE__*/React.forwardRef(function (_ref3, ref) {
|
|
|
26563
26605
|
window.removeEventListener("resize", handleResize);
|
|
26564
26606
|
};
|
|
26565
26607
|
}, [handleResize]);
|
|
26608
|
+
// Left button: `leftIconLabel` names it ("Go back" by default; e.g. "Open
|
|
26609
|
+
// menu" when it opens a Sidebar drawer). `leftIconProps` lands on the
|
|
26610
|
+
// <button> (aria-expanded, aria-controls, data-*, …); its className merges
|
|
26611
|
+
// last and its onClick runs after `onLeftIconClick`.
|
|
26612
|
+
var _ref4 = leftIconProps || {},
|
|
26613
|
+
leftIconClassName = _ref4.className,
|
|
26614
|
+
leftIconOnClick = _ref4.onClick,
|
|
26615
|
+
leftIconRest = _objectWithoutProperties$1(_ref4, _excluded3$3);
|
|
26616
|
+
var handleLeftIconClick = function handleLeftIconClick(e) {
|
|
26617
|
+
onLeftIconClick === null || onLeftIconClick === void 0 || onLeftIconClick(e);
|
|
26618
|
+
leftIconOnClick === null || leftIconOnClick === void 0 || leftIconOnClick(e);
|
|
26619
|
+
};
|
|
26566
26620
|
// Handle search submit
|
|
26567
26621
|
var handleSearch = function handleSearch(e) {
|
|
26568
26622
|
e.preventDefault();
|
|
@@ -26632,13 +26686,14 @@ var Navbar = /*#__PURE__*/React.forwardRef(function (_ref3, ref) {
|
|
|
26632
26686
|
"aria-hidden": true
|
|
26633
26687
|
}), jsxRuntime.jsxs("div", {
|
|
26634
26688
|
className: "flex min-w-0 items-center",
|
|
26635
|
-
children: [leftIcon !== false && jsxRuntime.jsx("button", {
|
|
26636
|
-
onClick: onLeftIconClick,
|
|
26689
|
+
children: [leftIcon !== false && jsxRuntime.jsx("button", _objectSpread$w(_objectSpread$w({
|
|
26637
26690
|
type: "button",
|
|
26638
|
-
|
|
26639
|
-
|
|
26691
|
+
"aria-label": leftIconLabel
|
|
26692
|
+
}, leftIconRest), {}, {
|
|
26693
|
+
onClick: handleLeftIconClick,
|
|
26694
|
+
className: cn(ICON_BUTTON, "shrink-0 md:hidden", leftIconClassName),
|
|
26640
26695
|
children: leftIcon
|
|
26641
|
-
}), logo && jsxRuntime.jsx("div", {
|
|
26696
|
+
})), logo && jsxRuntime.jsx("div", {
|
|
26642
26697
|
className: "ml-2 min-w-0 truncate sm:ml-4 md:ml-0",
|
|
26643
26698
|
children: logo
|
|
26644
26699
|
})]
|
|
@@ -38878,6 +38933,10 @@ const {
|
|
|
38878
38933
|
mergeConfig
|
|
38879
38934
|
} = axios;
|
|
38880
38935
|
|
|
38936
|
+
var defaultIsUnauthorized = function defaultIsUnauthorized(error) {
|
|
38937
|
+
var _error$response;
|
|
38938
|
+
return (error === null || error === void 0 || (_error$response = error.response) === null || _error$response === void 0 ? void 0 : _error$response.status) === 401;
|
|
38939
|
+
};
|
|
38881
38940
|
var useApi = function useApi() {
|
|
38882
38941
|
var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
38883
38942
|
var _props$BASE_URL = props.BASE_URL,
|
|
@@ -38912,7 +38971,10 @@ var useApi = function useApi() {
|
|
|
38912
38971
|
headers: headers
|
|
38913
38972
|
});
|
|
38914
38973
|
}
|
|
38915
|
-
} : _props$sendRequest
|
|
38974
|
+
} : _props$sendRequest,
|
|
38975
|
+
onUnauthorized = props.onUnauthorized,
|
|
38976
|
+
_props$isUnauthorized = props.isUnauthorized,
|
|
38977
|
+
isUnauthorized = _props$isUnauthorized === void 0 ? defaultIsUnauthorized : _props$isUnauthorized;
|
|
38916
38978
|
var _useState = React.useState(null),
|
|
38917
38979
|
_useState2 = _slicedToArray(_useState, 2),
|
|
38918
38980
|
data = _useState2[0],
|
|
@@ -38929,20 +38991,25 @@ var useApi = function useApi() {
|
|
|
38929
38991
|
_useState8 = _slicedToArray(_useState7, 2),
|
|
38930
38992
|
lastRequest = _useState8[0],
|
|
38931
38993
|
setLastRequest = _useState8[1];
|
|
38932
|
-
|
|
38933
|
-
|
|
38934
|
-
|
|
38935
|
-
|
|
38936
|
-
|
|
38937
|
-
|
|
38938
|
-
|
|
38939
|
-
|
|
38940
|
-
|
|
38941
|
-
|
|
38994
|
+
// Runs `onUnauthorized` for a failed request. Never throws: a failing
|
|
38995
|
+
// predicate or handler must not replace the request's own error.
|
|
38996
|
+
var notifyUnauthorized = function notifyUnauthorized(error, request) {
|
|
38997
|
+
if (!onUnauthorized) return;
|
|
38998
|
+
try {
|
|
38999
|
+
if (isUnauthorized(error)) onUnauthorized(error, request);
|
|
39000
|
+
} catch (handlerError) {
|
|
39001
|
+
// eslint-disable-next-line no-console
|
|
39002
|
+
console.error('useApi: onUnauthorized / isUnauthorized threw', handlerError);
|
|
39003
|
+
}
|
|
39004
|
+
};
|
|
39005
|
+
// Single send path for fetchData and callApi, so `onUnauthorized` fires
|
|
39006
|
+
// exactly once per failing request and sees the `apiKey` when there is one.
|
|
39007
|
+
var request = /*#__PURE__*/function () {
|
|
39008
|
+
var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(url, method, data, headers, options, apiKey) {
|
|
39009
|
+
var _options$needLoading, needLoading, requestInstance, response, _error, _t;
|
|
38942
39010
|
return _regeneratorRuntime.wrap(function (_context) {
|
|
38943
39011
|
while (1) switch (_context.prev = _context.next) {
|
|
38944
39012
|
case 0:
|
|
38945
|
-
options = _args.length > 4 && _args[4] !== undefined ? _args[4] : {};
|
|
38946
39013
|
_options$needLoading = options.needLoading, needLoading = _options$needLoading === void 0 ? true : _options$needLoading;
|
|
38947
39014
|
requestInstance = createRequestInstance(BASE_URL, DEFAULT_HEADERS);
|
|
38948
39015
|
if (needLoading) setLoading(true);
|
|
@@ -38958,6 +39025,11 @@ var useApi = function useApi() {
|
|
|
38958
39025
|
_t = _context["catch"](1);
|
|
38959
39026
|
_error = _t;
|
|
38960
39027
|
setError(_error);
|
|
39028
|
+
notifyUnauthorized(_error, {
|
|
39029
|
+
apiKey: apiKey,
|
|
39030
|
+
url: url,
|
|
39031
|
+
method: String(method).toUpperCase()
|
|
39032
|
+
});
|
|
38961
39033
|
throw _error;
|
|
38962
39034
|
case 4:
|
|
38963
39035
|
_context.prev = 4;
|
|
@@ -38969,10 +39041,14 @@ var useApi = function useApi() {
|
|
|
38969
39041
|
}
|
|
38970
39042
|
}, _callee, null, [[1, 3, 4, 5]]);
|
|
38971
39043
|
}));
|
|
38972
|
-
return function
|
|
39044
|
+
return function request(_x, _x2, _x3, _x4, _x5, _x6) {
|
|
38973
39045
|
return _ref.apply(this, arguments);
|
|
38974
39046
|
};
|
|
38975
39047
|
}();
|
|
39048
|
+
var fetchData = function fetchData(url, method, data, headers) {
|
|
39049
|
+
var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};
|
|
39050
|
+
return request(url, method, data, headers, options);
|
|
39051
|
+
};
|
|
38976
39052
|
var callApi = /*#__PURE__*/function () {
|
|
38977
39053
|
var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(apiKey, args, needLoading) {
|
|
38978
39054
|
var apiResolve, _apiResolve, url, method, headers, payload;
|
|
@@ -38989,9 +39065,9 @@ var useApi = function useApi() {
|
|
|
38989
39065
|
_apiResolve = apiResolve.apply(void 0, _toConsumableArray$1(args)), url = _apiResolve.url, method = _apiResolve.method, headers = _apiResolve.headers, payload = _apiResolve.data;
|
|
38990
39066
|
_context2.prev = 2;
|
|
38991
39067
|
_context2.next = 3;
|
|
38992
|
-
return
|
|
39068
|
+
return request(url, method, payload, headers, {
|
|
38993
39069
|
needLoading: needLoading
|
|
38994
|
-
});
|
|
39070
|
+
}, apiKey);
|
|
38995
39071
|
case 3:
|
|
38996
39072
|
return _context2.abrupt("return", _context2.sent);
|
|
38997
39073
|
case 4:
|
|
@@ -39004,7 +39080,7 @@ var useApi = function useApi() {
|
|
|
39004
39080
|
}
|
|
39005
39081
|
}, _callee2, null, [[2,, 4, 5]]);
|
|
39006
39082
|
}));
|
|
39007
|
-
return function callApi(
|
|
39083
|
+
return function callApi(_x7, _x8, _x9) {
|
|
39008
39084
|
return _ref2.apply(this, arguments);
|
|
39009
39085
|
};
|
|
39010
39086
|
}();
|
package/dist/types/index.d.ts
CHANGED
|
@@ -366,6 +366,7 @@ export interface TableProps<T = any> extends BaseComponentProps {
|
|
|
366
366
|
filterable?: boolean;
|
|
367
367
|
selectable?: boolean;
|
|
368
368
|
pagination?: boolean;
|
|
369
|
+
paginationPosition?: 'top' | 'bottom' | 'both';
|
|
369
370
|
pageSize?: number;
|
|
370
371
|
onSort?: (key: string, direction: 'asc' | 'desc') => void;
|
|
371
372
|
onFilter?: (filters: Record<string, any>) => void;
|
|
@@ -591,7 +592,11 @@ export interface NavbarProps extends BaseComponentProps {
|
|
|
591
592
|
searchable?: boolean;
|
|
592
593
|
onSearch?: (term: string) => void;
|
|
593
594
|
leftIcon?: ReactNode | false;
|
|
594
|
-
onLeftIconClick?: () => void;
|
|
595
|
+
onLeftIconClick?: (event: React.MouseEvent<HTMLButtonElement>) => void;
|
|
596
|
+
/** Accessible name of the left button. Default `"Go back"`; e.g. `"Open navigation"` when it opens a Sidebar drawer. */
|
|
597
|
+
leftIconLabel?: string;
|
|
598
|
+
/** Extra props spread onto the left `<button>` (e.g. `aria-expanded`, `aria-controls`). `className` merges last; `onClick` runs after `onLeftIconClick`. */
|
|
599
|
+
leftIconProps?: ButtonHTMLAttributes<HTMLButtonElement> & Record<`data-${string}`, string | undefined>;
|
|
595
600
|
onLoginClick?: () => void;
|
|
596
601
|
onLogoutClick?: () => void;
|
|
597
602
|
rightMenuContent?: ReactNode | ((props: {
|
|
@@ -605,6 +610,8 @@ export interface NavbarProps extends BaseComponentProps {
|
|
|
605
610
|
export interface SidebarProps extends BaseComponentProps {
|
|
606
611
|
items: SidebarItem[];
|
|
607
612
|
collapsed?: boolean;
|
|
613
|
+
/** `false` hides the md+ collapse/expand toggle (the phone drawer keeps its 44px "Close navigation" button). Default `true`. */
|
|
614
|
+
collapsible?: boolean;
|
|
608
615
|
onToggle?: () => void;
|
|
609
616
|
logo?: ReactNode;
|
|
610
617
|
user?: UserInfo;
|