@worknice/whiteboard 0.52.1 → 0.53.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/dist/{presentation/TableColumnFilterModal.d.ts → controls/FilterModal.d.ts} +10 -3
- package/dist/{presentation/TableColumnFilterModal.js → controls/FilterModal.js} +32 -32
- package/dist/controls/FilterModal.module.js +13 -0
- package/dist/controls/FilterModal_module.css +60 -0
- package/dist/controls/MenuButton.js +1 -1
- package/dist/icons/MessagesIcon.d.ts +3 -0
- package/dist/icons/MessagesIcon.js +11 -0
- package/dist/icons/SlidersIcon.d.ts +3 -0
- package/dist/icons/SlidersIcon.js +12 -0
- package/dist/icons/WarningIcon.js +3 -3
- package/dist/icons/index.d.ts +2 -0
- package/dist/icons/index.js +3 -1
- package/dist/presentation/CustomizableTable/CustomizableTable.d.ts +1 -1
- package/dist/presentation/CustomizableTable/CustomizableTable.js +3 -3
- package/dist/presentation/RichList/RichList.d.ts +150 -0
- package/dist/presentation/RichList/RichList.js +507 -0
- package/dist/presentation/RichList/RichList.module.js +12 -0
- package/dist/presentation/RichList/RichList.stories.d.ts +24 -0
- package/dist/presentation/RichList/RichList.stories.js +334 -0
- package/dist/presentation/RichList/RichListBulkActionBar.d.ts +21 -0
- package/dist/presentation/RichList/RichListBulkActionBar.js +112 -0
- package/dist/presentation/RichList/RichListBulkActionBar.module.js +7 -0
- package/dist/presentation/RichList/RichListBulkActionBar_module.css +18 -0
- package/dist/presentation/RichList/RichListDisplayModal.d.ts +33 -0
- package/dist/presentation/RichList/RichListDisplayModal.js +198 -0
- package/dist/presentation/RichList/RichListRow.d.ts +39 -0
- package/dist/presentation/RichList/RichListRow.js +278 -0
- package/dist/presentation/RichList/RichListRow.module.js +34 -0
- package/dist/presentation/RichList/RichListRow_module.css +313 -0
- package/dist/presentation/RichList/RichListToolbar.d.ts +21 -0
- package/dist/presentation/RichList/RichListToolbar.js +104 -0
- package/dist/presentation/RichList/RichListToolbar.module.js +12 -0
- package/dist/presentation/RichList/RichListToolbar_module.css +100 -0
- package/dist/presentation/RichList/RichList_module.css +77 -0
- package/dist/presentation/RichList/helpers.d.ts +77 -0
- package/dist/presentation/RichList/helpers.js +121 -0
- package/dist/presentation/RichList/stories/ComplianceGroups.d.ts +9 -0
- package/dist/presentation/RichList/stories/ComplianceGroups.js +141 -0
- package/dist/presentation/RichList/stories/CustomFields.d.ts +13 -0
- package/dist/presentation/RichList/stories/CustomFields.js +80 -0
- package/dist/presentation/RichList/stories/EmployeeCompliance.d.ts +15 -0
- package/dist/presentation/RichList/stories/EmployeeCompliance.js +300 -0
- package/dist/presentation/RichList/stories/EmployeePaperwork.d.ts +21 -0
- package/dist/presentation/RichList/stories/EmployeePaperwork.js +225 -0
- package/dist/presentation/RichList/stories/EmployeePeople.d.ts +10 -0
- package/dist/presentation/RichList/stories/EmployeePeople.js +170 -0
- package/dist/presentation/RichList/stories/Leave.d.ts +21 -0
- package/dist/presentation/RichList/stories/Leave.js +332 -0
- package/dist/presentation/RichList/stories/Paperwork.d.ts +22 -0
- package/dist/presentation/RichList/stories/Paperwork.js +446 -0
- package/dist/presentation/RichList/stories/PaperworkApprovals.d.ts +23 -0
- package/dist/presentation/RichList/stories/PaperworkApprovals.js +342 -0
- package/dist/presentation/RichList/stories/PeopleList.d.ts +19 -0
- package/dist/presentation/RichList/stories/PeopleList.js +391 -0
- package/dist/presentation/RichList/stories/PeopleTags.d.ts +14 -0
- package/dist/presentation/RichList/stories/PeopleTags.js +106 -0
- package/dist/presentation/RichList/stories/Positions.d.ts +22 -0
- package/dist/presentation/RichList/stories/Positions.js +519 -0
- package/dist/presentation/RichList/stories/SavedQuestions.d.ts +13 -0
- package/dist/presentation/RichList/stories/SavedQuestions.js +152 -0
- package/dist/presentation/RichList/stories/Tables.d.ts +9 -0
- package/dist/presentation/RichList/stories/Tables.js +85 -0
- package/dist/presentation/RichList/stories/Tasks.d.ts +16 -0
- package/dist/presentation/RichList/stories/Tasks.js +340 -0
- package/dist/presentation/RichList/stories/shared/bulkActionStubs.d.ts +9 -0
- package/dist/presentation/RichList/stories/shared/bulkActionStubs.js +122 -0
- package/dist/presentation/RichList/stories/shared.d.ts +8 -0
- package/dist/presentation/RichList/stories/shared.js +2 -0
- package/dist/presentation/RichList/types.d.ts +342 -0
- package/dist/presentation/RichList/types.js +0 -0
- package/dist/presentation/Table.d.ts +1 -1
- package/dist/presentation/Table.js +2 -2
- package/dist/presentation/Table.module.js +0 -10
- package/dist/presentation/Table_module.css +1 -61
- package/package.json +2 -2
|
@@ -0,0 +1,342 @@
|
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
|
+
import { type Filter } from "../../controls/FilterModal";
|
|
3
|
+
import { type PrimitiveValue } from "../../utils/tables";
|
|
4
|
+
/**
|
|
5
|
+
* Column width. Use a number (pixels) or a percentage string such as `"30%"` if the
|
|
6
|
+
* track should grow or shrink with the list width.
|
|
7
|
+
*/
|
|
8
|
+
export type RichListSlotSize = number | `${number}%`;
|
|
9
|
+
/**
|
|
10
|
+
* When a slot or text field is rendered, gated by `RichList`’s `compactBreakpoint`
|
|
11
|
+
* (measured on the list scope only via the same `ResizeObserver` as `compactSize`).
|
|
12
|
+
*
|
|
13
|
+
* - `always` — render at any list width (default for most positions).
|
|
14
|
+
* - `whenWide` — render only when list width is **above** `compactBreakpoint`.
|
|
15
|
+
* - `whenCompact` — render only when list width is **at or below** `compactBreakpoint`.
|
|
16
|
+
*
|
|
17
|
+
* Useful for moving the same logical content between positions across breakpoints
|
|
18
|
+
* (e.g. status line in a content slot when wide, in `mainSlot.secondary` when compact).
|
|
19
|
+
* `compactBreakpoint` is the **only** width guardrail in `RichList`.
|
|
20
|
+
*/
|
|
21
|
+
export type RichListLayoutVisibility = "always" | "whenWide" | "whenCompact";
|
|
22
|
+
/**
|
|
23
|
+
* Width policy for a content slot column.
|
|
24
|
+
*
|
|
25
|
+
* - `"shrinkable"` (default) — column flex-shrinks with the row at its `size` /
|
|
26
|
+
* `compactSize` cap.
|
|
27
|
+
* - `"fixed"` — column is locked to its `size` / `compactSize`; the trailing /
|
|
28
|
+
* main columns shrink first.
|
|
29
|
+
*
|
|
30
|
+
*/
|
|
31
|
+
export type RichListColumnWidthMode = "shrinkable" | "fixed";
|
|
32
|
+
/**
|
|
33
|
+
* One line of text (or rich content) inside `mainSlot`. Use the object form for search,
|
|
34
|
+
* filters, CSV, wide-only prefix/suffix adornments, etc.
|
|
35
|
+
*
|
|
36
|
+
* - **Function:** render only; no search, filter, or CSV unless you use the object form.
|
|
37
|
+
* - **Object:** add `value`, `label`, and other fields to hook into search, filters, and
|
|
38
|
+
* export like a table column.
|
|
39
|
+
*
|
|
40
|
+
* Default handling for the object form is in `normalizeTextField` in `helpers.ts`
|
|
41
|
+
* (function form forces `globalFiltering: false` and `csvExport: false`).
|
|
42
|
+
*/
|
|
43
|
+
export type RichListTextField<Type> = ((row: Type) => ReactNode) | {
|
|
44
|
+
/**
|
|
45
|
+
* Long text is truncated with an ellipsis when space is tight.
|
|
46
|
+
* Use `prefixOnWide` / `suffixOnWide` for small extras beside the main line at
|
|
47
|
+
* wide widths only.
|
|
48
|
+
*/
|
|
49
|
+
render: (row: Type) => ReactNode;
|
|
50
|
+
/**
|
|
51
|
+
* Optional content **before** the main line (e.g. icon). Hidden at compact widths
|
|
52
|
+
* (the same `ResizeObserver` signal as `compactSize` and `rowMainCompact`); use
|
|
53
|
+
* the `render` itself for content that should always render.
|
|
54
|
+
*/
|
|
55
|
+
prefixOnWide?: (row: Type) => ReactNode;
|
|
56
|
+
/**
|
|
57
|
+
* Optional content **after** the main line (e.g. badge). Hidden at compact widths
|
|
58
|
+
* (same rule as `prefixOnWide`); use the `render` itself for content that should
|
|
59
|
+
* always render, or pair with a `whenCompact` content/trailing slot for swap.
|
|
60
|
+
*/
|
|
61
|
+
suffixOnWide?: (row: Type) => ReactNode;
|
|
62
|
+
/**
|
|
63
|
+
* Value used for search, filters, and export. If you omit it, this line is
|
|
64
|
+
* for display only in those features. When set, search usually includes this
|
|
65
|
+
* field by default.
|
|
66
|
+
*/
|
|
67
|
+
value?: (row: Type) => PrimitiveValue;
|
|
68
|
+
/**
|
|
69
|
+
* Label in filter and export UIs. Needed for some filter setups when you add
|
|
70
|
+
* `filter` options.
|
|
71
|
+
*/
|
|
72
|
+
label?: string;
|
|
73
|
+
/**
|
|
74
|
+
* If set, this line can appear in the Filters dialog like a table column.
|
|
75
|
+
*/
|
|
76
|
+
filter?: Filter<Type>;
|
|
77
|
+
/**
|
|
78
|
+
* Whether the toolbar search can match this field.
|
|
79
|
+
* @default `true` when `value` is set, otherwise `false` (see `normalizeTextField`)
|
|
80
|
+
*/
|
|
81
|
+
globalFiltering?: boolean;
|
|
82
|
+
/**
|
|
83
|
+
* Include this field in CSV export when the list has `csvFilename` set.
|
|
84
|
+
* @default `false`
|
|
85
|
+
*/
|
|
86
|
+
csvExport?: boolean;
|
|
87
|
+
/**
|
|
88
|
+
* Hide / show this line based on `RichList`’s `compactBreakpoint`. Use
|
|
89
|
+
* `"whenCompact"` on `mainSlot.secondary` to surface a line only at compact
|
|
90
|
+
* widths (and pair with a `whenWide` content slot for the wide layout).
|
|
91
|
+
* @default `"always"`
|
|
92
|
+
*/
|
|
93
|
+
layoutVisibility?: RichListLayoutVisibility;
|
|
94
|
+
};
|
|
95
|
+
/**
|
|
96
|
+
* Primary and optional secondary lines stacked in the row’s main column (same horizontal
|
|
97
|
+
* slot as the content columns to their right).
|
|
98
|
+
*/
|
|
99
|
+
export type RichListMainSlot<Type> = {
|
|
100
|
+
primary: RichListTextField<Type>;
|
|
101
|
+
secondary?: RichListTextField<Type>;
|
|
102
|
+
/**
|
|
103
|
+
* Max width of the **main slot** column (pixels), including primary and secondary lines.
|
|
104
|
+
* Omit to let the layout choose a width (see `RichListRow` / grid track fallback).
|
|
105
|
+
*/
|
|
106
|
+
size?: number;
|
|
107
|
+
};
|
|
108
|
+
/**
|
|
109
|
+
* Common fields shared by leading, content (`contentSlots`), and trailing slots in
|
|
110
|
+
* their object form. Used directly by `RichListSlot` (leading/trailing) and extended
|
|
111
|
+
* by `RichListContentSlot` with the content-only display options.
|
|
112
|
+
*/
|
|
113
|
+
type RichListBaseSlotObject<Type> = {
|
|
114
|
+
/**
|
|
115
|
+
* Unique id for this column across leading, all content slots, and trailing.
|
|
116
|
+
*/
|
|
117
|
+
id: string;
|
|
118
|
+
/**
|
|
119
|
+
* Cell content for a row.
|
|
120
|
+
*/
|
|
121
|
+
render: (row: Type) => ReactNode;
|
|
122
|
+
/**
|
|
123
|
+
* Label in filters and export headers. Content slots additionally use this in the
|
|
124
|
+
* Display / column UI when toggleable.
|
|
125
|
+
*/
|
|
126
|
+
label?: string;
|
|
127
|
+
/**
|
|
128
|
+
* Value for search, filters, and CSV. If omitted, this column is only visual in
|
|
129
|
+
* those features.
|
|
130
|
+
*/
|
|
131
|
+
value?: (row: Type) => PrimitiveValue;
|
|
132
|
+
/**
|
|
133
|
+
* Alignment inside the column. Trailing often uses `end` (right in LTR);
|
|
134
|
+
* content columns sometimes use `center`.
|
|
135
|
+
* @default `"end"` for trailing, `"start"` for leading and content
|
|
136
|
+
*/
|
|
137
|
+
align?: "start" | "center" | "end";
|
|
138
|
+
/**
|
|
139
|
+
* Default max width for this column when the list is **wider** than
|
|
140
|
+
* `RichList`’s `compactBreakpoint` (default 1024px). Leading, content, and
|
|
141
|
+
* trailing can all set this.
|
|
142
|
+
*/
|
|
143
|
+
size?: RichListSlotSize;
|
|
144
|
+
/**
|
|
145
|
+
* Tighter max width at/under `RichList`’s `compactBreakpoint` (default 1024px),
|
|
146
|
+
* if you set this. If omitted, `size` is used at compact too.
|
|
147
|
+
*/
|
|
148
|
+
compactSize?: RichListSlotSize;
|
|
149
|
+
/**
|
|
150
|
+
* Column filter for the Filters dialog; needs a clear `label` in the UI.
|
|
151
|
+
*/
|
|
152
|
+
filter?: Filter<Type>;
|
|
153
|
+
/**
|
|
154
|
+
* When `true`, the toolbar search can match this column’s `value`.
|
|
155
|
+
* @default `true` when `value` is set, otherwise `false` (see `normalizeSlot`)
|
|
156
|
+
*/
|
|
157
|
+
globalFiltering?: boolean;
|
|
158
|
+
/**
|
|
159
|
+
* Include in CSV when the list sets `csvFilename`.
|
|
160
|
+
* @default `false`
|
|
161
|
+
*/
|
|
162
|
+
csvExport?: boolean;
|
|
163
|
+
/**
|
|
164
|
+
* Show / hide this whole column based on `RichList`’s `compactBreakpoint`. Combined
|
|
165
|
+
* with column visibility from the Display dialog (which always wins). Useful for
|
|
166
|
+
* surfacing the same logical content via different positions across breakpoints
|
|
167
|
+
* (e.g. content slot when wide; `mainSlot.secondary` when compact).
|
|
168
|
+
* @default `"always"`
|
|
169
|
+
*/
|
|
170
|
+
layoutVisibility?: RichListLayoutVisibility;
|
|
171
|
+
};
|
|
172
|
+
/**
|
|
173
|
+
* A **leading** or **trailing** column. The row order is: leading, main slot (primary /
|
|
174
|
+
* optional secondary), content columns, trailing, then row actions.
|
|
175
|
+
*
|
|
176
|
+
* - **Function:** quick cell: `row => content`.
|
|
177
|
+
* - **Object:** full control with a stable `id` for filters and CSV.
|
|
178
|
+
*
|
|
179
|
+
* Content columns (`contentSlots`) use the wider `RichListContentSlot` shape, which
|
|
180
|
+
* adds `columnWidthMode`, `canToggleVisibility`, and `hiddenByDefault` — those
|
|
181
|
+
* options only have an effect on content columns and are deliberately excluded here.
|
|
182
|
+
*
|
|
183
|
+
* Default handling for the object form is in `normalizeSlot` in `helpers.ts` (function
|
|
184
|
+
* form sets: `align` `"end"` for trailing, `"start"` for leading; `globalFiltering: false`;
|
|
185
|
+
* `csvExport: false`; `layoutVisibility: "always"`).
|
|
186
|
+
*/
|
|
187
|
+
export type RichListSlot<Type> = ((row: Type) => ReactNode) | RichListBaseSlotObject<Type>;
|
|
188
|
+
/**
|
|
189
|
+
* A **content** column (in `contentSlots`). Same shape as `RichListSlot` plus the
|
|
190
|
+
* content-only display options:
|
|
191
|
+
*
|
|
192
|
+
* - `columnWidthMode` — width-shrink policy (`"shrinkable"` or `"fixed"`). To drop
|
|
193
|
+
* the column at/under `compactBreakpoint`, use `layoutVisibility: "whenWide"`.
|
|
194
|
+
* - `canToggleVisibility` / `hiddenByDefault` for the Display dialog.
|
|
195
|
+
*
|
|
196
|
+
* Default handling for the object form is in `normalizeSlot` in `helpers.ts` (function
|
|
197
|
+
* form sets: `layoutVisibility: "always"`; `columnWidthMode: "shrinkable"`;
|
|
198
|
+
* `align: "start"`; `globalFiltering: false`; `canToggleVisibility: false`;
|
|
199
|
+
* `hiddenByDefault: false`; `csvExport: false`).
|
|
200
|
+
*/
|
|
201
|
+
export type RichListContentSlot<Type> = ((row: Type) => ReactNode) | (RichListBaseSlotObject<Type> & {
|
|
202
|
+
/**
|
|
203
|
+
* Width-shrink policy for this column when sized.
|
|
204
|
+
*
|
|
205
|
+
* - `"shrinkable"` (default) — column shrinks with the row at its `size` /
|
|
206
|
+
* `compactSize`.
|
|
207
|
+
* - `"fixed"` — column is locked to its `size` / `compactSize`; trailing and
|
|
208
|
+
* main shrink first.
|
|
209
|
+
*
|
|
210
|
+
* @default `"shrinkable"`
|
|
211
|
+
*/
|
|
212
|
+
columnWidthMode?: RichListColumnWidthMode;
|
|
213
|
+
/**
|
|
214
|
+
* If `true`, users can show or hide this column in Display settings. Requires a
|
|
215
|
+
* non-empty `label`.
|
|
216
|
+
* @default `false`
|
|
217
|
+
*/
|
|
218
|
+
canToggleVisibility?: boolean;
|
|
219
|
+
/**
|
|
220
|
+
* If `true`, the column starts hidden. With `canToggleVisibility`, users can turn
|
|
221
|
+
* it on; without it, the column stays out of the visible-columns UI.
|
|
222
|
+
* @default `false`
|
|
223
|
+
*/
|
|
224
|
+
hiddenByDefault?: boolean;
|
|
225
|
+
});
|
|
226
|
+
/**
|
|
227
|
+
* Internal shape after `normalizeTextField` in `helpers.ts`. Booleans are always set
|
|
228
|
+
* (no longer optional on the public object form).
|
|
229
|
+
*/
|
|
230
|
+
export type NormalizedTextField<Type> = {
|
|
231
|
+
id: string;
|
|
232
|
+
position: "primary" | "secondary";
|
|
233
|
+
label?: string;
|
|
234
|
+
value?: (row: Type) => PrimitiveValue;
|
|
235
|
+
render: (row: Type) => ReactNode;
|
|
236
|
+
prefixOnWide?: (row: Type) => ReactNode;
|
|
237
|
+
suffixOnWide?: (row: Type) => ReactNode;
|
|
238
|
+
filter?: Filter<Type>;
|
|
239
|
+
/**
|
|
240
|
+
* @default `false` for function `RichListTextField`; for object, `true` if `value` is
|
|
241
|
+
* set and `globalFiltering` is omitted, else the explicit `globalFiltering` value.
|
|
242
|
+
*/
|
|
243
|
+
globalFiltering: boolean;
|
|
244
|
+
/** @default `false` (or `false` for function form). */
|
|
245
|
+
csvExport: boolean;
|
|
246
|
+
/** @default `"always"` */
|
|
247
|
+
layoutVisibility: RichListLayoutVisibility;
|
|
248
|
+
};
|
|
249
|
+
/**
|
|
250
|
+
* Internal shape after `normalizeSlot` in `helpers.ts`. See `RichListSlot` and
|
|
251
|
+
* `RichListContentSlot` for defaults on the public object; function slots always set
|
|
252
|
+
* `false` for the filtering/toggle/CSV flags.
|
|
253
|
+
*/
|
|
254
|
+
export type NormalizedSlot<Type> = {
|
|
255
|
+
id: string;
|
|
256
|
+
position: "leading" | "content" | "trailing";
|
|
257
|
+
/** Index within its position group (e.g. the i-th leading slot in the array). */
|
|
258
|
+
positionIndex?: number;
|
|
259
|
+
label?: string;
|
|
260
|
+
value?: (row: Type) => PrimitiveValue;
|
|
261
|
+
render: (row: Type) => ReactNode;
|
|
262
|
+
/** @default `"always"` */
|
|
263
|
+
layoutVisibility: RichListLayoutVisibility;
|
|
264
|
+
/** @default `"shrinkable"` (content-only knob; defaults to `"shrinkable"` for leading/trailing too). */
|
|
265
|
+
columnWidthMode: RichListColumnWidthMode;
|
|
266
|
+
/** @default from object or `"end"` (trailing) / `"start"` (leading, content). */
|
|
267
|
+
align: "start" | "center" | "end";
|
|
268
|
+
size?: RichListSlotSize;
|
|
269
|
+
compactSize?: RichListSlotSize;
|
|
270
|
+
filter?: Filter<Type>;
|
|
271
|
+
/**
|
|
272
|
+
* @default `false` for function `RichListSlot`; for object, `true` if `value` is set
|
|
273
|
+
* and `globalFiltering` is omitted, else the explicit `globalFiltering` value.
|
|
274
|
+
*/
|
|
275
|
+
globalFiltering: boolean;
|
|
276
|
+
/**
|
|
277
|
+
* @default `true` only for content + explicit `true` on the object; otherwise `false`
|
|
278
|
+
* (including leading/trailing).
|
|
279
|
+
*/
|
|
280
|
+
canToggleVisibility: boolean;
|
|
281
|
+
/** @default `false` if omitted on the object. */
|
|
282
|
+
hiddenByDefault: boolean;
|
|
283
|
+
/** @default `false` if omitted on the object. */
|
|
284
|
+
csvExport: boolean;
|
|
285
|
+
};
|
|
286
|
+
/**
|
|
287
|
+
* One action for a row: an icon in the action strip and/or an item in the “more” menu.
|
|
288
|
+
* Up to a fixed number of actions show as icons; the rest go in the menu so columns
|
|
289
|
+
* stay aligned.
|
|
290
|
+
*/
|
|
291
|
+
export type RichListRowAction<Type> = {
|
|
292
|
+
/** Stable id for the control. */
|
|
293
|
+
id: string;
|
|
294
|
+
/** Tooltip, menu text, and accessibility name. */
|
|
295
|
+
label: string;
|
|
296
|
+
/** @default (omitted) no icon (menu text / tooltip still from `label`). */
|
|
297
|
+
icon?: ReactNode;
|
|
298
|
+
/**
|
|
299
|
+
* If `true`, prefer showing this as an icon in the main strip (until the max number
|
|
300
|
+
* of icon slots is used). If `false`, it only appears in the overflow menu.
|
|
301
|
+
* @default `false` (falsy/omitted: overflow menu only)
|
|
302
|
+
*/
|
|
303
|
+
alwaysVisible?: boolean;
|
|
304
|
+
onClick: (row: Type) => void;
|
|
305
|
+
/**
|
|
306
|
+
* If set, the action is not offered when this returns `false` for that row.
|
|
307
|
+
* @default (omitted) the action is always considered for the row.
|
|
308
|
+
*/
|
|
309
|
+
predicate?: (row: Type) => boolean;
|
|
310
|
+
};
|
|
311
|
+
/**
|
|
312
|
+
* An action on the **selected** rows. Used with `bulkActions` on the list. The `render`
|
|
313
|
+
* function usually returns a panel (confirm, form, etc.) and receives the matching
|
|
314
|
+
* selected rows, a way to clear selection, and `onClose` when the panel is done.
|
|
315
|
+
*/
|
|
316
|
+
export type RichListBulkAction<Type> = {
|
|
317
|
+
/** Id for this bulk action. */
|
|
318
|
+
key: string;
|
|
319
|
+
/** Short label; the bar can show per-action row counts. */
|
|
320
|
+
label: string;
|
|
321
|
+
/** @default (omitted) no icon. */
|
|
322
|
+
icon?: ReactNode;
|
|
323
|
+
/**
|
|
324
|
+
* Panel to run the action: receives selected rows, `resetRowSelection`, and
|
|
325
|
+
* `onClose`.
|
|
326
|
+
*/
|
|
327
|
+
render: (props: {
|
|
328
|
+
/** Selected rows this action runs on. */
|
|
329
|
+
rows: Array<Type>;
|
|
330
|
+
/** Clear selection (e.g. after success). */
|
|
331
|
+
resetRowSelection: () => void;
|
|
332
|
+
/** Close the action panel. */
|
|
333
|
+
onClose: () => void;
|
|
334
|
+
}) => ReactNode;
|
|
335
|
+
/**
|
|
336
|
+
* If set, this action only applies to selected rows that pass this test. It can be
|
|
337
|
+
* omitted from the bar if no selection matches.
|
|
338
|
+
* @default (omitted) all selected rows are eligible; no predicate filter.
|
|
339
|
+
*/
|
|
340
|
+
predicate?: (row: Type) => boolean;
|
|
341
|
+
};
|
|
342
|
+
export {};
|
|
File without changes
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { SortingColumnDef } from "@tanstack/react-table";
|
|
2
2
|
import { type ReactNode } from "react";
|
|
3
3
|
import { type ZodTypeAny } from "zod";
|
|
4
|
+
import { type Filter } from "../controls/FilterModal";
|
|
4
5
|
import { type MenuButtonOption } from "../controls/MenuButton";
|
|
5
6
|
import { type PrimitiveValue } from "../utils/tables";
|
|
6
|
-
import { type Filter } from "./TableColumnFilterModal";
|
|
7
7
|
type Grouping<Type> = {
|
|
8
8
|
fn: (row: Type) => string;
|
|
9
9
|
header: (row: Type) => ReactNode;
|
|
@@ -7,6 +7,7 @@ import * as __WEBPACK_EXTERNAL_MODULE_clsx__ from "clsx";
|
|
|
7
7
|
import * as __WEBPACK_EXTERNAL_MODULE_react__ from "react";
|
|
8
8
|
import * as __WEBPACK_EXTERNAL_MODULE__controls_Button_js_f591ba2e__ from "../controls/Button.js";
|
|
9
9
|
import * as __WEBPACK_EXTERNAL_MODULE__controls_Disclosure_js_6e4cc59c__ from "../controls/Disclosure.js";
|
|
10
|
+
import * as __WEBPACK_EXTERNAL_MODULE__controls_FilterModal_js_d56bff3f__ from "../controls/FilterModal.js";
|
|
10
11
|
import * as __WEBPACK_EXTERNAL_MODULE__controls_MenuButton_js_b23cdd05__ from "../controls/MenuButton.js";
|
|
11
12
|
import * as __WEBPACK_EXTERNAL_MODULE__inputs_CheckboxInput_js_3a83f64b__ from "../inputs/CheckboxInput.js";
|
|
12
13
|
import * as __WEBPACK_EXTERNAL_MODULE__inputs_SelectInput_js_d1a6f32e__ from "../inputs/SelectInput.js";
|
|
@@ -19,7 +20,6 @@ import * as __WEBPACK_EXTERNAL_MODULE__HStack_js_cc26058d__ from "./HStack.js";
|
|
|
19
20
|
import * as __WEBPACK_EXTERNAL_MODULE__Icon_js_0d271bb6__ from "./Icon.js";
|
|
20
21
|
import * as __WEBPACK_EXTERNAL_MODULE__PlainText_js_cd0b6798__ from "./PlainText.js";
|
|
21
22
|
import * as __WEBPACK_EXTERNAL_MODULE__Table_module_js_1c0e33be__ from "./Table.module.js";
|
|
22
|
-
import * as __WEBPACK_EXTERNAL_MODULE__TableColumnFilterModal_js_dd7b508a__ from "./TableColumnFilterModal.js";
|
|
23
23
|
import * as __WEBPACK_EXTERNAL_MODULE__VStack_js_02eb6792__ from "./VStack.js";
|
|
24
24
|
const selectColumnId = "_selectColumn";
|
|
25
25
|
const actionsColumnId = "_actionsColumn";
|
|
@@ -582,7 +582,7 @@ const Table = ({ data, columns, bulkActions = [], secondaryBulkActions = [], csv
|
|
|
582
582
|
})
|
|
583
583
|
]
|
|
584
584
|
}),
|
|
585
|
-
isFilterModalOpen && /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(
|
|
585
|
+
isFilterModalOpen && /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(__WEBPACK_EXTERNAL_MODULE__controls_FilterModal_js_d56bff3f__["default"], {
|
|
586
586
|
onClose: ()=>setIsFilterModalOpen(false),
|
|
587
587
|
filterableColumns: filterableColumns,
|
|
588
588
|
currentFilters: tableState.columnFilters,
|
|
@@ -22,16 +22,6 @@ const Table_module_rslib_entry_ = {
|
|
|
22
22
|
filterSelectMenus: "filterSelectMenus-rQe_dQ",
|
|
23
23
|
filterBarSearchReset: "filterBarSearchReset-zMZpkF",
|
|
24
24
|
filterBarSearchResetContent: "filterBarSearchResetContent-h8b3qb",
|
|
25
|
-
filterExpandersContainer: "filterExpandersContainer-yRLNvU",
|
|
26
|
-
filterExpanderRow: "filterExpanderRow-_O4wQh",
|
|
27
|
-
filterExpanderHighlight: "filterExpanderHighlight-HU8LI2",
|
|
28
|
-
filterExpanderLabel: "filterExpanderLabel-z0kGvW",
|
|
29
|
-
filterExpanderIcon: "filterExpanderIcon-XmmWLH",
|
|
30
|
-
filterExpander: "filterExpander-AzrkVe",
|
|
31
|
-
filterExpanderWrapper: "filterExpanderWrapper-wfxkbS",
|
|
32
|
-
filterBooleanFieldWrapper: "filterBooleanFieldWrapper-UkqZhF",
|
|
33
|
-
filterOptions: "filterOptions-c2gDM9",
|
|
34
|
-
filterButton: "filterButton-K5yTnY",
|
|
35
25
|
downloadLink: "downloadLink-DxebfL"
|
|
36
26
|
};
|
|
37
27
|
export { Table_module_rslib_entry_ as default };
|
|
@@ -142,67 +142,7 @@
|
|
|
142
142
|
}
|
|
143
143
|
}
|
|
144
144
|
|
|
145
|
-
.
|
|
146
|
-
flex-direction: column;
|
|
147
|
-
width: 100%;
|
|
148
|
-
display: flex;
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
.filterExpandersContainer-yRLNvU > :not(:first-child) {
|
|
152
|
-
border-top: solid var(--size-n5) var(--color-grey-t08);
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
.filterExpanderRow-_O4wQh {
|
|
156
|
-
width: 100%;
|
|
157
|
-
padding: var(--size-00);
|
|
158
|
-
align-items: center;
|
|
159
|
-
gap: var(--size-n2);
|
|
160
|
-
cursor: pointer;
|
|
161
|
-
text-align: left;
|
|
162
|
-
background: none;
|
|
163
|
-
border: none;
|
|
164
|
-
outline: none;
|
|
165
|
-
display: flex;
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
.filterExpanderHighlight-HU8LI2 .filterExpanderLabel-z0kGvW {
|
|
169
|
-
font: var(--font-regular-bold);
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
.filterExpanderLabel-z0kGvW {
|
|
173
|
-
min-width: 0;
|
|
174
|
-
font: var(--font-label);
|
|
175
|
-
flex: 1;
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
.filterExpanderIcon-XmmWLH {
|
|
179
|
-
transition: transform .15s;
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
.filterExpander-AzrkVe[open] .filterExpanderRow-_O4wQh {
|
|
183
|
-
padding-bottom: var(--size-n2);
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
.filterExpander-AzrkVe[open] .filterExpanderIcon-XmmWLH {
|
|
187
|
-
transform: rotate(90deg);
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
.filterExpanderWrapper-wfxkbS {
|
|
191
|
-
padding: 0 var(--size-00) var(--size-p1);
|
|
192
|
-
padding-inline-start: calc(var(--size-p1) + 15px + var(--size-n2));
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
.filterBooleanFieldWrapper-UkqZhF {
|
|
196
|
-
padding: var(--size-00) var(--size-00) var(--size-p1);
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
.filterOptions-c2gDM9 {
|
|
200
|
-
gap: var(--size-n2);
|
|
201
|
-
flex-direction: column;
|
|
202
|
-
display: flex;
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
.filterButton-K5yTnY, .downloadLink-DxebfL {
|
|
145
|
+
.downloadLink-DxebfL {
|
|
206
146
|
justify-content: flex-end;
|
|
207
147
|
gap: var(--size-00);
|
|
208
148
|
align-items: center;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@worknice/whiteboard",
|
|
3
3
|
"description": "",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.53.0",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"private": false,
|
|
7
7
|
"files": [
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
"react-markdown": "^10.1.0",
|
|
40
40
|
"utf8": "^3.0.0",
|
|
41
41
|
"zod": "^4.1.13",
|
|
42
|
-
"@worknice/utils": "^0.
|
|
42
|
+
"@worknice/utils": "^0.36.0"
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|
|
45
45
|
"@anolilab/semantic-release-pnpm": "^3.2.2",
|