@dreamtree-org/twreact-ui 1.3.11 → 2.0.0
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 +40 -6
- package/ai-skills/dreamtree-ui.md +47 -9
- package/codemods/v2.cjs +198 -0
- package/dist/ai-schema.json +609 -33
- package/dist/components/blocks/AppShell.d.ts.map +1 -1
- package/dist/components/blocks/BottomActionBar.d.ts +6 -0
- package/dist/components/blocks/BottomActionBar.d.ts.map +1 -0
- package/dist/components/blocks/ConfirmDialog.d.ts.map +1 -1
- package/dist/components/blocks/PageHeader.d.ts.map +1 -1
- package/dist/components/core/Checkbox.d.ts.map +1 -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/Form.d.ts.map +1 -1
- package/dist/components/core/Input.d.ts.map +1 -1
- package/dist/components/core/Popover.d.ts.map +1 -1
- package/dist/components/core/ProgressBar.d.ts.map +1 -1
- package/dist/components/core/Rate.d.ts.map +1 -1
- package/dist/components/core/SearchField.d.ts +9 -0
- package/dist/components/core/SearchField.d.ts.map +1 -0
- package/dist/components/core/SegmentedControl.d.ts +8 -0
- package/dist/components/core/SegmentedControl.d.ts.map +1 -0
- package/dist/components/core/Select.d.ts.map +1 -1
- package/dist/components/core/SwipeableListItem.d.ts +4 -0
- package/dist/components/core/SwipeableListItem.d.ts.map +1 -0
- package/dist/components/core/SwipeableListItemGesture.d.ts +58 -0
- package/dist/components/core/SwipeableListItemGesture.d.ts.map +1 -0
- package/dist/components/core/Switch.d.ts.map +1 -1
- package/dist/components/core/Table/ActionMenu.d.ts +10 -3
- package/dist/components/core/Table/ActionMenu.d.ts.map +1 -1
- package/dist/components/core/Table/MobileCard.d.ts +10 -1
- package/dist/components/core/Table/MobileCard.d.ts.map +1 -1
- package/dist/components/core/Table/MobileFilters.d.ts +8 -2
- package/dist/components/core/Table/MobileFilters.d.ts.map +1 -1
- package/dist/components/core/Table/Table.d.ts.map +1 -1
- package/dist/components/core/Table/TableRow.d.ts +2 -1
- package/dist/components/core/Table/TableRow.d.ts.map +1 -1
- package/dist/components/core/Tabs.d.ts +3 -3
- package/dist/components/core/Tabs.d.ts.map +1 -1
- package/dist/components/core/ThreeDotPopover.d.ts +10 -22
- package/dist/components/core/ThreeDotPopover.d.ts.map +1 -1
- package/dist/components/core/Tooltip.d.ts +2 -1
- package/dist/components/core/Tooltip.d.ts.map +1 -1
- package/dist/components/core/internal/Calendar.d.ts +77 -0
- package/dist/components/core/internal/Calendar.d.ts.map +1 -0
- package/dist/components/core/menu/ActionMenuSurface.d.ts +42 -0
- package/dist/components/core/menu/ActionMenuSurface.d.ts.map +1 -0
- package/dist/components/core/menu/ActionSheetMenu.d.ts +17 -0
- package/dist/components/core/menu/ActionSheetMenu.d.ts.map +1 -0
- package/dist/components/core/menu/MenuPopover.d.ts +21 -0
- package/dist/components/core/menu/MenuPopover.d.ts.map +1 -0
- package/dist/components/core/menu/menuItems.d.ts +21 -0
- package/dist/components/core/menu/menuItems.d.ts.map +1 -0
- package/dist/components/core/menu/menuKeyboard.d.ts +16 -0
- package/dist/components/core/menu/menuKeyboard.d.ts.map +1 -0
- package/dist/components/feedback/ActionSheet.d.ts +4 -0
- package/dist/components/feedback/ActionSheet.d.ts.map +1 -0
- package/dist/components/feedback/Alert.d.ts.map +1 -1
- package/dist/components/feedback/Dialog.d.ts.map +1 -1
- package/dist/components/feedback/Drawer.d.ts.map +1 -1
- package/dist/components/feedback/Sheet.d.ts +4 -0
- package/dist/components/feedback/Sheet.d.ts.map +1 -0
- package/dist/components/feedback/Toast.d.ts +4 -3
- package/dist/components/feedback/Toast.d.ts.map +1 -1
- package/dist/components/feedback/ToastItem.d.ts +47 -0
- package/dist/components/feedback/ToastItem.d.ts.map +1 -0
- package/dist/components/feedback/ToastStack.d.ts +20 -0
- package/dist/components/feedback/ToastStack.d.ts.map +1 -0
- package/dist/components/feedback/ToastSwipe.d.ts +22 -0
- package/dist/components/feedback/ToastSwipe.d.ts.map +1 -0
- package/dist/components/feedback/Tour.d.ts.map +1 -1
- package/dist/components/feedback/sheetCore.d.ts +30 -0
- package/dist/components/feedback/sheetCore.d.ts.map +1 -0
- package/dist/components/navigation/Navbar.d.ts.map +1 -1
- package/dist/components/navigation/Sidebar.d.ts +6 -0
- package/dist/components/navigation/Sidebar.d.ts.map +1 -1
- package/dist/components/rich-text/RichTextEditor.d.ts.map +1 -1
- package/dist/components/rich-text/RichTextToolbar.d.ts +6 -2
- package/dist/components/rich-text/RichTextToolbar.d.ts.map +1 -1
- package/dist/components/utility/PullToRefresh.d.ts +5 -0
- package/dist/components/utility/PullToRefresh.d.ts.map +1 -0
- package/dist/esm/components/blocks/AppShell.js +97 -90
- package/dist/esm/components/blocks/BottomActionBar.js +132 -0
- package/dist/esm/components/blocks/ConfirmDialog.js +40 -4
- package/dist/esm/components/blocks/PageHeader.js +16 -3
- package/dist/esm/components/core/Checkbox.js +13 -24
- package/dist/esm/components/core/DatePicker.js +117 -304
- package/dist/esm/components/core/DateRangePicker.js +260 -308
- package/dist/esm/components/core/Form.js +11 -2
- package/dist/esm/components/core/Input.js +13 -18
- package/dist/esm/components/core/Popover.js +59 -48
- package/dist/esm/components/core/ProgressBar.js +36 -64
- package/dist/esm/components/core/Rate.js +5 -10
- package/dist/esm/components/core/SearchField.js +311 -0
- package/dist/esm/components/core/SegmentedControl.js +189 -0
- package/dist/esm/components/core/Select.js +185 -190
- package/dist/esm/components/core/SwipeableListItem.js +286 -0
- package/dist/esm/components/core/SwipeableListItemGesture.js +219 -0
- package/dist/esm/components/core/Switch.js +11 -13
- package/dist/esm/components/core/Table/ActionMenu.js +45 -231
- package/dist/esm/components/core/Table/ColumnMenu.js +1 -1
- package/dist/esm/components/core/Table/MobileCard.js +66 -16
- package/dist/esm/components/core/Table/MobileFilters.js +181 -10
- package/dist/esm/components/core/Table/Table.js +149 -102
- package/dist/esm/components/core/Table/TableRow.js +10 -2
- package/dist/esm/components/core/Tabs.js +7 -7
- package/dist/esm/components/core/ThreeDotPopover.js +93 -99
- package/dist/esm/components/core/Tooltip.js +138 -145
- package/dist/esm/components/core/internal/Calendar.js +381 -0
- package/dist/esm/components/core/menu/ActionMenuSurface.js +110 -0
- package/dist/esm/components/core/menu/ActionSheetMenu.js +140 -0
- package/dist/esm/components/core/menu/MenuPopover.js +177 -0
- package/dist/esm/components/core/menu/menuItems.js +61 -0
- package/dist/esm/components/core/menu/menuKeyboard.js +54 -0
- package/dist/esm/components/feedback/ActionSheet.js +55 -0
- package/dist/esm/components/feedback/Alert.js +63 -53
- package/dist/esm/components/feedback/Dialog.js +141 -53
- package/dist/esm/components/feedback/Drawer.js +130 -132
- package/dist/esm/components/feedback/Sheet.js +125 -0
- package/dist/esm/components/feedback/Toast.js +21 -291
- package/dist/esm/components/feedback/ToastItem.js +348 -0
- package/dist/esm/components/feedback/ToastStack.js +130 -0
- package/dist/esm/components/feedback/ToastSwipe.js +52 -0
- package/dist/esm/components/feedback/Tour.js +107 -30
- package/dist/esm/components/feedback/sheetCore.js +494 -0
- package/dist/esm/components/navigation/Dropdown.js +1 -1
- package/dist/esm/components/navigation/Navbar.js +172 -37
- package/dist/esm/components/navigation/Sidebar.js +263 -111
- package/dist/esm/components/rich-text/RichTextEditor.js +9 -3
- package/dist/esm/components/rich-text/RichTextToolbar.js +29 -9
- package/dist/esm/components/utility/Portal.js +31 -0
- package/dist/esm/components/utility/PullToRefresh.js +229 -0
- package/dist/esm/hooks/useFloatingPosition.js +82 -0
- package/dist/esm/hooks/useHaptics.js +65 -0
- package/dist/esm/hooks/usePresence.js +58 -0
- package/dist/esm/hooks/usePresentation.js +21 -0
- package/dist/esm/hooks/useSheetDrag.js +220 -0
- package/dist/esm/index.js +13 -2
- package/dist/esm/utils/position.js +10 -63
- package/dist/hooks/useFloatingPosition.d.ts +8 -4
- package/dist/hooks/useFloatingPosition.d.ts.map +1 -1
- package/dist/hooks/useHaptics.d.ts +19 -0
- package/dist/hooks/useHaptics.d.ts.map +1 -0
- package/dist/hooks/useSheetDrag.d.ts +31 -0
- package/dist/hooks/useSheetDrag.d.ts.map +1 -0
- package/dist/index.css +1 -1
- package/dist/index.d.ts +9 -1
- package/dist/index.esm.css +1 -1
- package/dist/index.esm.js +8851 -3198
- package/dist/index.js +8856 -3195
- package/dist/rich-text/index.js +41 -11
- package/dist/types/blocks.d.ts +32 -2
- package/dist/types/blocks.d.ts.map +1 -1
- package/dist/types/index.d.ts +353 -19
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/rich-text.d.ts +5 -0
- package/dist/types/rich-text.d.ts.map +1 -1
- package/dist/utils/position.d.ts +0 -15
- package/dist/utils/position.d.ts.map +1 -1
- package/doc/README.md +15 -0
- package/mcp/catalog.snapshot.json +1398 -464
- package/package.json +7 -2
- package/dist/esm/hooks/useSwipeToClose.js +0 -66
- package/dist/hooks/useSwipeToClose.d.ts +0 -24
- package/dist/hooks/useSwipeToClose.d.ts.map +0 -1
|
@@ -4,6 +4,8 @@ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
|
4
4
|
import { forwardRef, useState, useRef, useId, useMemo, useCallback, useImperativeHandle, useEffect } from 'react';
|
|
5
5
|
import { cn } from '../../../utils/cn.js';
|
|
6
6
|
import { useLatestRef } from '../../../hooks/useLatestRef.js';
|
|
7
|
+
import { useMediaQuery } from '../../../hooks/useMediaQuery.js';
|
|
8
|
+
import { usePresentation } from '../../../hooks/usePresentation.js';
|
|
7
9
|
import { Plus, RefreshCcw, Save, X, AlertCircle, Search, ChevronUp, ChevronDown, MoreVertical, List } from 'lucide-react';
|
|
8
10
|
import Select from '../Select.js';
|
|
9
11
|
import { DEFAULT_ACTIONS } from './constants.js';
|
|
@@ -16,7 +18,7 @@ import TableRow from './TableRow.js';
|
|
|
16
18
|
import MobileCard from './MobileCard.js';
|
|
17
19
|
import FieldInput from './FieldInput.js';
|
|
18
20
|
|
|
19
|
-
var _excluded = ["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"],
|
|
21
|
+
var _excluded = ["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"],
|
|
20
22
|
_excluded2 = ["_key", "_isNew"];
|
|
21
23
|
var DEFAULT_DATA = [];
|
|
22
24
|
var DEFAULT_COLUMNS = [];
|
|
@@ -112,101 +114,113 @@ var Table = /*#__PURE__*/forwardRef(function Table(_ref, ref) {
|
|
|
112
114
|
onInitAddRow = _ref.onInitAddRow,
|
|
113
115
|
renderAddRowButton = _ref.renderAddRowButton,
|
|
114
116
|
renderExternalAddRow = _ref.renderExternalAddRow,
|
|
117
|
+
_ref$actionMenuPresen = _ref.actionMenuPresentation,
|
|
118
|
+
actionMenuPresentation = _ref$actionMenuPresen === void 0 ? "auto" : _ref$actionMenuPresen,
|
|
119
|
+
_ref$defaultMobileVie = _ref.defaultMobileView,
|
|
120
|
+
defaultMobileView = _ref$defaultMobileVie === void 0 ? false : _ref$defaultMobileVie,
|
|
121
|
+
_ref$mobileFiltersPre = _ref.mobileFiltersPresentation,
|
|
122
|
+
mobileFiltersPresentation = _ref$mobileFiltersPre === void 0 ? "auto" : _ref$mobileFiltersPre,
|
|
123
|
+
swipeActions = _ref.swipeActions,
|
|
124
|
+
_ref$stickyHeader = _ref.stickyHeader,
|
|
125
|
+
stickyHeader = _ref$stickyHeader === void 0 ? false : _ref$stickyHeader,
|
|
115
126
|
props = _objectWithoutProperties(_ref, _excluded);
|
|
116
127
|
theme = _objectSpread2(_objectSpread2({}, DEFAULT_THEME), theme);
|
|
128
|
+
// Card mode follows a media query (SSR-safe): `defaultMobileView` on the
|
|
129
|
+
// server and while hydrating, then the live match. Same semantics as the old
|
|
130
|
+
// `window.innerWidth < responsiveBreakpoint` check.
|
|
131
|
+
var isMobileView = useMediaQuery("not all and (min-width: ".concat(Number(responsiveBreakpoint) || 0, "px)"), {
|
|
132
|
+
defaultValue: Boolean(defaultMobileView)
|
|
133
|
+
});
|
|
134
|
+
var phoneFilters = usePresentation(mobileFiltersPresentation === "sheet" ? "sheet" : mobileFiltersPresentation === "inline" ? "popover" : "auto") === "sheet";
|
|
117
135
|
// State
|
|
118
|
-
var _useState = useState(
|
|
119
|
-
_useState2 = _slicedToArray(_useState, 2),
|
|
120
|
-
isMobileView = _useState2[0],
|
|
121
|
-
setIsMobileView = _useState2[1];
|
|
122
|
-
var _useState3 = useState(function () {
|
|
136
|
+
var _useState = useState(function () {
|
|
123
137
|
return Array.isArray(initialData) ? initialData : [];
|
|
124
138
|
}),
|
|
139
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
140
|
+
tableData = _useState2[0],
|
|
141
|
+
setTableData = _useState2[1];
|
|
142
|
+
var _useState3 = useState(false),
|
|
125
143
|
_useState4 = _slicedToArray(_useState3, 2),
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
var _useState5 = useState(
|
|
144
|
+
loading = _useState4[0],
|
|
145
|
+
_setLoading = _useState4[1];
|
|
146
|
+
var _useState5 = useState(pageSize),
|
|
129
147
|
_useState6 = _slicedToArray(_useState5, 2),
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
var _useState7 = useState(
|
|
133
|
-
_useState8 = _slicedToArray(_useState7, 2),
|
|
134
|
-
limit = _useState8[0],
|
|
135
|
-
setLimit = _useState8[1];
|
|
136
|
-
var _useState9 = useState(function () {
|
|
148
|
+
limit = _useState6[0],
|
|
149
|
+
setLimit = _useState6[1];
|
|
150
|
+
var _useState7 = useState(function () {
|
|
137
151
|
return typeof pageNumber === "number" ? pageNumber : 1;
|
|
138
152
|
}),
|
|
139
|
-
|
|
140
|
-
currentPage =
|
|
141
|
-
setCurrentPage =
|
|
142
|
-
var
|
|
153
|
+
_useState8 = _slicedToArray(_useState7, 2),
|
|
154
|
+
currentPage = _useState8[0],
|
|
155
|
+
setCurrentPage = _useState8[1];
|
|
156
|
+
var _useState9 = useState(function () {
|
|
143
157
|
return Array.isArray(initialColumns) ? initialColumns.map(function (c) {
|
|
144
158
|
return _objectSpread2({}, c);
|
|
145
159
|
}) : [];
|
|
146
160
|
}),
|
|
161
|
+
_useState0 = _slicedToArray(_useState9, 2),
|
|
162
|
+
columnsState = _useState0[0],
|
|
163
|
+
setColumnsState = _useState0[1];
|
|
164
|
+
var _useState1 = useState(false),
|
|
147
165
|
_useState10 = _slicedToArray(_useState1, 2),
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
var _useState11 = useState(
|
|
151
|
-
_useState12 = _slicedToArray(_useState11, 2),
|
|
152
|
-
showColumnMenu = _useState12[0],
|
|
153
|
-
setShowColumnMenu = _useState12[1];
|
|
154
|
-
var _useState13 = useState({
|
|
166
|
+
showColumnMenu = _useState10[0],
|
|
167
|
+
setShowColumnMenu = _useState10[1];
|
|
168
|
+
var _useState11 = useState({
|
|
155
169
|
key: null,
|
|
156
170
|
direction: "asc"
|
|
157
171
|
}),
|
|
172
|
+
_useState12 = _slicedToArray(_useState11, 2),
|
|
173
|
+
sortConfig = _useState12[0],
|
|
174
|
+
setSortConfig = _useState12[1];
|
|
175
|
+
var _useState13 = useState({}),
|
|
158
176
|
_useState14 = _slicedToArray(_useState13, 2),
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
var _useState15 = useState(
|
|
177
|
+
filters = _useState14[0],
|
|
178
|
+
setFilters = _useState14[1];
|
|
179
|
+
var _useState15 = useState(""),
|
|
162
180
|
_useState16 = _slicedToArray(_useState15, 2),
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
var _useState17 = useState(
|
|
181
|
+
searchInput = _useState16[0],
|
|
182
|
+
setSearchInput = _useState16[1];
|
|
183
|
+
var _useState17 = useState(function () {
|
|
184
|
+
return new Set();
|
|
185
|
+
}),
|
|
166
186
|
_useState18 = _slicedToArray(_useState17, 2),
|
|
167
|
-
|
|
168
|
-
|
|
187
|
+
selectedRows = _useState18[0],
|
|
188
|
+
setSelectedRows = _useState18[1];
|
|
169
189
|
var _useState19 = useState(function () {
|
|
170
190
|
return new Set();
|
|
171
191
|
}),
|
|
172
192
|
_useState20 = _slicedToArray(_useState19, 2),
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
var _useState21 = useState(
|
|
176
|
-
return new Set();
|
|
177
|
-
}),
|
|
193
|
+
expandedRows = _useState20[0],
|
|
194
|
+
setExpandedRows = _useState20[1];
|
|
195
|
+
var _useState21 = useState(null),
|
|
178
196
|
_useState22 = _slicedToArray(_useState21, 2),
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
var _useState23 = useState(
|
|
197
|
+
activeActionRowKey = _useState22[0],
|
|
198
|
+
setActiveActionRowKey = _useState22[1];
|
|
199
|
+
var _useState23 = useState(false),
|
|
182
200
|
_useState24 = _slicedToArray(_useState23, 2),
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
var _useState25 = useState(false),
|
|
186
|
-
_useState26 = _slicedToArray(_useState25, 2),
|
|
187
|
-
showMobileFilters = _useState26[0],
|
|
188
|
-
setShowMobileFilters = _useState26[1];
|
|
201
|
+
showMobileFilters = _useState24[0],
|
|
202
|
+
setShowMobileFilters = _useState24[1];
|
|
189
203
|
// Interactive Mode State
|
|
190
|
-
var
|
|
204
|
+
var _useState25 = useState({}),
|
|
205
|
+
_useState26 = _slicedToArray(_useState25, 2),
|
|
206
|
+
pendingEdits = _useState26[0],
|
|
207
|
+
setPendingEdits = _useState26[1];
|
|
208
|
+
var _useState27 = useState([]),
|
|
191
209
|
_useState28 = _slicedToArray(_useState27, 2),
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
var _useState29 = useState(
|
|
210
|
+
newRows = _useState28[0],
|
|
211
|
+
setNewRows = _useState28[1];
|
|
212
|
+
var _useState29 = useState(null),
|
|
195
213
|
_useState30 = _slicedToArray(_useState29, 2),
|
|
196
|
-
|
|
197
|
-
|
|
214
|
+
activeCell = _useState30[0],
|
|
215
|
+
setActiveCell = _useState30[1];
|
|
198
216
|
var _useState31 = useState(null),
|
|
199
217
|
_useState32 = _slicedToArray(_useState31, 2),
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
var _useState33 = useState(
|
|
218
|
+
editingCell = _useState32[0],
|
|
219
|
+
setEditingCell = _useState32[1];
|
|
220
|
+
var _useState33 = useState(false),
|
|
203
221
|
_useState34 = _slicedToArray(_useState33, 2),
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
var _useState35 = useState(false),
|
|
207
|
-
_useState36 = _slicedToArray(_useState35, 2),
|
|
208
|
-
isSaving = _useState36[0],
|
|
209
|
-
setIsSaving = _useState36[1];
|
|
222
|
+
isSaving = _useState34[0],
|
|
223
|
+
setIsSaving = _useState34[1];
|
|
210
224
|
var tableContainerRef = useRef(null);
|
|
211
225
|
// Refs
|
|
212
226
|
var columnMenuRef = useRef(null);
|
|
@@ -564,10 +578,10 @@ var Table = /*#__PURE__*/forwardRef(function Table(_ref, ref) {
|
|
|
564
578
|
}, [pageSize]);
|
|
565
579
|
// Follow an external `pageNumber` change (adjust-during-render pattern);
|
|
566
580
|
// internal page navigation is left alone while the prop is unchanged.
|
|
567
|
-
var
|
|
568
|
-
|
|
569
|
-
prevPageNumber =
|
|
570
|
-
setPrevPageNumber =
|
|
581
|
+
var _useState35 = useState(pageNumber),
|
|
582
|
+
_useState36 = _slicedToArray(_useState35, 2),
|
|
583
|
+
prevPageNumber = _useState36[0],
|
|
584
|
+
setPrevPageNumber = _useState36[1];
|
|
571
585
|
if (pageNumber !== prevPageNumber) {
|
|
572
586
|
setPrevPageNumber(pageNumber);
|
|
573
587
|
if (typeof pageNumber === "number" && pageNumber !== currentPage) {
|
|
@@ -588,16 +602,6 @@ var Table = /*#__PURE__*/forwardRef(function Table(_ref, ref) {
|
|
|
588
602
|
initialDataRef.current = initialData;
|
|
589
603
|
}
|
|
590
604
|
}, [initialData]);
|
|
591
|
-
useEffect(function () {
|
|
592
|
-
var checkMobile = function checkMobile() {
|
|
593
|
-
return setIsMobileView(window.innerWidth < responsiveBreakpoint);
|
|
594
|
-
};
|
|
595
|
-
checkMobile();
|
|
596
|
-
window.addEventListener("resize", checkMobile);
|
|
597
|
-
return function () {
|
|
598
|
-
return window.removeEventListener("resize", checkMobile);
|
|
599
|
-
};
|
|
600
|
-
}, [responsiveBreakpoint]);
|
|
601
605
|
// Click-outside handlers
|
|
602
606
|
var closeColumnMenu = useCallback(function () {
|
|
603
607
|
return setShowColumnMenu(false);
|
|
@@ -608,14 +612,21 @@ var Table = /*#__PURE__*/forwardRef(function Table(_ref, ref) {
|
|
|
608
612
|
useClickOutside([columnMenuRef, columnToggleBtnRef], closeColumnMenu, {
|
|
609
613
|
enabled: showColumnMenu
|
|
610
614
|
});
|
|
611
|
-
useClickOutside([actionMenuRef], closeActionMenu, {
|
|
612
|
-
enabled: activeActionRowKey !== null
|
|
613
|
-
});
|
|
614
615
|
// Computed values
|
|
615
616
|
var activeAnchorEl = useMemo(function () {
|
|
616
617
|
if (activeActionRowKey === null) return null;
|
|
617
618
|
return actionButtonRefs.current[activeActionRowKey];
|
|
618
619
|
}, [activeActionRowKey]);
|
|
620
|
+
// The trigger counts as "inside": a press on it must not close the menu
|
|
621
|
+
// only for the trigger's own click to re-open it.
|
|
622
|
+
var activeAnchorRef = useMemo(function () {
|
|
623
|
+
return {
|
|
624
|
+
current: activeAnchorEl
|
|
625
|
+
};
|
|
626
|
+
}, [activeAnchorEl]);
|
|
627
|
+
useClickOutside([actionMenuRef, activeAnchorRef], closeActionMenu, {
|
|
628
|
+
enabled: activeActionRowKey !== null
|
|
629
|
+
});
|
|
619
630
|
var visibleColumns = useMemo(function () {
|
|
620
631
|
return columnsState.filter(function (col) {
|
|
621
632
|
return col.isVisible !== false;
|
|
@@ -937,6 +948,21 @@ var Table = /*#__PURE__*/forwardRef(function Table(_ref, ref) {
|
|
|
937
948
|
});
|
|
938
949
|
setCurrentPage(1);
|
|
939
950
|
}, [onFilter, onFilterChange]);
|
|
951
|
+
// Commits several filters at once (the phone filter sheet's Apply).
|
|
952
|
+
var applyFilters = useCallback(function (patch) {
|
|
953
|
+
setFilters(function (prev) {
|
|
954
|
+
var newFilters = _objectSpread2(_objectSpread2({}, prev), patch);
|
|
955
|
+
onFilter === null || onFilter === void 0 || onFilter(newFilters);
|
|
956
|
+
onFilterChange === null || onFilterChange === void 0 || onFilterChange(newFilters);
|
|
957
|
+
return newFilters;
|
|
958
|
+
});
|
|
959
|
+
setCurrentPage(1);
|
|
960
|
+
}, [onFilter, onFilterChange]);
|
|
961
|
+
// One open swipe row at a time: `{ key, side }`.
|
|
962
|
+
var _useState37 = useState(null),
|
|
963
|
+
_useState38 = _slicedToArray(_useState37, 2),
|
|
964
|
+
openSwipe = _useState38[0],
|
|
965
|
+
setOpenSwipe = _useState38[1];
|
|
940
966
|
var handleSelectAll = useCallback(function () {
|
|
941
967
|
setSelectedRows(function (prev) {
|
|
942
968
|
var newSelection = new Set(prev);
|
|
@@ -1133,6 +1159,7 @@ var Table = /*#__PURE__*/forwardRef(function Table(_ref, ref) {
|
|
|
1133
1159
|
activeAnchorEl: activeAnchorEl,
|
|
1134
1160
|
registerActionButton: registerActionButton,
|
|
1135
1161
|
actionMenuRef: actionMenuRef,
|
|
1162
|
+
actionMenuPresentation: actionMenuPresentation,
|
|
1136
1163
|
toggleExpandRow: toggleExpandRow,
|
|
1137
1164
|
handleSelectRow: handleSelectRow,
|
|
1138
1165
|
toggleActions: toggleActions,
|
|
@@ -1147,7 +1174,10 @@ var Table = /*#__PURE__*/forwardRef(function Table(_ref, ref) {
|
|
|
1147
1174
|
onCellDoubleClick: handleCellDoubleClick,
|
|
1148
1175
|
renderInteractiveCellInput: renderInteractiveCellInput,
|
|
1149
1176
|
invalidCellSet: invalidCellSet,
|
|
1150
|
-
pendingEdits: pendingEdits
|
|
1177
|
+
pendingEdits: pendingEdits,
|
|
1178
|
+
swipeActions: swipeActions,
|
|
1179
|
+
openSwipe: openSwipe,
|
|
1180
|
+
setOpenSwipe: setOpenSwipe
|
|
1151
1181
|
};
|
|
1152
1182
|
var showToolbarBar = showToolbar || interactive && (isDirty || !!renderAddRowButton || !!renderExternalAddRow);
|
|
1153
1183
|
var renderAddRowClickableRow = useCallback(function () {
|
|
@@ -1314,7 +1344,9 @@ var Table = /*#__PURE__*/forwardRef(function Table(_ref, ref) {
|
|
|
1314
1344
|
filterable: filterable,
|
|
1315
1345
|
visibleColumns: visibleColumns,
|
|
1316
1346
|
filters: filters,
|
|
1317
|
-
handleFilter: handleFilter
|
|
1347
|
+
handleFilter: handleFilter,
|
|
1348
|
+
applyFilters: applyFilters,
|
|
1349
|
+
presentation: phoneFilters ? "sheet" : "inline"
|
|
1318
1350
|
}), columnPickerVisible && showColumnMenu && jsx(ColumnMenu, {
|
|
1319
1351
|
id: columnMenuId,
|
|
1320
1352
|
columns: columnsState,
|
|
@@ -1322,12 +1354,16 @@ var Table = /*#__PURE__*/forwardRef(function Table(_ref, ref) {
|
|
|
1322
1354
|
menuRef: columnMenuRef,
|
|
1323
1355
|
theme: safeTheme
|
|
1324
1356
|
}), !isMobileView && jsx("div", {
|
|
1325
|
-
|
|
1357
|
+
"data-sticky-header": stickyHeader ? "" : undefined,
|
|
1358
|
+
className: cn(stickyHeader ? "overflow-auto overscroll-contain" : "overflow-x-auto overflow-y-visible"),
|
|
1359
|
+
style: stickyHeader && stickyHeader !== true ? {
|
|
1360
|
+
maxHeight: typeof stickyHeader === "number" ? "".concat(stickyHeader, "px") : stickyHeader
|
|
1361
|
+
} : undefined,
|
|
1326
1362
|
children: jsxs("table", _objectSpread2(_objectSpread2({
|
|
1327
1363
|
className: cn("min-w-full divide-y divide-line", className)
|
|
1328
1364
|
}, props), {}, {
|
|
1329
1365
|
children: [jsxs("thead", {
|
|
1330
|
-
className: safeTheme.accentColor,
|
|
1366
|
+
className: cn(safeTheme.accentColor, stickyHeader && "sticky top-0 z-sticky shadow-[0_1px_0_0] shadow-line"),
|
|
1331
1367
|
children: [jsxs("tr", {
|
|
1332
1368
|
children: [hasDetailsColumn && jsx("th", {
|
|
1333
1369
|
className: "w-8 px-4 py-3"
|
|
@@ -1344,33 +1380,44 @@ var Table = /*#__PURE__*/forwardRef(function Table(_ref, ref) {
|
|
|
1344
1380
|
})
|
|
1345
1381
|
}), visibleColumns.map(function (column) {
|
|
1346
1382
|
var _column$rules;
|
|
1383
|
+
var isSortable = sortable && column.sortable !== false;
|
|
1384
|
+
var isSorted = sortConfig.key === column.key;
|
|
1385
|
+
var ariaSort = !isSortable ? undefined : isSorted ? sortConfig.direction === "desc" ? "descending" : "ascending" : "none";
|
|
1386
|
+
var labelContent = jsxs(Fragment, {
|
|
1387
|
+
children: [jsx("span", {
|
|
1388
|
+
children: column.label
|
|
1389
|
+
}), (column.required || ((_column$rules = column.rules) === null || _column$rules === void 0 ? void 0 : _column$rules.required)) && jsx("span", {
|
|
1390
|
+
className: "text-error-500 font-bold ml-0.5",
|
|
1391
|
+
title: "Required field",
|
|
1392
|
+
children: "*"
|
|
1393
|
+
})]
|
|
1394
|
+
});
|
|
1347
1395
|
return jsx("th", {
|
|
1348
|
-
|
|
1349
|
-
|
|
1350
|
-
|
|
1351
|
-
|
|
1352
|
-
|
|
1353
|
-
|
|
1354
|
-
|
|
1355
|
-
|
|
1356
|
-
|
|
1357
|
-
|
|
1358
|
-
}), (column.required || ((_column$rules = column.rules) === null || _column$rules === void 0 ? void 0 : _column$rules.required)) && jsx("span", {
|
|
1359
|
-
className: "text-error-500 font-bold ml-0.5",
|
|
1360
|
-
title: "Required field",
|
|
1361
|
-
children: "*"
|
|
1362
|
-
}), sortable && column.sortable !== false && jsxs("div", {
|
|
1396
|
+
scope: "col",
|
|
1397
|
+
"aria-sort": ariaSort,
|
|
1398
|
+
className: cn("px-6 py-3 text-left text-xs font-medium text-primary-700 uppercase tracking-wider", isSortable && "p-0"),
|
|
1399
|
+
children: isSortable ? jsxs("button", {
|
|
1400
|
+
type: "button",
|
|
1401
|
+
onClick: function onClick() {
|
|
1402
|
+
return handleSort(column.key);
|
|
1403
|
+
},
|
|
1404
|
+
className: cn("flex w-full items-center gap-1 px-6 py-3 text-left uppercase tracking-wider", "hover:bg-line/50 outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-primary-500", "transition-colors duration-fast motion-reduce:transition-none"),
|
|
1405
|
+
children: [labelContent, jsxs("span", {
|
|
1363
1406
|
className: "flex flex-col",
|
|
1407
|
+
"aria-hidden": "true",
|
|
1364
1408
|
children: [jsx(ChevronUp, {
|
|
1365
1409
|
className: cn("h-3 w-3", {
|
|
1366
|
-
"text-primary-600":
|
|
1410
|
+
"text-primary-600": isSorted && sortConfig.direction === "asc"
|
|
1367
1411
|
})
|
|
1368
1412
|
}), jsx(ChevronDown, {
|
|
1369
1413
|
className: cn("h-3 w-3 -mt-1", {
|
|
1370
|
-
"text-primary-600":
|
|
1414
|
+
"text-primary-600": isSorted && sortConfig.direction === "desc"
|
|
1371
1415
|
})
|
|
1372
1416
|
})]
|
|
1373
1417
|
})]
|
|
1418
|
+
}) : jsx("div", {
|
|
1419
|
+
className: "flex items-center gap-1",
|
|
1420
|
+
children: labelContent
|
|
1374
1421
|
})
|
|
1375
1422
|
}, column.key);
|
|
1376
1423
|
}), columnPickerVisible && jsx("th", {
|
|
@@ -5,6 +5,7 @@ import React from 'react';
|
|
|
5
5
|
import { cn } from '../../../utils/cn.js';
|
|
6
6
|
import { Trash2, MoreVertical } from 'lucide-react';
|
|
7
7
|
import ActionMenu from './ActionMenu.js';
|
|
8
|
+
import { TOUCH_TARGET } from '../../../utils/touchTarget.js';
|
|
8
9
|
import { getRowKey, resolveActions, rowHasDetails, getActionLabelText, getHoverClass, getStripeProps } from './helpers.js';
|
|
9
10
|
|
|
10
11
|
/**
|
|
@@ -35,6 +36,8 @@ function TableRow(_ref) {
|
|
|
35
36
|
activeAnchorEl = _ref.activeAnchorEl,
|
|
36
37
|
registerActionButton = _ref.registerActionButton,
|
|
37
38
|
actionMenuRef = _ref.actionMenuRef,
|
|
39
|
+
_ref$actionMenuPresen = _ref.actionMenuPresentation,
|
|
40
|
+
actionMenuPresentation = _ref$actionMenuPresen === void 0 ? "auto" : _ref$actionMenuPresen,
|
|
38
41
|
toggleExpandRow = _ref.toggleExpandRow,
|
|
39
42
|
handleSelectRow = _ref.handleSelectRow,
|
|
40
43
|
toggleActions = _ref.toggleActions,
|
|
@@ -209,17 +212,21 @@ function TableRow(_ref) {
|
|
|
209
212
|
}), menuActions.length > 0 && jsxs("div", {
|
|
210
213
|
className: "relative inline-block",
|
|
211
214
|
children: [jsx("button", {
|
|
215
|
+
type: "button",
|
|
212
216
|
ref: function ref(el) {
|
|
213
217
|
return registerActionButton === null || registerActionButton === void 0 ? void 0 : registerActionButton(actionCellKey, el);
|
|
214
218
|
},
|
|
215
219
|
onClick: function onClick(e) {
|
|
216
220
|
return toggleActions(e, actionCellKey, row);
|
|
217
221
|
},
|
|
222
|
+
"aria-haspopup": "menu",
|
|
218
223
|
"aria-expanded": activeActionRowKey === actionCellKey,
|
|
219
|
-
|
|
224
|
+
"aria-label": "Actions",
|
|
225
|
+
className: cn("inline-flex items-center justify-center p-1 rounded hover:bg-gray-100 dark:hover:bg-gray-800", "focus:outline-none focus-visible:ring-2 focus-visible:ring-primary-500", TOUCH_TARGET),
|
|
220
226
|
title: "Actions",
|
|
221
227
|
children: jsx(MoreVertical, {
|
|
222
|
-
className: "h-4 w-4"
|
|
228
|
+
className: "h-4 w-4",
|
|
229
|
+
"aria-hidden": "true"
|
|
223
230
|
})
|
|
224
231
|
}), activeActionRowKey === actionCellKey && jsx(ActionMenu, {
|
|
225
232
|
actions: menuActions,
|
|
@@ -230,6 +237,7 @@ function TableRow(_ref) {
|
|
|
230
237
|
menuRef: actionMenuRef,
|
|
231
238
|
anchorEl: activeAnchorEl,
|
|
232
239
|
onClose: closeActionMenu,
|
|
240
|
+
presentation: actionMenuPresentation,
|
|
233
241
|
theme: theme
|
|
234
242
|
})]
|
|
235
243
|
})]
|
|
@@ -189,7 +189,7 @@ var TabList = /*#__PURE__*/forwardRef(function TabList(_ref2, ref) {
|
|
|
189
189
|
"aria-orientation": orientation,
|
|
190
190
|
className: cn("relative flex gap-1", horizontal ?
|
|
191
191
|
// Scroll with snap, scrollbar hidden; native smooth scrolling unless reduced motion.
|
|
192
|
-
"flex-row overflow-x-auto snap-x snap-mandatory scroll-smooth motion-reduce:scroll-auto [scrollbar-width:none] [&::-webkit-scrollbar]:hidden" : "flex-col", variant === "segmented" && "rounded-lg bg-
|
|
192
|
+
"flex-row overflow-x-auto snap-x snap-mandatory scroll-smooth motion-reduce:scroll-auto [scrollbar-width:none] [&::-webkit-scrollbar]:hidden" : "flex-col", variant === "segmented" && "rounded-lg bg-line p-1", className)
|
|
193
193
|
}, rest), {}, {
|
|
194
194
|
children: [showIndicator && jsx("span", {
|
|
195
195
|
"aria-hidden": "true",
|
|
@@ -220,8 +220,8 @@ function Tab(_ref3) {
|
|
|
220
220
|
index = _ref3.index,
|
|
221
221
|
_ref3$className = _ref3.className,
|
|
222
222
|
className = _ref3$className === void 0 ? "" : _ref3$className,
|
|
223
|
-
|
|
224
|
-
|
|
223
|
+
leftIcon = _ref3.leftIcon,
|
|
224
|
+
rightIcon = _ref3.rightIcon,
|
|
225
225
|
_ref3$disabled = _ref3.disabled,
|
|
226
226
|
disabled = _ref3$disabled === void 0 ? false : _ref3$disabled,
|
|
227
227
|
_ref3$tabClassName = _ref3.tabClassName,
|
|
@@ -327,14 +327,14 @@ function Tab(_ref3) {
|
|
|
327
327
|
return !disabled && changeTab(idx);
|
|
328
328
|
},
|
|
329
329
|
onKeyDown: onKeyDown,
|
|
330
|
-
children: [
|
|
330
|
+
children: [leftIcon && jsx("span", {
|
|
331
331
|
className: "shrink-0",
|
|
332
|
-
children:
|
|
332
|
+
children: leftIcon
|
|
333
333
|
}), jsx("span", {
|
|
334
334
|
children: children
|
|
335
|
-
}),
|
|
335
|
+
}), rightIcon && jsx("span", {
|
|
336
336
|
className: "shrink-0",
|
|
337
|
-
children:
|
|
337
|
+
children: rightIcon
|
|
338
338
|
})]
|
|
339
339
|
});
|
|
340
340
|
}
|